SeleneH 发表于 2014-8-21 22:30

lingo求问

lingo如何限制条件使@SUM等于0或者2:
我是这么写的:@for(sender(i):(@sum(receiver(j):x(i,j))-2 )* @sum(receiver(j):x(i,j)));
但编译错误了..求大侠指导

madio 发表于 2014-8-22 10:15

你这个是一个互补约束,要乘起来大于等于零吧,你没有右端的项

SeleneH 发表于 2014-8-22 15:32

madio 发表于 2014-8-22 10:15 static/image/common/back.gif
你这个是一个互补约束,要乘起来大于等于零吧,你没有右端的项
再请教一下:
sets:
!sender:始发点;
sender/1..6/;
!receiver:接受地点;
receiver/1..6/;
!time:消耗时间;
link(sender,receiver):time,x;
endsets
!目标函数;
min=@sum(link:time*x)/27;
!约束条件;
@for(link:@bin(x));
@for(receiver(j):@sum(sender(i):x(i,j))=1);
@for(sender(i):@sum(receiver(j):x(i,j))=2#or#@sum(receiver(j):x(i,j))=0);
data:
time=
5 64 36 77 35 32
40 8 18 99 56 32
60 144 4.5 66 21 8
80 112 12 5.5 56 24
90 128 30 22 7 4
80 144 12 66 7 4;

!probability:5/27 8/27 3/27 5.5/27 3.5/27 2/27;
enddata

应该怎么改呢?运行错误显示是说等式关系太多。

madio 发表于 2014-8-23 09:14

sets:
!sender:始发点;
sender/1..6/;
!receiver:接受地点;
receiver/1..6/;
!time:消耗时间;
link(sender,receiver):time,x;
endsets
!目标函数;
min=@sum(link:time*x)/27;
!约束条件;
@for(link:@bin(x));
@for(receiver(j):@sum(sender(i):x(i,j))=1);
@for(sender(i):(@sum(receiver(j):x(i,j))-2)*@sum(receiver(j):x(i,j))=0);
data:
time=
5 64 36 77 35 32
40 8 18 99 56 32
60 144 4.5 66 21 8
80 112 12 5.5 56 24
90 128 30 22 7 4
80 144 12 66 7 4;

!probability:5/27 8/27 3/27 5.5/27 3.5/27 2/27;
enddata
页: [1]
查看完整版本: lingo求问