コード例 #1
0
        private void ReplaceIndividual(LabeledPolygonImage toReplace, PolygonIndividual replaceWith)
        {
            population.Replace(
                population.Find(toReplace.SavedPolygon.Name),
                replaceWith);

            picturesLayoutPanel.Controls.Remove(toReplace);
            picturesLayoutPanel.Controls.Add(BuildLabeledImage(replaceWith));
        }
 /// <summary>
 /// Use base calculation from <see cref="BasicSymmetryFitnessCalculator"/> and additionally reduces fitness for each edge intersection
 /// </summary>
 /// <param name="individual"></param>
 /// <returns></returns>
 public override double IndividualFitness(PolygonIndividual individual)
 {
     if (individual.Fitness.Equals(PolygonIndividual.InvalidFitnessIndicator))
     {
         double baseResult        = base.IndividualFitness(individual);
         int    intersectionCount = GetEdgeIntersectionCount(individual.Genome.Select(g => g.Decode())) - individual.Polygon.VerticesCount;
         double result            = intersectionCount > 0 ? baseResult / intersectionCount : baseResult;
         individual.Fitness = result;
     }
     return(individual.Fitness);
 }
コード例 #3
0
 private void importInitialPopulationButton_Click(object sender, EventArgs e)
 {
     if (importPopulationDialog.ShowDialog() == DialogResult.OK && ValidFolderSelected)
     {
         foreach (var file in importPopulationDialog.FileNames)
         {
             var newIndividual = new PolygonIndividual(PolygonXmlHandler.Load(file));
             displayPopulation.Add(newIndividual);
         }
         ResolveDisplayedPopulationUniformity();
         UpdatePopulationPictures();
     }
 }
コード例 #4
0
        private void replaceShapeMenuItem_Click(object sender, EventArgs e)
        {
            var image = GetImageFromSender(sender);

            if (openShapesDialog.ShowDialog() == DialogResult.OK && ValidFolderSelected)
            {
                Polygon           replacementPolygon    = PolygonXmlHandler.Load(openShapesDialog.FileName);
                PolygonIndividual replacementIndividual = new PolygonIndividual(replacementPolygon);
                ReplaceIndividual(image, replacementIndividual);
                OverwritePopulationPictures();
                Invalidate();
            }
        }
コード例 #5
0
        private LabeledPolygonImage BuildLabeledImage(PolygonIndividual buildFrom)
        {
            var result = new LabeledPolygonImage(Polygon.Copy(buildFrom.Polygon))
            {
                Description =
                    $"{buildFrom.Polygon.Name}{Environment.NewLine}Fitness: {FitnessCalculator?.IndividualFitness(buildFrom)}",
                BackColor = picturesBackgroundColorDialog.Color,
                Width     = currentImagesWidth,
                Height    = currentImagesHeight,
                AllowSelectionCheckbox = false
            };

            return(result);
        }
コード例 #6
0
        private LabeledPolygonImage BuildLabeledImage(PolygonIndividual buildFrom)
        {
            var result = new LabeledPolygonImage(Polygon.Copy(buildFrom.Polygon));

            result.Description =
                $"{buildFrom.Polygon.Name}{System.Environment.NewLine}Fitness: {fitnessCalculator?.IndividualFitness(buildFrom)}";
            result.BackColor        = picturesBackgroundColorDialog.Color;
            result.ContextMenuStrip = labeledImageContextMenu;
            result.Width            = currentImagesWidth;
            result.Height           = currentImagesHeight;
            result.ImageMouseDown  += picturesLayoutPanel_MouseDown;
            result.ImageMouseUp    += picturesLayoutPanel_MouseUp;
            return(result);
        }
コード例 #7
0
        private void importShapesButton_Click(object sender, EventArgs e)
        {
            if (openShapesDialog.ShowDialog() == DialogResult.OK && ValidFolderSelected)
            {
                if (population == null)
                {
                    population = new Population <PolygonIndividual, IPolygonGene>();
                }

                foreach (var file in openShapesDialog.FileNames)
                {
                    var newIndividual = new PolygonIndividual(PolygonXmlHandler.Load(file));
                    population.Add(newIndividual);
                    picturesLayoutPanel.Controls.Add(BuildLabeledImage(newIndividual));
                }

                if (sortPopulationCheckbox.Checked)
                {
                    OverwritePopulationPictures();
                }
            }
        }