Rubylight JUG Contest Results Part II

2,642 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,642
On SlideShare
0
From Embeds
0
Number of Embeds
2,093
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Rubylight JUG Contest Results Part II

  1. 1. 1 Rubylight programming contest 2 results jug@rubylight.com
  2. 2. Задача Обработать как можно больше запросов в течении всего времени теста, затратив минимальное количество денег на оплату инстанций
  3. 3. Изменение нагрузки
  4. 4. Имплементация interface InstanceManager { void loadNotification(long requestCount, CloudAPI cloudApi); } interface CloudAPI { void startInstances(int n); void stopInstances(int n); } ● Implement InstanceManager ● InstanceManager.loadNotification будет вызываться каждый час в симуляторе с количеством запросов, поступивших за последний час
  5. 5. Решения
  6. 6. Ключевые моменты N1 Главное – избегать штрафов!
  7. 7. Ключевые моменты N1 Главное – избегать штрафов! Не удалось никому :)
  8. 8. Ключевые моменты N2 Цикличность нагрузки Необходимо учитывать данные за предыдущие дни и недели
  9. 9. Ключевые моменты N3 Алгоритм предсказывания нагрузки при отсутствии данных за предыдущие дни
  10. 10. Присланные решения -1500000 -1000000 -500000 0 500000 1000000 1500000 2000000 2500000 3000000 3500000 ● 4 решения от 3х авторов ● Решение Rubylight ● Вариант без управления инстанциями
  11. 11. Результаты Implemen tation Request income Instance Expenses Fines Result 1 8151921 4912050 2079218 1160653 2 8159514 5237900 814973 2106641 3 8159187 4829900 634168 2695119 4 8165371 4962850 291859 2910662
  12. 12. Сравнение по количеству инстанций -1500000 -1000000 -500000 0 500000 1000000 1500000 2000000 2500000 3000000 3500000 1 2 3 4 5 0 1000000 2000000 3000000 4000000 5000000 6000000 7000000 8000000 9000000 10000000 9004800 4912050 5237900 4829900 4962850
  13. 13. Предсказание нагрузки в первый день 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 0 5000000000 10000000000 15000000000 20000000000 25000000000 30000000000 35000000000 40000000000 45000000000
  14. 14. Обзор решений
  15. 15. ● Не использовались данные за предыдущие дни ● Следующее значение предсказывалось по разнице 2х предыдущих Первое решение – 1 160 653
  16. 16. ● Учитывались данные за предыдущую неделю, каждый день сравнивался с тем же днем на прошлой неделе ● Следующее значение предсказывалось по разнице 2х предыдущих Второе решение – 2 106 641
  17. 17. ● Сложный алгоритм сглаживания “пиков” ● Учитывались 3 предыдущих значения и те же значения для предыдущего дня Третье решение – 2 695 119
  18. 18. Алгоритм лучшего решения ● Использовались данные за предыдущие дни ● Exponential Moving Average для прогноза ● Для избежания штрафов к вычисленному значению добавлялся “запас” или “insurance”
  19. 19. Exponential Moving Average For data series Y, forecasted values S
  20. 20. Exponential Moving Average Пример для N = 3 (alpha = 0.5) и N = 7 (alpha = 0.25) 1 2 3 4 5 6 7 8 9 10 11 0 50 100 150 200 250 300
  21. 21. Exponential Moving Average ● http://en.wikipedia.org/wiki/Exponential_smoothing ● http://en.wikipedia.org/wiki/Moving_average
  22. 22. Победители
  23. 23. III Deniss Samcuks
  24. 24. II Agnis Liukis III Deniss Samcuks
  25. 25. I Aivars Kalvans II Agnis Liukis III Deniss Samcuks
  26. 26. 2 https://wiki.rubylight.com/display/JUG jug@rubylight.com

×