Как максимизировать параметрическую последовательность суммирования в питоне - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть 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.

...