我打算进行一个优化,在这个优化中,我希望最大化系统中的流量,使其受到一些时间约束和一些“必须满足这些路线”约束。第一个时间限制规定,每辆车不得超过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文件不再自动超出时间约束限制,仍然会给我同样的错误(虽然更小,但现在上限是-1,而不是-76)。
我希望有人能解释一下
提前感谢坚德泽
当i=j时,i和j之间的旅行时间非常大(因此程序不会选择这些路线)
如果行程时间[i,j]=M(非常大),则
i=j的开始时间
servicetime[i] + M - 1300 * (1 - x[i,j,k]) <= 0 <=>
1300 * x[i,j,k] <= 1300 - servicetime[i] - M
因此,无论何时
我建议用
I为所有对定义
(I,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 ==========================
我希望这有帮助!
null 我使用的是Protege 5.0.0、Reasoner Hermit 1.3.8和OWL API 5.0.5(尽管不同的Reasoner获得了相同的结果:Fact++、Pellet;以及不同的OWL API和Protege版本:4.x) 我会很高兴有任何评论,即使是一个简单的解释也会对我有很大帮助。
问题内容: 什么会导致套接字命令出错?套接字设置为。它在大多数时间都有效,但偶尔会出现此错误。插槽的接收端似乎工作正常。 我知道这不是很详细,但我只是在寻找一般想法。谢谢! 问题答案: 是与相对应的错误消息,这意味着该操作将被阻止,但请求了非阻止操作。对于,这可能是由于以下原因之一: 显式地将文件描述符标记为非阻塞;要么 将旗帜传递给; 要么 使用套接字选项设置发送超时。
我一直在尝试编写一个程序来实现任意域上的多项式,一种数学结构。我选择了Haskell作为编程语言,我使用了语言扩展。但是,我不明白为什么GHCi不能推导出的约束条件。 在我看来,保证是的实例,这意味着是的实例。所以调用就像调用一样,应该是合理的。此外,我已经编写了作为约束,并且的构造函数具有的形状,因此它还应该知道的类型是的实例。 显然,译员的想法不同。我哪里搞错了?
如果需要生成一个长度为 3、内容为 0 的列表,可以使用如下的代码来完成这项任务: list = [0, 0, 0] 如果需要生成一个长度为 100、内容为 0 的列表,使用如上的方式完成,需要在括号中书写 100 个 0,既繁琐又容易出错,显然是不合适的。可以使用动态的方式完成这项任务: list = [] for i in range(100): list.append(0) 在第
本文向大家介绍php在linux中可能用到的命令(推荐),包括了php在linux中可能用到的命令(推荐)的使用技巧和注意事项,需要的朋友参考一下 如下所示: php -i | grep php.ini 查找php.ini的位置 php-cgi -b 127.0.0.1:9000 & 查看php-cgi进程 以上这篇php在linux中可能用到的命令(推荐)就是小编分享给大家的全部内容了,
我无法推到音频列表。重要提示:我不想将listOf更改为mutableListOf 虽然音频不是空的,但这不起作用。当我记录音频时,它给了我一个有数据的类,所以这不是问题所在。