Concert技术中的列明智建模-列生成

时间:2019-05-19 22:15:49

标签: c++ visual-studio cplex

我想使用列明智的方法在列生成框架中对我的问题进行建模。 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);

1 个答案:

答案 0 :(得分:1)

将我的评论变成答案:CPLEX附带的cutstock.cpp示例展示了一种更为精细的列建模方法。特别是,它显示了具有许多行/列的建模,这些行/列不是预定义的,而是取决于输入。希望该示例回答您的问题。