public void BuildRMP(List <Pairing> initialPathSet)
        {
            //GetCoverMatrix()

            INumExpr obj_expr = RMP.NumExpr();

            foreach (Pairing path in initialPathSet)
            {
                if (path.Route.Count <= 2)
                {
                    continue;
                }

                ColumnPool.Add(path);
                //create obj function
                INumVar x = RMP.NumVar(0, 1, NumVarType.Float);
                DvarSet.Add(x);
                obj_expr = RMP.Sum(obj_expr, RMP.Prod(path.Cost_with_penalty, x));

                CoverMatrix.Add(path.CoverAaray);
            }
            RMP.AddObjective(ObjectiveSense.Minimize, obj_expr);
            //s.t
            for (int i = 0; i < num_task; i++)
            {
                INumExpr ct = RMP.NumExpr();
                for (int j = 0; j < DvarSet.Count; j++)
                {
                    ct = RMP.Sum(ct,
                                 RMP.Prod(CoverMatrix[j][i], DvarSet[j]));
                }
                constraints[i] = RMP.AddGe(ct, 1);
            }
        }
Пример #2
0
        /// <summary>
        /// Sets the objective function.
        /// </summary>
        /// <param name="expression">The objective function.</param>
        /// <param name="sense">The sense (optimization direction) of the objective function.</param>
        public void SetObjective(LinearExpression expression, OptimizationSense sense)
        {
            switch (Type)
            {
            case SolverType.CPLEX: CplexModel.AddObjective((sense == OptimizationSense.Minimize) ? ObjectiveSense.Minimize : ObjectiveSense.Maximize, expression.Expression); break;

            case SolverType.Gurobi: GurobiModel.SetObjective(expression.Expression, (sense == OptimizationSense.Minimize) ? GRB.MINIMIZE : GRB.MAXIMIZE); break;

            default: throw new ArgumentException("Unknown solver type: " + Type);
            }
        }