首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量作为索引?CPLEX

变量作为索引?CPLEX
EN

Stack Overflow用户
提问于 2019-04-28 20:31:18
回答 1查看 363关注 0票数 0

我想在java中使用CPLEX找到最短路径。为此,我有一个矩阵,其中包含以下所有过渡成本:

代码语言:javascript
复制
M= c(1->1) c(1->2) c(1->3) c(1->4)
   c(2->1) c(2->2) c(2->3) c(2->4)
   c(3->1) c(3->2) c(3->3) c(3->4)
   c(4->1) c(4->2) c(4->3) c(4->4)

我定义了一个向量(变量)来计算路径。在约束中,我设置X(0)=1和X(4)=4,以告知我希望从位置1开始并在位置4结束,如下所示:

代码语言:javascript
复制
int[][] M = {{0, 2, 3, 40},
             {2, 0, 3, 2},
             {1, 5, 0, 2},
             {2, 4, 5, 0}};

IloCplex cplex = new IloCplex();

// Variable
IloNumVar[] routingVar = new IloNumVar[4];

for(int i = 0; i < 4; i++)
  routingVar[i] = cplex.intVar(1, 4);

// Objective
IloLinearNumExpr objective = cplex.linearNumExpr();

/* THIS IS WRONG -- Start*/

for(int i = 1; i < 4; i++)
  objective.addTerm(routingVar[i], M[routingVar[i-1]][routingVar[i]]);

/* THIS IS WRONG -- End*/

cplex.addMinimize(objective);

// Constraints
cplex.addEq(routingVar[0], 1);
cplex.addEq(routingVar[3], 4);

cplex.solve();

据我所知,CPLEX不允许使用变量作为索引。那么,如何定义成本函数呢?有什么解决办法的建议吗?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2019-04-30 17:17:23

Sascha是对的,有比混合整数规划更适合的算法来解决最短路径问题……

但是,如果您真的想使用CPLEX,则需要使用indicator constraints或big-M公式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55890269

复制
相关文章

相似问题

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