private void childSolver_MovelistCreated(MovelistCreatedEventArgs args) { if (MovelistCreated != null) { MovelistCreated(args); } }
private void CheckAndAddValidChild(MoveList child, Boolean createdThroughCrossover, Boolean createdThroughMutation) { var childValid = Board.ApplyMoveList(child); if (childValid) { //Only valid solutions are applicable. var numEmptySpaces = Board.GetNumberOfFreeSpaces(); child.Score = numEmptySpaces; if (child.Score > 0 && _nextGeneration.Count < GeneticAlgorithmOptions.PopulationSize) { _nextGeneration.Add(child); if (MovelistCreated != null) { var args = new MovelistCreatedEventArgs { CreatedThroughMutation = createdThroughMutation, CreatedThroughCrossover = createdThroughCrossover, CreatedThroughReproduction = false, //NameSolution = child.Name, Score = child.Score, Moves = child.ToString() }; MovelistCreated(args); } } } Board.Reset(); }
private void PerformReproduction(IRandomizer randomizer) { var x = new ChromosomeSelector(_currentGeneration); var parent1 = x.Get(randomizer); _nextGeneration.Add(parent1); if (MovelistCreated != null) { var args = new MovelistCreatedEventArgs { CreatedThroughMutation = false, CreatedThroughCrossover = false, CreatedThroughReproduction = true, //NameSolution = parent1.Name, Score = parent1.Score, Moves = parent1.ToString() }; MovelistCreated(args); } }
private MoveList CreateRandomMovelist(IRandomizer random) { var list1 = new MoveList(); var validMovelist = true; for (var i = 0; i < PiecesQueue.Count; i++) { var piece = PiecesQueue[i]; if (piece.Type == PieceType.Flower) { var coordinate = Board.GetRandomEmptyCoordinate(random.GetRandom); if (!coordinate.Equals(Coordinate.InvalidCoordinate)) { var move = new Move(piece, coordinate); var moveSuccessful = Board.DoMove(move); if (moveSuccessful) { list1.Add(move); } else { validMovelist = false; } } else { validMovelist = false; } if (!validMovelist) { break; } } else if (piece.Type == PieceType.Butterfly) { var coordinate = Board.GetRandomNonRockCoordinate(random.GetRandom); if (coordinate != Coordinate.InvalidCoordinate) { var move = new Move(piece, coordinate); var moveSuccessful = Board.DoMove(move); if (moveSuccessful) { list1.Add(move); } else { validMovelist = false; } } else { validMovelist = false; } if (!validMovelist) { break; } } } if (validMovelist) { list1.Score = Board.GetNumberOfFreeSpaces(); if (MovelistCreated != null) { var args = new MovelistCreatedEventArgs { CreatedThroughMutation = false, CreatedThroughCrossover = false, Score = list1.Score, Moves = list1.ToString() }; MovelistCreated(args); } } else { list1 = null; } Board.Reset(); return(list1); }