[数学建模]线性规划与matlab解法

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+x210,x1+x28,x27,x1,x20

1.1.2 线性规划问题的解的概念

一般情况

maxz=ni=1cixis.t.{nj=1aij=bii=1,2,...m,xj0,j=1,2,...,n:bi0,i=1,2,...m
可行解:满足约束条件的解 x =[x1,...,xn]T ,使式子达到最大值为最优解
可行域:所有可行解构成的集合称为问题的可行域,记为R。

1.1.3 线性规划的Matlab标准形式及软件求解

标准形式为
minx=fTX,s.t.AXB,AeqX=beq,lbXub
[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)购买 sii=1,2,...,n 所付交易费是一个分段函数,即
交易费 = {pixi,xi>ui,piui,xiui
而题目所给的定值 ui (单位:元)相对总投资M很少, piui 更小,这样购买 si 的净收益可以简化为 ripixi

(3)要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型。
目标函数为 {maxni=0ripixi,min(max1in(qixi))

(4)模型优化。
①在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限a,时最大的一个风险率为a,即 qixiMa(i=1,2,...,n) , 可找到相应的投资方案。这样把多目标规划变成一个目标的线性规划。

模型一:固定风险水平,优化收益
maxni=0(1+pi)xi,s.t.{qixiMa,i=1,2,...,n,ni=0(1+pi)xi=M,xi0,i=0,1,...,n

②在实际投资中,若投资者希望总盈利至少达到水平k以上,在风险最小的情况下寻求相应的投资组合。

模型二:固定盈利水平,极小化风险
min(max1in(qixi))s.t.ni=0(ripi)xik,ni=0(1+pi)xi=M,xi0,i=0,1,2,...,n

③投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资组合。因此对风险,收益分别赋予权重 s(0<s1)s1,s

模型三:带有权值的风险收益模型
min(smax1in(qixi))(1s)ni=0(ripi)xi,s.t.{ni=0(1+pi)xi=M,xi0,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.025x1a,0.015x2a,0.055x3a,0.026x4a,xi0,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')

[数学建模]线性规划与matlab解法_第1张图片

你可能感兴趣的:(数学建模,数学建模)