通过列生成方法解决问题时,是否可以仅将唯一列添加到元组中?

时间:2019-04-05 23:14:49

标签: cplex opl

仅在元组中添加唯一列。

在解决子问题并使用解决方案池后,我试图在列生成中将列添加到元组中。我看到在我的问题中,同一列被多次添加。有没有一种方法只能在数据(或元组)中添加唯一列? 我已经从削减库存问题中获取了代码。有人可以解释一下我在这段代码中进行编辑吗?

writeln("Solve sub.");
  if ( subCplex.solve() &&
       subCplex.getObjValue() <= -RC_EPS) {
    writeln();
    writeln("SUB OBJECTIVE: ",subCplex.getObjValue());
masterData.Patterns.add(masterData.Patterns.size+1, subOpl.Select.solutionValue;
  } else {
    writeln("No new good pattern, stop.");

subCplex.solnPoolIntensity = 3; 
find larger no. of solutions

subCplex.populate();
var nsolns = subCplex.solnPoolNsolns;
for (var v = 1; v<=nsolns; v++) {
    subOpl.setPoolSolution(v);

    if(subCplex.getObjValue(v) <= -1.0e-10) {       
    masterData.Patterns.add(masterData.Patterns.size+1,subOpl.Select.solutionValue;
  }  

}

 masterData.Patterns.add(masterData.Patterns.size,1,subOpl.Use.solutionValue);
  masterOpl = new IloOplModel(masterDef,masterCplex);
  masterOpl.addDataSource(masterData);
  masterOpl.generate();
  // End sub model
     subData.end();
  subOpl.end();      

}

1 个答案:

答案 0 :(得分:2)

CPLEX没有执行此操作的功能。您需要自己创建一个数据结构来存储所有输入列,并验证它们是否重复。 – Iago Carvalho