lingo中怎么表示r(i,j,k)
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/19 18:52:57
定义一个派生集link如下,其中x即可表示为一个矩阵sets:r/1..5/:;c/1..5/:;h/1..5/:;link(r,c,h):x;endsets
@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)
从代码看是没错,具体还得看你的集合定义
如果都是0-1变量,那么可以写成约束条件y(i)>x(i,j)
不可以@if是一个函数整个@if你把它看成一个数@if(条件,条件真时的值,条件假时的值)再问:那Q=@if((@abs(z(i)-k(j))
(d(j+1)-d(j))^2
最后自己看下教程,集的概念和sum,for函数,以下仅是部分情况示例sets:r/1..5/:x;c/1..5/:;link(r,c):y;endsetss1=@sum(r:x);s2=@sum(li
@ACOS(X)Returnstheinversecosine,orarccosine,ofX,whereXisanangleinradians.@ACOSH(X)Returnstheinverseh
可以写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的值
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)