feasopt_c + + . cpp


feasopt_c + + . cpp


*/ /*这个例子从一个文件中读取一个狗万app足彩MIP模型,为每个约束添加人工变量,然后最小化人工变量的总和。目标为零的解对应于输入模型的可行解。我们也可以使用FeasRelax功能来实现。在这个例子中,我们使用minrelax=1,即优化返回的模型找到一个使原始目标最小化的解决方案,但只从那些使人工变量之和最小化的解决方案中。*/ #include "gurobi_c++.h" using namespace std;int main(int argc, char *argv[]) {if (argc < 2) {cout << "Usage: feasopt_c++ filename" << endl;返回1;} GRBEnv* env = 0;GRBConstr* c = 0;try {env = new GRBEnv(); GRBModel feasmodel = GRBModel(*env, argv[1]); // Create a copy to use FeasRelax feature later */ GRBModel feasmodel1 = GRBModel(feasmodel); // clear objective feasmodel.setObjective(GRBLinExpr(0.0)); // add slack variables c = feasmodel.getConstrs(); for (int i = 0; i < feasmodel.get(GRB_IntAttr_NumConstrs); ++i) { char sense = c[i].get(GRB_CharAttr_Sense); if (sense != '>') { double coef = -1.0; feasmodel.addVar(0.0, GRB_INFINITY, 1.0, GRB_CONTINUOUS, 1, &c[i], &coef, "ArtN_" + c[i].get(GRB_StringAttr_ConstrName)); } if (sense != '<') { double coef = 1.0; feasmodel.addVar(0.0, GRB_INFINITY, 1.0, GRB_CONTINUOUS, 1, &c[i], &coef, "ArtP_" + c[i].get(GRB_StringAttr_ConstrName)); } } // optimize modified model feasmodel.optimize(); feasmodel.write("feasopt.lp"); // use FeasRelax feature */ feasmodel1.feasRelax(GRB_FEASRELAX_LINEAR, true, false, true); feasmodel1.write("feasopt1.lp"); feasmodel1.optimize(); } catch (GRBException e) { cout << "Error code = " << e.getErrorCode() << endl; cout << e.getMessage() << endl; } catch (...) { cout << "Error during optimization" << endl; } delete[] c; delete env; return 0; }