Здравствуйте, гость Правила · Помощь

»  Теория. Алгоритм распасовки. Подписаться | Сообщить другу | Версия для печати
      » 16/03/2013, 11:43,  isabsent 
mrbiggfoot ("16/".$m["мар"]."/2013," 11:24)
1) ну раз у вас есть более интересные варианты - я вам помочь не могу, потому что у меня всё очень скучное.

2) Тем более что давать объяснения человеку, имеющему тенденцию понимать не с первого раза - это уж точно "впустую гробить время".

1) Да я в общем-то в Вашей помощи не нуждаюсь, слава Богу.
2) Это Вы в порядке хамства или в порядке самоутверждения? Или вы не различаете эти понятия и обычно отвечаете исходя из обоих? Зайдите на форум где проблемы какой-нибудь физики твёрдого тела обсуждаются - я посмотрю там на Ваши тенденции.
      » 16/03/2013, 12:37,  Pochemuk 
Клейн ("16/".$m["мар"]."/2013," 09:09)
isabsent ("16/".$m["мар"]."/2013," 05:34)
Эта стратегия подразумевает, что один игрок делает ходы исходя из предположения, что двое других играют против него коалиционно.

Для распасов это слишком сильное утверждение.

Вот с точки зрения логики и философии игры, я с вами опять не могу согласиться.
Часть ходов делается именно с таким учётом
(например, вы часто встретите у преферанс игроков утверждения и фразы типа: "они же меня сейчас закроют/зачехлят/запаровозят" ).

Предположение о коалиционности противников, возможно, и будет иметь место в ряде случаев (и в ряде противников), но не всегда оно будет приводить к оптимальному розыгрышу алгоритмом, базирующимся на таком допущении ...

Попробую на примере. Прошу прощения, если он ретроспективно несостоятелен - это всего лишь демонстрация идеи:

Середина розыгрыша. Счет 2-0-3. На руках по 5 карт. Допустим, расклад уже просчитан каждым игроком практически со 100%-й точностью.

Ход третьей руки. У него есть возможность сделать некий ход Х1. Первая рука в ответ может поступить двумя способами:

1. Перехватить взятку, отобрать еще 2 своих, отпихнуться назад в этой же масти и зачехлить третью руку на последние 2 взятки. Итого, счет 5-0-5.
2. Пропустить эту взятку ко второй руке и тем самым зачехлить ее на все оставшиеся 5 взяток. Счет будет 2-5-3.

Первый вариант соответствует коалиционной игре соперников (налапничеству). Первая рука, жертвуя своим результатом, помогает коалиционеру остаться чистым и чехлит третью по максимуму.
Второй вариант соответствует игре "каждый за себя" и наиболее отвечает интересам первой и третьей руки, даже если они не состоят в тайной коалиции.

Очевидно, что алгоритм, предполагающий коалиционную игру соперников, не выберет ход Х1, т.к. он в худшем случае обещает ему 5 взяток при нуле соперника. Он предпочтет ему какой-то более нейтральный ход Х2, в результате которого третья рука получит фиксированные 4 взятки. Не меньше, но и не больше.

Если же отбросить предположение о коалиционной игре соперников, то как раз Х1 будет оптимальным: и сами берем минимум и никого чистым не выпускаем ...

Какой ход из Х1 и Х2 выбрать, таким образом, зависит не только от принципа минимакса, но и от вероятности того, что соперники являются налапниками. А можно ли обучить этому алгоритм - задача совсем другой плоскости ...

Это сообщение отредактировал Pochemuk - 16/03/2013, 14:27
      » 16/03/2013, 13:07,  Байкер 
isabsent ("16/".$m["мар"]."/2013," 06:38)
Вы скорее всего правы в этой конкретной сдаче. Может быть ИМЕННО В НЕЙ даже не будет того, что я называю магией, когда вижу что из возможных раскладов оставляется только один. ... Но моя цель - построить алгоритм для ЛЮБОЙ сдачи и поэтому я должен хотя бы примерно понять, как рассчитывать изменение в перенормировке вероятностей возможных раскладов в процессе игры - не вручную, как делает человек, а алгоритмом.

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

