数学建模社区-数学中国

标题: 一个简单的LINGO例题,但运行出错 [打印本页]

作者: 如鱼    时间: 2013-11-12 21:42
标题: 一个简单的LINGO例题,但运行出错
本帖最后由 wujianjack2 于 2013-11-12 23:33 编辑

sets:
!c表示运量,a、b表示坐标,d表示需求量,e表示存储量;
demand/1..6/:a,b,d;
supply/p,q/:x,y,e;
link/demand,supply/:c;
endsets

min=@sum(link(I,J):c(I,J)*((x(J)-a(I))^2+(y(J)-b(I))^2)^(1/2));

@for(work(i):@sum(supply(j):c(i,j))=d(i););
@for(supply(j):@sum(work(i):c(i,j))<=e(j););

data:
a=1.25 8.75 0.5 5.75 3 7.25;
b=1.25 0.75 4.75 5 6.5 7.75;
d=3 5 4 7 6 11;
x=5 2;
y=1 7;
e=20 20;
enddata
作者: wujianjack2    时间: 2013-11-12 23:49
sets:
!c表示运量,a、b表示坐标,d表示需求量,e表示存储量;
demand/1..6/:a,b,d;
supply/p,q/:x,y,e;
link(demand,supply):c;
endsets
min=@sum(link(I,J):c(I,J)*((x(J)-a(I))^2+(y(J)-b(I))^2)^(1/2));
@for(demand(i):@sum(supply(j):c(i,j))=d(i););
@for(supply(j):@sum(demand(i):c(i,j))<=e(j););
data:
a=1.25 8.75 0.5 5.75 3 7.25;
b=1.25 0.75 4.75 5 6.5 7.75;
d=3 5 4 7 6 11;
e=20 20;
enddata
init:
x=5 2;
y=1 7;
endinit

这样程序就可以运行了,楼主之前的程序中错误的地方不妨自己比对找出来试试。






作者: 如鱼    时间: 2013-11-13 06:47
wujianjack2 发表于 2013-11-12 23:49
sets:
!c表示运量,a、b表示坐标,d表示需求量,e表示存储量;
demand/1..6/:a,b,d;

谢谢,但我想问一下,为什么要把x,y先初始化,而不能直接在data中赋值
作者: 如鱼    时间: 2013-11-13 06:50
wujianjack2 发表于 2013-11-12 23:49
sets:
!c表示运量,a、b表示坐标,d表示需求量,e表示存储量;
demand/1..6/:a,b,d;

为什么想,x,y要进行初始化,而不能在data中赋值呢?
作者: wujianjack2    时间: 2013-11-13 22:11
如鱼 发表于 2013-11-13 06:50
为什么想,x,y要进行初始化,而不能在data中赋值呢?

   可以赋值,但是,如果在DATA段中这么写的话X,Y就是常量了,不是变量,而这个问题是要搜索X,Y的较优解,当然不能限定为常量了吧。INIT相当于给定迭代初始点。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5