Cplex C ++添加变量列(cutstock)

时间:2015-12-27 09:03:55

标签: c++ mathematical-optimization cplex

我正在尝试使用列生成解决切割库存问题。 Cplex(c ++)有一个很好的例子,每个模式填充一个股票。我正在努力扩展它,以便不止一种模式可以填补一块股票。

Latex for what I'm going for.

Latex for what I've got now.

示例中的相关代码段是以下列表达式:

IloModel masterPr(env);

    IloObjective   SheetsUsed = IloAdd(masterPr, IloMinimize(env));
    IloRangeArray  demandArray = IloAdd(masterPr,
        IloRangeArray(env, demand, IloInfinity));
    IloNumVarArray Patterns(env);

//GENERATE pattern SOMEHOW

  Patterns.add(IloNumVar(SheetsUsed(1) + demandArray(pattern));

其中Pattern是使用完整“Sheet”表示模式的所有列。需求数组是需求矩阵,其中模式表示此模式中每个项目的数量。我怎样才能将新变量x列化为明智,因此我可以在工作表上放置多个模式?

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您需要了解如何在ILOG Concert C ++ for CPLEX中进行列式建模。在您给出的示例中,声明

Patterns.add(IloNumVar(SheetsUsed(1) + demandArray(pattern));

正在添加一个目标函数系数为1的决策变量,该变量将出现在名为demandArray[i]的约束中,其系数等于pattern[i]的值。您需要做的是针对每种模式,做一些事情:

  1. 添加多个决策变量(LaTeX配方中的x)以对应表格。
  2. 当您将决策变量添加到x数组时,它将在您需要创建的一些其他约束中具有非零值,类似于demandArray的创建方式。
  3. 添加工作表时,您必须在Patterns变量中添加一个变量,与LaTeX中的y相对应。
  4. 这并不容易,主要是因为我们所有人都习惯于逐行建模而不是逐列建模。