Клейн (и я с примером К7+Д8) прав в принципе. В том смысле, что среди всего множества "распасовых" ситуаций существует такое их подмножество, где исчисление конкретного расклада (вообще единственно возможного или приводящего к "перенормировке вероятностей возможных раскладов в процессе игры" ) сказывается на результате решающим образом, и игнорирование этого обстоятельства (продолжение игры против всех раскладов) приводит к заведомо неоптимальным решениям.
Это одна сторона медали. Другая заключается в том, что (грубая оценка) в половине всех случаев расклад можно без ущерба для результатов не считать вообще, а в оставшейся половине еще в половине случаев таким расчетом можно пренебречь. Но уж в оставшихся 25% всех случаев расчет расклада однозначно необходим, если алгоритм собирается играть против людей. А поскольку изначально никто не знает, какой сейчас выйдет случай, функция "Расклад" любого алгоритма, собирающегося в преферансе противостоять человеку, должна работать ВСЕГДА. И это правильный тезис при любом подходе к алгоритмизации распасов - просто игра такая.
Честно говоря, я не очень понимаю, почему вы никак не "врубитесь" в очевидную необходимость "логического довеска" к "простому" перебору. Это же так просто понять... Как это сделать (если поняли)? Метод один: исследовательская работа. Даже в шахматах имеющиеся у каждого игрока стратегические и тактические возможности - конечная величина. А уж преферанс - тем более. У каждого не более 10 карт, пусть выкладывание каждой имеее не более 3 "смыслов", плюс десяток "смыслов" имеет взятка в целом - всего не более 50. Вполне обозримая величина, и это я еще "загнул". Точнее, в каждой конкретной раздаче имеют место быть лишь некоторые из них. Но пусть будет 50 всего - 50 источников (факторов) для получения информации по сужению всего множества раскладов и приведения его к возможному в данной ситуации. Да, довольно нудная работа со всем этим разбираться, но если забить на нее вообще, то любой гений программирования заведомо не получит оптимального результата вообще, и даже обыгрывающего в распасы носителя рейтинга 500+. Как бы ловко (точно и быстро по исполнению) этот гений не реализовал ПРОСТО перебор.
Что касается вопроса собственно перебора, то вам бы найти и поговорить с человеком под ником МишаХ. Он тоже математик и программист. Очень умный. )) Более 10 лет назад он сделал программу (а ля Го, скорее всего этот Го - его программа). Да, она "всего" лишь безошибочно находит оптимальную игру на открытых картах. Но он там чего-то такое применил (чего вы, 2 математика, похоже, и обсуждаете сейчас), что ответ получается практически мгновенно. По-моему Миша упоминал, что "фишка" в том, что ему удалось исключить все повторные расчеты, почему всё и происходит очень быстро. Но ошибок не бывает - это точно.
Тем не менее - мое мнение, - проблемы перебора, это проблемы перебора, но даже если их решить (ответ выдается не более чем за 10-20-30 секунд - "дальше" нет практического смысла), то без функции "Расклад" такой алгоритм бедет играть недостаточно хорошо, точнее, слабее минимум сотни нынешних практикующих здесь преферансистов. А в таком виде он может удовлетворить только собственное самолюбие, но и близко нельзя будет сказать, что такой алгоритм исполняет распасы оптимально вообще. А именно эта задача, вроде как, и ставится.

Метод "по Байкеру" - мне интересно, а как ты понял, в чем этот метод заключается? Концептуально, так сказать. Пару предложений достаточно. И если можно. ))

Это сообщение отредактировал Байкер - 16/03/2013, 13:08
      » 16/03/2013, 14:25,  Клейн 
Pochemuk ("16/".$m["мар"]."/2013," 12:37)

