1.线性规划问题

最基本的线性规划问题

在这里插入图片描述
难点:将条件整理为按照MATLAB所规定的固定格式–只求最小值、只用小于等于号,线性规划中的max要取负变成MATLAB里的min。需要多练习。

  • 实例:利用有限资源分配生产以取得最大效益等等。

例一

max z = 2x1 + 3x2 - 5x3,
s.t.   x1 +  x2 + x3 = 7,
      2x1 - 5x2 + x3 >= 10,
       x1 + 3x2 + x3 <= 12,
       x1,x2,x3 >=0

转换为MATLAB识别的形式:

min w = - 2x1  - 3x2 + 5x3,
s.t. [ -2 5 -1; 1 3 1]·[x1 ; x2 ; x3] <= [-10 ; 12],
     [1 1 1]·[x1 ; x2 ; x3] = 7,
     [x1 ; x2 ; x3]>=[0 ; 0 ; 0]

MATLAB代码:

f = [-2; -3; 5];        %价值向量,即待求值的系数矩阵
a = [-2 5 -1; 1 3 1];   %线性不等式约束的系数矩阵
b = [-10 ; 12]          %线性不等式约束的结果矩阵
aeq = [1,1,1];          %线性等式约束的系数矩阵        
beq = 7;                %线性等式约束的结果矩阵
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));%调用线性规划函数
%x返回决策向量的取值 
%y有时写作fval,返回目标函数的最优值,即此例中的max
%因为这里处理的时候把最大值取负了,所以要把y再变回来
x,y=-y;

结果:
在这里插入图片描述
所以x1=6.4286,x2=0.5714,x3=0时有最大值y=14.5714,如果有规定精度,再调整或取临近点代入计算比较即可。

例二

min z = 2x1 + 3x2 +  x3,
s.t.     x1 + 4x2 + 2x3 >= 8,
		3x1 + 2x2       >= 6,
		 x1,x2,x3       >= 0 

分析,

  1. 这里待求值为最小值,不用取负;
  2. 没有等式约束条件;
  3. 不等式约束条件均为大于等于关系,需要取负。

转换为MATLAB识别的形式:

min w = [2 ; 3 ; 1]·[x1 x2 x3]
 s.t. -[1 4 2 ; 3 2 0]·[x1 ; x2 ; x3] <= -[8 ; 6]
 	   [x1; x2; x3] >= zeros(3,1)

MATLAB代码:

clc;clear;
f = [2;3;1];
a = -[1 4 2;3 2 0]; %要取负 易错
b = -[8;6];         %取负
aeq = [];           %没有等式约束,但是不可省略,因为后面还有个zeros(3,1),只能用第三种调用方法
beq = [];
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1))
x,y

在这里插入图片描述

可以转化为线性规划的问题

引入绝对值的数学规划问题

min |x1| + |x2| + |x3| + …… + |xn|,
s.t. Ax <= b,

需要借助
x=u-v, |x|=u+v
u=(x+|x|)/2, v=(x-|x|)/2
进行代换,结果为:
min Σ(ui+vi)
s.t. [A , -A]·[u ; v] <= b
s.t. u,v>=0

例三

min z = |x1| + 2|x2| +3|x3| + 4|x4|
s.t. x1 - x2 - x3 + x4 <= -2,
     x1 - x2 + x3 -3x4 <= -1,
     x1 - x2 -2x3 +3x4 <= -1/2

转换格式,用u、v表示,这一步叫做 “线性化”
MATLAB代码:

clc;clear;
f = [1; 2; 3; 4];
c = [f;f];   %转换后 [u,v]的系数矩阵
a = [1 -1 -1 1; 1 -1 1 -3;1 -1 -2 3];
a = [a,-a];  %[u;v]的新的系数矩阵
b = [-2 ; -1; -1/2];
aeq = [];
beq = [];
[z,y]= linprog(c,a,b,aeq,beq,zeros(8,1))%边界条件也变成了一列的八个零
x=z(1:4)-z(5:8) %变换到原问题的解 x=u-v

在这里插入图片描述

例四

min(xi){max(yi)|εi|}
其中εi=xi-yi

这里需要利用换元思想简化问题。
令v=max(yi)|εi| 有待求值 min v
xi-yi <= v
yi-xi <= v

实例 投资的收益和风险

问题引入:

  • n种资产si可选
  • M:资金总量
  • ri:n种资产在这一时期内购买si的平均收益率
  • qi:n种资产在这一时期内购买si的风险损失率
  • pi:购买时的交易费费率
  • ui:购买量不超过ui时按ui购买
  • r0:同期银行存款利率,无交易费、无风险,视为定值。
  • xi:投资项目si的资金
  • a:投资风险度
  • Q:总体收益

符号规定与基本假设

为了解决实际问题,需要抽象出一些变量和理想条件。

  1. 投资数额相当大,可以假设M=1
  2. 投资越分散,总风险越小
  3. 总体风险用投资项目si中最大的一个风险来度量
  4. n+1种资产si之间相互独立
  5. 在投资时期,ri、qi、pi为定值,不受意外因素干扰
  6. 净收益和总体风险只受ri、qi、pi影响,不受其他因素干扰

总体风险

max{qi·xi} i=1,2,……

交易费

交易费 = pi·xi(xi>ui) ; pi·ui(xi<=ui)
但是实际ui非常小,而M非常大,可不考虑xi<=ui的情况。
净收益=(ri-qi)·xi

多目标规划模型

要使净收益尽量大,总体风险尽量小。所以是多目标规划模型。

- 目标函数:
	maxΣ(ri-qi)·xi
	min{max{qi·xi}}
- 约束条件:
	Σ(1+pi)xi = M
	xi >= 0
模型简化
固定风险水平,优化收益

给风险定一个界限a
qi·xi/M <= a
即要加入约束条件:qi·xi/M <= a,同时只考虑收益目标函数

- 目标函数:
	maxΣ(ri-qi)·xi
- 约束条件:
	Σ(1+pi)xi = M
	xi >= 0
	qi·xi/M <= a

MATLAB代码:

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])];%diag是对角线矩阵
    b = a*ones(4,1);
    aeq = [1 1.01 1.02 1.045 1.065];
    beq = 1;%M
    LB = zeros(5,1);%下限
    [x,Q]=linprog(c,A,b,aeq,beq,LB);
    Q=-Q;%因为这里是max,取负了
    plot(a,Q,'*k');
    a = a+0.001;
end

在这里插入图片描述

  • 一般都会选择转折点为最佳投资点,即图中的a=0.006,Q=0.2019
  • 此时x0=0,x1=0.24,x2=0.4,x3=0.1091,x4=0.2212

在这里插入图片描述

固定盈利水平,极小化风险

只考虑风险目标函数,同时为盈利定一个界限k

- 目标函数:
	min{max{qi·xi}}
- 约束条件:
	Σ(1+pi)xi = M
	xi >= 0
	Σ(ri-qi)·xi >= k
投资者对风险和收益的比例有自己的投资偏好

要对风险、收益分别赋予权重s和(1-s),s称为投资偏好系数。0<s<=1
也可以将目标函数简化为一个,因为两个有了联系。

- 目标函数:
	min s{max{qi·xi}} - (1-s)Σ(ri-qi)·xi 
- 约束条件:
	Σ(1+pi)xi = M
	xi >= 0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值