lingo @for 函数出错

作者&投稿:聊迫 (若有异议请与网页底部的电邮联系)
lingo for函数 错误~

model:
title location problem;
sets:
demand/1..15/:a,b,d;
supply/1..5/:x,y,e;
link(demand,supply):c;
endsets
data:
a=1.25,8.75,0.5,5.75,3,7.25,3.24,8.75,1.75,7.75,2.25,4.25,6.25,5,6.25;
b=1.25,0.75,4.75,5,6.5,7.75,4.75,4.25,7.75,7.25,2.25,5.25,4.50,3.0,5.75;
d=3,5,4,7,6,11,8,10,6,4,6,3,4,3,7;
e=15,20,15,18,22;
enddata
init:
x=1.5,8.25,1.75,7.0,4.25;
y=1.5,1.75,7.5,7.0,5.0;
endinit
[OBJ] min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));
@FOR(demand(i):[DEMAND_CON] @sum(supply(j):c(i,j)) =d(i););
@for(supply(j):[SUPPLY_CON] @sum(demand(i):c(i,j))<=e(j););
@for(supply:@free(X);@free(Y););
END

model:
sets:
p/1..7/:c;!定义单个产品利润c;
m/1..6/;!定义月份;
k/1..5/;!定义机械种类;
vel(m,p):x,g,r,y;!定义各月每种产品 产量x;销量g;市场容量r;库存量y;
val(k,p):t;!定义各种机械生产各种产品用时t;
vbl(k,m):f,tt;!定义各种机械每月可以数量f;定义各种机械每月可以时间tt;
endsets
data:
r=500 1000 300 300 800 200 100
600 500 200 0 400 300 150
300 600 0 0 500 400 100
200 300 400 500 200 0 100
0 100 500 100 1000 300 0
500 500 100 300 1100 500 60;
t=0.5 0.70 0 0 0.3 0.2 0.5
0.1 0.2 0 0.3 0 0.6 0
0.2 0 0.8 0 0 0 0.6
0.05 0.03 0 0.07 0.1 0 0.08
0 0 0.01 0 0.05 0 0.05;
f=3 4 4 4 3 4
2 2 2 1 1 2
3 1 3 3 3 2
1 1 0 1 1 1
1 1 1 1 1 0;
tt=1152 1536 1536 1536 1152 1536
768 768 768 384 384 768
1152 384 1152 1152 1152 768
384 384 0 384 384 384
384 384 384 384 384 0;
c=10 6 8 4 11 9 3;
enddata
max=@sum(m(i):@sum(p(j):c(j)*g(i,j)))-0.5*@sum(vel(i,j):y(i,j));!目标函数;
!整数约束;
@FOR(vel(i,j):@gin(x(i,j)););
@FOR(vel(i,j):@gin(y(i,j)););
!时间约束;
@FOR(vbl(l,i):@sum(p(j):t(l,j)*x(i,j))<=tt(l,i));
@FOR(p(j):y(6,j)=50);
@FOR(vel(i,j):y(i,j)<=100);
@FOR(p(j):y(1,j)=x(1,j)-g(1,j));
@FOR(m(i)|i#ge#2:@FOR(p(j):y(i,j)=y(i-1,j)+x(i,j)-g(i,j)));
@FOR(m(i):@FOR(p(j):g(i,j)<=r(i,j)));

存在的错误比较多:
1.min=@SUM(STATION(I):
@SUM(FACTOR(J):
0.1*(a(I,J)*d(I,J)+left(I)*dd(I-1)*left1(I)+right(I)*dd(I-1)*right1(I));
这里出现了dd(I-1),那么应当有I>=2,因此要修改成:
min=@SUM(STATION(I)|I#GT#1:
@SUM(FACTOR(J):
0.1*(a(I,J)*d(I,J)+left(I)*dd(I-1)*left1(I)+right(I)*dd(I-1)*right1(I))));
2.@FOR(STATION(J):
@SUM(FACTOR(I):DISTANCE(I,J))<y(J)*10000#and#500<@SUM(FACTOR(I):DISTANCE(I,J))#and#<@SUM(FACTOR(I):DISTANCE(I,J))<m(J));
(1)这里DISTANCE是集合,不能作运算,应当是下面的变量d在作运算;
(2)@FOR(STATION(J):
@SUM(FACTOR(I):DISTANCE(I,J))<y(J)*10000,注意到右边的y(J),y是集合FACTOR下的变量,在这里应当写成y(I),可是FACTOR在@SUM(FACTOR(I):DISTANCE(I,J))里面,我猜你可能是写错次序了;
3.@FOR(STATION(I):
lefr(I)+right(I-1)=dd(I-1));
lefr书写错误,同样I要大于1约束缺少。
修改后的代码:
MODEL:
SETS:
!m是最大产量,p是价属于价格;
FACTOR/1..7/:p,m,y;
!接收点集合;
STATION/1..15/:left,right,left1,right1,dd;
!a为相应的钢管数,d最短距离集合,;
DISTANCE(STATION,FACTOR):a,d;
ENDSETS
DATA:
p=160 155 155 160 155 150 160;
m=800 800 1000 2000 2000 2000 3000;
d=2140 2640 1880 1310 1262 380 0
2100 2600 1840 1270 1222 340 40
2120 2620 1860 1290 1242 360 20
1900 2400 1640 1070 1022 140 240
2040 2540 1780 1210 1162 0 380
1930 2430 1670 1100 1052 110 270
1700 2200 1440 870 822 340 440
1762 2262 1502 932 760 402 502
1470 1970 1210 640 720 570 670
1670 2170 1410 840 560 622 722
1660 2160 1400 850 550 612 712
1710 2210 1450 0 960 1210 1310
1270 1770 1010 440 520 770 870
1450 1950 1190 640 320 842 942
1770 2270 1510 960 0 1162 1262;
dd=104 301 750 606 194 205 201 680 480 300 220 210 420 500 0;
left1=0, , , , , , , , , , , , , , ;
left=0, , , , , , , , , , , , , , ;
right1= , , , , , , , , , , , , , ,0;
right= , , , , , , , , , , , , , ,0;
ENDDATA
!目标函数;
min=@SUM(STATION(I)|I#GT#1:
@SUM(FACTOR(J):
0.1*(a(I,J)*d(I,J)+left(I)*dd(I-1)*left1(I)+right(I)*dd(I-1)*right1(I))));
!0-1变量引入生产量a当中;
@FOR(FACTOR(J):
@SUM(STATION(I):d(I,J))<y(J)*10000;500<@SUM(STATION(I):d(I,J));@SUM(STATION(I):d(I,J))<m(J));
!根据距离确定左右变量;
@FOR(STATION(I)|I#GT#1:
left(I)+right(I-1)=dd(I-1));
!根据需求量确定左右变量;
@FOR(STATION(I):
@SUM(FACTOR(J):a(I,J))=left1(I)+right1(I));
@FOR(FACTOR:@BIN(y));
END
运行显示无解,可能是建模本身的问题,我没有看见原题,故没办法分析,建议你上传原题。

你的distance(i,j)用法不对 应该是变量名而不是集名 但是我没办法给你改 因为不知道你用的是a还是d

MODEL:
SETS:
!m是最大产量,p是价属于价格;
FACTOR/1..7/:p,m,y;
!接收点集合;
STATION/1..15/:left,right,left1,right1,dd;
!a为相应的钢管数,d最短距离集合,;
DISTANCE(STATION,FACTOR):a,d;
ENDSETS
DATA:
p=160 155 155 160 155 150 160;

m=800 800 1000 2000 2000 2000 3000;

d=2140 2640 1880 1310 1262 380 0
2100 2600 1840 1270 1222 340 40
2120 2620 1860 1290 1242 360 20
1900 2400 1640 1070 1022 140 240
2040 2540 1780 1210 1162 0 380
1930 2430 1670 1100 1052 110 270
1700 2200 1440 870 822 340 440
1762 2262 1502 932 760 402 502
1470 1970 1210 640 720 570 670
1670 2170 1410 840 560 622 722
1660 2160 1400 850 550 612 712
1710 2210 1450 0 960 1210 1310
1270 1770 1010 440 520 770 870
1450 1950 1190 640 320 842 942
1770 2270 1510 960 0 1162 1262;

dd=104 301 750 606 194 205 201 680 480 300 220 210 420 500 0;

left1=0, , , , , , , , , , , , , , ;

left=0, , , , , , , , , , , , , , ;

right1= , , , , , , , , , , , , , ,0;

right= , , , , , , , , , , , , , ,0;

ENDDATA
!目标函数;
min=@SUM(STATION(I)|I#gt#1:
@SUM(FACTOR(J):
0.1*(a(I,J)*d(I,J)+left(I)*dd(I-1)*left1(I)+right(I)*dd(I-1)*right1(I))));

!0-1变量引入生产量a当中;
@FOR(STATION(J):
@SUM(FACTOR(I):DISTANCE(I,J))<y(J)*10000;
500<@SUM(FACTOR(I):DISTANCE(I,J));
@SUM(FACTOR(I):DISTANCE(I,J))<m(J));

!根据距离确定左右变量;
@FOR(STATION(I)|I#gt#1:
left(I)+right(I-1)=dd(I-1));

!根据需求量确定左右变量;
@FOR(STATION(J):
@SUM(FACTOR(I):DISTANCE(I,J))=left1(J)+right1(J));

@FOR(FACTOR:@BIN(y));

END

@FOR(STATION(J):
@SUM(FACTOR(I):DISTANCE(I,J))<y(J)*10000#and#500<@SUM(FACTOR(I):DISTANCE(I,J))#and#<@SUM(FACTOR(I):DISTANCE(I,J))<m(J));
这个有问题, #and#只用于逻辑表达式,不能用于关系表达式,要分开写:
@FOR(STATION(J):@SUM(FACTOR(I):DISTANCE(I,J))<y(J)*10000);
@FOR(STATION(J):@SUM(FACTOR(I):DISTANCE(I,J))>500);
@FOR(STATION(J):@SUM(FACTOR(I):DISTANCE(I,J))<m(J));


晴隆县13188621721: lingo中@for函数报错,求大神指点错误的原因~ -
天影棓丙: @FOR(WH(I):@SUM(VD(J):X(I,J)) @FOR(VD(J):@SUM(WH(I):X(I,J))=DJ(J)); for后面不用等号

晴隆县13188621721: lingo @for 函数出错 -
天影棓丙: 你的distance(i,j)用法不对 应该是变量名而不是集名 但是我没办法给你改 因为不知道你用的是a还是d MODEL:SETS:!m是最大产量,p是价属于价格; FACTOR/1..7/:p,m,y;!接收点集合; STATION/1..15/:left,right,left1,right1,dd;!a为相应的钢管...

晴隆县13188621721: lingo中@for函数用错
天影棓丙: 如果前面集合定义没错的话,那么这句也没错... 建议把全部代码贴出来看看,lingo报错行数不一定准确,有时错误会在报错的上一行....

晴隆县13188621721: lingo,@for函数莫名报错sets:people/1..8/:n;level/1..4/:awarded;link(people,level):x;endsetsdata:n=11,3,8,45,4,40,3,34;awarded=59,30,30,29;enddatamin=@... -
天影棓丙:[答案] 目标函数那句括号没有配对 另外你的那些x到底是一维的还是二维的

晴隆县13188621721: Lingo程序@for错误 -
天影棓丙: model:sets:location/1..6/:x,y,d; dist/A,B/:px,py,e; links(location,dist):C; endsets data:x=1.25 8.75 0.5 5.75 3 7.25; y=1.25 0.75 4.75 5 6.5 7.75; d=3,5,4,7,6,11; px=5,2; py=1,7; e=20,20; enddata min=@sum(links(i,j):c(i,j)*((px(j)-x(i))^2+(py(j)-y(i)^2)^(1/...

晴隆县13188621721: lingo找错.@FOR循环问题. -
天影棓丙: 语法上的错误 [st1]这种只能用于一个约束上,而@for代表的是几个约束,所以不能加 去掉技能运行 模型上的错误,这里面m的和是110 而你要求n的和是114 所以没有可行解 取一段的话可以这样写 @for(lessons(i)|i#ge#22 #and# i#le#36:约束);

晴隆县13188621721: LINGO编程 加了一个@for...约束后报错~ -
天影棓丙: model:sets: GC/1..3/:GZ; !i工厂所有物资的总产量; WZ/1..10/:TJ,M; !j物资体积,存储费; CC/1..5/:W; !k仓库容积,; FD/1..8/:HZ; !h分店;YJ1(GC,CC):B; !i工厂到k仓库的运价;YJ2(CC,FD):F; !k仓库到h分店的运价;CL(GC,WZ):G; !i工厂j物资...

晴隆县13188621721: lingo @for 函数有问题
天影棓丙: 格式错误,@FOR(集合:约束条件); 对集合的定义了解不足,以下是更改过的程序,删掉了一些注释,请自行补上. LINGO默认变量均是非负的,所以此处将X_(1)&gt;0,X_(2)&gt;0约束删掉. 如果是严格&gt;0,的话,请在末尾加上@FOR(...

晴隆县13188621721: LINGO运行错误 错误代码50 即@for函数使用不合法 是什么意思啊 应如何解决? 急急急 求高手指点 -
天影棓丙: 把你出错的代码发过来,肯定是写错了

晴隆县13188621721: 帮我看看lingo程序有没问题...说是@for语句不当 -
天影棓丙: 哪里有悬赏分啊????? 是你的逻辑错误:工地与料场直接的关系不准确?之前出现的@for问题是因为你上面少了一个括号!所以就出现@for,修改了括号就出现逻辑问题了!!!直接修改:model:sets:gongdi/1..6/:a,b,d; liaochang/1..2/:x,y,e...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网