AMPL中不可能的推论上限

Cenderze

我打算进行优化,在此过程中,我希望在受到某些时间限制和某些“必须满足这些路线”约束的情况下最大化系统中的流量。首次时间限制规定,每辆车的工作量不得超过24小时(以分钟表示)。第二个时间约束是子行程消除约束,该约束还指出,“访问”节点上的开始时间无法在车辆有时间行驶之前被激活,等等。约束3描述了K1和N1之间的路段不得超过9条次,使用任何车辆k。最后一个约束指出,来自特定节点的所有车辆都必须在一天结束时返回。

 maximize maxamount: sum{i in V, j in V, k in K} x[i,j,k];

 subject to TimeConstraint {k in K}: 
     sum{i in V, j in V} traveltime[i,j]*x[i,j,k] <= 1440; 

 subject to StartTime{i in V,j in V, k in K}:
     starttime[i] + servicetime[i] +traveltime[i,j] - 1300 * (1 - x[i,j,k]) <= starttime[j];

 subject to Constraint3:
     sum{k in K} x["K1","N1",k] <= 9;

 subject to EndNode{k in K}: 
     sum{i in V}x[i,"K1",k] - sum{j in V} x["K1",j,k]= 0;

Constraint3和EndNode具有多个相同类型的约束(仅对于其他“预定义位置”,例如K1和N2之间的道路不能超过4次访问,依此类推)。

我的问题是,我得到了错误不可能演绎边界x [K1,K1,1]的下限= 0,上限= -76,我知道这是由冲突约束引起的。但是我的问题是:如何?使用几乎排他的二进制变量,我看不到上面的代码为什么不起作用。我是否误解了我在模型中实际上正在做什么?

我注意到编译器仅在i = j时抱怨,所以我检查了.dat文件,并注意到当i = j很大时,i和j之间的行程时间(因此程序将不会选择那些路线)。但是,将.dat文件编辑为不再自动超过TimeConstraints限制仍然会给我同样的错误(虽然会减少,但现在的上限是-1而不是-76)。

我希望有人可以对此有所了解

在此先感谢Cenderze

约阿尼斯

当i = j很大时,i和j之间的旅行时间(因此程序将不会选择那些路线)

如果traveltime[i,j]= M(非常大),则StartTime用于i=j读取

servicetime[i] + M - 1300 * (1 - x[i,j,k]) <= 0     <=>
1300 * x[i,j,k] <= 1300 - servicetime[i] - M

因此,无论何时M > 1300 - servicetime[i],问题都是不可行的。

我建议或(如果问题是对称的)用定义X所有对变量(i,j)i<>ji < j

从评论中跟进

将以下代码片段插入AMPL在线编辑器后,效果很好

param n := 10;
set N:= 1..n;
set V := {i in N, j in N: i <> j};
display V;

输出:

set V :=
(1,2)    (2,3)    (3,4)    (4,5)    (5,6)    (6,7)    (7,8)    (8,9)    (9,10)
(1,3)    (2,4)    (3,5)    (4,6)    (5,7)    (6,8)    (7,9)    (8,10)   (10,1)
(1,4)    (2,5)    (3,6)    (4,7)    (5,8)    (6,9)    (7,10)   (9,1)    (10,2)
(1,5)    (2,6)    (3,7)    (4,8)    (5,9)    (6,10)   (8,1)    (9,2)    (10,3)
(1,6)    (2,7)    (3,8)    (4,9)    (5,10)   (7,1)    (8,2)    (9,3)    (10,4)
(1,7)    (2,8)    (3,9)    (4,10)   (6,1)    (7,2)    (8,3)    (9,4)    (10,5)
(1,8)    (2,9)    (3,10)   (5,1)    (6,2)    (7,3)    (8,4)    (9,5)    (10,6)
(1,9)    (2,10)   (4,1)    (5,2)    (6,3)    (7,4)    (8,5)    (9,6)    (10,7)
(1,10)   (3,1)    (4,2)    (5,3)    (6,4)    (7,5)    (8,6)    (9,7)    (10,8)
(2,1)    (3,2)    (4,3)    (5,4)    (6,5)    (7,6)    (8,7)    (9,8)    (10,9);
== 1 ==========================

将您的代码段更改为

set N = {'K1', 'K2','K3','K4'};
set V := {i in N, j in N: i != j};
display V

放手一搏。我得到:

set V :=
(K1,K2)   (K1,K4)   (K2,K3)   (K3,K1)   (K3,K4)   (K4,K2)
(K1,K3)   (K2,K1)   (K2,K4)   (K3,K2)   (K4,K1)   (K4,K3);
== 1 ==========================

我希望这有帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C链表中不可能的结果

来自分类Dev

了解“不可能”

来自分类Dev

不可能的NullPointerException

来自分类Dev

在Python中删除数据中不可能的值

来自分类Dev

Node.js中的无限循环是不可能的吗?

来自分类Dev

在C#泛型中这是不可能的吗?

来自分类Dev

ABAP中本地接口的相互引用不可能?

来自分类Dev

在React Native中运行mount()不可能吗?

来自分类Dev

为什么在C中不可能重载?

来自分类Dev

为什么在Haskell中不可能分割整数?

来自分类Python

减少Python中的循环是不可能的吗?

来自分类Java

您如何处理Java中的“不可能”异常?

来自分类Java

堆转储中不可能的Java内存引用

来自分类Dev

Lambda表达式中的不可能值

来自分类Dev

是否不可能在订阅中捕获错误?

来自分类Dev

DS中的Ember设置数组->不可能吗?

来自分类Dev

不可能在硒中定位元素

来自分类Dev

获取在 django 中不可能发生的 http 响应

来自分类Dev

Tkinter标签中的不可能更改文本

来自分类Dev

在 int 子类中重写 int 值是不可能的?

来自分类Dev

在导轨中组装多个模型的关系-不可能吗?

来自分类Dev

在ListFragment中创建自定义ListView是不可能的

来自分类Dev

编译时在asm中不可能的约束

来自分类Dev

Redux-使不可能的状态变为不可能

来自分类Dev

逆矩阵不可能

来自分类Dev

消除不可能的选择

来自分类Dev

REST 用户不可能?

来自分类Mysql

MySQL ...不可能的查询?

来自分类Dev

不可能合并分支