feasopt_c + + . cpp


/ * 2023年版权,Gurobi优狗万app足彩化,LLC * / / *这个例子从文件读取MIP模型,增加了每个约束的人工变量,然后最小化人工变量的总和。解决方案与目标零输入模型对应于一个可行的解决方案。我们也可以使用FeasRelax特性。在这个例子中,我们使用minrelax = 1,即优化模型找到了一个解决方案,最大限度地减少返回原来的目标,但只从那些解决方案,最大限度地减少人工变量的总和。* / # include“gurobi_c + +。使用名称空间std h”;int主要(int命令行参数个数,char * argv[]){如果(命令行参数个数< 2){cout < <“用法:feasopt_c + +文件名”< < endl;返回1;}GRBEnv * env = 0;GRBConstr * c = 0;尝试{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; }