- 在线时间
- 1336 小时
- 最后登录
- 2024-5-28
- 注册时间
- 2007-9-30
- 听众数
- 65
- 收听数
- 6
- 能力
- 0 分
- 体力
- 12971 点
- 威望
- 4 点
- 阅读权限
- 150
- 积分
- 5195
- 相册
- 12
- 日志
- 34
- 记录
- 36
- 帖子
- 2362
- 主题
- 70
- 精华
- 1
- 分享
- 1
- 好友
- 513
独孤求败
TA的每日心情 | 擦汗 2018-4-26 23:29 |
---|
签到天数: 1502 天 [LV.Master]伴坛终老
- 自我介绍
- 紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。
群组: 计量经济学之性 群组: LINGO |
6#
发表于 2015-7-28 13:54
|只看该作者
|
|邮箱已经成功绑定
刚才又试了一下,结果会有出入,主要是识别问题。实践当中,推荐大家还是写上指标最好,这样能避免错误。
针对你这个例子,两种方法都不会报错,但结果会有出入,因为LINGO把这两种情况识别为了不同的模型,我在下面解释。
首先是写明下标的情况,- model:
- sets:
- row/1..5/;
- col/1..5/;
- links(row,col):a,x;
- endsets
- data:
- a=3 8 2 10 3
- 8 7 2 9 7
- 6 4 2 7 5
- 8 4 2 3 5
- 9 10 6 9 10;
- enddata
- min=@sum(links:a*x);
- @for(links:@bnd(0,x,2));
- @for(row(i):@sum(col(j):x(i,j))=1);
- @for(col(j):@sum(row(i):x(i,j))=1);
- end
复制代码 用Generate/display model把这个模型在LINGO里展开,得到的结果是:- MODEL:
- [_1] MIN= 3 * X_1_1 + 8 * X_1_2 + 2 * X_1_3 + 10 * X_1_4 + 3 * X_1_5 + 8 * X_2_1 +
- 7 * X_2_2 + 2 * X_2_3 + 9 * X_2_4 + 7 * X_2_5 + 6 * X_3_1 + 4 * X_3_2 + 2 * X_3_3
- + 7 * X_3_4 + 5 * X_3_5 + 8 * X_4_1 + 4 * X_4_2 + 2 * X_4_3 + 3 * X_4_4 + 5 *
- X_4_5 + 9 * X_5_1 + 10 * X_5_2 + 6 * X_5_3 + 9 * X_5_4 + 10 * X_5_5;
- [_2] X_1_1 + X_1_2 + X_1_3 + X_1_4 + X_1_5 = 1;
- [_3] X_2_1 + X_2_2 + X_2_3 + X_2_4 + X_2_5 = 1;
- [_4] X_3_1 + X_3_2 + X_3_3 + X_3_4 + X_3_5 = 1;
- [_5] X_4_1 + X_4_2 + X_4_3 + X_4_4 + X_4_5 = 1;
- [_6] X_5_1 + X_5_2 + X_5_3 + X_5_4 + X_5_5 = 1;
- [_7] X_1_1 + X_2_1 + X_3_1 + X_4_1 + X_5_1 = 1;
- [_8] X_1_2 + X_2_2 + X_3_2 + X_4_2 + X_5_2 = 1;
- [_9] X_1_3 + X_2_3 + X_3_3 + X_4_3 + X_5_3 = 1;
- [_10] X_1_4 + X_2_4 + X_3_4 + X_4_4 + X_5_4 = 1;
- [_11] X_1_5 + X_2_5 + X_3_5 + X_4_5 + X_5_5 = 1;
- @BND( 0, X_1_1, 2); @BND( 0, X_1_2, 2); @BND( 0, X_1_3, 2);
- @BND( 0, X_1_4, 2); @BND( 0, X_1_5, 2); @BND( 0, X_2_1, 2);
- @BND( 0, X_2_2, 2); @BND( 0, X_2_3, 2); @BND( 0, X_2_4, 2);
- @BND( 0, X_2_5, 2); @BND( 0, X_3_1, 2); @BND( 0, X_3_2, 2);
- @BND( 0, X_3_3, 2); @BND( 0, X_3_4, 2); @BND( 0, X_3_5, 2);
- @BND( 0, X_4_1, 2); @BND( 0, X_4_2, 2); @BND( 0, X_4_3, 2);
- @BND( 0, X_4_4, 2); @BND( 0, X_4_5, 2); @BND( 0, X_5_1, 2);
- @BND( 0, X_5_2, 2); @BND( 0, X_5_3, 2); @BND( 0, X_5_4, 2);
- @BND( 0, X_5_5, 2);
- END
复制代码 运行结果:
Global optimal solution found.
Objective value: 21.00000
Infeasibilities: 0.000000
Total solver iterations: 11
最优解为21
接着,把i 和j 去掉,- model:
- sets:
- row/1..5/;
- col/1..5/;
- links(row,col):a,x;
- endsets
- data:
- a=3 8 2 10 3
- 8 7 2 9 7
- 6 4 2 7 5
- 8 4 2 3 5
- 9 10 6 9 10;
- enddata
- min=@sum(links:a*x);
- @for(links:@bnd(0,x,2));
- @for(row:@sum(col:x)=1);
- @for(col:@sum(row:x)=1);
- end
复制代码 同样,展开这个模型为:- MODEL:
- [_1] MIN= 3 * X_1_1 + 8 * X_1_2 + 2 * X_1_3 + 10 * X_1_4 + 3 * X_1_5 + 8 * X_2_1 +
- 7 * X_2_2 + 2 * X_2_3 + 9 * X_2_4 + 7 * X_2_5 + 6 * X_3_1 + 4 * X_3_2 + 2 * X_3_3
- + 7 * X_3_4 + 5 * X_3_5 + 8 * X_4_1 + 4 * X_4_2 + 2 * X_4_3 + 3 * X_4_4 + 5 *
- X_4_5 + 9 * X_5_1 + 10 * X_5_2 + 6 * X_5_3 + 9 * X_5_4 + 10 * X_5_5;
- [_2] X_1_1 + X_1_2 + X_1_3 + X_1_4 + X_1_5 = 1;
- [_3] X_2_1 + X_2_2 + X_2_3 + X_2_4 + X_2_5 = 1;
- [_4] X_3_1 + X_3_2 + X_3_3 + X_3_4 + X_3_5 = 1;
- [_5] X_4_1 + X_4_2 + X_4_3 + X_4_4 + X_4_5 = 1;
- [_6] X_5_1 + X_5_2 + X_5_3 + X_5_4 + X_5_5 = 1;
- [_7] X_1_1 + X_1_2 + X_1_3 + X_1_4 + X_1_5 = 1;
- [_8] X_2_1 + X_2_2 + X_2_3 + X_2_4 + X_2_5 = 1;
- [_9] X_3_1 + X_3_2 + X_3_3 + X_3_4 + X_3_5 = 1;
- [_10] X_4_1 + X_4_2 + X_4_3 + X_4_4 + X_4_5 = 1;
- [_11] X_5_1 + X_5_2 + X_5_3 + X_5_4 + X_5_5 = 1;
- @BND( 0, X_1_1, 2); @BND( 0, X_1_2, 2); @BND( 0, X_1_3, 2);
- @BND( 0, X_1_4, 2); @BND( 0, X_1_5, 2); @BND( 0, X_2_1, 2);
- @BND( 0, X_2_2, 2); @BND( 0, X_2_3, 2); @BND( 0, X_2_4, 2);
- @BND( 0, X_2_5, 2); @BND( 0, X_3_1, 2); @BND( 0, X_3_2, 2);
- @BND( 0, X_3_3, 2); @BND( 0, X_3_4, 2); @BND( 0, X_3_5, 2);
- @BND( 0, X_4_1, 2); @BND( 0, X_4_2, 2); @BND( 0, X_4_3, 2);
- @BND( 0, X_4_4, 2); @BND( 0, X_4_5, 2); @BND( 0, X_5_1, 2);
- @BND( 0, X_5_2, 2); @BND( 0, X_5_3, 2); @BND( 0, X_5_4, 2);
- @BND( 0, X_5_5, 2);
- END
复制代码 运行得到的结果为:
Global optimal solution found.
Objective value: 14.00000
Infeasibilities: 0.000000
Total solver iterations: 0
最优解为14.
为什么会有差异?
仔细观察展开后的两个模型会发现,LING把这两种情况识别为了不同的模型。原因是在省略i j的情况下,LINGO把模型按照“先行后列"的形式进行识别。
所以最好不要省略下标。
|
|