在cplex c ++ Concert中删除模型中的约束

时间:2016-02-10 05:43:30

标签: c++ cplex

我有一个约束集

for(int t = 0; t < NbPeriods; t++){
    for (int j =0; j < NbLocations; j++){
        IloExpr Ct1(env);
        for(int u = 0; u < t; u++){
            Ct1 += Fortified[u][j];
        }
        model.add(Interdicted[t][j] <= 1 - Ct1); 
    } 
}​

经过一些修改后,我必须从模型中删除此约束集。 model.remove()无效。在这种情况下,如何使用IloRangeArray protection(env)来完成此操作。

1 个答案:

答案 0 :(得分:1)

在添加到模型并保存到容器(例如,IloConstraint)之前,您需要通过IloConstraintArray定义约束。 Cplex通过名称而不是表达式从模型中删除约束。在你的情况下,

IloConstraintArray cons_array(env);
for(int t = 0; t < NbPeriods; t++){
    for (int j =0; j < NbLocations; j++){
        IloExpr Ct1(env);
        for(int u = 0; u < t; u++){
            Ct1 += Fortified[u][j];
        }
        IloConstraint cons = Interdicted[t][j] <= 1 - Ct1;
        model.add(cons); 
        cons_array.add(cons);
    } 
}​

删除

for (int i = 0; i < NbPeriods*NbLocations; i++)
     model.remove( cons_array[i] );

您还可以使用cplex.exportModel("model.lp")在添加和删除约束后将模型导出到文件,并检查是否删除了约束