Exemplo n.º 1
0
    private void GenerateModels()
    {
        DestroyModels();

        for (int i = 0; i < modelNum; i++)
        {
            GameObject gameObject = Instantiate(_LegModelPrefab, new Vector3(i, 0, 0), Quaternion.identity);

            LegModelMonoBehaviour legModelMonoBehaviour = gameObject.GetComponent <LegModelMonoBehaviour>();

            if (legModelMonoBehaviour == null)
            {
                Debug.Log(i + " : legModelMonoBehaviour is null");
            }

            LegModel legModel = legModelMonoBehaviour.LegModel;

            if (legModel == null)
            {
                Debug.Log(i + " : legModel is null");
            }

            legModel.DNA.Clear();

            for (int j = 0; j < DNALength; j++)
            {
                legModel.DNA.Add(Random.Range(MinTorque, MaxTorque));
            }
            // Debug.Log("DNA " + i + " : " + string.Join(", ", legModel.DNA));
            LegModels.Add(legModel);
        }
    }
        public static LegModel[] GenerateLegs(int legCount, int binPerLeg)
        {
            var rand = new Random();

            var legs = new LegModel[legCount];

            for (var legOrder = 1; legOrder <= legCount; legOrder++)
            {
                var selections = new SelectionModel[binPerLeg];
                for (var bin = 1; bin <= binPerLeg; bin++)
                {
                    var prob = rand.NextDouble();
                    selections[bin - 1] = new SelectionModel(bin, prob);
                }
                //normalised the probs
                var sumProbs = selections.Sum(s => s.Probability);
                foreach (var sel in selections)
                {
                    var newProb = sel.Probability / sumProbs;
                    sel.UpdateProbability(newProb);
                }

                var sumOfProbs = selections.Sum(s => s.Probability);
                Assert.That(sumOfProbs > 0.99);
                legs[legOrder - 1] = new LegModel(legOrder, selections);
            }

            return(legs);
        }
Exemplo n.º 3
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="RLeg">右足</param>
 /// <param name="LLeg">左脚</param>
 public OperationServiceBase(LegModel rLeg, LegModel lLeg, ArmModel rArm, ArmModel lArm)
 {
     this.RPart = rLeg;
     this.LPart = lLeg;
     this.RArm  = rArm;
     this.LArm  = lArm;
 }
Exemplo n.º 4
0
 public void InitializeLeg(LegSO so)
 {
     leg = new LegModel(so, OrthogenMaterials.RectifiedLegMaterial);
     OnDataModelModified?.Invoke(this, EventArgs.Empty);
     leg.OnDeformationAdded   += OG.notifyModelingOpAdded;
     leg.OnDeformationRemoved += OG.notifyModelingOpRemoved;
 }
Exemplo n.º 5
0
 public S_ACS(LegModel rLeg, LegModel lLen, ArmModel rArm, ArmModel lArm) : base(rLeg, lLen, rArm, lArm)
 {
     this.RPart = rLeg;
     this.LPart = lLen;
     this.RArm  = rArm;
     this.LArm  = lArm;
 }
Exemplo n.º 6
0
    public int compareLegs(LegModel a, LegModel b, Boolean reverse)
    {
        int m = 1;

        if (reverse)
        {
            m = -1;
        }

        if (a.Result - b.Result < 0)
        {
            return(-1 * m);
        }
        else if (a.Result - b.Result > 0)
        {
            return(1 * m);
        }
        else
        {
            return(0);
        }
    }
Exemplo n.º 7
0
    public List <LegModel> crossModels(List <LegModel> eliteModels)
    {
        List <LegModel> newModels = new List <LegModel>();

        for (int i = 0; i < eliteRate * 2 * modelNum; i++)
        {
            LegModel newModel = new LegModel();
            newModel.DNA = new List <float>();
            for (int j = 0; j < DNALength; j++)
            {
                newModel.DNA.Add(0);
            }
            newModels.Add(newModel);
        }


        for (int i = 0; i < eliteRate * 2 * modelNum; i++)
        {
            List <float> DNA1 = eliteModels.LoopElementAt(i).DNA;
            List <float> DNA2 = eliteModels.LoopElementAt(i + 1).DNA;
            List <float> DNA3 = eliteModels.LoopElementAt(i + 2).DNA;

            List <float> resDNA1 = newModels.LoopElementAt(i).DNA;
            List <float> resDNA2 = newModels.LoopElementAt(i + 1).DNA;
            List <float> resDNA3 = newModels.LoopElementAt(i + 2).DNA;

            List <float> gPointList = new List <float>();

            for (int j = 0; j < DNALength; j++)
            {
                gPointList.Add((DNA1[j] + DNA2[j] + DNA3[j]) / 3f);
            }

            List <float> sPointList1 = new List <float>();
            List <float> sPointList2 = new List <float>();
            List <float> sPointList3 = new List <float>();

            for (int j = 0; j < DNALength; j++)
            {
                sPointList1.Add(gPointList[j] + epsilon * (DNA1[j] - gPointList[j]));
                sPointList2.Add(gPointList[j] + epsilon * (DNA2[j] - gPointList[j]));
                sPointList3.Add(gPointList[j] + epsilon * (DNA3[j] - gPointList[j]));
            }

            for (int j = 0; j < DNALength; j++)
            {
                float r1 = Random.Range(0, 1f);
                float r2 = Mathf.Pow(Random.Range(0, 1f), 0.5f);

                resDNA1[j] = sPointList1[j];
                resDNA2[j] = r1 * (sPointList1[j] - sPointList2[j]) + sPointList2[j];
                resDNA3[j] = r2 * (sPointList2[j] - sPointList3[j] + r1 * (sPointList1[j] - sPointList2[j]) + sPointList3[j]);
            }
        }

        foreach (LegModel legModel in newModels)
        {
            for (int i = 0; i < DNALength; i++)
            {
                legModel.DNA[i] = Mathf.Clamp((float)legModel.DNA[i], MinTorque, MaxTorque);
            }
        }

        return(newModels);
    }
Exemplo n.º 8
0
 public override void updateLegPartOparationData(PartOperationDataEntityList dataEntityList, LegModel legModel)
 {
 }
Exemplo n.º 9
0
 public abstract void updateLegPartOparationData(PartOperationDataEntityList dataEntityList, LegModel legModel);