Но сначала — несколько объявлений.
Конкурс продлевается на неделю
Срок приёма решений продлевается до 27 июля 2018, 23:59:59 UTC. Также на неделю вперёд сдвигаются сроки, в которые будут объявлены результаты конкурса. Мы продлили конкурс для того, чтобы улучшить охват в сезон отпусков.
Уточнения по окончательному тестированию
После окончания приёма работ тестирование будет более тщательным, чем нынешнее предварительное.
Затравочные значения
Мы публикуем способ, который обещаем использовать для выбора затравочных значений для финального тестирования. Этот способ должен быть однозначным и легко проверяемым, но непредсказуемым. Итак, мы возьмём первый твит из этого Твиттера, который появится там после наступления дедлайна. Трудно поверить, что мы сговорились с Джерри Спрингером, правда? Из твита берём только текст, без картинок и видео. Если в твите нет текста, а только картинка, то берём следующий твит. Ретвиты считаются. Имя ретвитнутого аккаунта не берётся.
Из текста твита мы получим затравочные значения так:
const random_js = require('random-js');
const text = 'The tweet goes here';
const bytes = Array.from(new Buffer(text));
const random = new random_js(random_js.engines.mt19937().seedWithArray(bytes));
for (let i = 0; i<200; i++) // сгенерируем столько, сколько потребуется
console.log(random.uint32());
Элементы получшившейся последовательности с нечётными номерами, при нумерации начиная с 1 (то есть первый, третий, пятый и так далее) будут использованы как затравочные значения для первого раунда, а с чётными — как дополнительные затравочные значения для финала.
В первом раунде каждая упорядоченная пара решений будет запущена на каждом из не менее 100 затравочных значений (больше, если успеем). В финале будет использовано не менее 100 дополнительных затравочных значений. Сеансы, проведённые в первом раунде между решениями, вышедшими в финал, будут использованы и в финале (но не сеансы между финалистом и решением, не вышедшим в финал). Таким образом, исход финала решат не менее 200 затравочных значений.
Отбор финалистов
После первого раунда все решения будут упорядочены по сумме набранных очков. Некоторое количество решений, начиная с лидера списка, будут допущены в финал.
Для отбора финалистов будут применяться следующие правила. Число финалистов решит то из правил, которое окажется наиболее строгим (то есть пропустит в финал наименьшее) число решений.
- Не более половины решений.
- Не более 50 решений.
- Только решения, показавшие лучший результат, чем
example.js
.
Промежуточные результаты
Для промежуточного тестирования мы использовали в качестве затравочных значений натуральные числа от 1 до 50 включительно. Каждая упорядоченная пара, состоящая из различных решений, была запущена на каждом из этих значений. Таким образом, для 82 участников турнир состоял из 332100 сеансов; каждое из решений поучаствовало в 8100 сеансах.
Пока что вместо имён участников — идентификаторы решений. Ваш идентификатор — в автоматическом письме, которое Вы получили после отправки решения. Не возбраняется в комментариях к этому посту раскрывать, что такое-то решение — Ваше.
Обратите внимание, что на 59, 60 и 61 местах расположились копии скрипта example.js. Интересно, что 21 из 82 решений показали более низкий результат, чем наш примитивный пример. (Почему три копии одного и того же скрипта показали слегка разные результаты? Потому что некоторые решения используют
Math.random
, и результаты сеансов с их участием не воспроизводимы.)Таблицу промежуточных результатов можно увидеть на GitHub. Условные обозначения:
- S: Сумма набранных очков (это и есть предмет соревнования)
- S/N: Средний результат сеанса
- A: Число сеансов с достигнутым соглашением
- A/N: Процент сеансов с достигнутым соглашением
- S/A: Средний результат сеанса с достигнутым соглашением
- X: Число сеансов, прерванных данным участником (по причине исключений или некорректных результатов)
Разумеется, до окончания конкурса ещё осталось время, за которое расстановка сил может измениться. Дерзайте!
Комментарии (36)
justanotherusername
20.07.2018 04:27Что-то маловато участников для такой-то простой задачки. В позапрошлом (про классификацию слов) за двести было.
Привет, FlameStorm!Spiceman
20.07.2018 11:19Не такая уж и простая. И еще далеко не все кто участвует отправил свое решение. Например, я.
FlameStorm
20.07.2018 12:07+1Привет, justanotherusername! Этот конкурс довольно любопытный, но конечно мне намного больше по душе предыдущий про предка Supaplex'а. Gamedev forever in my heart. Ну и кроме того интуитивно понятно было, чего должен добиться алгоритм и какие примерно решения могут быть :)
Точнее, тут просто не видно никакой возможности существования алгоритма, работающего лучше всех и могущего взять призовое место, — всё сильно зависит от остальных решений, с которыми будет вести диалог твоё.justanotherusername
20.07.2018 12:29всё сильно зависит от остальных решений, с которыми будет вести диалог твоё.
Как и в жизни.
feldgendler Автор
20.07.2018 12:35Но в прошлый раз тоже было меньше участников, чем в позапрошлый. Пока что классификатор слов — самый массовый конкурс. Хотя там чуть ли не треть решений была фуфельных, типа
return false
.FlameStorm
20.07.2018 12:45+1Суровые однако решения. Ладно хоть не выиграли. ) Я кстати читал, что в том конкурсе происходило, были и решения наоборот с другой стороны хардкорности.
Кстати по лимитам тут озвученным — а
example.js
гарантированно будет участвовать? И если вдруг все сторонние участники закинут решения отличные (по принимаемым решениям о сделках) отexample.js
, этот пункт ограничений будет снят с рассмотрения, или таки если никто не отправит клон экзампла, то он будет отправлен by Alexey (вне конкурсной таблицы)?feldgendler Автор
20.07.2018 12:50Сейчас уже есть три копии
example.js
. Их «авторы», конечно, могут закачать на их место что-нибудь новое — в этом маловероятном случае, да, добавлю одну копию от себя.FlameStorm
20.07.2018 13:02Могло быть и 4 копии, если б не успел увидеть в телеграм канале сообщение о пробном забеге) Текущая версия не всегда уже отправлена как решение. Вполне вероятно, что из этих трёх останется меньше трёх. Но добавят новых
example.js
подоспевшие участники ))feldgendler Автор
20.07.2018 13:07А какая, собственно, у людей мотивация заливать копию
example.js
? Никогда этого не понимал, но в каждом конкурсе несколько человек это делают.
FlameStorm
20.07.2018 13:04Кстати вопрос — если сиды идентичные и у всех абсолютно равные условия забега, как вообще хоть на 1 очко разницы могло получиться у тех трёх копий
example.js
из таблицы?feldgendler Автор
20.07.2018 13:07Я же там написал — потому что в некоторых решениях используется
Math.random
.FlameStorm
20.07.2018 13:19Не понятно. Так копии или не копии example.js? Те которые на строчках 59, 60 и 61
feldgendler Автор
20.07.2018 13:21Эти три — точные копии. Но есть ещё другие решения, в которых встречается
Math.random
. Из-за них у всех чуть колеблются результаты, ведь они дают вклад в итоговый счёт каждого решения.FlameStorm
20.07.2018 13:29А, спасибо, теперь ясно. Что-то сразу не догнал до этого момента.
У меня кстати у самого используется рандом, но не Math'овский, а собственная копия простейшего из генераторов. Уже не помню почему сделал именно так, наверное для хоть и похожести на случайное поведение, но предсказуемости — сид задаётся на основе входных данных торгов, потому при том же первом ходящем, том же количестве раундов и тех же количествах и ценах вещей мой бот сыграет всегда одинаково. Так что если что, я рандома остальным не насыпал, то был кто-то ещё. :)
feldgendler Автор
20.07.2018 15:05Я искал по всем присланным исходникам, там реально
Math.random
есть.
justanotherusername
20.07.2018 12:44+3Кстати, в игре с полной информацией (когда известен набор полезностей оппонента) каждый может получить по $7.414496 в среднем за сеанс.
CrazyNiger
20.07.2018 13:22Ваш идентификатор — в автоматическом письме, которое Вы получили после отправки решения.
Хм, а я ни какого письма не получил, хотя решение отправлял. Что делать?feldgendler Автор
20.07.2018 13:58+1Возможно, опечатались в адресе электронной почты? Посмотрите в форме (она помнит последние значения).
Gromo
20.07.2018 20:58Было бы интересно посмотреть на статистику торговли с собой — насколько скрипт способен торговаться против себя же. В таких случаях скрипты «хочу всё, отдам только ненужное» будут по нулям (за редкими значениями, когда «ненужное» окажется тем самым, на что сам же бот в таком случае согласится).
А то как-то грустно смотреть на одностороннюю торговлю, когда свой бот торгуется, а противник всегда выставляет одно и то же предложение.
BingoBongo
20.07.2018 21:11Что-то я себя в списке не вижу. ID на почту пришел, хотя я 17 отправлял. Т.е. получается, у 82 человек теперь явное преимущество против тех кто не спешил торопиться с отправлением?
feldgendler Автор
20.07.2018 21:12Значит, заслали после снапшота.
Spiceman
21.07.2018 11:55+1А еще будут предварительные результаты? Или теперь уже только окончательное тестирование?
Nomad1
21.07.2018 14:58При попытке залить код сегодня:
Submissions are no longer accepted after the deadline
AndrewIl
21.07.2018 18:32Может быть не буду первым, кто это предлагает, но, кажется, стоит запретить посылать нулевые предложения. Это бестолковая растрата статистики. Встречаю сегодня очень часто.
feldgendler Автор
21.07.2018 18:32Разумеется, за неделю до окончания конкурса правила менять не будем.
NoOn3
21.07.2018 20:42Один человек может отправлять толко одно решение? Нельзя ли отправить два или три(не в «сговоре»)?
feldgendler Автор
21.07.2018 20:43По духу правил — нельзя. На практике, разумеется, у нас нет никакого способа это «вычислить».
datacompboy
Четкого лидера не видать пурква-то…
Spiceman
Это просто меня в таблице нет )))
feldgendler Автор
Ну это нормально. В спорте тоже часто бывает, что второе место отстаёт от первого на долю секунды.