微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们如何使用 Python 中的 ILOG CP 优化器将决策变量用作另一个决策变量的索引?

如何解决我们如何使用 Python 中的 ILOG CP 优化器将决策变量用作另一个决策变量的索引?

我正在使用 CP 对车辆路线和调度问题进行建模。我有2种决策变量,即每个节点的排序和开始时间。

排序变量包含节点号,每个节点的开始时间取决于它经过的顺序。因此,我需要使用排序变量作为开始时间变量的索引。

但是我遇到了这个错误

 <docplex.cp.expression.CpoIntvar object at 0x0000022A9E070C70>

这就是我编写代码的方式:

x={d:sub.integer_var_list(n[d],len(I)-1,"X") for d in D}
start={d:{i:sub.interval_var(start=[t[0][i],T-p[i,d]-t[i][len(I)-1]],size=p[i,d]) for i in C[d]} for d in D}

sub.add(sub.sum(sub.end_of(start[d][x[d][n[d]-2]]),t[x[d][n[d]-2]][x[d][n[d]-1]])<=T)

感谢您在这方面帮助我

解决方法

在约束规划中使用决策变量的索引操作可以使用 element 全局约束来实现。可以在此处找到 CP Optimiser 的 Python 接口中 element 约束的文档:https://ibmdecisionoptimization.github.io/docplex-doc/cp/docplex.cp.modeler.py.html#docplex.cp.modeler.element

这意味着您应该写 y = x[i] 而不是 i,其中 y = model.element(x,i) 是一个变量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。