private void CreateMinesLaveriesConnexions()
        {
            Object[,] connexionsInput = configDico[Legende.CONNEXIONS];

            for (int i = 1; i < connexionsInput.GetLength(0); i++)
            {
                string  axeName        = (string)connexionsInput[i, 1];
                string  mineName       = (string)connexionsInput[i, 2];
                string  extractionName = mineName + Legende.EXTRACTION;
                string  connexionName  = (string)connexionsInput[i, 4];
                Product interProduct   = IntermediateProducts.GetInterProduct((string)connexionsInput[i, 3]);

                CapexObjectManager capexObj = objectManagerDico[connexionsInput[i, 0].ToString()];
                capexObj.UpdateLaveriesDico();
                Entity variableMine = capexObj.GetEntity(axeName, mineName);

                for (int j = 5; j < connexionsInput.GetLength(1); j++)
                {
                    string laverieName = (string)connexionsInput[0, j];
                    if (connexionsInput[i, j].ToString() == "N")
                    {
                        continue;
                    }

                    Unit laverie        = capexObj.GetLaverie(laverieName);
                    Unit extractionUnit = variableMine.GetUnit(extractionName);
                    capexObj.AddConnexion(connexionName, extractionUnit, laverie, (double)connexionsInput[i, j], (double)laverie.Capacity, interProduct);
                }
            }
        }
        private void CreateAndUpdateLaveriesCapacities()
        {
            Object[,] capaLaverieInput = configDico[Legende.CAPALAV];

            for (int i = 1; i < capaLaverieInput.GetLength(0); i++)
            {
                string axeName     = (string)capaLaverieInput[i, 0];
                string mineName    = (string)capaLaverieInput[i, 1];
                string laverieName = (string)capaLaverieInput[i, 2];
                foreach (CapexObjectManager objManager in objectManagerDico.Values)
                {
                    Entity variableMine = objManager.GetEntity(axeName, mineName);
                    variableMine.AddTreatment(laverieName, TreatmentType.LAVERIE);
                }
            }

            for (int i = 6; i < capaLaverieInput.GetLength(1); i++)
            {
                CapexObjectManager capexObj = objectManagerDico[capaLaverieInput[0, i].ToString()];

                for (int j = 1; j < capaLaverieInput.GetLength(0); j++)
                {
                    Unit treatmentUnit = capexObj.GetUnit((string)capaLaverieInput[j, 0], (string)capaLaverieInput[j, 1], (string)capaLaverieInput[j, 2]);
                    if (capaLaverieInput[j, i] == null)
                    {
                        capaLaverieInput[j, i] = 0.0;
                    }
                    treatmentUnit.Capacity = (double)capaLaverieInput[j, i];
                }
            }
        }
        public static object[,] CAPEXFacilitiesAllocationPerYear(string solverName, string year)
        {
            CapexObjectManager objManager = capexControler.ObjectManagerDico[year];

            outputResult = objManager.LaunchSolver(solverName);
            return(outputResult);
        }
        private void CreateObjectManagers()
        {
            string             year;
            CapexObjectManager capexObj = null;

            Object[,] pdvInput = configDico[Legende.PDV];

            for (int i = 3; i < pdvInput.GetLength(1); i++)
            {
                year     = pdvInput[0, i].ToString();
                capexObj = new CapexObjectManager(year);
                objectManagerDico[year] = capexObj;
                capexObj.GenerateFinalProducts(pdvInput, i);
            }
        }
        private void UpdateCosts()
        {
            Object[,] costsInput = configDico[Legende.COSTS];

            for (int i = 3; i < costsInput.GetLength(1); i++)
            {
                CapexObjectManager capexObj = objectManagerDico[costsInput[0, i].ToString()];
                capexObj.UpdateLinesDico();

                for (int j = 1; j < costsInput.GetLength(0); j++)
                {
                    Unit lineUnit = capexObj.GetLine((string)costsInput[j, 2]);
                    if (costsInput[j, i] == null)
                    {
                        costsInput[j, i] = 0.0;
                    }
                    lineUnit.Cost = (double)costsInput[j, i];
                }
            }
        }
        private void UpdateSConsumption()
        {
            Object[,] SConsumptionInput = configDico[Legende.SCONSO];

            for (int i = 3; i < SConsumptionInput.GetLength(1); i++)
            {
                CapexObjectManager capexObj = objectManagerDico[SConsumptionInput[0, i].ToString()];
                capexObj.UpdateLinesDico();

                for (int j = 1; j < SConsumptionInput.GetLength(0); j++)
                {
                    Unit lineUnit = capexObj.GetLine((string)SConsumptionInput[j, 2]);
                    if (SConsumptionInput[j, i] == null)
                    {
                        SConsumptionInput[j, i] = 0.0;
                    }
                    lineUnit.SConsumption = (double)SConsumptionInput[j, i];
                }
            }
        }
        private void UpdateExtractionsCapacities()
        {
            Object[,] capaMineInput = configDico[Legende.CAPAMINE];

            for (int i = 5; i < capaMineInput.GetLength(1); i++)
            {
                CapexObjectManager capexObj = objectManagerDico[capaMineInput[0, i].ToString()];

                for (int j = 1; j < capaMineInput.GetLength(0); j++)
                {
                    string extractionName = (string)capaMineInput[j, 0] + Legende.EXTRACTION;
                    Unit   extractionUnit = capexObj.GetUnit((string)capaMineInput[j, 1], (string)capaMineInput[j, 0], extractionName);
                    if (capaMineInput[j, i] == null)
                    {
                        capaMineInput[j, i] = 0.0;
                    }
                    extractionUnit.Capacity = (double)capaMineInput[j, i];
                }
            }
        }
        private void UpdateLinesCapacities()
        {
            Object[,] capaFacilityInput = configDico[Legende.CAPAPROD];

            for (int i = 8; i < capaFacilityInput.GetLength(1); i++)
            {
                CapexObjectManager capexObj = objectManagerDico[capaFacilityInput[0, i].ToString()];

                for (int j = 1; j < capaFacilityInput.GetLength(0); j++)
                {
                    Unit   treatmentUnit = capexObj.GetUnit((string)capaFacilityInput[j, 0], (string)capaFacilityInput[j, 1], (string)capaFacilityInput[j, 3]);
                    string productName   = (string)capaFacilityInput[j, 2];
                    if (capaFacilityInput[j, i] == null)
                    {
                        capaFacilityInput[j, i] = 0.0;
                    }
                    treatmentUnit.Capacity          = (double)capaFacilityInput[j, i];
                    treatmentUnit.ProductItProduces = productName;
                }
            }
        }
        public static object[,] CAPEXFacilitiesAllocation(string solverName)
        {
            object[,] finalResult;
            CapexObjectManager objManager = capexControler.ObjectManagerDico.Values.ElementAt(0);

            finalResult  = objManager.LaunchSolver(solverName);
            outputResult = new object[finalResult.GetLength(0), capexControler.ObjectManagerDico.Values.Count + 1];

            for (int j = 0; j < finalResult.GetLength(0); j++)
            {
                outputResult[j, 0] = finalResult[j, 0];
                outputResult[j, 1] = finalResult[j, 1];
            }

            for (int k = 1; k < capexControler.ObjectManagerDico.Values.Count; k++)
            {
                object[,] result = capexControler.ObjectManagerDico.Values.ElementAt(k).LaunchSolver(solverName);
                for (int i = 0; i < finalResult.GetLength(0); i++)
                {
                    outputResult[i, k + 1] = result[i, 1];
                }
            }
            return(outputResult);
        }