Rubylight JUG Contest Results Part II

26
1 Rubylight programming contest 2 results [email protected]

Transcript of Rubylight JUG Contest Results Part II

Page 1: Rubylight JUG Contest Results Part II

1

Rubylight programming contest 2 [email protected]

Page 2: Rubylight JUG Contest Results Part II

Задача

Обработать как можно больше запросов в течении всего времени теста, затратив

минимальное количество денег на оплату инстанций

Page 3: Rubylight JUG Contest Results Part II

Изменение нагрузки

Page 4: Rubylight JUG Contest Results Part II

Имплементацияinterface InstanceManager {

void loadNotification(long requestCount, CloudAPI cloudApi);

}

interface CloudAPI {

void startInstances(int n);

void stopInstances(int n);

}

●Implement InstanceManager●InstanceManager.loadNotification будет вызываться

каждый час в симуляторе с количеством запросов, поступивших за последний час

Page 5: Rubylight JUG Contest Results Part II

Решения

Page 6: Rubylight JUG Contest Results Part II

Ключевые моменты

N1Главное – избегать штрафов!

Page 7: Rubylight JUG Contest Results Part II

Ключевые моменты

N1Главное – избегать штрафов!

Не удалось никому :)

Page 8: Rubylight JUG Contest Results Part II

Ключевые моменты

N2Цикличность нагрузки

Необходимо учитывать данные за предыдущие дни и недели

Page 9: Rubylight JUG Contest Results Part II

Ключевые моменты

N3Алгоритм предсказывания нагрузки при отсутствии

данных за предыдущие дни

Page 10: Rubylight JUG Contest Results Part II

Присланные решения

-1500000

-1000000

-500000

0

500000

1000000

1500000

2000000

2500000

3000000

3500000

● 4 решения от 3х авторов

● Решение Rubylight● Вариант без управления

инстанциями

Page 11: Rubylight JUG Contest Results Part II

Результаты

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

Page 12: Rubylight JUG Contest Results Part II

Сравнение по количеству инстанций

-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

Page 13: Rubylight JUG Contest Results Part II

Предсказание нагрузки в первый день

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

Page 14: Rubylight JUG Contest Results Part II

Обзор решений

Page 15: Rubylight JUG Contest Results Part II

●Не использовались данные за предыдущие дни●Следующее значение предсказывалось по разнице 2х

предыдущих

Первое решение – 1 160 653

Page 16: Rubylight JUG Contest Results Part II

●Учитывались данные за предыдущую неделю, каждый день сравнивался с тем же днем на прошлой неделе

●Следующее значение предсказывалось по разнице 2х предыдущих

Второе решение – 2 106 641

Page 17: Rubylight JUG Contest Results Part II

●Сложный алгоритм сглаживания “пиков”●Учитывались 3 предыдущих значения и те же значения

для предыдущего дня

Третье решение – 2 695 119

Page 18: Rubylight JUG Contest Results Part II

Алгоритм лучшего решения

●Использовались данные за предыдущие дни●Exponential Moving Average для прогноза●Для избежания штрафов к вычисленному значению

добавлялся “запас” или “insurance”

Page 19: Rubylight JUG Contest Results Part II

Exponential Moving Average

For data series Y, forecasted values S

Page 20: Rubylight JUG Contest Results Part II

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

Page 21: Rubylight JUG Contest Results Part II

Exponential Moving Average

●http://en.wikipedia.org/wiki/Exponential_smoothing●http://en.wikipedia.org/wiki/Moving_average

Page 22: Rubylight JUG Contest Results Part II

Победители

Page 23: Rubylight JUG Contest Results Part II

III Deniss Samcuks

Page 24: Rubylight JUG Contest Results Part II

II Agnis LiukisIII Deniss Samcuks

Page 25: Rubylight JUG Contest Results Part II

I Aivars KalvansII Agnis Liukis

III Deniss Samcuks

Page 26: Rubylight JUG Contest Results Part II

26

https://wiki.rubylight.com/display/[email protected]