Advertisement
BagaevDanil

Untitled

May 23rd, 2023
759
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.62 KB | None | 0 0
  1. import numpy as np
  2. z = [0, 7, 6, 3, 0, 2]
  3. keepCost = 10  # Стоимость хранения
  4. N = 6  # Количество месяцев
  5. CAPACITY = 20  # Максимальное количество станков
  6. INITIAL_MACHINES = 3  # Начальное количество станков
  7. INCOMING = 5  # Сколько можем привезти за месяц
  8. tripCost = 50  # Стоимость рейса: постоянные затраты
  9. moveCost = 10  # Стоимость доставки одного станка
  10. def dinProg(keepCost=10,tripCost=50):
  11.     INF = 10 ** 6  # Заведомо большее число, чем любая стоимость
  12.     B = [[INF] * (N + 1) for i in range(CAPACITY + 1)]
  13.     S = [[INF] * (N + 1) for i in range(CAPACITY + 1)]
  14.     F = [[INF] * (N + 1) for i in range(CAPACITY + 1)]
  15.     F[INITIAL_MACHINES][0] = 0  # Начальное количество станков
  16.     for m in range(0, N):
  17.         for i in range(CAPACITY + 1):
  18.             price = F[i][m]
  19.             for k in range(INCOMING + 1):
  20.                 machines = i - z[m] + k
  21.                 if 0 <= machines <= CAPACITY:
  22.                     incoming_costs = (k * moveCost + tripCost if k > 0 else 0)
  23.                     keeping_costs = (machines) * keepCost
  24.                     new_price = price + keeping_costs + incoming_costs
  25.                     if new_price < F[machines][m + 1]:
  26.                         F[machines][m + 1] = new_price
  27.                         B[machines][m + 1] = i
  28.                         S[machines][m + 1] = k
  29.     B=np.array(B)
  30.     S=np.array(S)
  31.     plan = [i for i in range(N)]
  32.     t=0;
  33.     for i in range(len(plan)):
  34.         plan[N-i-1] = S[:,N-i][t]
  35.         q=B[:,N-i][t]
  36.         t=q
  37.     return(plan)
  38. def countCost(arr,keep=10,trip=50,init=3):
  39.     cost=0
  40.     for i in range(len(arr)):
  41.         init = init + arr[i] - z[i]
  42.         if arr[i]>0:
  43.             cost+=trip
  44.         cost+=arr[i]*moveCost
  45.         cost+= init * keep
  46.     return cost
  47. plan1=dinProg()
  48. print('План перевозок для изначального условия:',plan1,', стоимость доставки при изначальном плане:',countCost(plan1))
  49. print()
  50. keep=10
  51. trip=50
  52. planSt=dinProg()
  53. planNew=planSt
  54. while planSt==planNew:
  55.     keep+=1
  56.     planNew = dinProg(keep,trip)
  57. print('Изначальный план перевозок:',planSt,', стоимость доставки при изначальном плане:',countCost(planSt))
  58. print('Новый план перевозок:',planNew,', стоимость доставки при новом плане:',countCost(planNew,keep))
  59. print('Стоимость хранения при которой изменился план:',keep)
  60.  
  61. keep=10
  62. planSt=dinProg(keep,trip)
  63. planNew=planSt
  64. while planSt==planNew:
  65.     trip-=1
  66.     planNew = dinProg(keep,trip)
  67. print()
  68. print('Изначальный план перевозок:',planSt,', стоимость доставки при изначальном плане:',countCost(planSt))
  69. print('Новый план перевозок:',planNew,', стоимость доставки при новом плане:',countCost(planNew,50,trip))
  70. print('Фиксированная стоимость перевозки при которой изменился план:',trip)
  71. z = [0, 7, 6, 3, 0, 3]
  72. planPlus1 = dinProg()
  73. print('План перевозок с учётом того, что в конце должен на складе должен остаться один станок:',planPlus1,', стоимость доставки заданном условии:',countCost(planPlus1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement