如果不是,为什么所有变量都显示为零?

时间:2018-03-15 17:24:23

标签: variables cout cplex

我在打印变量x的正确值时遇到问题。

我正在尝试使用cplex来解决模型问题。我正在使用c / c ++。

我得到了变量的值,如我所描述的:Problems with function getValue(s) cplex c++

当我写下面的行时:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (w[i][j] != 0) {
            for (int k = 0; k < n; k++) {
                for (int m = 0; m < n; m++) {
                    if ( (k != m && k != j && m != i) or (k == m) ) {
                        mono.cplex.getValue(mono.x[i][j][k][m],mono._x[i][j][k][m]); 
                        cout << "x["<<i+1<<"]["<<j+1<<"]["<<k+1<<"]["<<m+1<<"] = " << mono._x[i][j][k][m] << endl;
                    }
                }
            }
        }
    }
}

所有变量x都显示为零。

由于我有以下约束,所以不可能。

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (w[i][j] != 0) { 
            IloExpr r_1a(env);
            for (int k = 0; k < n; k++) {
                for (int m = 0; m < n; m++) {
                    if (k != m && k != j && m != i) {
                        r_1a += mono.x[i][j][k][m];
                    }
                    if (k == m) {
                        r_1a += mono.x[i][j][k][m];
                    }
                }
            }
            IloRange ctr;
            ctr = (1 <= r_1a <= 1);
            mono.constraints.add(ctr);
            r_1a.end();
        }
    }
}

当我将模型导出到lp文件时,我可以调用cplex来直接解析模型(使用命令读取文件并优化文件)。然后,我可以要求x值,我看到,正如预期的那样,一些x变量等于1.

为什么会这样?

1 个答案:

答案 0 :(得分:0)

您似乎对如何使用getValue方法感到困惑(请参阅文档here)。它返回一个IloNum,您实际上是通过以下语句将其丢弃:

mono.cplex.getValue(mono.x[i][j][k][m],mono._x[i][j][k][m]);

第二个参数应该是一个解决方案池索引(它是可选的)。

您可能想做的事情如下:

mono._x[i][j][k][m] = mono.cplex.getValue(mono.x[i][j][k][m]);

或者,您可以使用getValues方法查询批量解决方案值。也许这就是你打算做的,但忘了键入“s”(即你输入getValue代替getValues)?

最后,请查看integer values, integrality tolerance, and round-off上的文档。

相关问题