public ObserverNewGeneration(GA_TravellingSalesman subject, Action trigger)
 {
     this.subject = subject;
     this.subject.Attach(this);
     this.trigger = trigger;
 }
コード例 #2
0
 public ObserverMutationRate(GA_TravellingSalesman subject, Action trigger)
 {
     this.subject = subject;
     this.subject.Attach(this);
     this.trigger = trigger;
 }
コード例 #3
0
 public ObserverPopulationCount(GA_TravellingSalesman subject, Action trigger)
 {
     this.subject = subject;
     this.subject.Attach(this);
     this.trigger = trigger;
 }
コード例 #4
0
        public static void SetTriggers(ObserverMulti observer, FormMain formMain)
        {
            Action <ToolStripMenuItem, string> setTextToolStripMenuItem = (ToolStripMenuItem item, string text) =>
            {
                if (formMain.InvokeRequired)
                {
                    var setTextDelegate = new ChangeText(() =>
                    {
                        item.Text = text;
                    });
                    formMain.Invoke(setTextDelegate, new object[] { });
                }
                else
                {
                    item.Text = text;
                }
            };

            Action <Label, string> setTextLabel = (Label item, string text) =>
            {
                if (formMain.InvokeRequired)
                {
                    var setTextDelegate = new ChangeText(() =>
                    {
                        item.Text = text;
                    });
                    formMain.Invoke(setTextDelegate, new object[] { });
                }
                else
                {
                    item.Text = text;
                }
            };

            observer.AddTrigger(StateChanged.newGeneration, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelCurrentGenerationValue, subjectGA.CurrentGeneration + "/" + subjectGA.ExpectedGenerationCount);
            });

            observer.AddTrigger(StateChanged.ExpectedGenerationCount, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelCurrentGenerationValue, subjectGA.CurrentGeneration + "/" + subjectGA.ExpectedGenerationCount);
            });

            observer.AddTrigger(StateChanged.BestSolution, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelBestShortestPathValue, subjectGA.BestSolution.Distance.ToString());
            });

            observer.AddTrigger(StateChanged.LastGenerationBestFitter, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelLastShortestPathValue, subjectGA.LastGenerationBestFitter.Distance.ToString());
            });

            observer.AddTrigger(StateChanged.ExpectedGenerationCount, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelMaxGenerationsValue, subjectGA.ExpectedGenerationCount.ToString());
            });

            observer.AddTrigger(StateChanged.ExepectedMutationRate, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelMutationRateValue, subjectGA.ExpectedMutationRate.ToString());
            });

            observer.AddTrigger(StateChanged.ExpectedPopulationCount, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelPopulationSizeValue, subjectGA.ExpectedPopulationCount.ToString());
            });

            observer.AddTrigger(StateChanged.ExpectedFitnessDiscrimination, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                setTextLabel(formMain.LabelFitnessDiscriminatorValue, subjectGA.ExpectedFitnessDiscrimination.ToString());
            });

            observer.AddTrigger(StateChanged.BestSolution, (subject) =>
            {
                if (!formMain.CheckBoxDrawBestSolution.Checked)
                {
                    return;
                }
                formMain.RedrawBestSolution();
            });
            observer.AddTrigger(StateChanged.ExpectedExecutionStatus, (subject) =>
            {
                GA_TravellingSalesman subjectGA = (GA_TravellingSalesman)subject;
                string text;
                if (subjectGA.IsExecuting)
                {
                    text = "Pause";
                }
                else
                {
                    text = "Run";
                }
                setTextToolStripMenuItem(formMain.ToolStripMenuItem_GaRunStatus, text);
            });

            observer.AddTrigger(StateChanged.ExepectedMutationRate, (subject) =>
            {
                new FormInfo("Mutation Rate changed !").Show();
            });
            observer.AddTrigger(StateChanged.ExpectedGenerationCount, (subject) =>
            {
                new FormInfo("Max. generations changed !").Show();
            });
            observer.AddTrigger(StateChanged.ExpectedPopulationCount, (subject) =>
            {
                new FormInfo("Population count changed !").Show();
            });
            observer.AddTrigger(StateChanged.ExpectedFitnessDiscrimination, (subject) =>
            {
                new FormInfo("Fitness Discrimination changed !").Show();
            });
        }