Пример #1
0
 private void childSolver_MovelistCreated(MovelistCreatedEventArgs args)
 {
     if (MovelistCreated != null)
     {
         MovelistCreated(args);
     }
 }
Пример #2
0
        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();
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }