基本假设:
- 设M=1便于计算
- 总体风险用投资项目Si中最大的一个风险来度量
符号
- Si——第i种投资项目
- ri,pi,qi——分别为Si的平均收益率,风险损失率,交易费率
- Xi投资Si的金额
目标函数
- MAX sumXi(ri-pi)
- MIN (max(qixi))
约束条件
- sumXi(1+pi)=M
- Xi>=0
思路:
双目标函数求解,只能将其中一个设为目标函数,另一个约束在给定的范围内作为约束条件
以下程序以MAX sum(Xi(ri-pi))作为目标函数
1.确定目标函数:MAX sum(Xi(ri-pi))
2.确定约束条件:(X=[x0;x1;x2;x3;x4])
(1)等式条件:x0(银行存款不用交交易费)+1.01x1+1.02x2+1.045x3+1.065x4=1
(2)不等式条件:0.025x1<=a;0.015x2<=a;0.055x3<=a;0.026x4<=a
(3)自变量取值条件:Xi>=0
//线性规划实现代码示例
a=0; //将风险控制在a以下
while (a<0.1)
c=[-0.05 -0.27 -0.19 -0.185 -0.185]; // 求MAX值,故需转换符号,求MIN -z
// 不等式约束,最大风险小于a转换为每个风险均小于a
A=[0 0.025 0 0 0;0 0 0.015 0 0;0 0 0 0.055 0;0 0 0 0 0.026];
b=[a;a;a;a];
// 等式约束条件
Aeq=[1 1.01 1.02 1.045 1.065];
beq=[1];
// 自变量取值约束条件
vlb=[0;0;0;0;0];
vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub);
Q=-fval; // 收益率转回正值
plot(a,Q,'.');hold on //每次只画一个点,不关
a=a+0.001;
end
xlabel('a');ylabel('Q');