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); }
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(); } }
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(); } }
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); }
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); }
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(); } } }