LINGO编程错误~~~求教高手~!!急~

[复制链接]
查看11 | 回复0 | 2010-8-26 15:42:10 | 显示全部楼层 |阅读模式
model:
!快递送货策略第二问模型求解;
sets:
nodes/p0..p30/:x,y,weight;
path/1..8/:far,fee,time,w;
route(path,nodes):z,tt;
dist(nodes,nodes):d;
endsets
data:
x=0 3 1 5 4 3 0 7 9 10 14 17 14 12 10 19 2 6 11 15 7 22 21 27 15 15 20 21 24 25 28;
y=0 2 5 4 7 11 8 9 6 2 0 3 6 9 12 9 16 18 17 12 14 5 0 9 19 14 17 13 20 16 18;
weight=0 8 8.2 6 5.5 4.5 3 7.2 2.3 1.4 6.5 4.1 12.7 5.8 3.8 3.4 3.5 5.8 7.5 7.8 4.6 6.2 6.8 2.4 7.6 9.6 10 12 6.0 8.1 4.2;
enddata
@for(dist(i,j):d(i,j)=@abs(x(i)-x(j))+@abs(y(i)-y(j)));!计算各点之间的距离;
[obj]min=@sum(path(i):fee(i));
@for(nodes(i)|i#ne#1:@sum(path(j):z(j,i))=1);
!线路矩阵每列和为1;
@for(route(i,j)|j#eq#1:z(i,j)=1);
@sum(route:z)=30;
@for(route(i,j):
@for(route(i,k)|k#gt#j #and# z(i,j)*z(i,k)#eq#1:x(k)>=x(j);y(k)>=y(j);));
!只能往右和上方递送;
@for(route(i,j)|z(i,j)#eq#1:far(i)=@if(@sum(route(i,k)|k#gt#j:z(i,k))#eq#0,j,0)); !求出返回点far(i);
@for(path(i):w(i)=@sum(nodes(j)|z(i,j)#eq#1:weight(j))); !每条路线的载重量;
@for(path(i):w(i)=x(j);y(k)>=y(j);));外层循环的i和内层循环的i相互冲突了,你可以根据题意用不同的索引:i,j,k,l,m...一个循环内行尽量避免重复(实际上人也不容易读懂,因为不明白究竟要做什么尽管lingo不显示这个警告。)我曾经吃过这个亏的,当时找了半天。还有下面的约束条件也是的。我能做的只有这些了~~祝你好运
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行