我的头衔可能有点模糊,但我试图尽可能清楚。我将在下面解释我的意思:
我想创建一个动态编程算法,可以计算出你可以花费的最高金额,当你每年只能花费花费的时候,就是你从银行获得的利息。所以这意味着,如果有人的起始资本是35,000美元,那么这个人只能花费最高金额3500美元,利率为10%。
我想到了以下几点:
兴趣i(t)
或基本上可以花费的金额,在上面的示例中,这是3500。
支出e(t)
,所以你在那一年花的金额,所以这可能是3500以下的任何东西,例如我将使用1000。
利率r
,这说明了自己。
公式:i(t + 1) = i(t) + r * (i(t) - e(t))
,这意味着,您可以在明年支付的金额,是您今年获得的利息加上您支出后剩余的利率乘以。
我想要计算的是,例如,10年期间的最大支出总额,其中某一年的支出总是低于收到的利息。我不知道该怎么做,也不知道从哪里开始。
答案 0 :(得分:1)
所以,让我们改革你的问题。你有一个向量E =(e_1,e_2,...,e_n)。 您希望最大化点积<(1,1,...,1);(E)>有两个条件。
(1)每t的e_t> = 0 (2)每t的e_t< = i_t。
由于右边部分pf(2)中的每个条件都可以扩展为e_t,i_0和r的线性组合(你给出了一个递归公式),所有条件都可以一起写成
(2')e_t< = sum [j = 0..n] A_tj e_j或者
(2')c_t< = sum [j = 0..n] B_tj e_j,其中B_tj和c_t是一些固定比率,因此是n * n大小的矩阵和n大小的向量。
所以,现在你有一个经典的linear programming问题。我不会描述解决这些问题的所有技术,因为它们中有很多,而你的案例是规范的。
UPD通过公式显式扩展约束
i(t + 1)=(1 + r)i(t) - e(t)
e(0)< = i(0)
e(1)< = i(1)= i(0)(1 + r) - e(0)
e(2)< = i(2)= i(1)(1 + r) - e(1)=(i(0)(1 + r) - e(0))(1 + r) - e (1)=
i(0)(1 + r)^ 2 - e(0)(1 + r) - e(1)
可以通过归纳证明,但也可以看到 e(t)< = i(0)(1 + r)^ t - e(0)(1 + r)^(t - 1) - e(1)(1 + r)^(t - 2) - ... - e(t - 2) - (1 + r) - e(t - 1)
改革这一点,
e(t)+ sum [j = t-1..0](1 + r)^(t-1-j)e(j)< = i(0)(1 + r)^ t >
所以,我们有一个方阵:
现在您的约束形式为sum [j = 0..n] B_tj e(j)< = c_t
(显然,c_t = i(0)(1 + r)^ t)
这是LP约束的规范形式。