Your SlideShare is downloading. ×
Rubylight JUG Contest Results Part II
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Rubylight JUG Contest Results Part II

2,251
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,251
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1 Rubylight programming contest 2 results jug@rubylight.com
  • 2. Задача Обработать как можно больше запросов в течении всего времени теста, затратив минимальное количество денег на оплату инстанций
  • 3. Изменение нагрузки
  • 4. Имплементация interface InstanceManager { void loadNotification(long requestCount, CloudAPI cloudApi); } interface CloudAPI { void startInstances(int n); void stopInstances(int n); } ● Implement InstanceManager ● InstanceManager.loadNotification будет вызываться каждый час в симуляторе с количеством запросов, поступивших за последний час
  • 5. Решения
  • 6. Ключевые моменты N1 Главное – избегать штрафов!
  • 7. Ключевые моменты N1 Главное – избегать штрафов! Не удалось никому :)
  • 8. Ключевые моменты N2 Цикличность нагрузки Необходимо учитывать данные за предыдущие дни и недели
  • 9. Ключевые моменты N3 Алгоритм предсказывания нагрузки при отсутствии данных за предыдущие дни
  • 10. Присланные решения -1500000 -1000000 -500000 0 500000 1000000 1500000 2000000 2500000 3000000 3500000 ● 4 решения от 3х авторов ● Решение Rubylight ● Вариант без управления инстанциями
  • 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. Сравнение по количеству инстанций -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. Предсказание нагрузки в первый день 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. Обзор решений
  • 15. ● Не использовались данные за предыдущие дни ● Следующее значение предсказывалось по разнице 2х предыдущих Первое решение – 1 160 653
  • 16. ● Учитывались данные за предыдущую неделю, каждый день сравнивался с тем же днем на прошлой неделе ● Следующее значение предсказывалось по разнице 2х предыдущих Второе решение – 2 106 641
  • 17. ● Сложный алгоритм сглаживания “пиков” ● Учитывались 3 предыдущих значения и те же значения для предыдущего дня Третье решение – 2 695 119
  • 18. Алгоритм лучшего решения ● Использовались данные за предыдущие дни ● Exponential Moving Average для прогноза ● Для избежания штрафов к вычисленному значению добавлялся “запас” или “insurance”
  • 19. Exponential Moving Average For data series Y, forecasted values S
  • 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. Exponential Moving Average ● http://en.wikipedia.org/wiki/Exponential_smoothing ● http://en.wikipedia.org/wiki/Moving_average
  • 22. Победители
  • 23. III Deniss Samcuks
  • 24. II Agnis Liukis III Deniss Samcuks
  • 25. I Aivars Kalvans II Agnis Liukis III Deniss Samcuks
  • 26. 2 https://wiki.rubylight.com/display/JUG jug@rubylight.com