我正在尝试使用列生成解决切割库存问题。 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));
其中Pattern是使用完整“Sheet”表示模式的所有列。需求数组是需求矩阵,其中模式表示此模式中每个项目的数量。我怎样才能将新变量x列化为明智,因此我可以在工作表上放置多个模式?
答案 0 :(得分:0)
我认为您的问题是您需要了解如何在ILOG Concert C ++ for CPLEX中进行列式建模。在您给出的示例中,声明
Patterns.add(IloNumVar(SheetsUsed(1) + demandArray(pattern));
正在添加一个目标函数系数为1的决策变量,该变量将出现在名为demandArray[i]
的约束中,其系数等于pattern[i]
的值。您需要做的是针对每种模式,做一些事情:
x
)以对应表格。x
数组时,它将在您需要创建的一些其他约束中具有非零值,类似于demandArray
的创建方式。Patterns
变量中添加一个变量,与LaTeX中的y
相对应。这并不容易,主要是因为我们所有人都习惯于逐行建模而不是逐列建模。