Your SlideShare is downloading. ×
0
1
Rubylight programming contest 2 results
jug@rubylight.com
Задача
Обработать как можно больше запросов
в течении всего времени теста, затратив
минимальное количество денег на
оплату...
Изменение нагрузки
Имплементация
interface InstanceManager {
void loadNotification(long requestCount, CloudAPI cloudApi);
}
interface CloudAP...
Решения
Ключевые моменты
N1
Главное – избегать штрафов!
Ключевые моменты
N1
Главное – избегать штрафов!
Не удалось никому :)
Ключевые моменты
N2
Цикличность нагрузки
Необходимо учитывать данные за предыдущие
дни и недели
Ключевые моменты
N3
Алгоритм предсказывания нагрузки при отсутствии
данных за предыдущие дни
Присланные решения
-1500000
-1000000
-500000
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
●
4 решения от 3х
ав...
Результаты
Implemen
tation
Request
income
Instance
Expenses
Fines Result
1 8151921 4912050 2079218 1160653
2 8159514 52379...
Сравнение по количеству инстанций
-1500000
-1000000
-500000
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
1 2 3...
Предсказание нагрузки в первый день
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
1000000000...
Обзор решений
●
Не использовались данные за предыдущие дни
●
Следующее значение предсказывалось по разнице 2х
предыдущих
Первое решение ...
●
Учитывались данные за предыдущую неделю, каждый
день сравнивался с тем же днем на прошлой неделе
●
Следующее значение пр...
●
Сложный алгоритм сглаживания “пиков”
●
Учитывались 3 предыдущих значения и те же значения
для предыдущего дня
Третье реш...
Алгоритм лучшего решения
●
Использовались данные за предыдущие дни
●
Exponential Moving Average для прогноза
●
Для избежан...
Exponential Moving Average
For data series Y, forecasted values S
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
...
Exponential Moving Average
●
http://en.wikipedia.org/wiki/Exponential_smoothing
●
http://en.wikipedia.org/wiki/Moving_aver...
Победители
III Deniss Samcuks
II Agnis Liukis
III Deniss Samcuks
I Aivars Kalvans
II Agnis Liukis
III Deniss Samcuks
2
https://wiki.rubylight.com/display/JUG
jug@rubylight.com
Upcoming SlideShare
Loading in...5
×

Rubylight JUG Contest Results Part II

2,303

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

No notes for slide

Transcript of "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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×