- 在线时间
- 1150 小时
- 最后登录
- 2017-1-14
- 注册时间
- 2013-1-3
- 听众数
- 97
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7367 点
- 威望
- 20 点
- 阅读权限
- 150
- 积分
- 3110
- 相册
- 0
- 日志
- 0
- 记录
- 2
- 帖子
- 1299
- 主题
- 21
- 精华
- 2
- 分享
- 0
- 好友
- 298
TA的每日心情 | 奋斗 2014-3-2 00:26 |
---|
签到天数: 243 天 [LV.8]以坛为家I
|
嗯,不错的问题!
楼主的代码是没有问题的,其实程序中唯一的错误是数据段中NUM=50 10 20 15,楼主误将第四个数据输入成25了,改正后得到如下结果(仅给出部分相关结果):
Local optimal solution found.
Objective value: 28.00000
Extended solver steps: 11
Total solver iterations: 770
Model Title: 钢管下料 - 最小化钢管根数的LINGO模型
Variable Value Reduced Cost
X( 1) 10.00000 0.000000
X( 2) 10.00000 2.000000
X( 3) 8.000000 1.000000
如果楼主还想了解其它方案,可以参见《LINGO和Excel在数学建模中的作用》这本书p52-p53,程序代码如下:
MODEL:
SETS:
CUTFA/1..3/:X;
!切割方法3种,X表示对应每种切割方法的钢管原材料根数;
BUJ/1..4/:L,NEED;
!四种部件,L是部件长度,NEED是每种部件的需求量;
SHUL(CUTFA,BUJ):N;
!第i种切割方法所切割出的第j种部件的数量用Nij表示;
ENDSETS
DATA:
L=4 5 6 8; NEED=50 10 20 15;
ZL=19; !ZL是每根钢管原材料的长度;
ENDDATA
MIN=@SUM(CUTFA:X);
!目标函数是3种切割方法所切割的钢管总根数最少;
@FOR(BUJ(J):@SUM(CUTFA(I):N(I,J)*X(I))>=NEED(J));
!切割出的每种部件总数满足需求量;
@FOR(CUTFA(I):@SUM(BUJ(J):N(I,J)*L(J))<=ZL);
!每种切割方法切割出的部件长度之和必须小于19;
@FOR(CUTFA(I):@SUM(BUJ(J):N(I,J)*L(J))>=16);
!每种切割方法切割出的部件长度之各大于15(余料小于4);
@FOR(SHUL:@GIN(N));@FOR(CUTFA:@GIN(X));
!N和X都是整数;
END
运行结果如下(部分重要结果):
Local optimal solution found.
Objective value: 28.00000
Extended solver steps: 107
Total solver iterations: 2995
Variable Value Reduced Cost
ZL 19.00000 0.000000
X( 1) 10.00000 1.000000
X( 2) 10.00000 1.000000
X( 3) 8.000000 1.000000
N( 1, 1) 2.000000 0.000000
N( 1, 2) 1.000000 0.000000
N( 1, 3) 1.000000 0.000000
N( 1, 4) 0.000000 0.000000
N( 2, 1) 3.000000 0.000000
N( 2, 2) 0.000000 0.000000
N( 2, 3) 1.000000 0.000000
N( 2, 4) 0.000000 0.000000
N( 3, 1) 0.000000 0.000000
N( 3, 2) 0.000000 0.000000
N( 3, 3) 0.000000 0.000000
N( 3, 4) 2.000000 0.000000
另外,楼主在贴代码里最好选用高级模式,勾选右边的“禁用表情”,这样更方便大家阅读代码,谢谢支持!
|
|