matlab语言整数规划模型.docx
- 文档编号:24572958
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:17
- 大小:22.28KB
matlab语言整数规划模型.docx
《matlab语言整数规划模型.docx》由会员分享,可在线阅读,更多相关《matlab语言整数规划模型.docx(17页珍藏版)》请在冰豆网上搜索。
matlab语言整数规划模型
9.2.2线性规划
9.2.2.1基本数学原理
线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。
线性规划问题的标准形式是:
或
写成矩阵形式为:
其中,0为n维列向量。
线性规划的标准形式要求目标函数最小化,约束条件取等式,变量非负。
不符合这几个条件的线性模型要首先转化成标准形。
线性规划的求解方法主要是单纯形法(SimpleMethod),该法由Dantzig于1947年提出,以后经过多次改进。
单纯形法是一种迭代算法,它从所有基本可行解的一个较小部分中通过迭代过程选出最优解。
其迭代过程的一般描述为:
1.将线性规划化为典范形式,从而可以得到一个初始基本可行解x(0)(初始顶点),将它作为迭代过程的出发点,其目标值为z(x(0))。
2.寻找一个基本可行解x
(1),使z(x
(1))≤z(x(0))。
方法是通过消去法将产生x(0)的典范形式化为产生x
(1)的典范形式。
3.继续寻找较好的基本可行解x
(2),x(3),…,使目标函数值不断改进,即z(x
(1))≥z(x
(2))≥z(x(3))≥…。
当某个基本可行解再也不能被其它基本可行解改进时,它就是所求的最优解。
Matlab优化工具箱中采用的是投影法,它是单纯形法的一种变种。
9.2.2.2相关函数介绍
linprog函数
功能:
求解线性规划问题。
数学模型:
其中f,x,b,beq,lb和ub为向量,A和Aeq为矩阵。
语法:
x=linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
[x,fval]=linprog(...)
[x,fval,exitflag]=linprog(...)
[x,fval,exitflag,output]=linprog(...)
[x,fval,exitflag,output,lambda]=linprog(...)
描述:
x=linprog(f,A,b)求解问题minf'*x,约束条件为A*x<=b。
x=linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x=beq。
若没有不等式存在,则令A=[]、b=[]。
x=linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。
若没有等式约束,令Aeq=[]、beq=[]。
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。
该选项只适用于中型问题,缺省时大型算法将忽略初值。
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。
[x,fval]=linprog(...)返回解x处的目标函数值fval。
[x,lambda,exitflag]=linprog(...)返回exitflag值,描述函数计算的退出条件。
[x,lambda,exitflag,output]=linprog(...)返回包含优化信息的输出变量output。
[x,fval,exitflag,output,lambda]=linprog(...)将解x处的拉格朗日乘子返回到lambda参数中。
变量:
lambda参数
lambda参数是解x处的拉格朗日乘子。
它有以下一些属性:
l lambda.lower–lambda的下界。
l lambda.upper–lambda的上界。
l lambda.ineqlin–lambda的线性不等式。
l lambda.eqlin–lambda的线性等式。
其它参数意义同前。
算法:
大型优化算法 大型优化算法采用的是LIPSOL法,该法在进行迭代计算之前首先要进行一系列的预处理。
中型优化算法 linprog函数使用的是投影法,就象quadprog函数的算法一样。
linprog函数使用的是一种活动集方法,是线性规划中单纯形法的变种。
它通过求解另一个线性规划问题来找到初始可行解。
诊断:
大型优化问题 算法的第一步涉及到一些约束条件的预处理问题。
有些问题可能导致linprog函数退出,并显示不可行的信息。
在本例中,exitflag参数将被设为负值以表示优化失败。
若Aeq参数中某行的所有元素都为零,但Beq参数中对应的元素不为零,则显示以下退出信息:
Exitingduetoinfeasibility:
anallzerorowintheconstraintmatrixdoesnothaveazeroincorrespondingrighthandsizeentry.
若x的某一个元素没在界内,则给出以下退出信息:
Exitingduetoinfeasibility:
objectivef'*xisunboundedbelow.
若Aeq参数的某一行中只有一个非零值,则x中的相关值称为奇异变量。
这里,x中该成分的值可以用Aeq和Beq算得。
若算得的值与另一个约束条件相矛盾,则给出以下退出信息:
Exitingduetoinfeasibility:
Singletonvariablesinequalityconstraintsarenotfeasible.
若奇异变量可以求解但其解超出上界或下界,则给出以下退出信息:
Exitingduetoinfeasibility:
singletonvariablesintheequalityconstraintsarenotwithinbounds.
9.2.2.3应用实例
[[例二]生产决策问题
某厂生产甲乙两种产品,已知制成一吨产品甲需用资源A3吨,资源B4m3;制成一吨产品乙需用资源A2吨,资源B6m3,资源C7个单位。
若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200m3和210个单位,试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?
令生产产品甲的数量为x1,生产产品乙的数量为x2。
由题意可以建立下面的模型:
该模型中要求目标函数最大化,需要按照Matlab的要求进行转换,即目标函数为
首先输入下列系数:
f=[-7;-5];
A= [32
46
07];
b=[90;200;210];
lb=zeros(2,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb)
x=
14.0000
24.0000
fval=
-218.0000
exitflag=
1
output=
iterations:
5
cgiterations:
0
algorithm:
'lipsol'
lambda=
ineqlin:
[3x1double]
eqlin:
[0x1double]
upper:
[2x1double]
lower:
[2x1double]
由上可知,生产甲种产品14吨、乙种产品24吨可使创建的总经济价值最高。
最高经济价值为218万元。
exitflag=1表示过程正常收敛于解x处。
磁盘中本问题的M文件为opt22_2.m。
[例三]投资问题
某单位有一批资金用于四个工程项目的投资,用于各工程项目时所得到得净收益(投入资金的百分比)如下表所示:
表9-11工程项目收益表
工程项目
A
B
C
D
收益(%)
15
10
8
12
由于某种原因,决定用于项目A的投资不大于其它各项投资之和;而用于项目B和C的投资要大于项目D的投资。
试确定使该单位收益最大的投资分配方案。
用x1、x2、x3和x4分别代表用于项目A、B、C和D的投资百分数,由于各项目的投资百分数之和必须等于100%,所以
x1+x2+x3+x4=1
据题意,可以建立下面的数学模型:
将它转换为标准形式:
然后进行求解:
首先输入下列系数:
f=[-0.15;-0.1;-0.08;-0.12];
A= [1-1-1-1
0-1-11];
b=[0;0];
Aeq=[1111];
beq=[1];
lb=zeros(4,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);
x=
0.5000
0.2500
0.0000
0.2500
fval=
-0.1300
exitflag=
1
可见,四个项目的投资百分数分别为0.50、0.25、0.00和0.25时可使该单位获得最大的收益。
最大收益为13%。
过程正常收敛。
磁盘中本问题的M文件为opt22_3.m。
[例四]工件加工任务分配问题
某车间有两台机床甲和乙,可用于加工三种工件。
假定这两台机床的可用台时数分别为700和800,三种工件的数量分别为300、500和400,且已知用三种不同机床加工单位数量的不同工件所需的台时数和加工费用(如表 所示),问怎样分配机床的加工任务,才能既满足加工工件的要求,又使总加工费用最低?
表9-12机床加工情况表
机床类型
单位工作所需加工台时数
单位工件的加工费用
可用
台时数
工件1
工件2
工件3
工件1
工件2
工件3
甲
0.4
1.1
1.0
13
9
10
700
乙
0.5
1.2
1.3
11
12
8
800
设在甲机床上加工工件1、2和3的数量分别为x1、x2和x3,在乙机床上加工工件1、2和3的数量分别为x4、x5和x6。
根据三种工种的数量限制,有
x1+x4=300 (对工件1)
x2+x5=500 (对工件2)
x3+x6=400 (对工件3)
再根据机床甲和乙的可用总台时限制,可以得到其它约束条件。
以总加工费用最少为目标函数,组合约束条件,可以得到下面的数学模型:
首先输入下列系数:
f=[13;9;10;11;12;8];
A= [0.41.11000
0000.51.21.3];
b=[700;800];
Aeq=[100100
010010
001001];
beq=[300500400];
lb=zeros(6,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);
x=
0.0000
500.0000
0.0000
300.0000
0.0000
400.0000
fval=
1.1000e+004
exitflag=
1
可见,在甲机床上加工500个工件2,在乙机床上加工300个工件1、加工400个工件3可在满足条件的情况下使总加工费最小。
最小费用为11000元。
收敛正常。
磁盘中本问题的M文件为opt22_4.m。
[例五]裁料问题
在某建筑工程施工中需要制作10000套钢筋,每套钢筋由2.9m、2.1m和1.5m三种不同长度的钢筋各一根组成,它们的直径和材质不同。
目前在市场上采购到的同类钢筋的长度每根均为7.4m,问应购进多少根7.4m长的钢筋才能满足工程的需要?
首先分析共有多少种不同的套裁方法,该问题的可能材料方案如表9-13所示。
表9-13材料方案表
下料长度
(m)
裁 料 方 案 编 号i
1
2
3
4
5
6
7
8
2.9
2
1
1
1
0
0
0
0
2.1
0
2
1
0
3
2
1
0
1.5
1
0
1
3
0
2
3
4
料头长度
(m)
0.1
0.3
0.9
0
1.1
0.2
0.8
1.4
设以xi(i=1,2,…,8)表示按第i种裁料方案下料的原材料数量,则可得该问题的数学模型为:
首先输入下列系数:
f=[1;1;1;1;1;1;1;1];
Aeq=[20000000
02103210
10130234];
beq=[100001000010000];
lb=zeros(8,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,[],[],Aeq,beq,lb);
x=
1.0e+003*
5.0000
0.0000
0.0000
0.0000
1.6667
2.5000
0.0000
0.0000
fval=
9.1667e+003
所以最节省的情况需要9167根7.4m长的钢筋,其中第一种方案使用5000根,第五种方案使用1667根,第六种方案使用2500根。
磁盘中本问题的M文件为opt22_5.m。
[例六]工作人员计划安排问题
某昼夜服务的公共交通系统每天各时间段(每4小时为一个时间段)所需的值班人数如表 所示,这些值班人员在某一时段开始上班后要连续工作8个小时(包括轮流用膳时间),问该公交系统至少需要多少名工作人员才能满足值班的需要?
表9-14各时段所需值班人数表
班 次
时 间 段
所需人数
1
6:
00—10:
00
60
2
10:
00—14:
00
70
3
14:
00—18:
00
60
4
18:
00—22:
00
50
5
22:
00—2:
00
20
6
2:
00—6:
00
30
设xi为第i个时段开始上班的人员数,据题意建立下面的数学模型:
需要对前面六个约束条件进行形式变换,是不等式为非正不等式。
只需要在不等式两侧取负即可。
首先输入下列系数:
f=[1;1;1;1;1;1];
A=[-10000-1
-1-10000
0-1-1000
00-1-100
000-1-10
0000-1-1];
b=[-60;-70;-60;-50;-20;-30];
lb=zeros(6,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);
x=
41.9176
28.0824
35.0494
14.9506
9.8606
20.1394
fval=
150.0000
exitflag=
1
可见,只要六个时段分别安排42人、28人、35人、15人、10人和20人就可以满足值班的需要。
共计150人。
计算收敛。
磁盘中本问题的M文件为opt22_6.m。
[例七]厂址选择问题
考虑A、B、C三地,每地都出产一定数量的原料,也消耗一定数量的产品(见表9-15)。
已知制成每吨产品需3吨原料,各地之间的距离为:
A-B:
150km,A-C:
100km,B-C:
200km。
假定每万吨原料运输1km的运价是5000元,每万吨产品运输1km的运价是6000元。
由于地区条件的差异,在不同地点设厂的生产费用也不同。
问究竟在哪些地方设厂,规模多大,才能使总费用最小?
另外,由于其它条件限制,在B处建厂的规模(生产的产品数量)不能超过5万吨。
表9-15A、B、C三地出产原料、消耗产品情况表
地点
年产原料(万吨)
年销产品(万吨)
生产费用(万元/万吨)
A
20
7
150
B
16
13
120
C
24
0
100
令xij为由i地运到j地的原料数量(万吨),yij为由i地运往j地的产品数量(万吨),i,j=1,2,3(分别对应A、B、C三地)。
根据题意,可以建立问题的数学模型(其中目标函数包括原材料运输费、产品运输费和生产费):
首先输入下列系数:
f=[75;75;50;50;100;100;150;240;210;120;160;220];
A=[1-11-100330000
-11001-1003300
00-11-11000033
000000001100];
b=[20;16;24;5];
Aeq=[000000101010
000000010101];
beq=[7;13];
lb=zeros(12,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);
x=
0.0000
1.0000
0.0000
0.0000
0.0000
0.0000
7.0000
0.0000
0.0000
5.0000
0.0000
8.0000
fval=
3.4850e+003
exitflag=
1
要使总费用最小,需要B地向A地运送1万吨,A、B、C三地的建厂规模分别为7万吨、5万吨和8万吨。
最小总费用为3485元。
磁盘中本问题的M文件为opt22_7.m。
[例八]确定职工编制问题
某厂每日八小时的产量不低于1800件。
为了进行质量控制,计划聘请两种不同水平的检验员。
一级检验员的标准为:
速度25件/小时,正确率98%,计时工资4元/小时;二级检验员的标准为:
速度15件/小时,正确率95%,计时工资3元/小时。
检验员每错检一次,工厂要损失2元。
现有可供厂方聘请的检验员人数为一级8人和二级10人。
为使总检验费用最省,该工厂应聘一级、二级检验员各多少名?
设需要一级和二级检验员的人数分别为x1名和x2名,由题意可以建立下面的模型:
利用Matlab进行求解之前需要将第三个约束条件进行转换,两边取负以后得到
首先输入下列系数:
f=[40;36];
A=[10
01
-5-3];
b=[8;10;-45];
lb=zeros(2,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);
x=
8.0000
1.6667
fval=
380.0000
exitflag=
1
可见,招聘一级检验员8名、二级检验员2名可使总检验费最省,约为380.00元。
计算收敛。
磁盘中本问题的M文件为opt22_8.m。
[例九]生产计划的最优化问题
某工厂生产A和B两种产品,它们需要经过三种设备的加工,其工时如表9-16所示。
设备一、二和三每天可使用的时间分别不超过12、10和8小时。
产品A和B的利润随市场的需求有所波动,如果预测未来某个时期内A和B的利润分别为4和3千元/吨,问在那个时期内,每天应安排产品A、B各多少吨,才能使工厂获利最大?
表9-16生产产品工时表
产 品
设备一
设备二
设备三
A(小时/吨)
3
3
4
B(小时/吨)
4
3
2
设备每天最多可
工作时数(小时)
12
10
8
设每天应安排生产产品A和B分别为x1吨和x2吨,由题意建立下面的数学模型:
首先转换目标函数为标准形式:
输入下列系数:
f=[-4;-3];
A=[34
33
42];
b=[12;10;8];
lb=zeros(2,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);
x=
0.8000
2.4000
fval=
-10.4000
所以,每天生产A产品0.80吨、B产品2.40吨可使工厂获得最大利润。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 语言 整数 规划 模型