投资风险收益、多目标规划(约束法、线性加权)

pull/2/head
盘荣博 5 months ago
parent 811bec3b62
commit f5a4c8b16b

@ -0,0 +1,140 @@
%投资利益与风险1998A题
%模型一 给定风险承受程度,求最大利益
f=[-0.05,-0.27,-0.19,-0.185,-0.185];
%A矩阵
%A=[0,0.025,0.015,0.055,0.026]; %错误
%b=[1,1,1,1,1];
A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];%不等式约束条件矩阵
%Aeq、beq
Aeq=[1,1.01,1.02,1.045,1.065];
beq=1;
%lb
%lb=0; %错误
lb=zeros(5,1);
%可承担风险率a
a=(0:0.001:0.05);
%保存最优解
Q=zeros(1,length(a));
xx=[];%空矩阵存放最优解对应x的值
for i=1:length(a)
b=a(i)*ones(4,1);
[x,y]=linprog(f,A,b,Aeq,beq,lb);
Q(i)=-y;%注意取负!!!
xx=[xx;x'];
end
plot(a,Q,'*r');
xlabel("风险率");
ylabel("最大收益");
%模型二 收益、风险按权重组合
% f0=[-0.05,-0.27,-0.19,-0.185,-0.185];
% w=(0:0.1:1);
% Aeq=[1,1.01,1.02,1.045,1.065,0];
% beq=1;
% lb=0;
% xx=[];
% Q=zeros(1,length(w));
% A=[zeros(5,1),diag([0.025,0.025,0.055,0.065,0])];
% b=ones(5,1);
% for i=1:length(w)
% f=[-w(i)*f0,1-w(i)];
% b=x(end)*b;
% [x,y]=linprog(f,A,b,Aeq,beq,lb);
% Q(i)=-y;
% xx=[xx,x'];
% end
% plot(w,Q,'*r');
%模型二 收益、风险按权重组合
clc; clear; close all; format long g;
M = 10000;
prob = optimproblem;
x = optimvar('x', 6, 1, 'LowerBound', 0);
r = [0.05, 0.28, 0.21, 0.23, 0.25];
p = [0, 0.01, 0.02, 0.045, 0.065];
q = [0, 0.025, 0.015, 0.055, 0.026]';
%w = 0:0.1:1;
w = 0.7:0.03:1;
V = [];
Q = [];
X = [];
prob.Constraints.con1 = (1 + p) * x(1:end-1) == M;
prob.Constraints.con2 = (q(2:end).* x(2:end-1))<= x(end); %下标从1开始
for i = 1:length(w)
prob.Objective = w(i) * x(end) - (1 - w(i)) * (r - p) * x(1:end-1); %注意大小写
[sol, fval, flag, out] = solve(prob);
xx = sol.x;
V = [V, max(q.* xx(1:end-1))];
Q = [Q, (r - p) * xx(1:end-1)];
X = [X, xx];
plot(V, Q, '*-');
grid on;
xlabel('风险');
ylabel('收益');
end
%模型三:达到一定盈利水平,极小化风险
clc; clear; close all; format long g;
M=10000;
k=1500:100:3000;
prob = optimproblem;
x = optimvar('x', 5, 1, 'LowerBound', 0);%下界为0
r = [0.05, 0.28, 0.21, 0.23, 0.25];
p = [0, 0.01, 0.02, 0.045, 0.065];
q = [0, 0.025, 0.015, 0.055, 0.026]';
V = [];
Q = [];
X = [];
t = optimvar('t', 'LowerBound', 0);
%prob.Objective=max(q.*x);%极小化风险
for i=1:length(k)
prob.Objective = t; % 极小化风险
prob.Constraints.con1 = (1 + p) * x == M;
prob.Constraints.con2=((r-p)*x>=k(i));%达到一定盈利水平
prob.Constraints.con3=(q.*x<=t);
[sol,fval,flag,out]=solve(prob);
if flag==1
xx=sol.x;
X=[X,xx];
Q=[Q,(r-p)*xx];
V=[V,fval];
else
xx=-1*ones(5,1);
X=[X,xx];
Q=[Q,-1];
V=[V,-1];
end
end
plot(k,V,'*-');
Loading…
Cancel
Save