《实验四求解非线性规划模型(8页).doc》由会员分享,可在线阅读,更多相关《实验四求解非线性规划模型(8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-第 1 页实验四求解非线性规划模型-第 2 页数学建模实验指导书姓名:吴家猛姓名:吴家猛班号:班号:AP08055AP08055学号:学号:AP0805530AP0805530五邑大学数学物理系五邑大学数学物理系二二八年八月印刷八年八月印刷实验 4 指导书实验项目名称:求解实验项目名称:求解非线性非线性规划模型规划模型所属课程名称:数学建模所属课程名称:数学建模实验计划学时:实验计划学时:2 学时学时一、一、实验目的实验目的掌握数学软件 Lingo 用集合步和循环语句等编程求解非线性规划模型。二、二、实验内容和要求实验内容和要求(一)实验内容(钢管下料模型)实验内容(钢管下料模型)某钢管零售
2、商从钢管厂进货,将钢管按照顾客的要求切割后售出,从钢管厂进货时原料钢管都是 168 米。现有顾客需要 968 根 12 米、848 根 23 米、1253 根 28米和 988 根 35 米的钢管。1.因为零售商如果采用不同切割模式太多,将会导致生产过程复杂化,从而增加生产成本,所以该零售商规定采用的切割模式不超过 3 种。请你确定下料方案。2.若该零售商规定采用的切割模式不超过 4 种。请你重新确定下料方案。3.思考题在上面下料问题中若不限制切割模式的数量,请你确定下料方案。(二)要求要求有问题分析、数学模型、Lingo 的求解程序、程序的运行结果和所有问题的回答。三、三、实验主要仪器设备和
3、材料实验主要仪器设备和材料每人一台计算机,要求已安装 Lingo 8.0 以上版本。四、四、实验方法、步骤及结果测试实验方法、步骤及结果测试-第 3 页(1 1)模型建立:)模型建立:决策变量:由于不同切割模式不超过 3 种,可以用ix表示按照第i模式(i=1,2,3)切割的原料,显然它们应当是非负整数,设所使用的第i种切割模式下每根原料钢管生产 12 米,23 米,28 米和 38 米的钢管分别为1234,iiiirrrr.决策目标:切割原料钢管的总根数最少,目标为Min123(1)xxx约束条件为满足客户的需求,应有每一种切割模式必须可行,合理,所以每根原料钢管的成品量不能超过 168 米
4、,也不能少于 157 米,于是有:为了把模型求解的范围缩小,我们再假设第一种全部用来切割 12 米的,一根可以切割 14 根,第二种全部用来切割 23 米的,一根可以切割7 根,第三种一根可以用来切割 4 根 28 和 1 根 35 米的故最多要用70+122+988=1180 根,又假设每根完全用完,没有剩余量,则最少要用(968 12848 23 1253 28988 35)168600根,故有模型求解:将构成的模型输入LINGO中,程序如下:Title 钢管下料-最小化钢管根数的LINGO模型;SETS:NEEDS/1.4/:LENGTH,NUM;!定义基本集合NEEDS及其属性LENG
5、TH,NUM;CUTS/1.3/:X;!定义基本集合CUTS及其属性X;PATTERNS(NEEDS,CUTS):R;!定义派生集合PATTERNS(这是一个稠密集合)及其属性R;ENDSETSDATA:LENGTH=12 23 28 35;NUM=968 848 1253 988;C=168;ENDDATAmin=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)C-MIN(NEEDS(I):LENGTH(I)+1
6、);!合理切割模式约束;SUM(CUTS(I):X(I)600;SUM(CUTS(I):X(I)X(I+1);-第 4 页!人为增加约束;FOR(CUTS(J):GIN(X(J);FOR(PATTERNS(I,J):GIN(R(I,J);end输出结果为:Local optimal solution found at iteration:265490Objective value:603.0000Model Title:钢管下料-最小化钢管根数的LINGO模型VariableValueReduced CostC168.00000.000000LENGTH(1)12.000000.000000L
7、ENGTH(2)23.000000.000000LENGTH(3)28.000000.000000LENGTH(4)35.000000.000000NUM(1)968.00000.000000NUM(2)848.00000.000000NUM(3)1253.0000.000000NUM(4)988.00000.000000X(1)389.00001.000000X(2)144.00001.000000X(3)70.000001.000000R(1,1)2.0000000.000000R(1,2)0.0000000.000000R(1,3)3.0000000.000000R(2,1)2.0000
8、000.000000R(2,2)0.0000000.000000R(2,3)1.0000000.000000R(3,1)1.0000000.000000R(3,2)6.0000000.000000R(3,3)0.0000000.000000R(4,1)2.0000000.000000R(4,2)0.0000000.000000R(4,3)3.0000000.000000RowSlack or SurplusDual Price1603.0000-1.000000220.000000.00000030.0000000.00000040.0000000.00000050.0000000.00000
9、060.0000000.00000070.0000000.00000084.0000000.000000911.000000.0000001011.000000.000000117.0000000.000000123.0000000.00000013577.00000.00000014245.00000.0000001574.000000.000000由运算得出的数据可以知道:总使用原料钢管的总根数为603根,第一种切割模式下一根原料钢管切割成2根12米、2根23米、1根28米和2根35米;第二种切割模式下一根原料钢管切割成6根28米;第三种切割模式下一根原料钢管切割成3根12米、1根23米和
10、3根35米。(2 2)模型建立:)模型建立:决策变量:由于不同切割模式不超过 4 种,可以用ix表示按照第i模式(i=1,2,3、4)切割的原料,显然它们应当是非负整数,设所使用的第i种切割模式下每根原料钢管生产-第 5 页12 米,23 米,28 米和 38 米的钢管分别为1234,iiiirrrr.决策目标:切割原料钢管的总根数最少,目标为Min1234(10)xxxx约束条件为满足客户的需求,应有每一种切割模式必须可行,合理,所以每根原料钢管的成品量不能超过 168 米,也不能少于 157 米,于是有:为了把模型求解的范围缩小,我们再假设第一种全部用来切割 12 米的,一根可以切割 14
11、 根,第二种全部用来切割 23 米的,一根可以切割7 根,第三种一根可以用来切割 4 根 28 米和 1 根 35 米的,第四种一根可以用来切割1根28米和4根35米的,故最多要用70+122+313+170=675根,又 假 设 每 根 完 全 用 完,没 有 剩 余 量,则 最 少 要 用(968 12848 23 1253 28988 35)168600根,故有模型求解:将构成的模型输入LINGO中,程序如下:Title 钢管下料-最小化钢管根数的LINGO模型;SETS:NEEDS/1.4/:LENGTH,NUM;!定义基本集合NEEDS及其属性LENGTH,NUM;CUTS/1.4/
12、:X;!定义基本集合CUTS及其属性X;PATTERNS(NEEDS,CUTS):R;!定义派生集合PATTERNS(这是一个稠密集合)及其属性R;ENDSETSDATA:LENGTH=12 23 28 35;NUM=968 848 1253 988;C=168;ENDDATAmin=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)C-MIN(NEEDS(I):LENGTH(I)+1);!合理切割模式约束;SUM(
13、CUTS(I):X(I)600;SUM(CUTS(I):X(I)X(I+1);!人为增加约束;FOR(CUTS(J):GIN(X(J);FOR(PATTERNS(I,J):GIN(R(I,J);-第 6 页输出结果为:Local optimal solution found at iteration:1066456452Objective value:601.0000Model Title:钢管下料-最小化钢管根数的LINGO模型VariableValueReduced CostC168.00000.000000LENGTH(1)12.000000.000000LENGTH(2)23.0000
14、00.000000LENGTH(3)28.000000.000000LENGTH(4)35.000000.000000NUM(1)968.00000.000000NUM(2)848.00000.000000NUM(3)1253.0000.000000NUM(4)988.00000.000000X(1)243.00001.000000X(2)208.00001.000000X(3)134.00001.000000X(4)16.000001.000000R(1,1)0.0000000.000000R(1,2)4.0000000.000000R(1,3)0.0000000.000000R(1,4)9
15、.0000000.000000R(2,1)0.0000000.000000R(2,2)4.0000000.000000R(2,3)0.0000000.000000R(2,4)1.0000000.000000R(3,1)1.0000000.000000R(3,2)1.0000000.000000R(3,3)6.0000000.000000R(3,4)0.0000000.000000R(4,1)4.0000000.000000R(4,2)0.0000000.000000R(4,3)0.0000000.000000R(4,4)1.0000000.000000RowSlack or SurplusDu
16、al Price1601.0000-1.00000028.0000000.00000030.0000000.00000042.0000000.00000050.0000000.00000060.0000000.00000070.0000000.00000080.0000000.00000092.0000000.0000001011.000000.0000001111.000000.0000001211.000000.000000139.0000000.000000143.0000000.0000001519.000000.0000001635.000000.0000001774.000000.
17、00000018118.00000.000000由计算结果可知:总使用原料钢管的总根数为601根,第一种切割模式下一根原料钢管切割成1根28米、4根35米;第二种切割模式下一根原料钢管切割成4根12米、4根23米、1根28米;第三种切割模式下一根原料钢管切割成6根28米;第四种切割模式下一根原料钢管切割成9根12米、1根23米、1根35米。(3)思考题:由于不限制切割模式的种类,故需要算出总切割模式总数,用C+程序来计算。-第 7 页在MicrosoftVisualC+6.0中输入以下程序:#includeusing namespace std;int c=0,sum;/sum表示满足客户要求
18、所用的原料钢管的根数的上限;int i,j,k,l;/某种模式时,i表示切割12米的根数,j表示切割23米的根数,k表示切割28米的根数,l表示切割35米的根数,int a,e;int d1,d2,d3,d4;int sumi=0,sumj=0,sumk=0,suml=0;int main()e=(12*968+23*848+28*1253+35*988)/168-1;/需要钢管原料的下限for(l=0;l5;l+)for(k=0;k7;k+)for(j=0;j8;j+)for(i=0;i=157&a=168)c=c+1;/符合条件的模式数量值sumi=sumi+i;sumj=sumj+j;s
19、umk=sumk+k;suml=suml+l;cout 第c种模式:切割i根12米的,j根23米的,k根28米的,l根35米的;d2)if(d1d3)if(d1d4)sum=d1*c;elsesum=d4*c;else if(d3d4)sum=d3*c;elsesum=d4*c;elseif(d2d3)if(d2d4)sum=d2*c;elsesum=d4*c;elseif(d3d4)sum=d3*c;elsesum=d4*c;cout 总共有c种模式endl;/总模式有的总值cout需要钢管原料的下限为:eendl;cout需要钢管原料的上限为:sumNUM(I);!满足需求约束;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)X(I+1);!人为增加约束;FOR(CUTS(J):GIN(X(J);FOR(PATTERNS(I,J):GIN(R(I,J);输出结果为:由于运行不了