我想使用列明智的方法在列生成框架中对我的问题进行建模。 IBM本身提供了一个具有两个约束和三个变量的简单示例(请在下面找到示例)。在此示例中,首先创建范围约束,然后创建变量并将其添加到范围。
我的问题是,假设我们有m个变量和n个约束,如何以参数方式编写这样的模型?我需要以参数方式编写此模型,因为我的模型中可能有很多约束和变量,并且无法像Cplex示例中所述简单地创建变量。
要添加在相关约束条件下使用的变量的系数,我尝试了以下命令。但这没有解决。
IloNumArray lowerbound(env,0 , 0, ILOINT);
IloNumArray upperbound(env,1,1, ILOINT);
IloRangeArray JobsAssignments = IloAdd(MasterModel, IloRangeArray(env, lowerbound, upperbound));
IloNumVarArray Assignment(env);
IloNumVarArray temp(env);
for (j = 0; j < nbJobs; j++)
{
temp.add(JobsAssignments[j](x));//assigning a coefficient to the variable "JobsAssignments" for each constraint j
}
Assignment.add(IloNumVar(TotalProfit(x) + temp));//assignment constraint
IBM在Cplex目录中提供的示例:
IloEnv env = model.getEnv();
IloObjective obj = IloMaximize(env);
c.add(IloRange(env, -IloInfinity, 20.0, "constraint 1"));
c.add(IloRange(env, -IloInfinity, 30.0, "constraint 2"));
x.add(IloNumVar(obj(1.0) + c[0](-1.0) + c[1]( 1.0), 0.0, 40.0));
x.add(IloNumVar(obj(2.0) + c[0]( 1.0) + c[1](-3.0)));
x.add(IloNumVar(obj(3.0) + c[0]( 1.0) + c[1]( 1.0)));
x[0].setName("x1");
x[1].setName("x2");
x[2].setName("x3");
model.add(obj);
model.add(c);
答案 0 :(得分:1)
将我的评论变成答案:CPLEX附带的cutstock.cpp
示例展示了一种更为精细的列建模方法。特别是,它显示了具有许多行/列的建模,这些行/列不是预定义的,而是取决于输入。希望该示例回答您的问题。