动态规划法之投资问题_算法分析与设计
2011-12-30 10:52
471 查看
算法分析与设计之动态规划法
——投资问题
一 问题描述:投资问题就是考虑如何把有限资源分配给若干个工程的问题。
二 给定条件:1.资源总数(设为a)
2.工程个数(设为n)
3.每项工程投资的利润(不同数目的投资所获得的利润不同),用向量Gi (1≦i≦n)表示。
n
三 问题求解:求出一个a的分划x1 , x2 ,…..,
xn ,0≦xi≦a,
且∑xi≦a,使得以下式表示的利润为最大:
i=1
n
G(a)= ∑Gi (xj )
0≦xj≦a
i=1
其中Gi (xj )是把资源xj分配给第I项工程能获得的最大利润。
四 问题分析:
i)若Gi是x的线性函数,则为线性规划问题。
ii)若Gi不是线性函数,则要用动态规划求最佳分配。
用总量为a的资金在n个项目上进行投资以取得最大的利润,可以转化为下述的问题:
将总量资金a分为两部分z(0≦z≦a)及a-z,分别用在第n个项目及剩下的n-1个项目上进行投资,获得的最大利润G(a)=max(第n个项目上资金量为z的利润与用a-z的资金在n-1个项目上投资的最大利润之和)。这样问题就转化为”求用a-z的资金在n-1个项目上投资的最大利润”,与我们的原问题”
求总量为a的资金在n个项目上进行投资以取得最大的利润”性质完全一致,仅仅是问题的规模比原问题少了一个项目,如此将问题的规模细化下去,一直到项目数为1为止,则问题迎刃而解。我们在对原问题进行”分而治之”的过程当中,最终实现了最优化的求解。
五 问题解决方案:
设fi (x):前i个项目共投资资金x所产生的最大利润;di
(x):产生fi (x)在项目i上的资金数。
由上分析可给出投资问题的动态规划函数方程:
f1 (x)= G1 (x);
d1 (x)=x x=0,1……a
fi (x)=max[Gi (z)+ fi-1 (x-z)]
z=0,1……x; x=0,1……a
di (x)=产生fi (x)的z值
i=2,3…..n;
六 问题举例:
设有8(万元)的投资可分给3个项目,每个项目的利润函数如下表(一)所示:
表(一)利润函数表
解题步骤:
第1步:设项目1是可用于投资的唯一项目,把x万元投资到项目1,利润为
f1 (x)= G1 (x)
这就得到表(二)的最后一行的值,投资到项目1的最优数量为
d1 (x)=x x=0,1……8;
第二步:设资金8万元可投资到项目1和项目2。由第1步已知任意数量的资源投资到项目1所产生的最优,所以下到各种和式中的最大值就是目前情况下的最大利润:
G2 (0)+ f1 (8)=0+100=100
G2 (1)+ f1 (7)=5+98=103
G2 (2)+ f1 (6)=15+95=110
G2 (3)+ f1 (5)=40+90=130
G2 (4)+ f1 (4)=80+60=140
G2 (5)+ f1 (3)=70+40=110
G2 (6)+ f1 (2)=73+15=88
G2 (7)+ f1 (1)=74+5=79
G2 (8)+ f1 (0)=75+0=75
可见将8万元投资于项目1和2
,所能获得的最大利润f2 (8)及投资到项目2的最优数量分别为:
f2 (8)=max[G2 (z)+ f1 (8-z)]=140
z=0,1……8
d2 (8)=4;
第三步:假设以任意x(≠8)万元投资到项目1和2,对每个x值,计算从项目1和2所产生的最优利润,即:
f2 (x)=max[G2 (z)+ f1 (x-z)]
z=0,1……x;
投资到项目2的数量为
d2 (x)=产生f2 (x)的z值。
得到所表(二)的结果。
第四步:将8万元投资于3个项目,这就是原问题。则f3 (8)应取下述各量的最大值:
G3 (0)+ f2 (8)=0+140=140
G3 (1)+ f2 (7)=4+120=124
G3 (2)+ f2 (6)=26+96=126
G3 (3)+ f2 (5)=40+90=130
G3 (4)+ f2 (4)=45+80=125
G3 (5)+ f2 (3)=50+40=90
G3 (6)+ f2 (2)=51+15=66
G3 (7)+ f2 (1)=52+5=57
G3 (8)+ f2 (0)=53+0=53
因此将8万元以最优方式投资到3个项目时所获得的最大利润及投资到项目3的分别为:
f3 (8) =G3 (0)+ f2 (8)=140
d3 (8)=0;
表(二)向项目1,2投资所到的利润表
因为d3 (8)=0;故剩下8万元要最优的投资到项目1和2中。由表(二)易知,当项目1和2
可用时,d2 (8)=4表示投资到项目2的最优数量,因此项目1应投资剩下的4万元。
——投资问题
一 问题描述:投资问题就是考虑如何把有限资源分配给若干个工程的问题。
二 给定条件:1.资源总数(设为a)
2.工程个数(设为n)
3.每项工程投资的利润(不同数目的投资所获得的利润不同),用向量Gi (1≦i≦n)表示。
n
三 问题求解:求出一个a的分划x1 , x2 ,…..,
xn ,0≦xi≦a,
且∑xi≦a,使得以下式表示的利润为最大:
i=1
n
G(a)= ∑Gi (xj )
0≦xj≦a
i=1
其中Gi (xj )是把资源xj分配给第I项工程能获得的最大利润。
四 问题分析:
i)若Gi是x的线性函数,则为线性规划问题。
ii)若Gi不是线性函数,则要用动态规划求最佳分配。
用总量为a的资金在n个项目上进行投资以取得最大的利润,可以转化为下述的问题:
将总量资金a分为两部分z(0≦z≦a)及a-z,分别用在第n个项目及剩下的n-1个项目上进行投资,获得的最大利润G(a)=max(第n个项目上资金量为z的利润与用a-z的资金在n-1个项目上投资的最大利润之和)。这样问题就转化为”求用a-z的资金在n-1个项目上投资的最大利润”,与我们的原问题”
求总量为a的资金在n个项目上进行投资以取得最大的利润”性质完全一致,仅仅是问题的规模比原问题少了一个项目,如此将问题的规模细化下去,一直到项目数为1为止,则问题迎刃而解。我们在对原问题进行”分而治之”的过程当中,最终实现了最优化的求解。
五 问题解决方案:
设fi (x):前i个项目共投资资金x所产生的最大利润;di
(x):产生fi (x)在项目i上的资金数。
由上分析可给出投资问题的动态规划函数方程:
f1 (x)= G1 (x);
d1 (x)=x x=0,1……a
fi (x)=max[Gi (z)+ fi-1 (x-z)]
z=0,1……x; x=0,1……a
di (x)=产生fi (x)的z值
i=2,3…..n;
六 问题举例:
设有8(万元)的投资可分给3个项目,每个项目的利润函数如下表(一)所示:
表(一)利润函数表
x | 0 1 2 3 4 5 6 7 8 |
G1 (x) G2 (x) G3 (x) | 0 5 15 40 80 90 95 98 100 0 5 15 40 60 70 73 74 75 0 4 26 40 45 50 51 52 53 |
x | 0 1 2 3 4 5 6 7 8 |
G1 (x) G2 (x) G3 (x) | 0 5 15 40 80 90 95 98 100 0 5 15 40 60 70 73 74 75 0 4 26 40 45 50 51 52 53 |
第1步:设项目1是可用于投资的唯一项目,把x万元投资到项目1,利润为
f1 (x)= G1 (x)
这就得到表(二)的最后一行的值,投资到项目1的最优数量为
d1 (x)=x x=0,1……8;
第二步:设资金8万元可投资到项目1和项目2。由第1步已知任意数量的资源投资到项目1所产生的最优,所以下到各种和式中的最大值就是目前情况下的最大利润:
G2 (0)+ f1 (8)=0+100=100
G2 (1)+ f1 (7)=5+98=103
G2 (2)+ f1 (6)=15+95=110
G2 (3)+ f1 (5)=40+90=130
G2 (4)+ f1 (4)=80+60=140
G2 (5)+ f1 (3)=70+40=110
G2 (6)+ f1 (2)=73+15=88
G2 (7)+ f1 (1)=74+5=79
G2 (8)+ f1 (0)=75+0=75
可见将8万元投资于项目1和2
,所能获得的最大利润f2 (8)及投资到项目2的最优数量分别为:
f2 (8)=max[G2 (z)+ f1 (8-z)]=140
z=0,1……8
d2 (8)=4;
第三步:假设以任意x(≠8)万元投资到项目1和2,对每个x值,计算从项目1和2所产生的最优利润,即:
f2 (x)=max[G2 (z)+ f1 (x-z)]
z=0,1……x;
投资到项目2的数量为
d2 (x)=产生f2 (x)的z值。
得到所表(二)的结果。
第四步:将8万元投资于3个项目,这就是原问题。则f3 (8)应取下述各量的最大值:
G3 (0)+ f2 (8)=0+140=140
G3 (1)+ f2 (7)=4+120=124
G3 (2)+ f2 (6)=26+96=126
G3 (3)+ f2 (5)=40+90=130
G3 (4)+ f2 (4)=45+80=125
G3 (5)+ f2 (3)=50+40=90
G3 (6)+ f2 (2)=51+15=66
G3 (7)+ f2 (1)=52+5=57
G3 (8)+ f2 (0)=53+0=53
因此将8万元以最优方式投资到3个项目时所获得的最大利润及投资到项目3的分别为:
f3 (8) =G3 (0)+ f2 (8)=140
d3 (8)=0;
表(二)向项目1,2投资所到的利润表
x | 0 1 2 3 4 5 6 7 8 |
f1 (x) d1 (x) f2 (x) d2 (x) | 0 5 15 40 80 90 95 98 100 0 1 2 3 4 5 6 7 8 0 5 15 40 80 90 95 120 140 0 1 2 3 0 0 0 3 4 |
x | 0 1 2 3 4 5 6 7 8 |
f1 (x) d1 (x) f2 (x) d2 (x) | 0 5 15 40 80 90 95 98 100 0 1 2 3 4 5 6 7 8 0 5 15 40 80 90 95 120 140 0 1 2 3 0 0 0 3 4 |
可用时,d2 (8)=4表示投资到项目2的最优数量,因此项目1应投资剩下的4万元。
相关文章推荐
- 算法设计与分析--01背包问题(动态规划法解决)
- 算法分析与设计之统计数字问题
- 【计算机算法分析】动态规划法——最大字段和问题
- 算法分析与设计基础(1)汉诺塔问题
- 计算机算法设计与分析之棋盘覆盖问题
- [算法设计与分析]3.3.1算术运算的妙用(开灯问题+间隔数)
- 【算法分析与设计】最小生成树问题
- 南邮算法分析与设计实验2 动态规划法
- 南邮算法分析与设计实验2 动态规划法
- 【计算机算法分析】动态规划法——矩阵连乘问题
- 算法设计与分析题目练习三:骑士旅游问题(回溯算法)
- 算法分析与设计——递归算法(二)1.汉罗塔问题
- 算法分析与设计——NP完全证明问题8.16
- 算法设计与分析--小算法问题总结
- 算法分析与设计-13-活动安排问题的贪心算法
- 算法分析与设计课程作业第十六周——NP-完全问题证明
- 算法分析与设计回溯法之n皇后问题
- n阶Hanoi塔问题 - 算法设计与分析实验1
- 计算机算法设计与分析作业01:分治法求解大数乘法+L型骨牌的棋盘覆盖问题
- 算法分析与设计2017-2-背包问题的贪心算法