lingo如何表达i-j=1的集合
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/08 18:45:36
sets:r/1..5/:;c/1..3/:;link(r,c):x,d;endsetsdata:!d=;!d表示系数,根据实际填写;enddatasum=@sum(link(i,j):d(i,j)*
定义一个派生集link如下,其中x即可表示为一个矩阵sets:r/1..5/:;c/1..5/:;h/1..5/:;link(r,c,h):x;endsets
你要说具体问题不知道你这个i是干什么的再问:条件中:7Σxij=yj+zj (j=1...21,j≠9,11,17)i=1像这样的,谢了再答:@for(set2(j)|j#ne#9#and#j#ne#
如果是i=j时,a=1;不等时,a=0,这个就要a=@if(i#eq#j,1,0);你写的这个不好写,不过你跟我说一下你真实遇到的问题我应该能给你想出来.再问:再答:不等号那个式子是错的,没法写。。怪
@if(z(i,j)=2,@bin(x(i,j)),0)再问:lingo里语法好像不允许,报错了再答:给具体点,不然我也没有办法写,我就表示那个意思。
@for(link1(i,j):v(i,j)=@if(c(i)#gt#A(j),1,0));c(i)和A(j)至少要有一个为已知确定值
sets:a/1..10/:;b/1..45/:;link(a,b):x;endsets@for(a(i):@for(b(j):x(i,j)+x(i,j+1)
从代码看是没错,具体还得看你的集合定义
爱吃苹果的少年,在Lingo中表达A
model:sets:m/1..23/;n/1..10/;links(m,n):x;endsets@for(n(j):@sum(m(i)|i#le#21:x(i,j)+x(i+1,j)+x(i+2,j
如果都是0-1变量,那么可以写成约束条件y(i)>x(i,j)
(d(j+1)-d(j))^2
用@abs函数表示绝对值…
lingo中下标只能从1开始sets:r/1..11/:;c/1..11/:;!j的上限未知,暂设为11;links(r,c):u,d;endsetssum=@sum(links(i,j)|j#gt#
可以写s*x>=0或者用@if的话写x=@if(s#lt#0,0,x)不过这些效果都不会太好你自己斟酌吧这种非线性的约束放到lingo里面解都可能影响解的准确性和求解速度的
在集循环函数里面的j下标声明的时候可以在后面加|j#ne#i来限制j不等于i比如@sum(seti(i):@sum(setj(j)|j#ne#i:sw(i,j)))你自己写一下吧
应该是@abs(x(i)-x(j))-c(i)>0!c(i)必须是非常小的数,其值依赖于x的值
SETS:r/1..3/:;c/1..4/:;link(r,c):x,y,z;ENDSETS@for(r(i):x(i,j)+@if(i#eq#1,0,z(i-1,j))=y(i,j)+z(i,j))
@for(demend(i):@sum(supply(j):x(i,j)
@if函数结果是一个数值如果x(i,j)>=x(i-1,j)那么就是0否则就是x(i-1,j)-x(i,j)