예제 #1
0
        static void Main(string[] args)
        {
            ISolverAdapter SolverAdapter = AbstractSolverAdapter.GetSolverAadapter(SolverChoisi);

            object solver = SolverAdapter.CreateProblem(4); /// Entrer le nombre des variables (colonnes) comme paramétre de la fonction CreateProblem (ici c'est 4)


            SolverAdapter.SetObjFn(solver, new double[] { 87.9, 0, -40.45, 33.32 });

            SolverAdapter.AddConstraint(solver, new double[] { 3000, 200, 2000, 1000 }, SolverAdapterConstraintTypes.LE, 4000); /// ".LE" pour "Lower than or equal to"
            SolverAdapter.AddConstraint(solver, new double[] { 0, 4000, 330, 112 }, SolverAdapterConstraintTypes.GE, 100);      /// ".GE" pour "Greater than or equal to"
            SolverAdapter.AddConstraint(solver, new double[] { 1875, 61, 0, 3152 }, SolverAdapterConstraintTypes.LE, 7200);
            SolverAdapter.AddConstraint(solver, new double[] { -100, 6.3, 7.5, 300 }, SolverAdapterConstraintTypes.LE, 1300);

            SolverAdapter.Solve(solver);

            SolverAdapter.WriteLp(solver, FileName);

            Console.ReadLine();
        }
예제 #2
0
        public object[,] Solve()
        {
            int    nbrVar = linesDico.Values.Count;
            object test;

            double[] result = new double[nbrVar + 1];
            object[,] finalResult = new object[nbrVar + 3, 2];
            solver = solverAdapter.CreateProblem(nbrVar);

            AddCapacityConstraintsAndTargetObj(finalResult);
            AddPdvConstraints();
            AddConsoACSConstraints();
            AddConsoACPConstraints();

            test = solverAdapter.Solve(solver);
            solverAdapter.GetVariables(solver, result);
            result[nbrVar] = solverAdapter.GetObjective(solver);

            finalResult[0, 0] = "Production Line";
            finalResult[0, 1] = "Production Quantity" + capexObjectManager.Year;

            finalResult[nbrVar + 1, 0] = "Total Cost";
            finalResult[nbrVar + 2, 0] = "Rock Needs";

            for (int k = 0; k < nbrVar + 1; k++)
            {
                finalResult[k + 1, 1] = result[k];
            }

            finalResult[nbrVar + 2, 1] = 0.0;
            for (int i = 0; i < linesDico.Values.Count; i++)
            {
                Unit unit = linesDico.Values.ElementAt(i);
                finalResult[nbrVar + 2, 1] = (double)finalResult[nbrVar + 2, 1] + result[i] * unit.RockConsumption;
            }

            bool ret = solverAdapter.WriteLp(solver, "LpFile_" + capexObjectManager.Year + ".txt");

            return(finalResult);
        }