Если же отбросить предположение о коалиционной игре соперников, то как раз Х1 будет оптимальным: и сами берем минимум и никого чистым не выпускаем ...

Какой ход из Х1 и Х2 выбрать, таким образом, зависит не только от принципа минимакса, но и от вероятности того, что соперники являются налапниками. А можно ли обучить этому алгоритм - задача совсем другой плоскости ...

Pochemuk, да, часто встречаемая ситуация.
Должен пояснить почему она часто встречаема.
Дело в том, что подобная дилемма (выбора между ходами Х1 и Х2) встаёт перед игроком не только в игре против налапников.
Чаще всего это возникает, когда надо понять: "а не дурак ли сидит в этот момент на первой руке?"
То есть, этот перец может быть вполне сносным и думающим игроком в принципе; однако, в данный момент может быть озабочен чем-то или быть отвлечённым чем-то (звонок телефона, подход вызванного официанта и т.д., и т.п.).
Таким образом, обрисованная вами, Pochemuk, проблема встречается довольно часто за столом.
К сожалению, в сети её решить сложно (сложно понять: превратился ли в идиота хороший игрок в данный момент или нет?) - отчего и возникает периодически ругань между игроками.

P.S.(14:49) И вот это я всегда относил к пёр/непер - когда некто более-менее вменяемый выступает в качестве идиота соответственно в твою/не_твою пользу.

Это сообщение отредактировал Клейн - 16/03/2013, 14:49
      » 16/03/2013, 14:58,  Pochemuk 
Клейн ("16/".$m["мар"]."/2013," 14:25)
Таким образом, обрисованная вами, Pochemuk, проблема встречается довольно часто за столом.

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

Если же использовать какое из допущений жестко, то это тоже приведет к неоптимальной игре: либо будем выбирать ход Х1 и проигрывать в том случае, если нарвемся на нечестных или невнимательных соперников, либо будем выбирать ход Х2 и это будет неоптимально в противоположном случае ...
      » 16/03/2013, 15:08,  Клейн 
Pochemuk ("16/".$m["мар"]."/2013," 14:58)
Клейн ("16/".$m["мар"]."/2013," 14:25)
Таким образом, обрисованная вами, Pochemuk, проблема встречается довольно часто за столом.

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

Делов том, что это не столь существенный фактор, как вам кажется.
Во-первых, машинка, в отличии от человека, не будет расстраиваться и париться касательно совершённой оппом глупости и обретённого минуса, что тем самым НЕ уменьшит её КПД, в отличии от человека.
Во-вторых, я там написал P.S. - это пёр/непер - нормальное явление.
В-третьих, самое главное - таких сдач в общей массе крайне мало и даже человек, умеющий достаточно точно определять эмоционально-интеллектуальное состояние оппонента, обладающий высоким уровнем эмпатии (как, например, я biggrin.gif) не застрахован от ошибочных суждений. smile.gif

Вывод: эта проблема не стоит того, чтобы быть алгоритмически воплощённой


P.S. (15:22) Pochemuk, простите мне употребление слова ЧАСТО в моём первом ответе на ваш пост - надо было написать ПРОБЛЕМА ВСТРЕЧАЕТСЯ ЧАЩЕ ЧЕМ ВЫ ВСТРЕТИТЕ НАЛАПНИКОВ.
Употребив слово "часто", я вас ввёл в заблуждение.
Каюсь. sad.gif
smile.gif

Это сообщение отредактировал Клейн - 16/03/2013, 15:22
      » 16/03/2013, 15:13,  isabsent 
Байкер ("16/".$m["мар"]."/2013," 13:07)
1) Клейн (и я с примером К7+Д8) прав в принципе. В том смысле, что среди всего множества "распасовых" ситуаций существует такое их подмножество, где исчисление конкретного расклада (вообще единственно возможного или приводящего к "перенормировке вероятностей возможных раскладов в процессе игры" ) сказывается на результате решающим образом, и игнорирование этого обстоятельства (продолжение игры против всех раскладов) приводит к заведомо неоптимальным решениям.
...функция "Расклад" любого алгоритма, собирающегося в преферансе противостоять человеку, должна работать ВСЕГДА. И это правильный тезис при любом подходе к алгоритмизации распасов - просто игра такая.
... очевидную необходимость "логического довеска" к "простому" перебору.

