数学建模社区-数学中国
标题:
这个怎么用lingo解
[打印本页]
作者:
yuancht
时间:
2009-8-13 16:40
标题:
这个怎么用lingo解
本帖最后由 yuancht 于 2009-8-13 22:13 编辑
这个问题在下面的图片里
2009-8-13 16:40 上传
下载附件
(250.11 KB)
请问具体是怎么解的 lingo代码是 什么?
2009-8-13 21:03 上传
下载附件
(36.54 KB)
这个清不清
原题是 有4名同学到一公司参加面试:面试分三个阶段,4名同学 在每个阶段的顺序是一样的,4名同学在三个阶段的面试时间如下表
1 2 3
甲 13 15 20
乙 10 20 18
丙 20 16 10
丁 8 10 15
作者:
dream_boy3
时间:
2009-8-13 19:07
不知道啊!
作者:
baofuguang
时间:
2009-8-13 19:15
参考我的讲义:
http://www.madio.cn/mcm/thread-30339-1-1.html
作者:
yanmaohua
时间:
2009-8-13 20:21
butaiqingchu
作者:
yuancht
时间:
2009-8-13 20:34
不会没人会吧
作者:
fanshunguo
时间:
2009-8-13 20:35
不清楚啊。。
作者:
legan
时间:
2009-8-13 21:04
你把原题发上来,最好把t(i,j)的4*3的矩阵发上来
作者:
yuancht
时间:
2009-8-13 21:28
t(i,j)=[13,15,20
10,20,18
20,16,10
8,10,15]
作者:
yuancht
时间:
2009-8-13 21:31
t(i,j)=[13,15,20
10,20,18
20,16,10
8,10,15]
7#
legan
作者:
yuancht
时间:
2009-8-13 22:12
原题是 有4名同学到一公司参加面试:面试分三个阶段,4名同学 在每个阶段的顺序是一样的,4名同学在三个阶段的面试时间如下表
1 2 3
甲 13 15 20
乙 10 20 18
丙 20 16 10
丁 8 10 15
作者:
追梦者
时间:
2009-8-14 12:04
本帖最后由 追梦者 于 2009-8-14 12:26 编辑
你试一下下面的程序我机子上没装lingo,我待会用别的机子运行下
model:
sets:
students/1..4/;
stage/1..3/;
link(students,stage):x,t;
order(students,students):y;
time/1..4/:F;
endsets
data:
t=13,15,20
10,20,18
20,16,10
8,10,15;
enddata
@for(time(i):F(i)=x(i,3)+t(i,3));
[email=min=@smax(F(1),F(2),F(3),F(4]min=@smax(F(1),F(2),F(3),F(4[/email]));
@for(link(i,j)|j#le#2:x(i,j)+t(i,j)<=x(i,j+1));
@for(link(i,j)|i#le#3#and#k#le#3#and#i#lt#k:x(i,j)+t(i,j)-x(k,j)<=y(i,k)*@smax(F(1),F(2),F(3),F(4));
x(k,j)+t(k,j)-x(1,j)<=(1-y(i,k))*@smax(F(1),F(2),F(3),F(4)););
@for(students(i)
:bin(y(i,1));@bin(y(i,2));@bin(y(i,3));@bin(y(i,4)));
作者:
心飞清山绿水
时间:
2009-8-14 15:24
!三阶段面试模型;
model:
sets:
students; !学生集三阶段面试模型;
phases; !阶段集;
sp(students,phases):t,x;
ss(students,students) | &1 #LT# &2:y;
endsets
data:
students = s1..s4;
phases = p1..p3;
t=
13 15 20
10 20 18
20 16 10
8 10 15;
enddata
ns=@size(students); !学生数;
np=@size(phases); !阶段数;
!单个学生面试时间先后次序的约束;
@for(sp(I,J) | J #LT# np:
x(I,J)+t(I,J)<=x(I,J+1)
);
!学生间的面试先后次序保持不变的约束;
@for(ss(I,K):
@for(phases(J):
x(I,J)+t(I,J)-x(K,J)<=200*y(I,K);
x(K,J)+t(K,J)-x(I,J)<=200*(1-y(I,K));
)
);
!目标函数;
min=TMAX;
@for(students(I):
x(I,3)+t(I,3)<=TMAX
);
!把Y定义0-1变量;
@for(ss: @bin(y));
end
作者:
追梦者
时间:
2009-8-15 09:02
恩,上面这位大哥的程序可行,我那个程序ill difined了O(∩_∩)O~
作者:
追梦者
时间:
2009-8-15 10:06
O(∩_∩)O~,经过我的改进,我的程序也出来了,我运行了可以。
而且,我有几个东西要跟lz说下O(∩_∩)O~
1、你用mathtype编的函数似乎有问题,首先约束条件中k不是=1,2,3,少了个4,因为两个同学排前排后,第四个同学是少不了的;
2、你应该是看错了,下标中没有1,你的约束条件x(k,j)+t(k,j)-x(1,j)<=(1-y(i,k))*tmax应改为x(k,j)+t(k,j)-x(i,j)<=(1-y(i,k))*tmax
3、中国人的文章很多造假,看他们东西时,应该弄得清楚些O(∩_∩)O~他们喜欢往对的答案上凑O(∩_∩)O~
最后程序如下
model:
sets:
students/1..4/;!学生集;
stage/1..3/;!阶段;
link(students,stage):x,t;
order(students,students):y;
time/1..4/:F;!总时间;
endsets
data:
t=13,15,20
10,20,18
20,16,10
8,10,15;
enddata
@for(time(i):F(i)=x(i,3)+t(i,3));
min=@smax(F(1),F(2),F(3),F(4));!将总时间中最大的最小化;
@for(link(i,j)|j#le#2:x(i,j)+t(i,j)<=x(i,j+1));!后一个阶段的初试时间总是在前一个阶段之后;
@for(link(i,j)|i#le#3:
for(students(k)|!k#le#3#and#这是原来改错的地方k可以是1 2 3 4;
i#lt#k:x(i,j)+t(i,j)-x(k,j)<=y(i,k)*@smax(F(1),F(2),F(3),F(4));
x(k,j)+t(k,j)-x(i,j)<=(1-y(i,k))*@smax(F(1),F(2),F(3),F(4));));
!假设第k个同学排在第i个同学之前,那么第k个同学的到达第j阶段的总时间是x(i,j)+t(i,j)-x(k,j);
@for(order:
bin(y));!取0/1;
作者:
yuancht
时间:
2009-8-15 15:56
很厉害 谢谢 ~
14#
追梦者
作者:
yuancht
时间:
2009-8-15 15:57
谢谢
12#
心飞清山绿水
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5