为何公务员招聘16*4矩阵整数规划用LINGO解不出来?
本帖最后由 basic_maths 于 2009-8-21 18:45 编辑为何公务员招聘的分配模型(图 1.jpg)中的16*4矩阵的0-1整数规划用LINGO的sets和link或直接列出的笨办法都解不出来?解出的结果显示的含义是“维数过高,求不出来”或版本不行,但我用的LINGO 8的版本不算低。据说理论不完善导致大规模整数规划用LINGO解很困难,但这论文中的又是怎么用LINGO解出来了呢?谢谢 报错正茬啊的 就是楼主 问题都没放出来 学习还是很辛苦,论文的关键部分常常看不到,琢磨很久常常陷入困境 破解的变量没限制的。估计你的版本是学生版或试用版本。 本帖最后由 basic_maths 于 2009-8-21 19:40 编辑
运行结果说维数过高的LINGO程序如下:
sets:
set1/1..4/:i;
set2/1..16/:j;
link(set1,set2):h,x;
endsets
max=@sum(link(i,j):h(i,j)*x(i,j));
@for(set1(i):@sum(link(i,j):x(i,j))=1);
@for(set2(j):@sum(link(i,j):x(i,j))<1);
@for(link(i,j):@bin(x(i,j)));
data:
h = 0.078838 0.060075 0.052251 0.065991 0.052251 0.035797 0.065911 0.052251 0.045319 0.029068 0.040378 0.077803 0.050714 0.034983
0.065991 0.052251
0.080657 0.051387 0.058591 0.06237 0.058591 0.037773 0.06237 0.058591 0.051288 0.034763 0.058536 0.084301 0.064077 0.045746 0.06237 0.058591
0.091519 0.056818 0.077022 0.060233 0.077022 0.02591 0.060233 0.077022 0.04915 0.040194 0.034811 0.067051 0.040352 0.043609 0.060233 0.077022
0.1168 0.064332 0.099849 0.075315 0.099849 0.03862 0.075315 0.099849 0.069347 0.05538 0.067568 0.097246 0.070552 0.066363 0.075315 0.099849;
enddata
结果为何算不出来,谢谢 sets:
set1/1..16/;
set2/1..4/;
link(set1,set2):h,x;
endsets
max=@sum(link(i,j):h*x);
@for(set2(j):@sum(set1(i):x(i,j))>=1);
@for(set2(j):@sum(set1(i):x(i,j))<=2);
@for(set1(i):@sum(set2(j):x(i,j))>=0);
@for(set1(i):@sum(set2(j):x(i,j))<=4);
@sum(link(i,j) | j #le# @size(set2):@sum(link(i,j) | i #le# @size(set1):x(i,j)))=8;
@for(set1(i):
@for(set2(j): @bin(x(i,j))));
data:
h = 0.078838 0.060075 0.052251 0.065991 0.052251 0.035797 0.065911 0.052251 0.045319 0.029068 0.040378 0.077803 0.050714 0.034983 0.065991 0.052251
0.080657 0.051387 0.058591 0.06237 0.058591 0.037773 0.06237 0.058591 0.051288 0.034763 0.058536 0.084301 0.064077 0.045746 0.06237 0.058591
0.091519 0.056818 0.077022 0.060233 0.077022 0.02591 0.060233 0.077022 0.04915 0.040194 0.034811 0.067051 0.040352 0.043609 0.060233 0.077022
0.1168 0.064332 0.099849 0.075315 0.099849 0.03862 0.075315 0.099849 0.069347 0.05538 0.067568 0.097246 0.070552 0.066363 0.075315 0.099849;
enddata
试一下这个吧! 本帖最后由 数魔小子 于 2009-8-22 10:08 编辑
sets:
set1/1..4/:i;
set2/1..16/:j;
link(set1,set2):h,x;
endsets
max=@sum(link(i,j):h(i,j)*x(i,j));
@for(set1(i):@sum(link(i,j):x(i,j))=1);
@for(set2(j):@sum(link(i,j):x(i,j))<1);
@for(link(i,j):@bin(x(i,j)));
data:
h = 0.078838 0.060075 0.052251 0.065991 0.052251 0.035797 0.065911 0.052251 0.045319 0.029068 0.040378 0.077803 0.050714 0.034983
0.065991 0.052251
0.080657 0.051387 0.058591 0.06237 0.058591 0.037773 0.06237 0.058591 0.051288 0.034763 0.058536 0.084301 0.064077 0.045746 0.06237 0.058591
0.091519 0.056818 0.077022 0.060233 0.077022 0.02591 0.060233 0.077022 0.04915 0.040194 0.034811 0.067051 0.040352 0.043609 0.060233 0.077022
0.1168 0.064332 0.099849 0.075315 0.099849 0.03862 0.075315 0.099849 0.069347 0.05538 0.067568 0.097246 0.070552 0.066363 0.075315 0.099849;
enddata
我用的是LINGO9.0进行的运算,是学生版本还是没算出,中间的错误已改正。 学习...... 同意5#!!!!!!!!!!!!!!!!!!!!