Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Морской бой и минимакс 
:(
    Опции темы
YahоО
Дата 12.1.2021, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 11.6.2015

Репутация: 1
Всего: 1



Написал игру морской бой http://visiotxt.myartsonline.com/game/  (зацените).

Игра проходит в трех вариантах "интеллекта", в большинстве случаев в ней компьютер выигрывает у человека-игрока, но и человек может выиграть у компьютера, что в общем то не удивительно.

Для игры крестики нолики есть прекрасный алгоритм minimax, обеспечивающий максимальную эффективность компьютерного противника, у которого человек практически никогда не выиграет, а лучшем случае будет ничья.

Вопрос такой, можно ли переделать/создать алгоритм минимакс применительно для игры в морской бой? 
Если такое невозможно, то может ли тогда ИИ решить задачу в пользу компьютера, чтобы в любом случае у человека-игрока выигрывал всегда компьютер?

PM MAIL   Вверх
ksnk
Дата 12.1.2021, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



минимакс подходит для игры с открытыми данными, шахматы, например. Для игр с закрытыми картами нужно другое

А где в игрушке написано, что "корабль убит" ? Как-то неочевидно, что этот выстрел последний и добивать уже некого.

Наиболее эффективная методика расстановки - все корабли, кроме 1-2х однопалубных, выставить вдоль одной из стен. И неважно, что противник про это знает и выбивает весь балласт одним ходом - все равно остается достаточно свободных клеток для маневра.

Одна из наиболее эффективных атакующих тактик - диагональные полоски с шагом 4. Когда ей выбивается 4-х палубный, переключаемся на заполнение промежутков полосок - выбиваетм всех 3 и 2-х палубных. Потом как повезет - убиваем однопалубные

Это сообщение отредактировал(а) ksnk - 12.1.2021, 17:02


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 12.1.2021, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Ну и чтобы компьютер выигрывал "всегда", можно совместить "победную" расстановку с читом - ставим последний корабль, когда свободных клеток для стрельбы осталось не более 5 штук.   smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
YahоО
Дата 12.1.2021, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 11.6.2015

Репутация: 1
Всего: 1



Цитата(ksnk @  12.1.2021,  16:50 Найти цитируемый пост)
А где в игрушке написано, что "корабль убит" ? Как-то неочевидно, что этот выстрел последний и добивать уже некого.

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

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


Цитата(ksnk @  12.1.2021,  17:09 Найти цитируемый пост)
Ну и чтобы компьютер выигрывал "всегда", можно совместить "победную" расстановку с читом - ставим последний корабль, когда свободных клеток для стрельбы осталось не более 5 штук. 

Ага, я тоже сначала делал честный "ум", а в третьем режиме тоже добавил подтасовку, Вы могли это заметить по количеству пустых выстрелов в начале игры, когда комп сам то попадает и набирает очки, но свои скрытые кораблики при каждом выстреле человека в тайне от него скрытно уводит из под огня путем подбирания варианта полной новой расстановки всей свое позиции всех корабликов, пока таких вариантов уже не остается он переходит к честной игре. Но тут выявляется такая особенность, что стреляя в свободные клетки до первого попадания раз 15-20 мимо, зато потом очень легко даже выиграть у компьютера, так как такая рекогносцировка поля боя дает свои положительные сведения.
Ваши 5 (или до последнего) выстрелов с переносом последнего кораблика это уже интересно, можно пробовать добавить. Спасибо!

С минимаксом просветили, подтвердили мои смутные сомнения, а что по поводу ИИ? Скорее всего то же самое в части подбора оптимального выстрела, т.е. даже ИИ не справится лучше махлюющего алгоритма?
Я уж думал что ИИ это вершина, а оказалось как всегда smile)))   но  добавил в свой словарный запас слово чит smile))))) Интересно стало даже, отчего в повседневной жизни не используется широко это слово. 

И снова про минимакс, красивый он, а у меня получился код далекий от краткости и изысканности...
PM MAIL   Вверх
ksnk
Дата 12.1.2021, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(YahоО @  12.1.2021,  20:38 Найти цитируемый пост)
Сделать так несложно, но это будет уже явная подсказка игроку.

Мне кажется, что игроки обмениваются словами - промазал, попал, убил... Впрочем - ладно, если компьютер тоже играет так же, не подсматривая, то нормально smile 
Цитата(YahоО @  12.1.2021,  20:38 Найти цитируемый пост)
 Можно конечно задать условие чтобы расстановка больших велась вдоль стен, какая при этом будет вероятность расстрела беглым огнем всех больших кораблей

Расстановка всех кораблей, кроме 1 однопалубного вдоль стены, например сверху, занимает 4 строки. Для однопалубного остается 60 клеток - примерно 30 ходов до среднестатистического проигрыша, и чуть больше, если противник не убивает весь балласт одним ходом. Для 2-х однопалубных на 60 клетках для 50% проигрыша нужно еще больше, imho, ходов 35-40, хотя я что-то не силен теорвере и не смог на глаз посчитать вероятность - могу ошибиться...  
А если читить, то и все 55+. За это время любую "случайную" расстановку можно уже вскрыть, просто потому, что каждый убитый корабль выводит "из игры" несколько непрострелянных клеток.






--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1218 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.