private void GetNextGen(Family family) { //int simplestCount = 0; for (double i = 0; i < EInfo.CandidatesPerGen; i++) { if (GetChild(family.parents, child)) { if (child.NumberOfAllOperators > 0) // maybe not need but just to be sure { EvolveCand.EvolveCandidate(EInfo, child); child.CalcTotalOffSet(); if (Tools.IsANumber(child.OffSet)) { family.CheckNewChild(child); } //if (EvolvedEquation.CreateFunction() == "f(x) = x") //{ // simplestCount++; //} //Debug.WriteLine(EvolvedEquation.CreateFunction()); //Thread.Sleep(500); } } ResetSingle(child); } //Debug.WriteLine(simplestCount); //Thread.Sleep(500); }
protected virtual bool GetNextGen(Equation EvolvedEquation, Equation OldEquation, int toCalc) { bool BestCandEvolved = false; Equation BestEvolvedEquation = BestCandidate.MakeClone(new Equation(EInfo, Randomizer)); Debug.WriteLine(BestCandidate.CreateFunction()); //int simplestCount = 0; for (double i = 0; i < EInfo.CandidatesPerGen * EInfo.EvolvedCandidatesPerGen; i++) { BestCandidate.MakeClone(EvolvedEquation); EvolveCand.EvolveCandidate(EInfo, EvolvedEquation); EvolvedEquation.CalcPartialOffSet(toCalc); //if (EvolvedEquation.CreateFunction() == "f(x) = x") //{ // simplestCount++; //} //Debug.WriteLine(EvolvedEquation.CreateFunction()); //Thread.Sleep(500); bool EvolvedToBetter = ChangeIfBetter(EvolvedEquation, OldEquation, BestEvolvedEquation); BestCandEvolved = (EvolvedToBetter) ? true : BestCandEvolved; ResetSingle(EvolvedEquation); } //Debug.WriteLine(simplestCount); //Thread.Sleep(500); int[] Indexes = SmartCand.CanSmartChangeNumbers(BestCandidate, OldEquation); for (double i = 0; i < EInfo.CandidatesPerGen * EInfo.SmartCandidatesPerGen; i++) { BestCandidate.MakeClone(EvolvedEquation); SmartCand.SmartifyCandidate(EInfo, EvolvedEquation, BestCandidate, OldEquation, Indexes); EvolvedEquation.CalcPartialOffSet(toCalc); bool EvolvedToBetter = ChangeIfBetter(EvolvedEquation, OldEquation, BestEvolvedEquation); BestCandEvolved = (EvolvedToBetter) ? true : BestCandEvolved; ResetSingle(EvolvedEquation); } for (double i = 0; i < EInfo.CandidatesPerGen * EInfo.RandomCandidatesPerGen; i++) { RandomCand.MakeRandomEquation(EvolvedEquation); EvolvedEquation.CalcPartialOffSet(toCalc); bool EvolvedToBetter = ChangeIfBetter(EvolvedEquation, OldEquation, BestEvolvedEquation); BestCandEvolved = (EvolvedToBetter) ? true : BestCandEvolved; ResetSingle(EvolvedEquation); } if (BestCandEvolved) { ResetSingle(OldEquation); BestEvolvedEquation.MakeClone(OldEquation); ResetSingle(BestCandidate); BestEvolvedEquation.MakeClone(BestCandidate); BestCandidate.CompressEquation(); } return(BestCandEvolved); }