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); }
/// <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; }
public void InitializeLeg(LegSO so) { leg = new LegModel(so, OrthogenMaterials.RectifiedLegMaterial); OnDataModelModified?.Invoke(this, EventArgs.Empty); leg.OnDeformationAdded += OG.notifyModelingOpAdded; leg.OnDeformationRemoved += OG.notifyModelingOpRemoved; }
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; }
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); } }
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); }
public override void updateLegPartOparationData(PartOperationDataEntityList dataEntityList, LegModel legModel) { }
public abstract void updateLegPartOparationData(PartOperationDataEntityList dataEntityList, LegModel legModel);