Exemple #1
0
        private async Task HandleRequestAsync(OptimizerGeneratedQueryDTO request)
        {
            try
            {
                switch (request.PurposeCase)
                {
                case OptimizerGeneratedQueryDTO.PurposeOneofCase.OptimizationStartedNotification:
                    _activeRunId = request.OptimizationStartedNotification.RunID.toGuid();
                    break;

                case OptimizerGeneratedQueryDTO.PurposeOneofCase.EvaluationRequest:
                    await Log($"{ServerPrefix} Request Evaluation");
                    await EvaluateAsync(request);

                    break;

                case OptimizerGeneratedQueryDTO.PurposeOneofCase.CancelRequest:
                    await Log($"{ServerPrefix} Request Cancel");

                    _randomNumberEvaluator.Cancel();
                    break;

                case OptimizerGeneratedQueryDTO.PurposeOneofCase.None:
                    break;

                default:
                    await Log($"{ServerPrefix} Run Other - {request}");

                    break;
                }
            }
            catch (Exception e)
            {
                await _client.OfferErrorResultAsync(new SimulationEvaluationErrorResponseDTO()
                {
                    Name      = _name,
                    Message   = $"Error handling request [{request.PurposeCase}]",
                    Exception = e.ToString()
                });
            }
        }
Exemple #2
0
        private async Task EvaluateAsync(OptimizerGeneratedQueryDTO request)
        {
            MapField <string, double> inputs = request.EvaluationRequest.InputVector;

            await Log($"{CommandPrefix} Requested Input: [{inputs}]");

            foreach (Input input in _inputSource)
            {
                input.EvaluatingValue = inputs[input.Name];
            }
            foreach (Output output in _outputSource)
            {
                output.EvaluatingValue = "Evaluating...";
            }
            UpdateBindingSourceOnUI(_inputSource);
            UpdateBindingSourceOnUI(_outputSource);

            await Log($"{CommandPrefix} Evaluating...");

            var result = await _randomNumberEvaluator.EvaluateAsync(inputs, _outputSource.List);

            foreach (Input input in _inputSource)
            {
                input.CurrentValue = inputs[input.Name];
            }

            foreach (Output output in _outputSource)
            {
                if (result.Output.ContainsKey(output.Name))
                {
                    output.CurrentValue    = result.Output[output.Name].ToString();
                    output.EvaluatingValue = result.Output[output.Name].ToString();
                }
                else
                {
                    output.CurrentValue    = result.Status.ToString();
                    output.EvaluatingValue = result.Status.ToString();
                }
            }

            UpdateBindingSourceOnUI(_inputSource);
            UpdateBindingSourceOnUI(_outputSource);
            switch (result.Status)
            {
            case EvaluationResult.ResultStatus.Succeed:
                await Log($"{CommandPrefix} Evaluation Succeed [{ToDebugString(result.Output)}]");

                SimulationEvaluationCompletedResponseDTO request1 = new SimulationEvaluationCompletedResponseDTO
                {
                    Name         = _name,
                    OutputVector = { result.Output }
                };
                await _client.OfferSimulationResultAsync(request1);

                break;

            case EvaluationResult.ResultStatus.Failed:
                await Log($"{CommandPrefix} Evaluation Failed [{ToDebugString(result.Output)}]\nException: {result.Exception}");

                await _client.OfferErrorResultAsync(new SimulationEvaluationErrorResponseDTO()
                {
                    Name      = _name,
                    Message   = $"{CommandPrefix} Evaluation Failed when evaluating [{inputs}]",
                    Exception = result.Exception.ToString()
                });

                break;

            case EvaluationResult.ResultStatus.Canceled:
                await Log($"{CommandPrefix} Evaluation Canceled");

                await _client.OfferSimulationResultAsync(new SimulationEvaluationCompletedResponseDTO
                {
                    Name         = _name,
                    OutputVector = { result.Output }
                });

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }