Vlad-Shcherbina / icfpc2014-tbd

fourth place
Do What The F*ck You Want To Public License
4 stars 0 forks source link

Карт не было #41

Open Vlad-Shcherbina opened 10 years ago

Vlad-Shcherbina commented 10 years ago

Ок, на самом деле были. Более того, наверное ни в какой момент времени не было ситуации когда недостаток карт вызывал проблемы. Наоборот, ближе к концу стало затруднительно прогонять на всех картах, потому что совершенно неожиданно оказалось, что ВМ не очень быстры, особенно когда исполняют неоптимизированный код порождённый из не самого эффективного алгоритма. Так что в данном случае я нервничал напрасно.

Тем не менее, налог в виде небольшого количества карт с каждого участника мне по-прежнему кажется хорошей идеей (по-видимому, одному только мне). Почему:

Имеет смысл явно различать карты для бенчмарка и вырожденные карты для тестов. Класть их в разные каталоги, например. Потому что использовать для сравнения стратегий карту 6x3, где в ряд стоят пакман, пилюля, гост и фрукт совершенно бесмысленно. Для отладки и всяких там sanity checks и smoke tests же - наоборот.

Трюк: поворотами количество карт можно увеличить в разы (и дисперсию в корни из разов уменьшить). Для этого карты должны создаваться через спеки. Таким же образом можно применять и другой мелкий шаффлинг.

Если бы правила были действительно инвариантны относительно определённых преобразований (в данном случае было не так), разнообразия бы не это не добавило, но можно было бы заюзать для тестирования - типа, результат симуляции с повёрнутыми начальными условиями должен совпадать с повёрнутым результатом с оригинальными начальными условиями. Всякие перепутанные индексы типа if state[i, j] == old_state[j, j] ловятся на ура (хотя их вообще не должно быть потому что писать надо в векторной форме).

Генераторы карт. Чтобы не коммитить сгенерённые данные, можно реализовать через спеку, которая принимает параметры генерации и сид. Заодно это позволит легко генерировать их в произвольных количествах по необходимости. Вопрос по моделированию "реалистичного" распределения это не решает, поэтому всё равно потребуется отдельная штука, которая будет порождать такие спеки с вручную подобранным разбросом параметров генерации.

То что такие карты ни в каком файле явно не сериализованы не помешает на них смотреть глазами, потому что турнамент вьювер и все остальные инструменты тоже должны всегда принимать только спеки и могут инстанциировать их специально для целей визуализации.

Ещё мелкий случай. В процесс отладки одной из стратегий я внезапно обнаружил, что она выступает хуже чем просто пакман, идущий вправо. Оказалось, что в наборе было аж четыре карты с конфигурацией "\o=" (рандом + использование одного сида для карт с разными параметрами), и на них идущий вправо пакман срывал большой куш, в то время как "умный" очень быстро оказывался в безвыходной ситуации. Мораль: инструменты! инструменты позволили эту проблему очень легко обнаружить.

manpages commented 10 years ago

Самое важное, что двумя руками двачую — разделение граничных случаев и тестовых карт.