|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||
Предпросчет возможных ходов в игре Nine Men's Morris (Мельница)23.12.2019, 08:46. Показов 3959. Ответов 33
Метки нет (Все метки)
Идея так себе, но неполный поиск в ширину даже на два хода тоже не сильно доставляет. Да и точность у него хромает. Пока склоняюсь к мысли просчета начальной стадии - выставления фишек. Дальше придется все же писать обход.
0
|
||
| 23.12.2019, 08:46 | |
|
Ответы с готовыми решениями:
33
Программа для вывода возможных ходов коня по клику на клетку шахматной доски Генерация ходов в настольной игре |
|
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
|
|
| 23.12.2019, 08:49 | |
|
А в памяти разве так трудно дерево поиска развернуть?
0
|
|
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||
| 23.12.2019, 08:59 [ТС] | ||
|
Если интересно, то на тему решений самой игры есть статья на английском: http://library.msri.org/books/... gasser.pdf
0
|
||
|
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
|
|
| 23.12.2019, 09:07 | |
|
Ну, дык, нужно сначала делать в памяти, а только потом (если не будет вмещаться) можно свопить на диск.
Кстати, операция чтения/записи самая долгая по времени.
0
|
|
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||||||||
| 23.12.2019, 09:31 | ||||||||
|
Каждое состояние будет иметь одинаковый размер, а значит можно хранить сразу все состояния в 1 файле и получать нужное тупо по индексу. Ну и для быстроты можно или в заголовке или отдельном файле - хранить дерево индексов. Только file of T не используйте, он устарел. Вместо него надо использовать BlockFileOfT:
Но и делать всё через диск - тоже плохо вообще, потому что работа с диском это таки медленно. Лучше всего использовать промежуточный вариант: хранить данные которые сейчас считаем в оперативке, а когда закончили - сбрасывать на диск. Благо, кишки BlockFileOfT уже это умеют. Всё что прочитано и записано - хранится в оперативке до вызова .Flush . Главное только .Flush вызывать не забывать по своему усмотрению, а то его будет вызывать тогда - когда система решит что вы достаточно прочитали/записали, что может сильно расходится с задачей. Но, над скоростью и достаточным объёмом диска - стоит всё же подумать перед тем как писать код. Вот у вас есть хотя бы 282 свободных ГБ на диске? А если бы вы это решали создавать тучу папок - на одни только заголовке в файловой системе больше потратилось бы (если система вообще разрешит эти заголовки выделить).
1
|
||||||||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||
| 23.12.2019, 10:25 [ТС] | ||
|
0
|
||
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||
| 23.12.2019, 11:14 | ||
|
Вообще я не сильно в правилах игры разбирался. А там как - получается после каждого хода (кроме конца игры) есть всегда по 3 варианта следующего хода, или бывает меньше? Если да - можно хранить не сразу все состояния, а увеличивать файл по мере необходимости. При этом в каждом состоянии хранить 3 индекса, каждый из которых ссылается на точку в файле, где описано состояние после этого хода. Ну и если хода нет - хранить -1. Если всегда возможны все 3 хода - памяти так понадобится только больше. Но если нет - можно сильно сэкономить.
0
|
||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||
| 23.12.2019, 23:32 [ТС] | ||
|
Из интересного: нашел в интернете базу данных для игры с компьютером. 78 гб весит. И это если учесть, что неликвидные ходы для компьютера-оппонента оттуда, очевидно, вырезаны. Перспектива пока удручает. Еще придется бороться с зацикливанием алгоритма, когда фишку двигают туда-сюда до бесконечности. Задачка... Добавлено через 36 минут Думаю отказаться от полного перебора и немного схалтурить: 1) Если есть возможность в свой ход собрать мельницу - собираем, при этом рассматриваем далее случай не для всех, а для конкретной одной съеденной фишки противника, которую определяем каким-либо не особо трудным алгоритмом (смотрим, могут ли белые следующим ходом собрать мельницу, и мешаем им; можем убрать белую фишку и построить новую мельницу - убираем; могут заблокировать нашу отстроенную мельницу - мешаем им: имеется у них скопление фишек на поле - опять же мешаем) 2) Проверка явных угроз постройки мельниц белыми в один ход. Нашли такую - пытаемся устранить за один ход. Без других вариантов 3) А лучшее на конец: если через n ходов мы никого не съели или нас поели больше, чем мы их - рубим ветку Должно сильно облегчить жизнь
0
|
||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||||
| 24.12.2019, 10:13 [ТС] | ||||
Для нормальной доски как верхний предел существует около 3^24 (282 млрд) состояний (24 клетки, каждая может быть пуста или занята командой). Я, увы, не в состоянии справиться с составлением хорошей хеш-функции. Из идей: разбить на 5 байт, где каждый байт кодирует 5 клеток доски, то есть мы получаем 5 байт на всю доску. Это пока минимум. Дальше можно уменьшать количество вариантов, но вроде не критично. Получим что-то около (5 байт * 9 млрд состояний) или 45 Гб, по скромным прикидкам. Паршивый результат, но на диске поместится. Неликвидные ходы можно будет и позже отсортировать. Из неудобств пока работа с типизированным файлом, откуда придется брать вместо готовых состояний пятерки и связывать между собой.
0
|
||||
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
|||
| 24.12.2019, 11:11 | |||
|
Ksardas_178, попросите администрацию, всё, начиная с поста #4 выделить в отдельную тему с названием
Игра Nine Men's Morris (Мельница) А где-нибудь в эту игру можно с компьютером поиграть?
0
|
|||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||||
| 24.12.2019, 11:59 [ТС] | ||||
|
mr-Crocodile,
Онлайн-реализаций много есть, если поискать.
0
|
||||
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
|||
| 24.12.2019, 13:46 | |||
|
Ksardas_178, а какая цель вообще? Сделать ИИ играющий в эту игру с человеком? так для этого не нужно все возможные варианты хранить. или что делаешь и для чего? я ZX Spectrum-128 написал в личку, попросил. Если он посчитает нужным - выделит сообщения в отдельную тему.
0
|
|||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
|||
| 24.12.2019, 13:53 [ТС] | |||
|
mr-Crocodile,
0
|
|||
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||
| 24.12.2019, 14:04 | ||
![]() Зачем хранить варианты возможных ходов для человека? Просто проверяй, может человек сделать такой ход или нет. всё. никаких баз данных и баз знаний для этого не нужно.
0
|
||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
|
| 24.12.2019, 14:18 [ТС] | |
|
mr-Crocodile, я о том, что бот должен знать выход из позиции, которую создаёт человек. Соответственно для хода человека дерево развития игры имеет максимальное ветвление. Фактически после фильтрации полного дерева игры (буде кому-то придет в голову его записывать) мы выбираем единственно верный ход для ИИ и получаем базу знаний и алгоритм работы: человек сделал то-то - мы делаем конкретно вот это, а не выбираем из сотен вариантов, и наше решение при этом с наибольшей вероятностью ведёт к победе.
0
|
|
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||
| 24.12.2019, 14:20 | ||
|
0
|
||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
|
| 24.12.2019, 14:24 [ТС] | |
|
mr-Crocodile, неполный поиск в ширину? Можно, но далеко не так эффективно. Придется задуматься над оценкой позиции. Каковы будут критерии?
Опять же, если существуют реализации, основанные на предпросчете, наверное, они не так уж плохи?
0
|
|
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
|||
| 24.12.2019, 14:38 | |||
|
Ksardas_178, мы уже говорим про эффективность?
Тогда я снимаю своё предложение. Безусловно, полная база знаний по всем возможным вариантам намного эффективнее, чем любая эвристика и оценочная функция. Я, конечно, сомневаюсь, что ты сам сможешь составить такую базу, но, если есть готовая и ты сможешь ей воспользоваться, то - ВПЕРЁД! не знаю. Думаю, что нужно просчитывать варианты на пару-тройку ходов вперёд, для каждого получать оценку поля и выбирать тот ход, который ведёт к максимальной оценке. Как оценивать поле, спросишь ты.Ну, например, наивысшая оценка - у противника нет хода, следующая высокая оценка - получить три своих в ряд. следующая оценка, чуть ниже, заблокировать две шашки противника, ещё ниже - поставить две свои в ряд и т.д. я ни разу не играл в эту игру, не знаю её правил, что я буду давать советы по оценке?! Не по теме: анекдот.
1
|
|||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
|
| 24.12.2019, 16:00 [ТС] | |
|
mr-Crocodile, не зря же говорят, что белые начинают и выигрывают) За идеи по оценке спасибо. Сам не игрок
Добавлено через 7 минут К слову об очень хороших вариантах: вообще говоря, если игра не гарантирует победу даже при идеальной стратегии (наш случай), то оценка качества ходов в виде отношения получившихся путей к победе ко всем возможным путям из новой ветки тоже несколько хромает. Надо брать за основу что-то другое. Скажем, неочевидность выбора для оппонента. И если играть против человека, то выбирать те варианты, которые ему труднее будет просчитать и при этом одновременно легче выбрать ошибочное направление. Но это так, мысли вслух
0
|
|
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||||
| 26.12.2019, 07:38 | ||||
|
Хеш функций режет информацию на кусочки и берёт только 1 из этих кусочков. Вся остальная информация теряется и восстановить её уже и теоретически невозможно. Хеш функция это не то же самое что архиватор. .GetHashCode обычно используется в чтоб разложить информацию по полочкам. Пример из реальности: в библиотеке все книги отсортировали по алфавиту. Имея букву, означающую раздел (то есть первую букву названия всех книг в нём) - нельзя получить всю книгу потому что 1. от всей книги - есть только 1 буква из названия и 2. таких книг может (и скорее всего будет) много. Зато, если вы знаете что название нужной вам книги начинается с определённой буквы - вам надо искать не по всей библиотеке, а только в 1 разделе. Хеш-таблицы не экономят память. Они только помогают быстрее находить нужную информацию. А памяти и производительности для их обслуживания - надо больше (но в случае хеш-таблиц - производительность как раз компенсируется скоростью поиска информации). --- Про что говорил я: Весь смысл типизированных файлов в том, что абсолютно все элементы имеют одинаковый размер. К примеру если размер элемента =L, а номер элемента, который вы ищите =N - можно точно сказать что нужный вам элемент находится в файле начиная с байта № N*L. Что я имел в виду - использовать что то типа связного списка. Только обычно элемент связного списка хранит свои данные и адрес следующего элемента в оперативной памяти. А в вашем случае - каждый элемент (то есть состояние) будет хранить свои данные + адрес следующих состояний в файле (то есть не адрес, а номер элемента, который выше я назвал N). --- Но, что можно - дать низкий приоритет проигрышной ветке. То есть просчитывать её ближе к концу. Но как я и сказал - хеш таблицы тут вообще ни к месту.
0
|
||||
| 26.12.2019, 07:38 | |
|
Помогаю со студенческими работами здесь
20
Как сделать систему ходов в карточной игре? Алгоритм для просчета допустимых ходов в игре нарды. Найти объем информации после 11 сделанных ходов в игре
Алгоритм получения всех вариантов ходов бота в карточной игре 101 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|