首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cplex在java中定义二元决策变量

使用cplex在java中定义二元决策变量
EN

Stack Overflow用户
提问于 2016-07-27 02:46:51
回答 2查看 1.1K关注 0票数 0

我正在尝试使用cplex在java中定义一个二元决策变量。这是一个二维变量。这意味着如果路径从特定站点开始,它应该为1,否则为0。我有一组桩号J和一组路径K,我的决策变量是Z_jk。目前,我正在定义如下代码,但它不起作用。有谁能帮帮我吗?

提前谢谢。

代码语言:javascript
复制
// 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);  
                    }   
                }
EN

回答 2

Stack Overflow用户

发布于 2016-07-27 14:57:41

您正在尝试创建一个二进制决策变量的二维数组。你得到了什么错误?

尝试查看随CPLEX提供的一些示例代码。以transport.java为例,它包含了一些变量的二维数组,声明和初始化如下:

代码语言:javascript
复制
    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);
    } 
票数 1
EN

Stack Overflow用户

发布于 2020-08-10 10:48:06

对于二元决策变量,您可能更喜欢使用IloBoolVar而不是IloNumVar甚至IloIntVar选项。

但是,您确实需要通过以下两种方式之一来声明维度。您已经声明了new IloNumVar[stations_start.size()][];,但没有指定第二个维度。最简单的方法是声明:

代码语言:javascript
复制
z = new IloBoolVar[stations_start.size()][paths.size()];

或者,您可以保留现有的声明,但在循环中添加第二个维度:

代码语言:javascript
复制
z = new IloBoolVar[stations_start.size()][];
for (int j=0; j<stations_start.size(); j++) {
    z[j] = new IloBoolVar[paths.size()];
    ... existing assignments ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38597664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档