Example #1
0
 public async Task Remove(LpTask lpTask)
 {
     _ctx.LpTasks.Remove(lpTask);
     await _ctx.SaveChangesAsync();
 }
        public async Task <IActionResult> Solve([FromBody] LPModelDto lpModelDto, bool integerProgramming = false)
        {
            bool               wrongFormat = false;
            string             message     = null;
            SimplexSolutionDto solution    = null;
            LPModel            lpModel     = null;

            try
            {
                lpModelDto.Validate();
            }
            catch (ArgumentException e)
            {
                wrongFormat = true;
                message     = string.Format(Messages.WRONG_FORMAT_CHECK_ARG, e.ParamName);
            }

            if (wrongFormat)
            {
                return(BadRequest(new { success = false, message = message }));
            }

            if (integerProgramming)
            {
                try
                {
                    lpModel  = Gomory.RunGomory(lpModelDto);
                    solution = lpModel.GetSolutionFromDictionary(lpModelDto.MapTo(new LPModel()).Objective.Function);
                }
                catch (SimplexAlgorithmExectionException e)
                {
                    message = e.ExecutionError == SimplexAlgorithmExectionErrorType.NoSolution ?
                              Messages.SIMPLEX_INT_RESULT_NO_SOLUTION :
                              Messages.SIMPLEX_INT_RESULT_NO_LIMIT;
                }
            }
            else
            {
                lpModel = lpModelDto.MapTo(new LPModel());

                try
                {
                    lpModel.TwoPhaseSimplex();
                    solution = lpModel.GetSolutionFromDictionary(lpModelDto.MapTo(new LPModel()).Objective.Function);
                }
                catch (SimplexAlgorithmExectionException e)
                {
                    message = e.ExecutionError == SimplexAlgorithmExectionErrorType.NoSolution ?
                              Messages.SIMPLEX_RESULT_NO_SOLUTION :
                              Messages.SIMPLEX_RESULT_NO_LIMIT;
                }
                catch (Exception)
                {
                    message = Messages.GENERAL_ERROR;
                }
            }

            if (message == Messages.GENERAL_ERROR)
            {
                return(StatusCode(500, new { success = false, message = message }));
            }

            var lpTask = new LpTask
            {
                LPModelAsJson  = JsonConvert.SerializeObject(lpModelDto),
                SolutionAsJson = JsonConvert.SerializeObject(new LPTaskResultDto {
                    SolutionFound = solution != null, Message = message, Solution = solution
                }),
                SolvedAt           = DateTimeOffset.Now,
                IntegerProgramming = integerProgramming
            };

            await _lpTaskOperations.Add(lpTask);

            return(Json(new { success = true, taskId = lpTask.Id }));
        }
Example #3
0
 public async Task Add(LpTask lpTask)
 {
     _ctx.LpTasks.Add(lpTask);
     await _ctx.SaveChangesAsync();
 }