Example #1
0
        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);
        }
Example #2
0
        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));
            }
        }
Example #3
0
        /// <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;
        }