在lingo中怎么表示i=j
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/23 15:59:18
定义一个派生集link如下,其中x即可表示为一个矩阵sets:r/1..5/:;c/1..5/:;h/1..5/:;link(r,c,h):x;endsets
sets:setname/1..7/:x,t;endsets@for(setname(i):@for(setname(j)|i#ne#j:(x(i)+t(i)#le#x(j))#or#(x(j)+t(
@if(z(i,j)=2,@bin(x(i,j)),0)再问:lingo里语法好像不允许,报错了再答:给具体点,不然我也没有办法写,我就表示那个意思。
规划问题中大于就是大于等于因为最优值一定取在边界上@bnd(0,a,1);或者a
k,i是变量还是集合下标呢?以下是变量的情况:@bnd(1,k,3);!1再问:谢谢,k,i又当下标,又当变量(作为指数)再答:要看具体情况吧,你把代码或数学模型贴出来看看吧再问:太感谢了,你有邮箱吗
@for(link1(i,j):v(i,j)=@if(c(i)#gt#A(j),1,0));c(i)和A(j)至少要有一个为已知确定值
@FOR(product(J):SUM(WORKER(I):X(I,J))=@if(W(J)#gt#0,1,SUM(WORKER(I):X(I,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)
可以让x1+x2=c;然后限制c为0-1变量@bin(c);你最好说清楚具体的问题我看有没有更好的办法再问:我没说清楚,x1+x2=0或1,x3+x4=0或1,x5+x6=0或1,这几个同时满足呢??
从代码看是没错,具体还得看你的集合定义
如果都是0-1变量,那么可以写成约束条件y(i)>x(i,j)
不可以@if是一个函数整个@if你把它看成一个数@if(条件,条件真时的值,条件假时的值)再问:那Q=@if((@abs(z(i)-k(j))
(d(j+1)-d(j))^2
@ACOS(X)Returnstheinversecosine,orarccosine,ofX,whereXisanangleinradians.@ACOSH(X)Returnstheinverseh
在集循环函数里面的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的值
data:enddata
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))
@gin(x)整数@bin(x)整数0或1@free(x)取消x非负限制,即可取所有实数因为lingo中的数是默认非负的@bnd(m,x,l)x是属于m=
@if函数结果是一个数值如果x(i,j)>=x(i-1,j)那么就是0否则就是x(i-1,j)-x(i,j)