2) Метод один: исследовательская работа.

3) Что касается вопроса собственно перебора, то вам бы найти и поговорить с человеком под ником МишаХ. Он тоже математик и программист. Очень умный. )) Более 10 лет назад он сделал программу (а ля Го, скорее всего этот Го - его программа). Да, она "всего" лишь безошибочно находит оптимальную игру на открытых картах. Но он там чего-то такое применил (чего вы, 2 математика, похоже, и обсуждаете сейчас), что ответ получается практически мгновенно. По-моему Миша упоминал, что "фишка" в том, что ему удалось исключить все повторные расчеты, почему всё и происходит очень быстро. Но ошибок не бывает - это точно.

4) Метод "по Байкеру" - мне интересно, а как ты понял, в чем этот метод заключается? Концептуально, так сказать. Пару предложений достаточно. И если можно. ))

1) Со вчерашнего вечера я согласен с этими тезисами.
2) Конечно! Но она может вестись немного в другом направлении чем то как её выполняете Вы. (Ваш метод может быть и лучше. Он даже есть лучше - уже хотя бы потому, что он существует - даже в виде записей на 20 страницах и точно не требует бесконечной вычислительной мощности). В смысле, что мне хотелось бы избежать разыгрывания вручную 100 раскладов и классификации результатов. Я собираюсь подумать в таком ключе:

а) Начало распасов. Первый ход обсчитывается и делается при условии равнораспределения вероятностей всех возможных раскладов на руках оппов (пока для простоты не исключаем "невозможные" расклады). Пусть оптимальную вероятность имеет Тs.gif - с него и ходим.
б) Второй ходящий анализирует первый ход, понимая что он рассчитывался первым ходящим исходя из равнораспределения (пока для простоты подразумеваем, что обманных ходов не делается). Результатом анализа должен стать набор всех возможных раскладов на руках первого оппа, каждый из которых, будучи обсчитан в предположении равнораспределения первым оппом, даст ему оптимум при ходе Тs.gif Все другие просто отметаются и больше не рассматриваются никогда. Всем оставшимся раскладам присваивается равная вероятность возникновения. Второй ходящий догенерирует расклады на руке третьего оппа, обсчитывает их и получает, что оптимум для него - это ход Кs.gif например. Им и ходит.
с) Третий ходящий по своим картам и уже предположенному набору возможных раскладов на руке первого оппа генерирует все возможные расклады на руке второго оппа. Обсчитывает их и оставляет только те, которые дают второму оппу оптимум при ходе К s.gif. Остальные отбрасываются навсегда. Ну и исходя из оставшихся, считая их равновероятными, находит свой оптимальный ход.

Ключевым моментом здесь является получение набора раскладов, для которых оптимумом является ход Тs.gif (или Кs.gif). Это задача обратная получению оптимального хода из множества возможных раскладов. Я не знаю пока как это сделать алгоритмически, но есть кое какие аналогии из прошлого опыта.

3) Он придумал таблицу перестановок. Это таблица, куда записываются значения количества взяток для поддерева (части полного дерева поиска). Если оно один раз обсчитано и снова попалось при переборе, то не считается снова, а берется из этой таблицы. Точнее её придумали давно, а он просто её закодил. Это драматически сокращает время перебора. Решение задачи на открытых картах занимает сотые доли секунды на ноуте. Ошибки исключены при правильно закодированном алгоритме.

