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

如何在Or-tools中对变量进行排序?

如何解决如何在Or-tools中对变量进行排序?

我正在使用 or-tools 来解决 CP 问题。求解器给出了一个可行的解决方案,如下所示。这意味着:

 X1=345,X2=437,...,X6=1150,X7=716,X8=788...etc.

random_list=[345,437,801,981,1068,1150,716,788,860,982,1069,1151,717,789,861,944,1026,1152,718,790,862,984,1071,1153,719,791,863,985,1072,1154,354,436,622,1073,1155]

The adjacent elements' gap ranged from -880 to 364.

实际上我想获得如下排序的变量并将约束设置为相邻元素的间隙。例如,间隙应在 10 到 50 之间。那么这样设置约束是否可行?

order_list=[345,1155]

X1=345,X30=354,X31=436,.... # the variables are not in order as deFinition. 

The adjacent elements' gap ranged from 1 to 185.

谢谢。

解决方法

遵循斯特拉迪瓦里的建议,

我会使用电路约束。

从一个虚拟节点开始。从虚拟节点向每个 var 添加一个弧。 在 xi 和 xj 之间添加一条弧线,如果 xj 大于 xi 并且有正确的间隙。 从每个节点到虚拟节点添加一条弧线。 寻找可行的解决方案。

如果要计算秩,使用初始弧将到达的var的秩设置为0。使用每个弧将头部的秩设置为尾部的秩+1。

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