Cplex C++按列添加变量(库存)

Cplex C++ add variable column wise (cutstock)

本文关键字:库存 变量 添加 C++ Cplex      更新时间:2023-10-16

我正在尝试使用列生成来解决切割库存问题。Cplex(c++)有一个很好的例子,其中每个模式填充一块股票。我正试图扩大这一范围,这样一只股票就可以有多个图案。

乳胶是我想要的。

我现在用的是乳胶。

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

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));

其中Patterns是使用完整的"Sheet"表示模式的所有列。需求数组是需求矩阵,其模式表示此模式中每个项目的数量。我如何才能按列制作新的变量x,这样我就可以在一张纸上放置多个图案?

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

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

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

  1. 添加多个决策变量(LaTeX公式中的x)以与表格相对应
  2. 当您将决策变量添加到x数组时,它将在您需要创建的一些附加约束中具有非零,类似于demandArray的创建方式
  3. 添加图纸时,必须在Patterns变量中添加一个变量,该变量对应于LaTeX中的y

这并不容易做到,主要是因为我们都习惯于行建模,而不是列建模。