4) Да я ничего конкретно не понял. Понял только, что ты ввел классификацию раскладов (которая включает классификацию рук, которая включает классификацию мастей и наверное еще много чего) и сыграв много партий за все руки против каждого класса поставил лучший ход. Это некоторый вид химии, какой она была до таблицы Менделеева. Огромная куча закономерностей, связей и наблюдений, охватывающая несколько десятков элементов. Но нет одного решающего "удара головой" (как написал этот вундеркинд из Штатов), который Менделеев и сделал. Так что у тебя в руках таблица Менделеева для преферанса скорее всего... smile.gif Это уже очень не мало, но потом все равно нужна квантовая химия, орбитали и всякая s-p-гибридизация, чтобы объяснить а почему же элементы так расположены...

Это сообщение отредактировал isabsent - 16/03/2013, 16:58
      » 16/03/2013, 15:24,  Байкер 
Pochemuk ("16/".$m["мар"]."/2013," 14:58)
Получается, что алгоритм, даже если его научить корректировать вероятности раскладов у соперников и даже вычислять единственно возможный расклад исходя из логики игры, тем не менее будет проигрывать в том, что касается психологической составляющей преферанса. В данном случае - оценке вероятности налапа и/или полной адекватности игры всех оппонентов.

Почему это он (алгоритм) будет проигрывать? Почему это оппоненты алгоритма в данном аспекте разбираются заведомо лучше? Такое допущение можно сделать, но его еще надо доказать, а тут сразу ответ (тезис): "будет проигрывать". Ну, а где аргумент? И на всякий случай напомню, что перед соперниками алгоритма стоят те же самые проблемы...
Нет, оно понятно, что если алгоритм имеет дело с двумя налапниками, то он находится в проигрышном положении. Но это уже и не преферанс как таковой. И нет вообще смысла рассуждать о преферансном алгоритме в условиях игры не в преферанс. Точнее, оно и так понятно, что преферансный алгоритм проиграет в шашки любому балбесу.
Если же речь о "законных" временных коалициях в условиях честной игры "каждый за себя", то это просто появляется еще один аспект алгоритмизации, еще одна функция. У этого аспекта есть свои исходные данные и свои ответы. Да, задача специфичная и несколько необычная (в большинстве других игр ее просто не существует), но не из чего не следует и то, что, скажем, люди решат ее заведомо лучше алгоритма. На мой взгляд и тут всё с точностью до наоборот, ибо если есть формальные исходные данные, и есть процесс их обработки для получения оптимального по какому-то критерию (определяемому однозначно) ответа, то такую работу "железка" всегда сделает лучше человека. Оно конечно, эту железку надо "правильно" собрать, но в теоретическом плане никаких "будет проигрывать". Ибо - почему это?
      » 16/03/2013, 15:25,  Клейн 
isabsent ("16/".$m["мар"]."/2013," 15:13)
Если оно один раз обсчитано и снова попалось при переборе, то не считается снова, а берется из этой таблицы. Точнее её придумали давно, а он просто её закодил. Это драматически сокращает время перебора.

ДА, Да, да!!
я это и пытался Вам сказать в своём анализе сдачи, когда отсылал несколько раз вас к проверке того или иного короткого розыгрыша в масти.
Но у меня не вышло это так хорошо сформулировать, как у вас - сорь. sad.gif
      » 16/03/2013, 15:44,  Pochemuk 
Байкер ("16/".$m["мар"]."/2013," 15:24)
Почему это он (алгоритм) будет проигрывать? Почему это оппоненты алгоритма в данном аспекте разбираются заведомо лучше? Такое допущение можно сделать, но его еще надо доказать, а тут сразу ответ (тезис): "будет проигрывать".

Потому что я писал:

"... будет проигрывать в том, что касается ..."

Т.е. в конкретной узкой области, а не в целом. А будет ли он из-за этого проигрывать в целом зависит от значимости этой области и ее весе среди прочих, о чем и писал Клейн.

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

Так что не следует передергивать и приписывать мне тезисы, которые я не говорил ...
« Предыдущая тема | Перечень тем | Следующая тема »
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей: