一、投资策略规划问题详细
你所掌握的算法知识帮助你从 Acme 计算机公司获得了一份令人兴奋的工作,签约奖金 1 万美元。你决定利用这笔钱进行投资,目标是 10 年后获得最大回报。你决定请 Amalgamated 投资公司管理你的投资,该公司的投资回报规则如下:
该公司提供 n 种不同的投资产品,从 1~n 编号。在第 j 年,第 i 种投资产品的回报率为 $r_{ij}$。换句话说,如果你在第 j 年在第 i 种投资产品投入 d 美元,那么在第 j 年年底,你会得到 $d \cdot r_{ij}$ 美元。回报率是有保证的,即未来 10 年每种投资产品的回报率均已知。你每年只能做出一次投资决定。在每年年底,你既可以将钱继续投入到上一年选择的投资产品中,也可以转移到其他投资产品中(转移到已有的投资产品,或者新的投资产品)。如果跨年时你不做投资转移,需要支付 $f_1$ 美元的费用。否则,需要支付 $f_2$ 美元的费用,其中 $f_2 > f_1$。
a. 如上所述,本问题允许你每年将钱投入到多种投资产品中。证明:存在最优投资策略,每年都将所有钱投入到单一投资产品中(记住最优投资策略只需最大化 10 年的回报,无需关心任何其他目标,如最小化风险)。 b. 证明:规划最优投资策略问题具有最优子结构性质。 c. 设计最优投资策略规划算法,分析算法时间复杂度。 d. 假定 Amalgamated 投资公司在上述规则上又加入了新的限制条款,在任何时刻你都不能在任何单一投资产品中投入 15000 美元以上。证明:最大化 10 年回报问题不再具有最优子结构性质。
二、存在最优投资策略:每年都将所有钱投入到单一投资产品中
这个问题可以通过动态规划来解决。我们首先定义一个状态表示,以便在每个决策点上找到最优的投资策略。
假设我们定义 dp[i][j] 表示在第 i 年选择第 j 种投资产品所能获得的最大回报。我们需要递归地计算这些状态,并考虑到不同投资产品之间的转移费用。
(一)状态转移方程
为了计算 dp[i][j] ,我们需要考虑两种情况:
- 继续投资于同一个产品。
- 转移投资到不同的产品。
因此,我们有:
$$dp[i][j] = \max(dp[i-1][j] * r_{ji} - f_1, \max_{k \neq j}(dp[i-1][k] * r_{ji} - f_2))$$
其中:
- $f_2$ 是进行投资转移的费用。
- $f_1$ 是不做投资转移的费用。
- $r_{ji}$ 是第 i 年第 j 种投资产品的回报率。
- $r_{k,i-1}$ 是第 i−1 年第 k 种投资产品的回报率。
(二)初始条件与最优策略
对于初始年份,我们假设初始投入金额为 d:
$$dp[0][j] = d$$
通过上述状态转移方程,我们可以构建一个 dp 数组,并逐步填充每一年的最优投资策略。最终的答案是:
$$\max_{j} dp[10][j]$$
(三)证明最优策略总是将所有钱投入到单一投资产品中
为了证明存在最优策略每年将所有钱投入到单一投资产品中,我们注意到:
- 在每个时间点上,我们通过动态规划的状态转移方程求得了每一年中每个投资产品的最优决策。
- 如果存在一种最优策略每年将钱分散到多个投资产品,那么这些策略的收益可以通过组合这些投资产品的单一投资策略来模拟。因此,总存在一种单一投资策略与分散投资策略具有相同或更高的回报。
- 因此,通过动态规划找到的最优策略,本质上每年都会选择一个最优的单一投资产品来最大化回报。
综上所述,基于动态规划求解,我们总能找到每年投入单一投资产品的最优策略,从而最大化 10 年的总回报。
三、证明:规划最优投资策略问题具有最优子结构性质
(一)问题描述和基本假设
我们有 n 种投资产品,每种产品在每年的回报率为 $r_{ij}$。我们每年只能选择一种产品进行投资,并且在转换投资产品时需要支付不同的费用 $f_1$(不转换)和 $f_2$(转换)。
最优子结构性质意味着,一个问题的最优解包含其子问题的最优解。
(二)直观证明
我们从最优解的角度出发,考虑最后一年的投资决策,然后向前推导每一年的投资决策。
假设在第 10 年,我们的投资产品选择是最优的。如果我们选择在第 10 年投资产品 j,这意味着从第 9 年到第 10 年的投资决策也是最优的。
假设在第 9 年,我们选择了投资产品 i,并在第 10 年转移到投资产品 j。那么,最优策略必须保证第 9 年的投资产品 i 是在第 8 年的最优决策基础上选择的。
我们考虑第 8 年的投资决策,如果第 9 年投资产品 i 是最优的,那么第 8 年的投资决策也是在所有可能的投资产品中选择的最优方案。


