我要管理N个公司,每个公司都产生360个月的现金流量。我想决定何时启动这些公司,以最大程度地提高收入的现值。令j为第j家公司。
每个公司也总是在恶化,因此第一个月的CF总是最高的,下个月的CF由指数函数定义,其中D_j和CF_0是已知的。
为简单起见,我的折扣率为10%,假设所有公司的折扣率为5%。
问题定义为:
\max\below{0\les_j}{\sum_{j=0}^{N}\sum_{t=0}^{360}{a_t\left(s_j\right)}}
a_t\left(s_j\right)=\ CF_{t,j}*\left(1+r\right)^{-\left(s_j+t\right)}
CF_{t,j}\ =\ CF_{0,\ j}*{(1-D_j)}^t
r\ =\ 10%
D_j\ =\ 5%
我有几个约束条件:
1)每个月,我的收入都不能超过一定数量,因为我受到监管。这个约束是一个360个月的序列。
2)每个月,我只能开设一定数量的公司。这也是360个月的限制顺序。这是由于我的房地产津贴。
3)我可以用来开办某些业务的预算取决于上个月的收入。
为了让我的生活更轻松,我假设我只有一家公司,只有3个月的CF。
CF = [1000,900,800]
意思是N = 3
我正在尝试使用scipy.optimize的最小化方法。
针对s的解决方案应为0,这意味着主要策略将是今天安排此业务。
我创建了一个边界以防止s为负。
import numpy as np
from scipy.optimize import minimize
def sum_prod(x):
return np.sum(np.array([1000, 900, 800]) * (1.1) ** (-1*(np.arange(3) + x)))
def objective(x):
return -sum_prod(x)
bnds = (0, None)
x0 = 5
sol = minimize(objective, x0, method = 'SLSQP', bounds=bnds)
xOpt = sol.x
total_prod = -sol.fun
我希望x为0。