我正在尝试使用cplex在java中定义一个二元决策变量。这是一个二维变量。这意味着如果路径从特定站点开始,它应该为1,否则为0。我有一组桩号J和一组路径K,我的决策变量是Z_jk。目前,我正在定义如下代码,但它不起作用。有谁能帮帮我吗?
提前谢谢。
// define variables
z = new IloNumVar[stations_start.size()][];
for (int j=0; j<stations_start.size();j++) {
z[j] = cplex.numVarArray(paths.size(),0,1);
for (int k=0;k<paths.size();k++) {
z[j][k] = cplex.numVar(new_column, 0, 1,"z");
z[j][k].setName("z."+j+"."+k);
}
}发布于 2016-07-27 14:57:41
您正在尝试创建一个二进制决策变量的二维数组。你得到了什么错误?
尝试查看随CPLEX提供的一些示例代码。以transport.java为例,它包含了一些变量的二维数组,声明和初始化如下:
IloNumVar[][] x = new IloNumVar[nbSupply][];
IloNumVar[][] y = new IloNumVar[nbSupply][];
for (int i = 0; i < nbSupply; i++) {
x[i] = cplex.numVarArray(nbDemand, 0., Double.MAX_VALUE);
y[i] = cplex.numVarArray(nbDemand, 0., Double.MAX_VALUE);
} 发布于 2020-08-10 10:48:06
对于二元决策变量,您可能更喜欢使用IloBoolVar而不是IloNumVar甚至IloIntVar选项。
但是,您确实需要通过以下两种方式之一来声明维度。您已经声明了new IloNumVar[stations_start.size()][];,但没有指定第二个维度。最简单的方法是声明:
z = new IloBoolVar[stations_start.size()][paths.size()];或者,您可以保留现有的声明,但在循环中添加第二个维度:
z = new IloBoolVar[stations_start.size()][];
for (int j=0; j<stations_start.size(); j++) {
z[j] = new IloBoolVar[paths.size()];
... existing assignments ...
}https://stackoverflow.com/questions/38597664
复制相似问题