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}"; } }
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()); }
public TransportProblemService(TransportProblem transportProblem) { _transportProblem = transportProblem; Calculated = new Shipment[_transportProblem.Supply.Length, _transportProblem.Demmand.Length]; }