CPLEX 解決大規模計算 變數 約束 新增方法
阿新 • • 發佈:2019-01-05
//新增變數思路 add_var_XX(IloModel f_model, IloNumVarArray f_var, IloRangeArray f_cons, data_input *f_data); //新增變數 { //獲取環境 IloEnv f_env = f_model.getEnv(); //向環境中新增變數 //IloNumVar(const IloEnv env, IloNum lb=0, IloNum ub=IloInfinity, IloNumVar::Type type=Float, const char * name=0) f_var.add(IloNumVar(f_env, lp, up, ILOFLOAT)); //統計當前變數位置,採用分段陣列,統計位置,個數一個意思 num_cal(XX, current_num, start_index, m_var_num); } //新增約束條件思路 add_con_dtm_powerbalance(IloModel f_model, IloNumVarArray f_var, IloRangeArray f_cons, data_input *f_data); { //獲取環境變數 IloEnv f_env = f_model.getEnv(); //此處往往需要統計出變數個數,方便下一步的新增 //定義表示式 IloExpr f_expr1(f_env); //表示式的表述 for (index_j = 0; index_j < _num; index_j++) { f_expr1 += f_var[i];//從變數中提取 } //範圍 //IloRange(const IloEnv env, IloNum lhs, const IloNumExprArg expr, IloNum rhs=IloInfinity, const char * name=0) IloRange temp_range1(f_env, lp, f_expr1, up); //新增約束 f_cons.add(temp_range1); //模型新增約束 f_model.add(f_cons); }
//定義cplex 物件 IloCplex cplex(env); //set_cplex_parameters(cplex, ptrdata); //gen_callback_cuts(env, cplex, var, ptrdata, ptrluc); //向cplex 物件中新增模型 cplex.extract(mip_model); //cplex 呼叫求解函式 cplex.solve(); //獲得結果 IloNumArray vals(env); cplex.getValues(vals, var); void set_cplex_parameters(IloCplex f_cplex, data_input *f_data) { // setting parameters f_cplex.setParam(IloCplex::EpGap, ii); f_cplex.setParam(IloCplex::EpInt, ii); f_cplex.setParam(IloCplex::TiLim, ii); f_cplex.setParam(IloCplex::AggInd, 0); f_cplex.setParam(IloCplex::AggInd, 0); f_cplex.setParam(IloCplex::Threads, 1); f_cplex.setParam(IloCplex::MIPSearch, IloCplex::Traditional); }