Это проблема стоимости и объема, когда мы пытаемся найти оптимальный объем, который минимизирует стоимость.
Была использована функция минимизации от Scipy optimize: scipy.optimize.minimize
.
Total Cost = Total Purchasing Cost + Total Holding
Cost where:
Purchasing Cost = Cost1*V1+ Cost2*V2 + Cost3*V3
TV = Total Volume = V1 + V2 + V3
Holding Cost = Average Inventory * Value of Inventory * Cost of Capital (%)
Cost of Capital (%) = 0.1
1. Average Inventory = (Opening Inventory + Closing Inventory)/2
2. Closing Inventory = Opening Inventory + TV - c
c = consumption
The average inventory affects the total cost, and the closing inventory is related to the opening inventory as below:
Denote Opening Inventory = OI
Denote Closing Inventory = CI
The opening inventory at time 1 is the closing inventory at time 0
OI[i] = CI[i-1]
OI[1] = CI[0]
CI[i-1] = OI[i-1] + TV[i-1] - c[i-1]
CI[0] = OI[0] + TV[0] - c[0]
Приведенный ниже код является попыткой моделирования ограничения, при котором итоговый запас не может опуститься ниже 1200 или превысить 400
400 <= CI <= 1200
(Следует также отметить, что OI[0]
известен и является константой, тогда как OI[i]
от 1 до 27 зависит от TV
и c
.)
OI = np.zeros(n)
OI[0] = OI_init
CI = np.ones(n)
consumption = np.ones(n)*100
CI[0] = OI_init - consumption[0]
c = consumption[0]
# constraint for time 0 only
k1 = {'type': 'ineq', 'fun': lambda x, c=c: -(OI_init + x[0] + x[28] + x[56] -c -1200)}
k2 = {'type': 'ineq', 'fun': lambda x, c=c: OI_init + x[0] + x[28] + x[56] -c - 400}
cons.append(k1)
cons.append(k2)
# constraint for time 1 onwards
for factor in range(1,28):
OI_cur = 400
#consp_cur = consumption[factor]
k = {'type': 'ineq', 'fun': lambda x, OI_cur=OI_cur, i =factor: -(OI_cur + x[i] + x[i+28] + x[i+56] - 100 - 1200)}
m = {'type': 'ineq', 'fun': lambda x, OI_cur=OI_cur, i =factor: OI_cur + x[i] + x[i+28] + x[i+56] - 100 - 400}
cons.append(k)
cons.append(m)
Ожидаемый результат (или, скорее, желаемый результат) - это объем, который минимизируетстоимость, но сохраняет уровень запасов выше 400 и ниже 1200. Что мы хотим знать, так это как смоделировать ограничение инвентаря, которое обновляется при перемещении т от 1 до 28.
Пожалуйста, прости меня, если мое объяснение неубедительно исбиваю с толку, я впервые задаю вопрос, не стесняйтесь задавать вопросы для дальнейшего разъяснения!