[数学建模]线性规划与matlab解法
2017-07-26 12:53
537 查看
1.1 线性规划问题(LinearProgramming,LP)
1.1.1 线性规划的实例和定义
某机床厂生产甲、乙两种机床,每台销售后的利润分别为4000元与3000元。生产甲机床需用A、B机器加工,加工时间分别为每台2h和1h;生产乙机床需用A、B、C三种机器加工,加工时间为每台1h。若每天可用于加工的机器时数为A机器10h、B机器8h和C机器7h,问该厂应生产甲、乙机床各几台,才能使总利润最大?设总利润为z ,生产x1 台甲机器,生产x2 台乙机器,则目标函数z=4x1+3x2
约束条件s.t.(subject to)⎧⎩⎨⎪⎪⎪⎪2x1+x2≤10,x1+x2≤8,x2≤7,x1,x2≤0。
1.1.2 线性规划问题的解的概念
一般情况目标函数max(z=∑ni=1cixi),约束条件s.t.{∑nj=1aij=bi,i=1,2,...,m,xj≥0,j=1,2,...,n。式中:bi≥0,i=1,2,...,m。
可行解:满足约束条件的解 x=[x1,...,xn]T ,使式子达到最大值为最优解
可行域:所有可行解构成的集合称为问题的可行域,记为R。
1.1.3 线性规划的Matlab标准形式及软件求解
标准形式为minx=fTX,s.t.⎧⎩⎨A⋅X≤B,Aeq⋅X=beq,lb≤X≤ub
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)
(f为价值向量,B 为资源向量,x返回决策向量的取值,fval返回目标函数的最优值,Aeq,beq对应线性等式约数,lb,ub分别对应决策向量的下界向量和上界向量。)
1.2.1 案例:投资的收益和风险
市场上有n中资产si(u=1,2,...,n)可以选择,现用数额为M的相当大的资金作一个时期的投资。这n种资产在这一时期内购买si 的平均收益率为ri ,风险损失率为 qi, 投资越分散,总的风险越小,总体风险可用投资的si 中最大的一个风险来度量。购买si 时要付交易费,费率为pi, 当购买额不超过给定值ui时,交易费按购买ui计算。另外,假定同期银行存款利率是r0 ,既无交易费又无风险(r0=5%)。si | ri/% | qi/% | pi/% | ui/% |
---|---|---|---|---|
s1 | 28 | 2.5 | 1 | 103 |
s2 | 21 | 1.5 | 2 | 198 |
s3 | 23 | 5.5 | 4.5 | 52 |
s4 | 25 | 2.6 | 6.5 | 40 |
1.2.2 模型的分析与建立
(1)总体风险用所投资的si 中最大的一个风险来衡量,即max{qixi|i=1,2,…,n}。(2)购买si(i=1,2,...,n) 所付交易费是一个分段函数,即
交易费 = {pixi,xi>ui,piui,xi≤ui。
而题目所给的定值ui(单位:元)相对总投资M很少,piui 更小,这样购买si 的净收益可以简化为(ri−pi)xi。
(3)要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型。
目标函数为{max∑ni=0(ri−pi)xi,min(max1≤i≤n(qixi))。
(4)模型优化。
①在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限a,时最大的一个风险率为a,即qixiM≤a(i=1,2,...,n), 可找到相应的投资方案。这样把多目标规划变成一个目标的线性规划。
模型一:固定风险水平,优化收益
max∑ni=0(1+pi)xi,s.t.{qixiM≤a,i=1,2,...,n,∑ni=0(1+pi)xi=M,xi≥0,i=0,1,...,n。
②在实际投资中,若投资者希望总盈利至少达到水平k以上,在风险最小的情况下寻求相应的投资组合。
模型二:固定盈利水平,极小化风险
min(max1≤i≤n(qixi))。s.t.⎧⎩⎨∑ni=0(ri−pi)xi≥k,∑ni=0(1+pi)xi=M,xi≥0,i=0,1,2,...,n。
③投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资组合。因此对风险,收益分别赋予权重s(0<s≤1)和s−1,s称为投资偏好系数。
模型三:带有权值的风险收益模型
min(s⋅max1≤i≤n(qixi))−(1−s)∑ni=0(ri−pi)xi,s.t.{∑ni=0(1+pi)xi=M,xi≥0,i=0,1,2,...,n。
1.2.3 模型的求解
模型一:min f=[−0.05,−0.27,−0.19,−0.185,−0.185]⋅[x0,x1,x2,x3,x4]T,s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪x0+1.01x1+1.02x2+1.045x3+1.065x4=1,0.025x1≤a,0.015x2≤a,0.055x3≤a,0.026x4≤a,xi≥0,i=0,1,...,4。
clc,clear a=0; hold on while a<0.05 c=[-0.05,-0.27,-0.19,-0.185,-0.185]; A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])]; b=a*ones(4,1); Aeq=[1,1.01,1.02,1.045,1.065]; beq=1; LB=zeros(5,1); [x,Q]=linprog(c,A,b,Aeq,beq,LB); Q=-Q; plot(a,Q,'*k'); a = a + 0.001; end xlabel('a'),ylabel('Q')
相关文章推荐
- octave学习数学建模(一 线性规划问题)
- 数学之路(3)-机器学习(3)-常用算法-线性规划之几何解法
- 数学建模算法与程序之线性规划
- 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)
- 数学建模 | MATLAB学习 | 非线性规划
- 数学建模(一)线性规划
- 经济金融领域简单数学建模和分析:MATLAB成本曲线方程和销售收入直线方程
- 初学数学建模软件MATLAB的笔记
- matlab实现之线性规划
- 数学建模 MATLAB的取整函数
- 【数学建模】MATLAB数值积分与微分
- MATLAB数学建模练习(1)-线性规划
- 数学建模常用Matlab/Lingo/c代码总结系列——整数规划问题
- 基于数学建模的数学实验学习笔记一 MATLAB软件基础
- 数学建模专栏 | 第七篇:MATLAB连续模型求解方法
- 数学(线性规划):UVAoj 10498 Happiness
- 数学建模常用Matlab/Lingo/c代码总结系列——参数估计
- 【转】MATLAB实现构造Euler环游图的算法——数学建模
- 线性规划问题的matlab求解
- matlab 线性规划函数-linprog