算法只计算当年的利息时计算最大可能的支出总额?

时间:2015-09-23 17:06:04

标签: python algorithm dynamic-programming

我的头衔可能有点模糊,但我试图尽可能清楚。我将在下面解释我的意思:

我想创建一个动态编程算法,可以计算出你可以花费的最高金额,当你每年只能花费花费的时候,就是你从银行获得的利息。所以这意味着,如果有人的起始资本是35,000美元,那么这个人只能花费最高金额3500美元,利率为10%。

我想到了以下几点:

兴趣i(t)或基本上可以花费的金额,在上面的示例中,这是3500。

支出e(t),所以你在那一年花的金额,所以这可能是3500以下的任何东西,例如我将使用1000。

利率r,这说明了自己。

公式:i(t + 1) = i(t) + r * (i(t) - e(t)),这意味着,您可以在明年支付的金额,是您今年获得的利息加上您支出后剩余的利率乘以。

我想要计算的是,例如,10年期间的最大支出总额,其中某一年的支出总是低于收到的利息。我不知道该怎么做,也不知道从哪里开始。

1 个答案:

答案 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 所以,我们有一个方阵:

  • B_tj =(1 + r)^(t - 1 - j),j = 0..t-1,
  • B_tt = 1
  • 对于j> B_tj = 0;吨

现在您的约束形式为sum [j = 0..n] B_tj e(j)< = c_t
(显然,c_t = i(0)(1 + r)^ t)
这是LP约束的规范形式。