Miicky
Я истинный поклонник Формулы-1. За гонками слежу с восьми лет, в рабочем календаре расписаны все даты проведения Гран-При, а через RSS читаю несколько тематических сайтов. На одном из них ежегодно проводиться конкурс прогнозов. Правила просты – перед каждым Гран-При Вам нужно спрогнозировать первую десятку гонщиков на финише. По итогам сравнивается две таблицы — десять пилотов, указанных Вами в прогнозе и десять лучших пилотов по итогам гонки. Спрогнозировать финишную десятку тяжело из-за непредвиденных обстоятельств в виде сходов болидов, аварий или поломок. Потому я ответил на один простой вопрос — кто зарабатывает на ставках больше всех? Конечно букмекерские конторы. Так какие шансы на победу в конкурсе, если ставить по прогнозам, например, британской конторы William Hill?
Правила конкурса просты. Пилоты, финишировавшие вне призовой десятки, не учитываются. Если пилот финишировал на том месте, которое вы указали в прогнозе – вы получаете 25 очков, если ошиблись на одну позицию – 18 очков, на две – 15 очков, на три – 12 очков, на четыре – 10 очков, на пять — 8 очков, на шесть – 6 очков, на семь – 4 очка, на восемь – 2 очка и на девять – 1 очко. (Такие же очки получают гонщики за позицию на финише гонки). Очки за каждую позицию суммируются. При определении победителя по итогам сезона учитываются результаты пяти лучших прогнозов.
Сначала я нашел прогноз букмекеров перед гонкой, а также итоги гонок и свёл их в одну таблицу.
Считать результаты по всем 20 Гран-При у меня не было желания, потому было решено написать небольшой скрипт. Но программировал последний раз я ешё в школе, и взяв на вооружение документацию Google Developers и их платформу, сумел набросать за довольно таки большой период времени работающий скрипт, вспомнив, при этом, внеземное чувство работающего скрипта после тридцати минут поиска ошибки.
*Пример Гран-При Австралии 2012
Пример кода для подсчета баллов, заточен под данную таблицу
После подсчета суммы баллов за каждый этап, с помощью функции LARGE выбрал пять лучших результатов.
Пятерка лучших результатов
Несмотря на хороший общий результат по всем гонкам (2064 балла), моя пятерка лучших результатов (662 балла), конкуренции первой тройке призеров (789-767 балла) составить не смогла, но результат был лучшим чем мой собственный, построенный на «чутье».
На этом я не остановился и сделал в общей сложности семь разных функций прогноза.
Всё результаты в одной таблице
В заключительной части статьи должен быть вывод, и с этим у меня проблема :) До начала работ, я думал что прогноз будет если не лучшим, то хотя бы близким к нему. Но подтвердилось другое — показать хороший результат за счет только простой теории вероятности не получиться, нужно модифицировать уже имеющийся алгоритм другими переменными. С другой стороны я повеселил свой, забывший что такое программирование, мозг, решил интересную для меня, а может и для Вас, задачу, и получил хоть немного опыта.
На github код не заливал, поскольку он заточен под таблицу.
Таблица и сценарий доступны для просмотра, для работы с ними сделайте копию себе в Google Disk, для запуска подсчета — меню «Примочки».
Если у читателя возникнут какие-либо идеи о том, как еще можно просчитать прогноз — напишите мне, я с удовольствием выслушаю их.
О чём речь
Я истинный поклонник Формулы-1. За гонками слежу с восьми лет, в рабочем календаре расписаны все даты проведения Гран-При, а через RSS читаю несколько тематических сайтов. На одном из них ежегодно проводиться конкурс прогнозов. Правила просты – перед каждым Гран-При Вам нужно спрогнозировать первую десятку гонщиков на финише. По итогам сравнивается две таблицы — десять пилотов, указанных Вами в прогнозе и десять лучших пилотов по итогам гонки. Спрогнозировать финишную десятку тяжело из-за непредвиденных обстоятельств в виде сходов болидов, аварий или поломок. Потому я ответил на один простой вопрос — кто зарабатывает на ставках больше всех? Конечно букмекерские конторы. Так какие шансы на победу в конкурсе, если ставить по прогнозам, например, британской конторы William Hill?
Правила конкурса просты. Пилоты, финишировавшие вне призовой десятки, не учитываются. Если пилот финишировал на том месте, которое вы указали в прогнозе – вы получаете 25 очков, если ошиблись на одну позицию – 18 очков, на две – 15 очков, на три – 12 очков, на четыре – 10 очков, на пять — 8 очков, на шесть – 6 очков, на семь – 4 очка, на восемь – 2 очка и на девять – 1 очко. (Такие же очки получают гонщики за позицию на финише гонки). Очки за каждую позицию суммируются. При определении победителя по итогам сезона учитываются результаты пяти лучших прогнозов.
Приступаем к просчёту
Сначала я нашел прогноз букмекеров перед гонкой, а также итоги гонок и свёл их в одну таблицу.
Считать результаты по всем 20 Гран-При у меня не было желания, потому было решено написать небольшой скрипт. Но программировал последний раз я ешё в школе, и взяв на вооружение документацию Google Developers и их платформу, сумел набросать за довольно таки большой период времени работающий скрипт, вспомнив, при этом, внеземное чувство работающего скрипта после тридцати минут поиска ошибки.
*Пример Гран-При Австралии 2012
№ | Гонка | Прогноз | Баллы |
1 | Баттон | Феттель | 12 |
2 | Феттель | Хэмилтон | 18 |
3 | Хэмилтон | Уэббер | 18 |
4 | Уэббер | Баттон | 18 |
5 | Алонсо | Алонсо | 25 |
6 | Кобаяши | Росберг | 0 |
7 | Райкконен | Райкконен | 25 |
8 | Перес | Шумахер | 0 |
9 | Риккардо | Грожан | 0 |
10 | ди Реста | Масса | 0 |
Пример кода для подсчета баллов, заточен под данную таблицу
function points() {
var sheet = SpreadsheetApp.getActiveSheet(); //работаем с активной таблицей
var race, forecast = new Array(); //результат гонки и прогноз
var points_race = new Array(25,18,15,12,10,8,6,4,2,1); //массив баллов
for (var k=3; k<=215; k=k+11){ //просчёта всех гонок
race = sheet.getRange(k, 2, 10, 1).getValues(); //считывает результат гонки
forecast = sheet.getRange(k, 3, 10, 1).getValues(); //считывает прогноз
for (var i=0; i<=9; i++){
sheet.getRange(k+i,4).setValue(0); //по умолчанию заполняем баллы "0"
for (var j=0; j<=9 ; j++)
if (race[i].toString() == forecast[j].toString()){ //сравниваем строки
sheet.getRange(k+i,4).setValue(points_race[Math.abs(j-i)]); //записывает баллы
break; //если сработало останавливаем цикл
}
}
}
}
После подсчета суммы баллов за каждый этап, с помощью функции LARGE выбрал пять лучших результатов.
Пятерка лучших результатов
Гран-При | Сумма баллов |
Индия | 156 |
США | 155 |
Канада | 118 |
Сингапур | 117 |
Австралия | 116 |
Сумма | 662 |
Первый вывод
Несмотря на хороший общий результат по всем гонкам (2064 балла), моя пятерка лучших результатов (662 балла), конкуренции первой тройке призеров (789-767 балла) составить не смогла, но результат был лучшим чем мой собственный, построенный на «чутье».
Не сдаваться
На этом я не остановился и сделал в общей сложности семь разных функций прогноза.
- Выше описанная — прогноз просчитывался по ставкам букмекеров на отдельный этап;
- По ставкам букмекеров на победу в чемпионате, перед началом сезона;
- Ставки моего любимца кота «МацЫка», который прошелся по клавиатуре — случайная десятка гонщиков, одна для всех этапов;
- Случайная десятка гонщиков для каждого этапа разная;
- Результаты первой практики;
- Результаты второй практики;
- Результаты третей практики.
Всё результаты в одной таблице
Расчёт | Сумма баллов 5 лучших результатов |
Букмекеры-этапы | 662 |
Букмекеры-чемпион | 640 |
Случайный-один (МацЫк) | 569 |
Случайный-всё | 542 |
Первая практика | 596 |
Вторая практика | 712 |
Третья практика | 622 |
Выводы
В заключительной части статьи должен быть вывод, и с этим у меня проблема :) До начала работ, я думал что прогноз будет если не лучшим, то хотя бы близким к нему. Но подтвердилось другое — показать хороший результат за счет только простой теории вероятности не получиться, нужно модифицировать уже имеющийся алгоритм другими переменными. С другой стороны я повеселил свой, забывший что такое программирование, мозг, решил интересную для меня, а может и для Вас, задачу, и получил хоть немного опыта.
Пост Скриптум
На github код не заливал, поскольку он заточен под таблицу.
Таблица и сценарий доступны для просмотра, для работы с ними сделайте копию себе в Google Disk, для запуска подсчета — меню «Примочки».
Если у читателя возникнут какие-либо идеи о том, как еще можно просчитать прогноз — напишите мне, я с удовольствием выслушаю их.