数学建模社区-数学中国

标题: lingo的一段代码(请高手不吝赐教!) [打印本页]

作者: starbinbin    时间: 2009-8-16 09:12
标题: lingo的一段代码(请高手不吝赐教!)
现今得到lingo的一段带码,分别在,lingo11.0和9.0上运行后报出不同的错误,各位大侠运行一下就知道了,我就无语了,是我现在正在看的一篇关于有时间窗的车辆调度,路径最优问题的一篇论文上的。
代码如下:
model:
!n个货车8收点运输问题;
sets:

place/place1..place10/:time1,time2,timexie;


car/car1..car3/:time;


jiu/1..9/;
er/1..2/;

lc(car,jiu):lucheng,ct;
plan(place,place,car):a;
distance(place,place):dd,dt,which;
endsets


!这里是数据;
data:
s=1;
time1=-10 1 4 1 4 3.5 2 5 1.5 1;
time2=7 4 6 2 7 5 5 8 4 10 ;
timexie=0 1 2 1 3 2 2.5 3 0.8 0;



dd=

0
40
60
75
90
90
100
135
80
0

40
0
65
40
100
50
75
110
100
40

60
65
0
75
100
100
75
75
75
60

75
40
75
0
100
50
90
90
125
75

90
100
100
100
0
100
75
75
100
90

90
50
100
50
100
0
70
90
75
90

100
75
75
90
75
70
0
70
100
100

135
110
75
90
75
90
70
0
100
135

80
100
75
125
100
75
100
100
0
80

0
40
60
75
90
90
100
135
80
0 ;

dt=
0
0.8000
1.2000
1.5000
1.8000
1.8000
2.0000
2.7000

1.6000
0


0.8000
0
1.3000
0.8000
2.0000
1.0000
1.5000
2.2000
2.0000
0.8000


1.2000
1.3000
0
1.5000
2.0000
2.0000
1.5000
1.5000
1.5000
1.2000


1.5000
0.8000
1.5000

0
2.0000
1.0000
1.8000
1.8000
2.5000
1.5000


1.8000
2.0000
2.0000
2.0000
0
2.0000
1.5000
1.5000
2.0000
1.8000


1.8000
1.0000
2.0000
1.0000
2.0000
0
1.4000
1.8000
1.5000
1.8000


2.0000
1.5000
1.5000
1.8000
1.5000
1.4000
0
1.4000
2.0000
2.0000


2.7000
2.2000
1.5000
1.8000
1.5000
1.8000
1.4000
0
2.0000
2.7000


1.6000
2.0000
1.5000
2.5000

2.0000
1.5000
2.0000
2.0000
0
1.6000


0
0.8000
1.2000
1.5000
1.8000
1.8000
2.0000
2.7000
1.6000
0;

enddata


!目标函数;

min=@sum(lc(I,J): lucheng(I,J));


