AP0805414实验四求解非线性规划模型.docx
- 文档编号:27788285
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:15
- 大小:159.33KB
AP0805414实验四求解非线性规划模型.docx
《AP0805414实验四求解非线性规划模型.docx》由会员分享,可在线阅读,更多相关《AP0805414实验四求解非线性规划模型.docx(15页珍藏版)》请在冰豆网上搜索。
AP0805414实验四求解非线性规划模型
《数学建模》
实验指导书
姓名:
李继滨
班号:
AP08054
学号:
AP0805414
五邑大学数学物理系
二○○八年八月印刷
实验4指导书
实验项目名称:
求解非线性规划模型
所属课程名称:
数学建模
实验计划学时:
2学时
一、实验目的
掌握数学软件Lingo用集合步和循环语句等编程求解非线性规划模型。
二、实验内容和要求
(一)实验内容(钢管下料模型)
某钢管零售商从钢管厂进货,将钢管按照顾客的要求切割后售出,从钢管厂进货时原料钢管都是168米。
现有顾客需要968根12米、848根23米、1253根28米和988根35米的钢管。
1.因为零售商如果采用不同切割模式太多,将会导致生产过程复杂化,从而增加生产成本,所以该零售商规定采用的切割模式不超过3种。
请你确定下料方案。
2.若该零售商规定采用的切割模式不超过4种。
请你重新确定下料方案。
3.思考题
在上面下料问题中若不限制切割模式的数量,请你确定下料方案。
(二)要求
有问题分析、数学模型、Lingo的求解程序、程序的运行结果和所有问题的回答。
三、实验主要仪器设备和材料
每人一台计算机,要求已安装Lingo8.0以上版本。
四、实验方法、步骤及结果测试
(1)模型建立:
决策变量:
由于不同切割模式不超过3种,可以用
表示按照第i模式(i=1,2,3)切割的原料,显然它们应当是非负整数,设所使用的第i种切割模式下每根原料钢管生产12米,23米,28米和38米的钢管分别为
.
决策目标:
切割原料钢管的总根数最少,目标为
Min
约束条件为满足客户的需求,应有
每一种切割模式必须可行,合理,所以每根原料钢管的成品量不能超过168米,也不能少于157米,于是有:
为了把模型求解的范围缩小,我们再假设第一种全部用来切割12米的,一根可以切割14根,第二种全部用来切割23米的,一根可以切割7根,第三种一根可以用来切割4根28和1根35米的故最多要用70+122+988=1180根,又假设每根完全用完,没有剩余量,则最少要用
根,故有
模型求解:
将构成的模型输入LINGO中,程序如下:
Title钢管下料-最小化钢管根数的LINGO模型;
SETS:
NEEDS/1..4/:
LENGTH,NUM;
!
定义基本集合NEEDS及其属性LENGTH,NUM;
CUTS/1..3/:
X;
!
定义基本集合CUTS及其属性X;
PATTERNS(NEEDS,CUTS):
R;
!
定义派生集合PATTERNS(这是一个稠密集合)及其属性R;
ENDSETS
DATA:
LENGTH=12232835;
NUM=9688481253988;
C=168;
ENDDATA
min=@SUM(CUTS(I):
X(I));
!
目标函数;
@FOR(NEEDS(I):
@SUM(CUTS(J):
X(J)*R(I,J))>NUM(I));
!
满足需求约束;
@FOR(CUTS(J):
@SUM(NEEDS(I):
LENGTH(I)*R(I,J)) ! 合理切割模式约束; @FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J))>C -@MIN(NEEDS(I): LENGTH(I))+1); ! 合理切割模式约束; @SUM(CUTS(I): X(I))>600;@SUM(CUTS(I): X(I))<1180; ! 人为增加约束; @FOR(CUTS(I)|I#LT#@SIZE(CUTS): X(I)>X(I+1)); ! 人为增加约束; @FOR(CUTS(J): @GIN(X(J))); @FOR(PATTERNS(I,J): @GIN(R(I,J))); end 输出结果为: Localoptimalsolutionfoundatiteration: 265490 Objectivevalue: 603.0000 ModelTitle: 钢管下料-最小化钢管根数的LINGO模型 VariableValueReducedCost C168.00000.000000 LENGTH (1)12.000000.000000 LENGTH (2)23.000000.000000 LENGTH(3)28.000000.000000 LENGTH(4)35.000000.000000 NUM (1)968.00000.000000 NUM (2)848.00000.000000 NUM(3)1253.0000.000000 NUM(4)988.00000.000000 X (1)389.00001.000000 X (2)144.00001.000000 X(3)70.000001.000000 R(1,1)2.0000000.000000 R(1,2)0.0000000.000000 R(1,3)3.0000000.000000 R(2,1)2.0000000.000000 R(2,2)0.0000000.000000 R(2,3)1.0000000.000000 R(3,1)1.0000000.000000 R(3,2)6.0000000.000000 R(3,3)0.0000000.000000 R(4,1)2.0000000.000000 R(4,2)0.0000000.000000 R(4,3)3.0000000.000000 RowSlackorSurplusDualPrice 1603.0000-1.000000 220.000000.000000 30.0000000.000000 40.0000000.000000 50.0000000.000000 60.0000000.000000 70.0000000.000000 84.0000000.000000 911.000000.000000 1011.000000.000000 117.0000000.000000 123.0000000.000000 13577.00000.000000 14245.00000.000000 1574.000000.000000 由运算得出的数据可以知道: 总使用原料钢管的总根数为603根,第一种切割模式下一根原料钢管切割成2根12米、2根23米、1根28米和2根35米;第二种切割模式下一根原料钢管切割成6根28米;第三种切割模式下一根原料钢管切割成3根12米、1根23米和3根35米。 (2)模型建立: 决策变量: 由于不同切割模式不超过4种,可以用 表示按照第i模式(i=1,2,3、4)切割的原料,显然它们应当是非负整数,设所使用的第i种切割模式下每根原料钢管生产12米,23米,28米和38米的钢管分别为 . 决策目标: 切割原料钢管的总根数最少,目标为 Min 约束条件为满足客户的需求,应有 每一种切割模式必须可行,合理,所以每根原料钢管的成品量不能超过168米,也不能少于157米,于是有: 为了把模型求解的范围缩小,我们再假设第一种全部用来切割12米的,一根可以切割14根,第二种全部用来切割23米的,一根可以切割7根,第三种一根可以用来切割4根28米和1根35米的,第四种一根可以用来切割1根28米和4根35米的,故最多要用70+122+313+170=675根,又假设每根完全用完,没有剩余量,则最少要用 根,故有 模型求解: 将构成的模型输入LINGO中,程序如下: Title钢管下料-最小化钢管根数的LINGO模型; SETS: NEEDS/1..4/: LENGTH,NUM; ! 定义基本集合NEEDS及其属性LENGTH,NUM; CUTS/1..4/: X; ! 定义基本集合CUTS及其属性X; PATTERNS(NEEDS,CUTS): R; ! 定义派生集合PATTERNS(这是一个稠密集合)及其属性R; ENDSETS DATA: LENGTH=12232835; NUM=9688481253988; C=168; ENDDATA min=@SUM(CUTS(I): X(I)); ! 目标函数; @FOR(NEEDS(I): @SUM(CUTS(J): X(J)*R(I,J))>NUM(I)); ! 满足需求约束; @FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J)) ! 合理切割模式约束; @FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J))>C -@MIN(NEEDS(I): LENGTH(I))+1); ! 合理切割模式约束; @SUM(CUTS(I): X(I))>600;@SUM(CUTS(I): X(I))<675; ! 人为增加约束; @FOR(CUTS(I)|I#LT#@SIZE(CUTS): X(I)>X(I+1)); ! 人为增加约束; @FOR(CUTS(J): @GIN(X(J))); @FOR(PATTERNS(I,J): @GIN(R(I,J))); 输出结果为: Localoptimalsolutionfoundatiteration: 1066456452 Objectivevalue: 601.0000 ModelTitle: 钢管下料-最小化钢管根数的LINGO模型 VariableValueReducedCost C168.00000.000000 LENGTH (1)12.000000.000000 LENGTH (2)23.000000.000000 LENGTH(3)28.000000.000000 LENGTH(4)35.000000.000000 NUM (1)968.00000.000000 NUM (2)848.00000.000000 NUM(3)1253.0000.000000 NUM(4)988.00000.000000 X (1)243.00001.000000 X (2)208.00001.000000 X(3)134.00001.000000 X(4)16.000001.000000 R(1,1)0.0000000.000000 R(1,2)4.0000000.000000 R(1,3)0.0000000.000000 R(1,4)9.0000000.000000 R(2,1)0.0000000.000000 R(2,2)4.0000000.000000 R(2,3)0.0000000.000000 R(2,4)1.0000000.000000 R(3,1)1.0000000.000000 R(3,2)1.0000000.000000 R(3,3)6.0000000.000000 R(3,4)0.0000000.000000 R(4,1)4.0000000.000000 R(4,2)0.0000000.000000 R(4,3)0.0000000.000000 R(4,4)1.0000000.000000 RowSlackorSurplusDualPrice 1601.0000-1.000000 28.0000000.000000 30.0000000.000000 42.0000000.000000 50.0000000.000000 60.0000000.000000 70.0000000.000000 80.0000000.000000 92.0000000.000000 1011.000000.000000 1111.000000.000000 1211.000000.000000 139.0000000.000000 143.0000000.000000 1519.000000.000000 1635.000000.000000 1774.000000.000000 18118.00000.000000 由计算结果可知: 总使用原料钢管的总根数为601根,第一种切割模式下一根原料钢管切割成1根28米、4根35米;第二种切割模式下一根原料钢管切割成4根12米、4根23米、1根28米;第三种切割模式下一根原料钢管切割成6根28米;第四种切割模式下一根原料钢管切割成9根12米、1根23米、1根35米。 (3)思考题: 由于不限制切割模式的种类,故需要算出总切割模式总数,用C++程序来计算。 在MicrosoftVisualC++6.0中输入以下程序: #include usingnamespacestd; intc=0,sum;//sum表示满足客户要求所用的原料钢管的根数的上限; inti,j,k,l; //某种模式时,i表示切割12米的根数,j表示切割23米的根数,k表示切割28米的根数,l表示切割35米的根数, inta,e; intd1,d2,d3,d4; intsumi=0,sumj=0,sumk=0,suml=0; intmain() { e=(12*968+23*848+28*1253+35*988)/168-1;//需要钢管原料的下限 for(l=0;l<5;l++) for(k=0;k<7;k++) for(j=0;j<8;j++) for(i=0;i<15;i++) {a=12*i+23*j+28*k+35*l;//某种模式时,一根钢管用掉得长度 if(a>=157&&a<=168) {c=c+1;//符合条件的模式数量值 sumi=sumi+i; sumj=sumj+j; sumk=sumk+k; suml=suml+l; cout<<""<<"第"< "<<"切割"< < //分别输出符合条件的切割模式 } } d1=968/sumi; d2=848/sumj; d3=1253/sumk; d4=988/suml; if(d1>d2) {if(d1>d3) if(d1>d4)sum=d1*c; elsesum=d4*c; elseif(d3>d4)sum=d3*c; elsesum=d4*c; } else {if(d2>d3) if(d2>d4)sum=d2*c; elsesum=d4*c; else if(d3>d4)sum=d3*c; elsesum=d4*c; } cout<<""<<"总共有"< cout<<"需要钢管原料的下限为: "< cout<<"需要钢管原料的上限为: "< return0; } 运行结果为: 由输出结果可知: 总共有70种切割模式 下限为598根,上限为910根; 由 (1) (2)问可知,不超过70种模式时有: 将构成的模型输入LINGO中,程序如下: Title钢管下料-最小化钢管根数的LINGO模型; SETS: NEEDS/1..4/: LENGTH,NUM; ! 定义基本集合NEEDS及其属性LENGTH,NUM; CUTS/1..70/: X; ! 定义基本集合CUTS及其属性X; PATTERNS(NEEDS,CUTS): R; ! 定义派生集合PATTERNS(这是一个稠密集合)及其属性R; ENDSETS DATA: LENGTH=12232835; NUM=9688481253988; C=168; ENDDATA min=@SUM(CUTS(I): X(I)); ! 目标函数; @FOR(NEEDS(I): @SUM(CUTS(J): X(J)*R(I,J))>NUM(I)); ! 满足需求约束; @FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J)) ! 合理切割模式约束; @FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J))>C -@MIN(NEEDS(I): LENGTH(I))+1); ! 合理切割模式约束; @SUM(CUTS(I): X(I))>598;@SUM(CUTS(I): X(I))<910; ! 人为增加约束; @FOR(CUTS(I)|I#LT#@SIZE(CUTS): X(I)>X(I+1)); ! 人为增加约束; @FOR(CUTS(J): @GIN(X(J))); @FOR(PATTERNS(I,J): @GIN(R(I,J))); 输出结果为: 由于运行不了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AP0805414 实验 求解 非线性 规划 模型