Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- z = [0, 7, 6, 3, 0, 2]
- keepCost = 10 # Стоимость хранения
- N = 6 # Количество месяцев
- CAPACITY = 20 # Максимальное количество станков
- INITIAL_MACHINES = 3 # Начальное количество станков
- INCOMING = 5 # Сколько можем привезти за месяц
- tripCost = 50 # Стоимость рейса: постоянные затраты
- moveCost = 10 # Стоимость доставки одного станка
- def dinProg(keepCost=10,tripCost=50):
- INF = 10 ** 6 # Заведомо большее число, чем любая стоимость
- B = [[INF] * (N + 1) for i in range(CAPACITY + 1)]
- S = [[INF] * (N + 1) for i in range(CAPACITY + 1)]
- F = [[INF] * (N + 1) for i in range(CAPACITY + 1)]
- F[INITIAL_MACHINES][0] = 0 # Начальное количество станков
- for m in range(0, N):
- for i in range(CAPACITY + 1):
- price = F[i][m]
- for k in range(INCOMING + 1):
- machines = i - z[m] + k
- if 0 <= machines <= CAPACITY:
- incoming_costs = (k * moveCost + tripCost if k > 0 else 0)
- keeping_costs = (machines) * keepCost
- new_price = price + keeping_costs + incoming_costs
- if new_price < F[machines][m + 1]:
- F[machines][m + 1] = new_price
- B[machines][m + 1] = i
- S[machines][m + 1] = k
- B=np.array(B)
- S=np.array(S)
- plan = [i for i in range(N)]
- t=0;
- for i in range(len(plan)):
- plan[N-i-1] = S[:,N-i][t]
- q=B[:,N-i][t]
- t=q
- return(plan)
- def countCost(arr,keep=10,trip=50,init=3):
- cost=0
- for i in range(len(arr)):
- init = init + arr[i] - z[i]
- if arr[i]>0:
- cost+=trip
- cost+=arr[i]*moveCost
- cost+= init * keep
- return cost
- plan1=dinProg()
- print('План перевозок для изначального условия:',plan1,', стоимость доставки при изначальном плане:',countCost(plan1))
- print()
- keep=10
- trip=50
- planSt=dinProg()
- planNew=planSt
- while planSt==planNew:
- keep+=1
- planNew = dinProg(keep,trip)
- print('Изначальный план перевозок:',planSt,', стоимость доставки при изначальном плане:',countCost(planSt))
- print('Новый план перевозок:',planNew,', стоимость доставки при новом плане:',countCost(planNew,keep))
- print('Стоимость хранения при которой изменился план:',keep)
- keep=10
- planSt=dinProg(keep,trip)
- planNew=planSt
- while planSt==planNew:
- trip-=1
- planNew = dinProg(keep,trip)
- print()
- print('Изначальный план перевозок:',planSt,', стоимость доставки при изначальном плане:',countCost(planSt))
- print('Новый план перевозок:',planNew,', стоимость доставки при новом плане:',countCost(planNew,50,trip))
- print('Фиксированная стоимость перевозки при которой изменился план:',trip)
- z = [0, 7, 6, 3, 0, 3]
- planPlus1 = dinProg()
- print('План перевозок с учётом того, что в конце должен на складе должен остаться один станок:',planPlus1,', стоимость доставки заданном условии:',countCost(planPlus1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement