lingo中k(i)=0.5*k(i 1),怎么编程
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/11 03:24:31
定义一个派生集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#
@if(z(i,j)=2,@bin(x(i,j)),0)再问:lingo里语法好像不允许,报错了再答:给具体点,不然我也没有办法写,我就表示那个意思。
首先你要会定义集比如集定义是sets:s/1..3/:k;endsets那么k是0-1变量就用@for(s:@bin(k));表示
lingo里面变量默认就是非负的如果要做类似的约束可以用集你最好能自己系统的看一下不是一句话就说清楚的比如这样sets:s1/1..3/:;s2/1..2/:;s3/1..3/:;s(s1,s2,s3
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)至少要有一个为已知确定值
这个实际上写的不好既然里面@sum只有k=1的情况直接写y1(i,1)就行了何必写个求和呢这句的意思就是对于所有的iq(i)*y1(i,1)求和是不超过capacity的
要限制k+1在范围内Min=@sum(Time(i,j):t(i,j)*@sum(order(k)|k#lt#@size(order):a(i,k)*a(j,k+1)));再问:要通过a1a2a3a4
如果是下标就用集定义自己找教程看看变量用@gin(i);i
不知道你这样做的目的是什么单算这个用lingo没什么意义sets:num/1..100/:n;endsetsy=5*@sum(num(i):i)+1;
从代码看是没错,具体还得看你的集合定义
如果都是0-1变量,那么可以写成约束条件y(i)>x(i,j)
不可以@if是一个函数整个@if你把它看成一个数@if(条件,条件真时的值,条件假时的值)再问:那Q=@if((@abs(z(i)-k(j))
link一般用作派生集就是一个二维的集看起来像矩阵那样的比如定义了两个集a表示时间的集b表示地点的集那么可以做一个集link(a,b)它里面的变量表示某个时间某个地点的情况当然这个link只是一个惯例
取绝对值的函数.
@for(demend(i):@sum(supply(j):x(i,j)
@for(var(i):k(i)==@sum(var_1:c*w));
你对每个k求的最小值啊那是求7个最小吗再问:是的啊再答:那这是7个问题对吧再问:是的啊再答:那只给你写一个的其它类似sets:set1/1..5/:w,x;endsetsdata:w=0.90.30.
单单这个写不了,把整个模型贴出来看看.或者你去看一下lingo集合的概念.