В этом задании вам предоставляется ограниченный объем информации о конкретной игре в шахматы, и вам необходимо предсказать, кто выиграл игру .
Вам предоставляется два набора данных:
- Количество штук (Какие фигуры еще живы)
- Цвет доски (цвет фигур на доске)
Что еще более важно, вы не знаете, где находятся части . Вы должны определить, кто, по вашему мнению, победит.
Игры выбираются из всех событий, перечисленных в PGNMentor с 2010 года по настоящее время. Я выбрал 10% всех позиций на доске из каждой игры, которая заканчивается выигрышем или проигрышем. Позиции доски всегда будут составлять не менее 30 ходов. Тестовые случаи можно найти здесь . (Белые победы указаны первыми, затем черные победы)
вход
Отсчет часть будет строка , состоящая из символа для каждой части: k
Инг, q
ueen, r
ООК, к n
IGHT, b
ishop или p
тентом. Нижний регистр означает черный, верхний регистр - белый. Доска будет строкой из 64 символов (8 строк на 8 столбцов). B
представляет черный кусок, W
представляет белый кусок и .
представляет собой пустое место. Образец:
W..WB......W.BB....W..B..W.WWBBB..W...B....W..BBWWW...BB.W....B.,BBKPPPPPPPQRRbbkpppppppqrr
будет представлять следующую доску
...B.BB.
.BBBBBBB
.B.B....
B..W....
WWWW.W..
....W.W.
...W..WW
W.....W.
и где оба цвета имеют 2 слона, 1 короля, 7 пешек, 1 королеву, 2 грача
Выход
Вам необходимо вернуть число с плавающей точкой от 0 до 1 (включительно), чтобы определить, насколько вероятно, что белые выиграют. Образец:
0.3 (30% chance that white wins)
Больше деталей:
- Каждый тестовый пример стоит 1 балл. Ваша оценка будет,
1 - (1-Output)^2
если белые выиграют, или1 - (Output)^2
если черные выиграют. - Ваш окончательный результат будет суммой во всех тестовых случаях.
- Если я чувствую, что материалы жестко закодированы, я оставляю за собой право изменять контрольные примеры. (Если я их поменяю, у них будет хеш SHA-256
893be4425529f40bb9a0a7632f7a268a087ea00b0eb68293d6c599c6c671cdee
) - Ваша программа должна запускать тестовые случаи независимо. Нет сохранения информации из одного теста в другой.
- Если вы используете машинное обучение, я настоятельно рекомендую тренироваться на первых 80% данных, а тестирование - на оставшихся 20% . (Или какой процент вы используете). Я использую игры несколько раз в данных, но я последовательно соединяю одни и те же игры.
- ОБНОВЛЕНИЕ: я добавил более миллиона тестовых случаев для тестирования и обучения. Они разделены на черные и белые части из-за ограничений размера репозитория github.
Удачи и приятного времяпровождения!
источник
Ответы:
Java 8 + Weka, 6413 баллов, 94,5%
Этот ответ использует подход машинного обучения. Вам нужно получить библиотеку Weka , особенно
weka.jar
иPackageManager.jar
.Здесь я использую многослойный персептрон в качестве классификатора; Вы можете заменить
mlp
любойClassifier
класс Weka для сравнения результатов.Я не слишком возился с параметрами MLP, а просто присматривал за ними (один скрытый слой из 50 нейронов, 100 эпох, 0,2 скорости обучения, 0,1 импульса).
Я пороговое значение выходного значения MLP, так что выход на самом деле либо 1 или 0, как определено в задаче. Таким образом, количество правильно классифицированных экземпляров, напечатанных Weka, является непосредственно нашей оценкой.
Характеристика векторного построения
Я превращаю каждый экземпляр из строки в вектор из 76 элементов, где:
1
белая фигура,-1
черная фигура и0
пустая ячейка.0
«нет фигур этого типа»). Можно применить нормализацию, чтобы переопределить эти значения между -1 и 1, но это, вероятно, не очень полезно здесь.Количество тренировочных экземпляров
Если я использую все тесты, приведенные для обучения моего классификатора, мне удалось получить 6694 (т.е. 98,6588%) правильно классифицированных экземпляров . Это, очевидно, неудивительно, потому что тестировать модель на тех же данных, которые вы использовали для ее обучения, слишком просто (потому что в этом случае на самом деле хорошо, что модель подходит больше).
Используя случайное подмножество из 80% экземпляров в качестве обучающих данных, мы получаем 6413 (т.е. 94,5173%) правильно классифицированных значений экземпляров, о которых сообщается в заголовке (конечно, поскольку подмножество является случайным, вы можете получить немного другие результаты). Я уверен, что модель будет неплохо работать на новых данных, потому что тестирование на оставшихся 20% случаев (которые не использовались для обучения) дает 77,0818% правильной классификации, которая показывает, что модели неплохо обобщают (при условии, что примеры, которые мы приводим здесь, являются репрезентативными для новых тестовых случаев, которые нам будут предоставлены)
Используя половину экземпляров для обучения и другую половину для тестирования, мы получаем 86,7502% как для данных обучения, так и для тестирования, и 74,4988% только для данных теста.
Реализация
Как я уже сказал, этот код требует
weka.jar
иPackageManager.jar
от Weka.Можно контролировать процент данных, используемых в обучающем наборе, с помощью
TRAIN_PERCENTAGE
.Параметры MLP можно изменить чуть ниже
TRAIN_PERCENTAGE
. Можно попробовать другие классификаторы Weka (например,SMO
для SVM), просто заменивmlp
другим классификатором.Эта программа печатает наборы результатов, первый из которых относится ко всему набору (включая данные, использованные для обучения), который является результатом, определенным в этом задании, а второй - только для данных, которые не использовались для обучения.
Каждый вводит данные, передавая путь к файлу, содержащему их, в качестве аргумента программы.
источник
GNU sed + bc,
43365074,5 балла,6475%Обновление: ОП дала новый способ вычисления оценки прогноза для отдельного тестового случая. Используя Wolfram Alpha , я построил оба набора формул, чтобы увидеть различия.
Текущий способ дает сильный стимул для вывода фактических вероятностей, а не только крайностей, 0 и 1, для которых новые формулы дают тот же максимальный результат, что и раньше. Вот почему неизменный алгоритм, приведенный ниже, теперь имеет лучшую скорость предсказания, фактически большую скорость, учитывая его простоту.
Однако есть также недостаток, связанный с новыми формулами, как объяснено в «Редактировании 1».
Это простая оценка, основанная только на материальном преимуществе / недостатке, игнорирующая фактическое размещение фигур. Мне было любопытно, как это будет работать. Причина, по которой я использую sed, а не какой-то язык, который может сделать это в одной строке, заключается в том, что это мой любимый эзотерический язык.
Используются стандартные значения штучного товара:
Я рассчитываю материал для обеих сторон и вычитаю материал черного из материала белого. Выходные данные для каждого теста основаны на этой разнице следующим образом:
Это мой единственный неполный вывод, поэтому причина улучшения, как объяснено выше.
Уровень прогнозирования для этого метода составил 64%. Теперь это 75% с новыми формулами.
Редактировать 1: недостаток
Тривиальное решение - вывести 0.5 для каждого тестового случая, потому что таким образом вы набрали пол-очка независимо от того, кто победил. Для наших тестовых случаев это означало общую оценку 3392,5 балла (50%).
Но с новыми формулами 0.5 (это результат, который вы дадите, если не определитесь, кто победит), преобразуется в 0,75 балла. Помните, что максимальный балл, который вы можете получить за тестовый случай, равен 1, при 100% уверенности в победителе. Таким образом, новый общий балл для постоянных 0,5 результата составляет 5088,75 балла или 75%! На мой взгляд, стимул слишком силен для этого случая.
Этот показатель лучше, хотя и незначительно, чем мой алгоритм, основанный на материальных преимуществах. Причина этого заключается в том, что алгоритм дает вероятность 1 или 0 (без стимула), предполагаемых выигрышей или проигрышей, больше раз (3831), чем дает 0,5 (стимулы), предполагаемых ничьих (2954). В конце концов, метод прост, и поэтому он не имеет большого процента правильных ответов. Увеличение от новой формулы до константы 0,5 позволяет достичь этого процента искусственно.
Изменить 2:
В шахматных книгах упоминается известный факт, что обычно лучше иметь пару слонов, чем пару коней. Это особенно верно в промежуточной стадии игры, где проходят тестовые задания, поскольку более вероятно иметь открытую позицию, в которой диапазон слона увеличивается.
Поэтому я сделал второй тест, но на этот раз я заменил значение слонов с 3 до 3,5. Ценность рыцаря осталась 3. Это личное предпочтение, поэтому я не сделал его своим заданием по умолчанию. Общая оценка в этом случае составила 4411 баллов (65%). Наблюдалось только увеличение на 1 процентный пункт.
С новыми формулами общая оценка составляет 4835 баллов (71%). Теперь взвешенный епископ уступает. Но эффект объясняется тем, что взвешенный метод теперь дает даже больше предполагаемых выигрышей или проигрышей (5089), чем предполагаемые ничьи (1696).
источник
Python 3 - 84,6%, 5275 баллов за проверочный набор
Если мы будем обманывать и использовать все данные, мы сможем достичь точности 99,3% и оценки 6408.
Просто большой MLP с пропуском с использованием Keras
источник
Python 3 - точность 94,3%, 6447 баллов на проверочном наборе 20% данных
Использует 3 нейронные сети, регрессор ближайших соседей, случайный лес и усиление градиента. Эти прогнозы сочетаются со случайным лесом, который также имеет доступ к данным.
источник
Питон 3 - 4353,25 / 6785 баллов - 64%
Так что я работал над этим в основном вчера. Мой первый пост в гольф, и я использую python только неделю или около того, так что простите, если не все оптимизировано.
Я оказался на том же пути, что и ответ Сешумара. Но большое количество тестовых случаев, в которых было даже количество кусочков, оставило меня недовольным.
Таким образом, я погуглил черты, которые определяют, кто выигрывает в шахматы (я сам не играю в эту игру), и заметил, что позиция доски, особенно центральное управление, велика. Вот где этот бит входит.
Обе эти две половины вместе используются для нахождения оценки (0,0, 0,25, 0,50, 0,75, 1,0)
Очень интересно, что эта дополнительная позиция на доске не увеличивает шансов угадать победителя.
Если вы поместите тестовые наборы в несколько файлов, вот тестирование.
Я знаю, что это не вызов для гольфа, но любые советы или рекомендации в этом отношении приветствуются!
источник