У меня есть 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
Я хочу, чтобы х было 0.