public TransportProblemForm(TransportProblem problem)
        {
            int providersCount = problem.Table.StocksColumn.Length;
            int consumersCount = problem.Table.NeedsRow.Length;

            InitializeComponent();
            _providersCount = providersCount;
            _consumersCount = consumersCount;
            CreateTariffTable(providersCount, consumersCount);
            for (int i = 0; i < providersCount; i++)
            {
                for (int j = 0; j < consumersCount; j++)
                {
                    tariffMatrix.Rows[i].Cells[j].Value = problem.Table.TariffMatrix[i][j].Tariff;
                }
            }
            CreateStocksTable(providersCount);
            for (int i = 0; i < providersCount; i++)
            {
                stocks.Rows[i].Cells[0].Value = problem.Table.StocksColumn[i].Value;
            }
            CreateNeedsTable(consumersCount);
            for (int i = 0; i < consumersCount; i++)
            {
                needs.Rows[0].Cells[i].Value = problem.Table.NeedsRow[i].Value;
            }
        }
 private void buttonSolveProblem_Click(object sender, EventArgs e)
 {
     try
     {
         labelOptimalPrice.Text = "";
         labelBasePrice.Text    = "";
         referenceSolution?.Rows.Clear();
         referenceSolution?.Columns.Clear();
         optimalSolution?.Rows.Clear();
         optimalSolution?.Columns.Clear();
         double[][] tariffMatrixNumbers = new double[_providersCount][];
         for (int i = 0; i < _providersCount; i++)
         {
             tariffMatrixNumbers[i] = new double[_consumersCount];
             for (int j = 0; j < _consumersCount; j++)
             {
                 tariffMatrixNumbers[i][j] = Convert.ToDouble(tariffMatrix.Rows[i].Cells[j].Value);
             }
         }
         double[] needsRow = new double[_consumersCount];
         for (int i = 0; i < _consumersCount; i++)
         {
             needsRow[i] = Convert.ToDouble(needs.Rows[0].Cells[i].Value);
         }
         double[] stocksRow = new double[_providersCount];
         for (int i = 0; i < _providersCount; i++)
         {
             stocksRow[i] = Convert.ToDouble(stocks.Rows[i].Cells[0].Value);
         }
         TransportProblem problem = new TransportProblem(TransportProblem.CreateTransportTable(tariffMatrixNumbers, stocksRow, needsRow));
         Answer           answer  = problem.GetSolution();
         CreateBasePlanTable(answer.BasePlan);
         if (answer.FakeColumn > -1)
         {
             PaintTheColumnOfDataGrid(referenceSolution, answer.FakeColumn, Color.Red);
         }
         else if (answer.FakeRow > -1)
         {
             PaintTheRowOfDataGrid(referenceSolution, answer.FakeRow, Color.Red);
         }
         CreateOptimalPlanTable(answer.OptimalPlan);
         if (answer.FakeColumn > -1)
         {
             PaintTheColumnOfDataGrid(optimalSolution, answer.FakeColumn, Color.Red);
         }
         else if (answer.FakeRow > -1)
         {
             PaintTheRowOfDataGrid(optimalSolution, answer.FakeRow, Color.Red);
         }
         labelBasePrice.Text    = answer.BasePlanPrice.ToString();
         labelOptimalPrice.Text = answer.OptimalPlanPrice.ToString();
     }
     catch (Exception ee)
     {
         labelOptimalPrice.Text = $"Ошибка: {ee.Message}";
         labelBasePrice.Text    = $"Ошибка: {ee.Message}";
     }
 }
Beispiel #3
0
 public IActionResult Post([FromBody] TransportProblem transportProblem)
 {
     if (ModelState.IsValid)
     {
         TransportProblemService transportProblemService = new TransportProblemService(transportProblem);
         var res  = transportProblemService.Solve();
         var json = JsonConvert.SerializeObject(res);
         return(Ok(json));
     }
     return(UnprocessableEntity());
 }
Beispiel #4
0
 public TransportProblemService(TransportProblem transportProblem)
 {
     _transportProblem = transportProblem;
     Calculated        = new Shipment[_transportProblem.Supply.Length, _transportProblem.Demmand.Length];
 }