这是暑假在学校实验室做的第一道建模题,我负责编程。所有程序都是用lingo实现的,因为太久都没碰lingo了,格式什么的几乎都忘了。
这是我们论文的一部分,程序在后面。如果有人看到,有问题欢迎留言。
开放式基金投资最优决策
某开放式基金现有总额为15亿元的资金可用于投资,目前共有8个项目可供管理人选择,每个项目可重复投资。根据专家经验,对每个项目投资总额不能太高,应有上限。这些项目所需要的投资额已知,一般情况下投资一年后各项目所得利润也可估算出来,如表1所示。
表1 单位:万元
项目编号 | A1 | A2 | A3 | A4 | A5 | A6 | A7 | A8 |
投资额 | 6700 | 6600 | 4850 | 5500 | 5800 | 4200 | 4600 | 4500 |
年利润 | 1139 | 1056 | 727.5 | 1265 | 1160 | 714 | 1840 | 1575 |
上 限 | 34000 | 27000 | 30000 | 22000 | 30000 | 23000 | 25000 | 23000 |
请帮该公司解决以下问题:
(1)就表1提供的数据,应该投资哪些项目,使得第一年所得利润最高?
(2)在具体投资这些项目时,实际还会出现项目之间互相影响的情况。公司咨询有关专家后,得到以下可靠信息:同时投资项目A1,A3,它们的年利润分别是1005万元,1018.5万元;同时投资项目A4,A5,它们的年利润分别是1045万元,1276万元;同时投资项目A2,A6,A7,A8,它们的年利润分别是1353万元,840万元,1610万元,1350万元,该基金应如何投资?
(3)如果考虑投资风险,则应如何投资,使收益尽可能大,而风险尽可能小。投资项目总体风险可用投资项目中最大的一个风险来衡量。专家预测出各项目的风险率,如表2所示。
表2 各项目的风险率
项目编号 | A1 | A2 | A3 | A4 | A5 | A6 | A7 | A8 |
风险率(%) | 32 | 15.5 | 23 | 31 | 35 | 6.5 | 42 | 35 |
(4)开放式基金一般要保留适当的现金,降低客户无法兑现的风险。在这种情况下,将专家的信息都考虑进来,基金该如何决策,使得尽可能降低风险,而一年后所得利润尽可能多?
(5)这个项目投资,是必须资金全部到位才有利润,还是只要第一期资金到位启动后就可以随便投资,然后利润率按第一期利润和投资之比来计算?
某开放式基金现有总额为15亿元的资金可用于投资,目前共有8个项目可供选择,每个项目可重复投资且有各自的投资上限。本文要解决的是在考虑不同因素情况下的最优投资方案,需建立规划模型。
针对问题一:建立线性规划模型,将最高利润作为目标函数,以各项目投资份数作为变量,将各项目投资额上限以及总资金上限等作为约束条件,运用软件,则可得到利润最高为36798万元时的项目投资方案。
针对问题二:因某些项目组合投资后会改变年利润,为判断是否同时投资,则以每个项目的投资份数作为变量,并引入0-1变量,仍以最高利润作为目标函数,以各项目投资额上限、变量之间的约束、总资金上限等作为约束条件,建立整数线性规划模型,运用软件进行编程,则可得到利润最高为37607万元时的项目投资方案。
针对问题三:要考虑两个目标的规划:利润尽可能大、风险尽可能小。求解投资方案总年利润的表达式与上一问相同,将项目投资额与风险率的乘积取大值后,可得到最小风险评估指标的表达式,取其作为目标函数,并将利润限制在一定的范围内,转化为新的约束条件,建立多目标非线性规划模型,运用软件编写程序求得。
针对问题四:本题要考虑保留适当现金,利润尽可能大,风险尽可能小这三个目标的规划。在问题三模型基础上改为以最高总年利润作为目标函数,仍以0-1变量、投资份数作为变量,新增两个约束:投资者可接纳的最高风险评估指标值以及最高总投资额,将三目标规划问题转化为单目标规划问题进行求解。
关键词:线性规划模型;0-1整数规划;多目标规划模型;主要目标函数法;软件
一 问题重述
问题背景
某开放式基金现有总额为15亿元的资金可用于投资,目前共有8个项目可供管理人选择,每个项目可重复投资。根据专家经验,对每个项目投资总额不能太高,应有上限。这些项目所需要的投资额已知,一般情况下投资一年后各项目所得利润也可估算出来。
问题的提出
问题一:通过已知的投资额、年利润等数据(见附件一表1)求出如何投资项目使得第一年所得利润最高。
问题二:在具体投资这些项目时,实际还会出现项目之间互相影响的情况。公司咨询有关专家后,得到以下可靠信息:同时投资项目它们的年利润分别是1005万元,1018.5万元;同时投资项目它们的年利润分别是1045万元,1276万元;同时投资项目它们的年利润分别是1353万元,840万元,1610万元,1350万元,求利润最高的投资方案。
问题三:如果考虑投资风险,则应如何投资才能使收益尽可能大、风险尽可能小。投资项目总体风险可用投资项目中最大的一个风险来衡量。根据专家预测出的各项目风险率(见附件一表2)给出投资方案。
问题四:开放式基金一般要保留适当的现金,降低客户无法兑现的风险,还要考虑组合投资时年利润的改变,以及各项目的风险率,此时基金该如何决策,使得尽可能降低风险,而一年后所得利润尽可能多。
求解问题一利润最高时各项目投资份数的程序
model:
title 开放式基金投资;
!定义集合及变量;
sets:
project/1..8/:x,b,c,d;
endsets
!对已知变量赋值;
data:
b=6700,6600,4850,5500,5800,4200,4600,4500;
c=1139,1056,727.5,1265,1160,714,1840,1575;
d=34000,27000,30000,22000,30000,23000,25000,23000;
Enddata
max=@sum(project(i):x(i)*c(i));
@for(project(i):x(i)*b(i)<d(i));
@sum(project(i):x(i)*b(i))<150000;
@for(project(i):@gin(x(i)));
End
求解问题二利润最高时各项目投资方案的程序
model:
title 开放式3;
sets:
project/1..8/:x,b,d;
yi/1..2/:;
ye/1..3/:m;
profit(yi,project):c;
Endsets
!对已知变量赋值;
data:
b=6700,6600,4850,5500,5800,4200,4600,4500;
c=1139,1056,727.5,1265,1160,714,1840,1575,
1005,1353,1018.5,1045,1276,840,1610,1350;
d=34000,27000,30000,22000,30000,23000,25000,23000;
Enddata
max=m1*(c(2,1)*x(1)+c(2,3)*x(3))+m2*(c(2,4)*x(4)+c(2,5)*x(5))+m3*(c(2,2)*x(2)+c(2,6)*x(6)+c(2,7)*x(7)+c(2,8)*x(8))+(c(1,1)*x(1)+c(1,3)*x(3))*(1-m1)+(1-m2)*(c(1,4)*x(4)+c(1,5)*x(5))+(1-m3)*(c(1,2)*x(2)+c(1,6)*x(6)+c(1,7)*x(7)+c(1,8)*x(8));
@for(project(i):x(i)*b(i)<d(i));
@sum(project(i):x(i)*b(i))<150000;
x(1)*x(3)>m1;x(1)*x(3)<1000*m1;
x(4)*x(5)>m2;x(4)*x(5)<1000*m2;
x(2)*x(6)*x(7)*x(8)>m3;x(2)*x(6)*x(7)*x(8)<1000*m3;
@for(project(i):@gin(x(i)));
@bin(m1);@bin(m2);@bin(m3);
End
附件四:求解问题三利润大风险小的项目投资方案的程序
model:
title 开放式基金投资4;
sets:
project/1..8/:x,b,d,e;
yi/1..2/:;
profit(yi,project):c;
endsets
!对已知变量赋值;
data:
b=6700,6600,4850,5500,5800,4200,4600,4500;
c=1139,1056,727.5,1265,1160,714,1840,1575,
1005,1353,1018.5,1045,1276,840,1610,1350;
d=34000,27000,30000,22000,30000,23000,25000,23000;
e=0.32,0.155,0.23,0.31,0.35,0.065,0.42,0.35;
enddata
min=@max(project(i):x(i)*b(i)*e(i));
m1*(c(2,1)*x(1)+c(2,3)*x(3))+m2*(c(2,4)*x(4)+c(2,5)*x(5))+m3*(c(2,2)*x(2)+c(2,6)*x(6)+c(2,7)*x(7)+c(2,8)*x(8))
+(c(1,1)*x(1)+c(1,3)*x(3))*(1-m1)+(1-m2)*(c(1,4)*x(4)+c(1,5)*x(5))+(1-m3)*(c(1,2)*x(2)+c(1,6)*x(6)+c(1,7)*x(7)+c(1,8)*x(8))>37000;
@for(project(i):x(i)*b(i)<d(i));
@sum(project(i):x(i)*b(i))<150000;
m1=@if(x(1)*x(3)#eq#0,0,1);
m2=@if(x(4)*x(5)#eq#0,0,1);
m3=@if(x(2)*x(6)*x(7)*x(8)#eq#0,0,1);
@for(project(i):@gin(x(i)));
@bin(m1);@bin(m2);@bin(m3);
End
求解问题四保留现金且利润大风险小的项目投资方案的程序
model:
title 开放式基金投资5;
sets:
project/1..8/:x,b,d,e;
yi/1..2/:;
profit(yi,project):c;
endsets
!对已知变量赋值;
data:
b=6700,6600,4850,5500,5800,4200,4600,4500;
c=1139,1056,727.5,1265,1160,714,1840,1575,
1005,1353,1018.5,1045,1276,840,1610,1350;
d=34000,27000,30000,22000,30000,23000,25000,23000;
e=0.32,0.155,0.23,0.31,0.35,0.065,0.42,0.35;
enddata
max=m1*(c(2,1)*x(1)+c(2,3)*x(3))+m2*(c(2,4)*x(4)+c(2,5)*x(5))+m3*(c(2,2)*x(2)+c(2,6)*x(6)+c(2,7)*x(7)+c(2,8)*x(8))
+(c(1,1)*x(1)+c(1,3)*x(3))*(1-m1)+(1-m2)*(c(1,4)*x(4)+c(1,5)*x(5))+(1-m3)*(c(1,2)*x(2)+c(1,6)*x(6)+c(1,7)*x(7)+c(1,8)*x(8));
f=@max(project(i):x(i)*b(i)*e(i));
f<8120;
@sum(project(i):x(i)*b(i))<149100;
@for(project(i):x(i)*b(i)<d(i));
m1=@if(x(1)*x(3)#eq#0,0,1);
m2=@if(x(4)*x(5)#eq#0,0,1);
m3=@if(x(2)*x(6)*x(7)*x(8)#eq#0,0,1);
@for(project(i):@gin(x(i)));
@bin(m1);@bin(m2);@bin(m3);
end