1. 程式人生 > >CPLEX 解決大規模計算 變數 約束 新增方法

CPLEX 解決大規模計算 變數 約束 新增方法

 //新增變數思路
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);
	
}