!整数约束;
@for(planbin(a));
@for(car(I)free(time(I)) ;

!从零点开始最终回来;
@for(car(I):

a(1,1,I)=1;a(10,10,I)=1);


!每个任务只能有一个;
@sum(car(I):

@sum(place(K):


@sum(place(J): a(J,K,I))))=1;



!每个车的任务最多有四个;
@for(car(I):

@sum(plan(J,K,I):a(J,k,I))<=6 );


!前一辆车任务大于等于后一辆车;
@for(car(I)|I#lt#3:

@sum(plan:a(J,K,I))>=@sum(plan:a(J,K,I+1) );


!求which
例子 若a(1,:)=[1 0 0 1 0 1 0 0 0 1];


!

which(1,:)=[1 1 1 4 4 6 6 6 6 10] ;

@for(car(I):

@for(place(K)|@sum(place(J):a(K,J,I)) #eq#1:


@for(place(J)|a(K,J,I) #eq#1:


which(I,K)=J ););

@for(place(K)|@sum(place(J):a(K,J,I)) #ne#1:
which(I,K)=which(I,K-1));

!时间限制;
@for(car(J):

time(J)>=-10;time(J)<=7);


@for(jiu(J):
ct(I,J)=@if(which(I,J)#ne#which(I,J+1),dt(which(I,J),which(I,J+1))+timexie(which(I,J)),0));

@for(jiu(J):
time(I)+ct(I,J)>=time1(J+1);time(I)+ct(I,J)<=time2(J+1));

!求每辆车行驶的距离;
@for(jiu(J):
lucheng(I,J)=@if(which(I,J)#ne#which(I,J+1),dd(which(I,J),which(I,J+1)),0) );
);
end
(1)

作者: starbinbin    时间: 2009-8-16 09:12
表情处的原符号是@
作者: starbinbin    时间: 2009-8-16 11:01
为什么没有人啊。。。。。。
作者: x2_nudt    时间: 2009-8-16 12:22
建议你学习一下Lingo的文件操作,还有减少约束,算出结果后验证去掉的约束。
作者: x2_nudt    时间: 2009-8-16 12:24
就算语法没有错,不恰当的约束会让软件出现不稳定的情况
自己多分析一下数据
作者: madio    时间: 2009-8-16 13:04
我在11中运行的提示是变量名和集合的下标名出现了同名
作者: starbinbin    时间: 2009-8-16 13:57
我也是这样提示的,怎么办呢? 6# madio
作者: firstboy0513    时间: 2009-8-17 12:07
我简化了一下程序如下:
model:
sets:
place/place1..place10/:time1,time2,timexie;
car/car1..car3/:time;
jiu/1..9/;
er/1..2/;
lc(car,jiu):lucheng,ct;
plan(place,place,car):a;
distance(place,place):dd,dt,which;
endsets

data:
s=1;
time1=-10 1 4 1 4 3.5 2 5 1.5 1;
time2=7 4 6 2 7 5 5 8 4 10 ;
timexie=0 1 2 1 3 2 2.5 3 0.8 0;
dd=0 40 60 75 90 90 100 135 80 0 40 0 65 40 100 50 75 110 100 40 60 65 0 75 100 100 75 75 75 60 75 40 75 0 100 50 90 90 125 75 90 100 100 100 0 100 75 75 100 90 90 50 100 50 100 0 70 90 75 90 100 75 75 90 75 70 0 70 100 100 135 110 75 90 75 90 70 0 100 135 80 100 75 125 100 75 100 100 0 80 0 40 60 75 90 90 100 135 80 0 ; dt= 0 0.8000 1.2000 1.5000 1.8000 1.8000 2.0000 2.7000  1.6000 0  0.8000 0 1.3000 0.8000 2.0000 1.0000 1.5000 2.2000 2.0000 0.8000  1.2000 1.3000 0 1.5000 2.0000 2.0000 1.5000 1.5000 1.5000 1.2000  1.5000 0.8000 1.5000  0 2.0000 1.0000 1.8000 1.8000 2.5000 1.5000  1.8000 2.0000 2.0000 2.0000 0 2.0000 1.5000 1.5000 2.0000 1.8000  1.8000 1.0000 2.0000 1.0000 2.0000 0 1.4000 1.8000 1.5000 1.8000  2.0000 1.5000 1.5000 1.8000 1.5000 1.4000 0 1.4000 2.0000 2.0000  2.7000 2.2000 1.5000 1.8000 1.5000 1.8000 1.4000 0 2.0000 2.7000  1.6000 2.0000 1.5000 2.5000  2.0000 1.5000 2.0000 2.0000 0 1.6000  0 0.8000 1.2000 1.5000 1.8000 1.8000 2.0000 2.7000 1.6000 0;
enddata
min=@sum(lc(I,J): lucheng(I,J));
@for(planbin(a));
@for(car(I)free(time(I)) ;
@for(car(I):
a(1,1,I)=1;a(10,10,I)=1);
@sum(car(I)sum(place(K)sum(place(J): a(J,K,I))))=1;
@for(car(I)sum(plan(J,K,I):a(J,k,I))<=6 );
@for(car(I)|I#lt#3sum(plan:a(J,K,I))>=@sum(plan:a(J,K,I+1));
@for(car(I)for(place(K)|@sum(place(J):a(K,J,I)) #eq#1for(place(J)|a(K,J,I) #eq#1:which(I,K)=J ););
@for(place(K)|@sum(place(J):a(K,J,I)) #ne#1:which(I,K)=which(I,K-1));
@for(car(J):time(J)>=-10;time(J)<=7);
@for(jiu(J):ct(I,J)=@if(which(I,J)#ne#which(I,J+1),dt(which(I,J),which(I,J+1))+timexie(which(I,J)),0));
@for(jiu(J):time(I)+ct(I,J)>=time1(J+1);time(I)+ct(I,J)<=time2(J+1));
@for(jiu(J):lucheng(I,J)=@if(which(I,J)#ne#which(I,J+1),dd(which(I,J),which(I,J+1)),0) );
);
end

------------------------------------------------------------------------------------------------------------------------
报的错误是:
Error Code:1017
Error Text:
Unexpected Javobian overflow:Contact Lindo Systems for patch availability(1).
作者: starbinbin    时间: 2009-8-17 12:47
。。。。。。
作者: 跳跃    时间: 2009-8-20 10:22
挺复杂得嘛!
作者: wbyouth2010    时间: 2011-8-23 17:18
呜,我也出现这个问题了。。。另一道题,楼主后来解决了没啊?》
作者: hmilylight    时间: 2011-8-24 18:33
好长啊不过还是看看




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