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); } }
/// <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); } }