Rubylight JUG Contest Results Part II
Transcript of Rubylight JUG Contest Results Part II
1
Rubylight programming contest 2 [email protected]
Задача
Обработать как можно больше запросов в течении всего времени теста, затратив
минимальное количество денег на оплату инстанций
Изменение нагрузки
Имплементацияinterface InstanceManager {
void loadNotification(long requestCount, CloudAPI cloudApi);
}
interface CloudAPI {
void startInstances(int n);
void stopInstances(int n);
}
●Implement InstanceManager●InstanceManager.loadNotification будет вызываться
каждый час в симуляторе с количеством запросов, поступивших за последний час
Решения
Ключевые моменты
N1Главное – избегать штрафов!
Ключевые моменты
N1Главное – избегать штрафов!
Не удалось никому :)
Ключевые моменты
N2Цикличность нагрузки
Необходимо учитывать данные за предыдущие дни и недели
Ключевые моменты
N3Алгоритм предсказывания нагрузки при отсутствии
данных за предыдущие дни
Присланные решения
-1500000
-1000000
-500000
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
● 4 решения от 3х авторов
● Решение Rubylight● Вариант без управления
инстанциями
Результаты
Implementation
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
Сравнение по количеству инстанций
-1500000
-1000000
-500000
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
1 2 3 4 50
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
100000009004800
4912050 52379004829900 4962850
Предсказание нагрузки в первый день
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 240
5000000000
10000000000
15000000000
20000000000
25000000000
30000000000
35000000000
40000000000
45000000000
Обзор решений
●Не использовались данные за предыдущие дни●Следующее значение предсказывалось по разнице 2х
предыдущих
Первое решение – 1 160 653
●Учитывались данные за предыдущую неделю, каждый день сравнивался с тем же днем на прошлой неделе
●Следующее значение предсказывалось по разнице 2х предыдущих
Второе решение – 2 106 641
●Сложный алгоритм сглаживания “пиков”●Учитывались 3 предыдущих значения и те же значения
для предыдущего дня
Третье решение – 2 695 119
Алгоритм лучшего решения
●Использовались данные за предыдущие дни●Exponential Moving Average для прогноза●Для избежания штрафов к вычисленному значению
добавлялся “запас” или “insurance”
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 110
50
100
150
200
250
300
Exponential Moving Average
●http://en.wikipedia.org/wiki/Exponential_smoothing●http://en.wikipedia.org/wiki/Moving_average
Победители
III Deniss Samcuks
II Agnis LiukisIII Deniss Samcuks
I Aivars KalvansII Agnis Liukis
III Deniss Samcuks
26
https://wiki.rubylight.com/display/[email protected]