Rubylight JUG Contest Results Part II

Post on 10-May-2015

2.279 views 0 download

Transcript of Rubylight JUG Contest Results Part II

1

Rubylight programming contest 2 resultsjug@rubylight.com

Задача

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

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

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

Имплементация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/JUGjug@rubylight.com