Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }