public void AddDostawca(int a_value) { if (m_isInit) { throw new Exception("Nrak możliwości dodania dostawcy. Solver został już zainicjowany"); } var supp = new InputData(Dostawcy.Count, InputType.Dostawca, a_value); Dostawcy.Add(supp); }
private void AddVirtualInputData() { var popyt = Odbiorcy.Sum(o => o.Value); var podaz = Dostawcy.Sum(o => o.Value); if (popyt > podaz) { Dostawcy.Add(new InputData(Dostawcy.Count, InputType.Dostawca, popyt - podaz, true)); } else { Odbiorcy.Add(new InputData(Odbiorcy.Count, InputType.Odbiorca, podaz - popyt, true)); } }
/// <summary> /// Inicjalizuje początkową iterację dla zadanych dostawców i odbiorców. /// Jeżeli podczas tworzenia instancji solvera nie zostały przekazane dane wejściowe, /// po wykonaniu Init należy dodać koszty. /// Po wykonaniu Init, brak możliwości definiowania dostawców i odbiorców. /// </summary> public void Init(JobType a_jobType) { IterationBase iteracjaStartowa = null; var isUserDataSet = !(m_userData is null); if (!isUserDataSet && (Dostawcy.Count < 1 || Odbiorcy.Count < 1)) { throw new Exception("Przed zainicjowaniem solvera należy dodać conajmniej jednego dostawcę oraz odbiorcę."); } GridCell[][] grid = isUserDataSet ? m_userData.UnitCostGrid : Utility.CreateEmptyCellGrid(Dostawcy.Count, Odbiorcy.Count); if (a_jobType == JobType.TransportCosts) { var isBalaced = IsBalanced(); if (!isBalaced) { AddVirtualInputData(); } if (!isBalaced && isUserDataSet) { RecalculateDataGrid(); grid = m_userData.UnitCostGrid; } iteracjaStartowa = new IterationTransportCosts(grid, JobType.TransportCosts, ++m_iterator); } if (a_jobType == JobType.Profit) { var(vDostawca, vOdbiorca) = IterationProfit.CreateVirtualInputData(Dostawcy, Odbiorcy); Dostawcy.Add(vDostawca); Odbiorcy.Add(vOdbiorca); RecalculateDataGrid(); grid = m_userData.UnitCostGrid; iteracjaStartowa = new IterationProfit(grid, JobType.Profit, ++m_iterator); } m_startIteration = iteracjaStartowa; Iterations.Add(iteracjaStartowa); m_isInit = true; }