如何在python

时间:2019-04-18 18:07:03

标签: python optimization scipy sequence nonlinear-optimization

我要管理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。

0 个答案:

没有答案