Пример #1
0
        static void Main(string[] args)
        {
            var exp = new Experiment(new List <string> {
                "fitness", "solGenNum"
            });

            for (var i = 0; i < 30; i++)
            {
                var searchModel    = new XorNetworkSearch(PopulationParameters, NetworkParameters, ReproductionParameters);
                int solutionGenNum = 1001;
                for (var g = 0; g < 1000; g++)
                {
                    var res = searchModel.SearchNext();
                    if (res.FitnessRating[0].Fitness > 0.99 && g < solutionGenNum)
                    {
                        solutionGenNum = g;
                    }
                }

                var finRes = searchModel.SearchNext();
                exp.AddValue("solGenNum", solutionGenNum);
                exp.AddValue("fitness", finRes.FitnessRating[0].Fitness);

                Console.WriteLine($"{finRes.FitnessRating[0].Fitness}\t{solutionGenNum}");
            }
            exp.Finish();

            Console.WriteLine("Meow.");
        }
Пример #2
0
        private void StartSearchLoop()
        {
            var cancellationToken = _cancellationTokenSource.Token;
            var handlesToWait     = new[] { cancellationToken.WaitHandle, _runSearchLoop };

            void SearchLoop()
            {
                if (IsRecurrent)
                {
                    ReproductionParameters.WeightMutations.OverallRouletteWheelShare = 75f;
                    ReproductionParameters.AddConnectionRouletteWheelShare           = 16f;
                }

                while (true)
                {
                    var searchModel = new XorNetworkSearch(
                        PopulationParameters,
                        IsRecurrent ? RecurrentNetworkParameters : FeedForwardNetworkParameters,
                        ReproductionParameters);

                    SearchResult searchResult = default;
                    InvokeOnUiThread(HandleStartNewSearchRun);
                    for (var generation = 0; generation < GenerationsCount; ++generation)
                    {
                        WaitHandle.WaitAny(handlesToWait);
                        if (cancellationToken.IsCancellationRequested)
                        {
                            return;
                        }

                        var newSearchResult = searchModel.SearchNext();
                        InvokeOnUiThread(() => HandleNewPopulationFound(newSearchResult));
                        searchResult = newSearchResult;
                    }

                    InvokeOnUiThread(() => HandleFinishSearchRun());
                }
            }

            _searchThread = new Thread(SearchLoop);
            _searchThread.Start();
        }