Example #1
0
 /// <summary>
 /// Generally two termination criteria are available. Iteration count and best fitness value.
 /// </summary>
 /// <param name="tc"></param>
 /// <param name="counter"></param>
 /// <param name="bestFitness"></param>
 /// <returns></returns>
 private bool isCriteriaSatisfied(TerminationCriteria tc, int counter, float bestFitness)
 {
     if (tc.IsIteration)
     {
         return(counter >= tc.Value);
     }
     else
     {
         return(bestFitness >= tc.Value);
     }
 }
Example #2
0
 public async Task RunAsync(Action <ProgressReport, Parameters> reportProgress, TerminationCriteria tc, CancellationToken ct)
 {
     m_TerminationCriteria = tc;
     await Task.Run(() => startEvolution(reportProgress, tc, ct));
 }
Example #3
0
        /// <summary>
        /// Start with evolution
        /// </summary>
        /// <param name="reportProgress"></param>
        /// <param name="tc"></param>
        /// <param name="ct"></param>
        private void startEvolution(Action <ProgressReport, Parameters> reportProgress, TerminationCriteria tc, CancellationToken ct)
        {
            Stopwatch sp = new Stopwatch();

            try
            {
                //send report population initialized and evaluated
                m_History.Add(initEvolution(m_progresReport));
                reportProgress(m_progresReport, m_Parameters);

                //init termination criteria
                int iterationCount = m_progresReport.Iteration;
                m_progresReport.IterationStatus = IterationStatus.Runing;

                //
                float bestFitness = 0;
                bool  breakLoop   = false;
                while (!breakLoop)
                {
                    //report progress
                    sp.Restart();
                    m_progresReport.IterationStatus = IterationStatus.Runing;
                    iterationCount++;
                    //
                    performIteration(m_progresReport, ct);

                    //get best solution for the current iteration
                    bestFitness = m_progresReport.BestSolution.Fitness;

                    //check for termination criteria
                    if (isCriteriaSatisfied(tc, iterationCount, bestFitness) || bestFitness == 1000)
                    {
                        //stopping iteration
                        m_progresReport.IterationStatus = IterationStatus.Compleated;
                        breakLoop = true;
                    }

                    //check for cancellation criteria
                    if (ct.IsCancellationRequested)
                    {
                        //canceling iteration
                        m_progresReport.IterationStatus = IterationStatus.Stopped;
                        breakLoop = true;
                    }

                    //report progress
                    m_progresReport.Iteration = iterationCount;

                    //pr.BestSolution= bestFitness
                    m_progresReport.IterationStatistics.IterationSeconds = (float)sp.Elapsed.TotalSeconds;

                    //send report and store in history
                    m_History.Add(initEvolution(m_progresReport));
                    reportProgress(m_progresReport, m_Parameters);
                }
            }
            catch (Exception ex)
            {
                m_progresReport.IterationStatus = IterationStatus.Exception;
                m_progresReport.Message         = ex.Message;

                m_History.Add(initEvolution(m_progresReport));
                reportProgress(m_progresReport, m_Parameters);
                // throw;
            }
        }
Example #4
0
        public void GPFactoryFromString(string strFactory)
        {
            if (string.IsNullOrEmpty(strFactory))
            {
                return;
            }
            try
            {
                Evolution[]            hist = null;
                JsonSerializerSettings sett = new JsonSerializerSettings();
                sett.NullValueHandling = NullValueHandling.Ignore;

                var obj = JsonConvert.DeserializeObject(strFactory, sett);

                var param = ((dynamic)obj)["m_Parameters"] as Newtonsoft.Json.Linq.JObject;
                var ter   = ((dynamic)obj)["m_TerminalSet"] as Newtonsoft.Json.Linq.JArray;
                var fun   = ((dynamic)obj)["m_FunctionSet"] as Newtonsoft.Json.Linq.JArray;
                var prog  = ((dynamic)obj)["m_progresReport"] as Newtonsoft.Json.Linq.JObject;
                var tc    = ((dynamic)obj)["m_TerminationCriteria"] as Newtonsoft.Json.Linq.JObject;
                var hi    = ((dynamic)obj)["history"] as Newtonsoft.Json.Linq.JArray;
                var pop   = ((dynamic)obj)["popStr"] as Newtonsoft.Json.Linq.JValue;

                if (param != null)
                {
                    m_Parameters = param.ToObject <Parameters>();
                }
                if (ter != null)
                {
                    m_TerminalSet = ter.ToObject <int[]>();
                }
                if (fun != null)
                {
                    m_FunctionSet = fun.ToObject <Function[]>();
                }
                if (prog != null)
                {
                    m_progresReport = prog.ToObject <ProgressReport>();
                }
                if (tc != null)
                {
                    m_TerminationCriteria = tc.ToObject <TerminationCriteria>();
                }
                if (hi != null)
                {
                    hist = hi.ToObject <Evolution[]>();
                }

                //create history
                if (hist != null)
                {
                    m_History = new List <Evolution>(hist);
                }

                m_Population = new Population();

                if (pop != null)
                {
                    var popStr = pop.ToObject <string>();
                    m_Population.PopulationFromString(popStr);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }