gt22

Турбины

Nov 22nd, 2018
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.04 KB | None | 0 0
  1. import numpy as np
  2. from math import pi, ceil
  3.  
  4. # коэффициенты
  5. μ = 0.592
  6. ρ = 1.2466
  7. π8 = pi / 8
  8. dsq = 20 ** 2
  9.  
  10.  
  11. # Формула мощности
  12. def p(u):
  13.     ucb = u ** 3
  14.     return μ * ρ * π8 * dsq * ucb
  15.  
  16.  
  17. # Скользящяя сумма, тоесть сумма от 1го до n-го элемента, от 2го до n+1го итд
  18. def rolling_sum(a, n):
  19.     ret = np.cumsum(a, dtype=float)
  20.     ret[n:] = ret[n:] - ret[:-n]
  21.     return ret[n - 1:]
  22.  
  23.  
  24. # Считываем данные, и транспонируем что-бы было на 2 строки и 239 столбцов, а 239 строк и 2 столбца (Удобнее потом работать)
  25. data = np.array(eval(input())).T
  26. # Считаем сколько в каждый час генерирует одна турбина, для этого в функцию генерации отправляем весь второй столбец (1 - ибо индекс с нуля)
  27. gen_per_turbine = p(data[:, 1])
  28. # Считаем сколько турбин надо что-бы удовлетворить первое условие, для этого вычитаем 500 кВт которые мы можем оставить и делим на то сколько генерит одна турбина
  29. # Из этого всего выбираем максимум, и округляем вверх
  30. turbines_needed = ceil(((data[:, 0] - 5e5) / gen_per_turbine).max())
  31.  
  32. # Считаем скользящую сумму дефецита энергии по 24 часа что-бы проверить на второе условие
  33. # Пока хоть-одна из них (А точнее максимальная) превыщает 1МВт, прибавляем одну турбину
  34. while rolling_sum(np.clip(data[:, 0] - (gen_per_turbine * turbines_needed), 0, None), 24).max() > 1e6:
  35.     turbines_needed += 1
  36.  
  37. # Выводим сколько турбин нам надо
  38. print(turbines_needed)
  39.  
  40. Шутка на тему:
  41. https://xkcd.com/1378/
Advertisement
Add Comment
Please, Sign In to add comment