Exemple #1
0
        /// <summary>
        /// Gets a new Solution from the _solutionsQueue and processes it.
        /// </summary>
        private void TakeNewSolutions()
        {
            foreach (var solution in _solutionsQueue.GetConsumingEnumerable())
            {
                Task processingSolutionTask = Task.Run(() => ProcessSolution(solution));
                AlgorithmTasks.Add(solution.Id, processingSolutionTask);
            }

            void ProcessSolution(ToSolution solution)
            {
                SolverValidator.Validate(solution);
                SolverEvaluator.Evaluate(solution);
            }
        }
Exemple #2
0
        private async Task ResetSolverState()
        {
            _solutionsQueue.CompleteAdding();
            await Task.WhenAll(_solverTasks);

            _solutionsQueue.Dispose();
            _solutionsQueue           = default;
            _executionFunc            = default;
            Points                    = default;
            Problem                   = default;
            CityMapGraph              = default;
            BestSolution              = default;
            CurrentStage              = default;
            IsMonitoringEnabled       = default;
            WorkingConfiguration      = default;
            PreviousStageSolutionCost = default;
            CurrentStageExecutionTime = default;
            CurrentAlgorithm          = AlgorithmType.None;
            _solverTasks.Clear();
            AlgorithmTasks.Clear();
            ConstraintsToRelax.Clear();
        }