Пилю программку по обсчёту китайского покера

22
Статистика
Статистика
22
Статистика темы
  • Популярность
    Топ-5032
  • Постов
    2,261
  • Просмотров
    172,140
  • Подписок
    22
  • Карма автора
    -45
1 110 111 112 113 114
  • Jak, ну вот теперь все понятно, почему быстрее считает)

    Перелистываем страницу, давайте займёмся серьезными вещами:

     

    https://www.google.com/url?sa=t&source=web&rct=j&url=https://sites.ualberta.ca/~amw8/hearts.pdf&ved=2ahUKEwivptH-nrP_AhUKvYsKHWKfABEQFnoECAsQAQ&usg=AOvVaw0y0UzqgxZsLt5cCPLu0U9V

     

    Создам отдельно тему

    Пока что мой опыт это запуск из книжек примеров по обучению

    Ну и часов 10 в Python код разбирал... 

    Посмотрим что за лето получится навернуть...

    Сообщение отредактировал c00l0ne - 8.6.2023, 12:24
    Ответить Цитировать
    852/882
    + 1
  • Jak, не почитали статью , про игру Hearts? Какие мысли? Может Вам интегрированно изложить ? ... Напишите фид бек...

    Лусидо подключайся тоже ... 

    Может кто ещё изъявит желание...

    Если есть сильные математики... 

    Тоже напишите ...

     

        В моем представлении данный метод хорош тем что применим к любой абсолютно среде и в том что мы не получаем черный ящик, а получаем линейные фичи и зависимости евшки от них ... А это уже невероятно ценная информация... Для обучения например или для новых открытий...

    Ответить Цитировать
    853/882
    + 0
  • Сама игра не интересна. Метод пробежал быстренько. Почитаю еще повнимательней.

    Читал раньше, что кто-то уже занимался этим.

     

    У китая есть одна большая особенность, которая отличает его от других игр.

     

    Лет 15-20 на cgm.ru все занимались играми против казино: блекджек, русский, оазис ... Я тоже тогда этим занимался. Там тоже перебором посчитать было нереально, но комбинаторика все вывезла. Там было все просто, свободных мест К, берем К карт из колоды и заполняем.

     

    В китае получаем 3 карты, а кладем 2-е. Тут обрывается комбинаторика. И так на каждом подъеме. Я пытался последний уровень (он самый узкий) посчитать комбинаторикой. Все считается хорошо. Но потом перебор всех троек для поиска лучшей все портит. И выходит, что вся комбинаторика насмарку. Все равно потом надо перебирать массив. Вот если бы не было этого выбора 2-х из 3-х, все было бы проще.

    Ответить Цитировать
    306/314
    + 1
  • Jak, не то ... Совсем не в ту сторону...

    Jak @ 09.06.23 

    Сама игра не интересна

    + Но в ней состояний больше чем в Китайском

     

    Jak @ 09.06.23 

    оазис

    О! и как там против казино в Оазис, удавалось в плюс выходить? У меня друг любит полудить в него... 2-4 бокса

    Jak @ 09.06.23 

    Вот если бы не было этого выбора 2-х из 3-х, все было бы проще.

    Да все равно там полное дерево 🌲 с оппонентом огромное... Все равно комп не вывезет...

     

    Поэтому мы там где мы есть, ну потихоньку начну с того что метод динамического программирования , TD learning называется или temporal-difference Learning , как он работает сами разберётесь, а как работает целый алгоритм :

    Выбираются фичи, атомные , не подлодки а фичи, ядра

    Далее делается мутация их , рекомбинации , скрещивания разными логическими операциями и из атомных получается набор фич : тысячи штук . 

    Далее происходит на базе этого набора обучение, то как каждая фича влияет на состояние игры, фичи входят в линейный перцептерон который оценивает текущее состояние: 

    ev = Ei fi*wi вот эта сумма искомая...

    Ну и дальше попроще...

    Но главная цель, добиться апроксимации любой точки системы

    Сообщение отредактировал c00l0ne - 9.6.2023, 12:29
    Ответить Цитировать
    854/882
    + 0
  • c00l0ne @ 09.06.23 

    О! и как там против казино в Оазис, удавалось в плюс выходить? У меня друг любит полудить в него... 2-4 бокса

    Оазис давно посчитан.

    Правда их (оазисов, игр) много, с разными вариантами правил обмена. Много из них плюсовые, конечно мы в них плюсовали.

     

    Есть оазис где АК играет с обменом 1 карты, 

    обмен 1,5 карт, 

    обмен 1,2 карт, 

    обмен 1,2,5 карт,

    даже 1,2,5,6-я был.

    Для них давно есть своя стратегия. Особенно если есть обмен информацией между игроками.

     

    Например играем оазис 1,5.

     

    Садились 6 игроков. Маяками обменивались о наличии А, К и вскрышка дилера. И на основании этого меняли сколько надо карт и принимали решение закрываться или скидывать. Особенно когда пара/тройка челов меняла 5 карт, получалось узнавать почти всю колоду и соответственно карты дилера. Можно было оценить вероятность "игры" или "нет игры" дилера.

     

    6 игроков = 30 карт + карта дилера.

    В центре сидит дирижер. Слева и справа ему говорят у кого есть А, К, вскрышка. Он считает. Всем говорит. Конечно не голосом, а кивает головой или руками показывает. Идет обмен. Пусть у дилера 5-ка. Если вскрышка <8 выгодно менять 5 карт. Трое меняют 5 карт. Открываются еще 15 карт. Мы уже знаем 46 карт из 52. Говорят дирижеру, что из интересного пришло. И тут уже легко можно предположить есть игра у дилера или нет.

    Если вероятность игры большая и это вскрышка (карта дилера), или на руках нет АК и возможно АК у дилера, те кто бьет дилера - закрываются, остальные пас. Если скорее игры нет, все закрываются даже ничего не имея. И т.д. Сплошное веселье.

    Ответить Цитировать
    307/314
    + 0
  • Пока что на чиле, не получается особо покумекать над этим всем ... 

    Давайте какую нибудь задачу простую поставим ...

     

    Раньше когда ставил задачки быстро двигались : 

     

    1) Создадим тестовый набор данных, допустим 10 000 000 наборов данных ( раздач ) , чтобы было более реалистично и имело практическое значение , пусть будут это раздачи в хедзапе против фантазии .  

    Соответственно файлик будет с этими данными, где номер раздачи , входящие данные и фантазия у оппонента . Пусть будет классический ананас . 

     

    2) Необходимо сделать "окружение" игры так называемое : 

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

    Модель игры ...

    без всяких само собой упрощений и ухищрений ... 

     

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

     

    Итого: у нас будет общий набор данных , если кто то еще пойдет по этому пути развития... 

    Будем делиться результатами ... а они у всех будут разные ... но понятно к чему нужно будет стремиться ... к ожиданию против фантазии ...

    Ответить Цитировать
    855/882
    + 0
  • попозже , тесты все же надо сделать )

    Сообщение отредактировал c00l0ne - 12.6.2023, 20:53
    Ответить Цитировать
    856/882
    + 0
  • всё отладил, всего то 4-5 чаосв )

    в один поток / 38 Гб рамы

    Гг

    это методом глобальной индексации нод

    на все про все ушло часов 10-12, дерзайте

    индексы уникальных нод так распределяются для этой раздачи: 

    1.7 млн предпоследних

    64087 это вторая сдача

    689 это первая сдача

    1 это сам стартер 

    не жгите процы ребяты)

    осталось оптимизировать все: память , параллелизацию... и можно попробовать стартера посчитать ...

    Сообщение отредактировал c00l0ne - 13.6.2023, 0:34
    Ответить Цитировать
    857/882
    + 0
  • кто будет делать , удалось сократить до 3гбайт с потерей немного производительности

    Сообщение отредактировал c00l0ne - 13.6.2023, 16:07
    Ответить Цитировать
    858/882
    + 0
  • c00l0ne @ 13.06.23 

    потерей немного производительности

    заменил стандартный словарь с++ std::map на Judy Array 

    https://github.com/JerrySievert/judyarray

    производительность вернулась, 38 сек в однопотоке один вариант, за минуту 20 вариантов где то в мультипотоке... 

    оперативки 2 Гб потребляет... на один поток ...

    самый кайф что все дерево остается в памяти  ... 

    ну и алгоритм уже является полноценным солвером всех стартеров ... 

     

    дальше путь самурая выглядит так : 

    сейвим стартера ВСЕ) и первые улицы ... дальше что нибудь с ними сделаем)

    держу в курсе ...

     

    пс ну что пора придумать какой то официальный формат для сохранения раздач в ofcp :D 

    у Jak'a мне понравилась идея , карты писать и ход раздачи ... оч красиво ...

    формат по аналогии с PioSolver'ом , там тоже префлоп ренжи храняться и флоп ... остальное все дорешивается ... 

    так и у нас будет стартера + первый ход ... остальное все допинается само...

    масти пока не учитываем ...

    Сообщение отредактировал c00l0ne - 13.6.2023, 18:52
    Ответить Цитировать
    859/882
    + 0
  • уникальных стартовых пятерок всего 6175 штук : 

     

    если по 3 варианта обсчитывать, это где то сутки машинного времени ...

    Ответить Цитировать
    860/882
    + 0
  • хеш табличка шустрая https://github.com/skarupke/flat_hash_map

    вся фишка в пространстве имет ska::flat_hash_map ... ска топчег... 

    по мне так лучше чем google::flat_hash_map и прочие радости ... но это не точно ... гугл не тестил ...

     

    пока что такие скоростя : 

    Q/A/993 

    алг шлифану , расскажу про ощущения ... 

    с параллелизацией беда конечно же ... 

    горизонтальный алгоритм идеально ложился под ядра ЦПУ... 

    вертикальный же немного другим берет... масштабом вычислений... 

    больше для GPU / CUDA подходит ... но и туда натянуть сложно будет ...

    Сообщение отредактировал c00l0ne - 15.6.2023, 7:28
    Ответить Цитировать
    861/882
    + 0
  • Интересно, но ничего не понятно 🤥

     

    Какой смысл решать частную задачу первого стартера, когда все карты есть и ты их раскладываешь на места?

    c00l0ne @ 13.06.23 

    самый кайф что все дерево остается в памяти ...

    ну и алгоритм уже является полноценным солвером всех стартеров ...

    Как только будут выкинуты карты из колоды, сразу твое дерево не имеет смысла и его надо пересчитывать.

     

    Надо считать именно общий случай: нет Х (5 или 10) карт, мы их видим. нам пришла пятерка карт, вот этот стартер и считай. Как тебе поможет дерево для полной колоды в этом случае? Будешь пробегать по всему дереву и отсекать ненужные ветки? Проще построить новое дерево.

     

    И еще, а ты точно ананас считаешь? Там ведь на каждой улице из 3-х карт берут 2-е и их кладут на линии. А третью карту выкидывают. Если это опустить, брать только 2-е карты и третью замешивать в колоду, резы сразу поменяются в худшую сторону.

    Даже если третью выкидывать, и учитывать все третьи карты, резы меняются. Я это проверял.

    c00l0ne @ 13.06.23 

    масти пока не учитываем ...

    про какой тогда солвер ты говоришь? без мастей, полуананас?

    Ответить Цитировать
    308/314
    + 0
  • Jak, мне интересен сам алгоритм, китайский побочка...

    Jak @ 15.06.23 

    Интересно, но ничего не понятно 🤥

     

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

    Вот эта таблица и реализована хештабличкой... 

    Jak @ 15.06.23 

    Какой смысл решать частную задачу первого стартера, когда все карты есть и ты их раскладываешь на места?

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

    Чем и занимаемся мы тут ... с Вами)

    Jak @ 15.06.23 

    Как только будут выкинуты карты из колоды, сразу твое дерево не имеет смысла и его надо пересчитывать.

     

    Надо считать именно общий случай: нет Х (5 или 10) карт, мы их видим. нам пришла пятерка карт, вот этот стартер и считай. Как тебе поможет дерево для полной колоды в этом случае? Будешь пробегать по всему дереву и отсекать ненужные ветки? Проще построить новое дерево.

    Нифига не проще, как вы будете считать игру оппонента? Там дерево глубины как черная дыра... Вместе с игрой оппонентов в 3 Максе ... 

    Jak @ 15.06.23 

    ананас считаешь? Там ведь на каждой улице из 3-х карт берут 2-е и их кладут на линии. А третью карту выкидывают. Если это опустить, брать только 2-е карты и третью замешивать в колоду, резы сразу поменяются в худшую сторону.

    Прекратите бомбеж, готов деньги поставить что вы никогда в жизни не обыграете солвер который решил 2 карты из 3 карт сдачи ... Да Вы и первый алгоритм  не обыграете, который в вашей программе)) если я его настрою ... Человек к сожалению не способен...

     

    Jak @ 15.06.23 

    про какой тогда солвер ты говоришь? без мастей, полуананас?

    Все будет ... Флеши это отдельная игра...

    Ответить Цитировать
    862/882
    + 0
  • Jak, спрашивайте если что то непонятно, что то по коду только в личку, общие вопросы тут можно обсудить ...

     

    В первом алгоритме какая проблема А дядь? Слишком много умножений! Как ее решить? Умножать поменьше, каааак? Ну можно посмотреть где мы делаем повторные вычисления и их хешировать ...

    Где где спросите вы мы делаем повторные вычисления... Да мы оч часто одни и те же терминальные узлы обсчитываем на посл и предпоследней сдаче... А зачем мы их несколько раз обсчитываем? Да потому что мы не знаем повторились они или нет

    ? Потому что идём последовательным путем... Вот и приходим к тому что нам надо считать сразу крайние терминальные узлы и от них строить связи к предыдущим исключая любые повторные вычисления...

     

    Пс ну и отмечу что алгоритм со звёздочкой, думаю Вы понимаете что это значит ... можно не вывести ... Но решает достаточно широкий класс задач где можно построить  граф наших стратегий и провести прямую симуляцию... Рекомендую сразу писать на с++ ... на Делфи не смогу помочь... А через полгода перейду на rust полностью ...

    Сообщение отредактировал c00l0ne - 15.6.2023, 9:46
    Ответить Цитировать
    863/882
    + 0
  • Оставлю тут заметку: 

    Применение нейросетей для визуализации сложных алгоритмов

    Ответить Цитировать
    864/882
    + 0
  • c00l0ne @ 15.06.23 

    Рекомендую сразу писать на с++ ... на Делфи не смогу помочь... А через полгода перейду на rust полностью ...

    Да какая разница на каком языке писАть. Тут важна прокладка.

    Или ты думаешь, что на rust прога будет лучше считать?

     

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

    c00l0ne @ 15.06.23 

    Все будет ... Флеши это отдельная игра...

    Я и говорю, что ты не для китая пишешь. Какая-то своя игра.

    Сообщение отредактировал Jak - 16.6.2023, 5:32
    Ответить Цитировать
    309/314
    + 2
  • Jak @ 16.06.23 

    каком языке писАть

    Не хочу в таком тут духе общаться, ну почему то windows на c++ писали,но важна же прокладка между стулом и клавиатурой

    А сейчас на rust переходят, исправляя косяки c++ ... 

    Все это голословно и вступать в такие демагогии у меня нет времени... 

    Смотри преимущества Rust в чем в ролике перед с++, но что то прокладки не кинулись на радостях писать на Rust, потому что язык требует уже уровень входа другой, другой тип мышления...  

     

    Вы сами говорите язык не важен , тут же шкурите меня за VBasic .net

     

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

     

    Каждому языку своя ниша, но признанный язык это конечно c++ с миллиардами  строк кода написанными людьми и кучей библиотек...

     

    Нужны идеи а не бомбежь...

    Jak @ 16.06.23 

    китая пишешь. Какая-то своя игра

    Что это значит я не понимаю , вот есть у вас 10 литров воды в ведре, а у нас бутылка литровая и нам туда всю эту воду перелить нужно... Вот аналогия с полной игрой и сокращённой... Я просто не понимаю зачем вы это пишите, либо не понимаете что вся игра не влезет в ттх современных ПК, либо просто бомбежь...

    Сообщение отредактировал c00l0ne - 16.6.2023, 20:11
    Ответить Цитировать
    865/882
    + 0
  • c00l0ne @ 16.06.23 

    Вы сами говорите язык не важен , тут же шкурите меня за VBasic .net

    Конечно язык не важен. И про бейсик я тебя не шкурил, я говорил, что на бейсике такую программу не написать. Что-то проверить, конечно можно.

    c00l0ne @ 16.06.23 

    Каждому языку своя ниша

    именно. бейсик для солвера не подходит.

     

    ты же пишешь

    c00l0ne @ 13.06.23 

    ну и алгоритм уже является полноценным солвером всех стартеров

    и тут же говоришь, что это сокращенный вариант

     

    ЗЫ. Вот какой мне смысл переходить на другой язык?

    У меня наработок 100к++!!! строк разных программ, мне что их все переписывать на rust?

    Только этот китай у меня в текстах 3мб символов. 3 мегабайта в 21 файле *.pas! Конечно половина там мусора, всяких ответвлений, проб...

     

    Не верю я что будет прям лучше, проще и быстрей. 

    В смысле алгоритмов там все тоже самое, циклы, массивы, всякие if ... все такое же. Другого не придумаешь. Вся логика осталась.

    Да, может тоже самое записано немного по-другому. Не record, как в delphi, а struct как в с++. Но суть-то та же!

     

    Представь, вот я пишу стихи на русском языке, это родной для меня язык, я легко на нем могу записать свои мысли и увидеть результат. А мне говорят, НЕЕЕЕЕТТТ, надо писать на французском, там красивей звучит. Зачем мне его учить? Конечно если б я только начинал учить языки ... можно было бы выбрать другой. Delphi меня полностью устраивает, вот надо мне на экране поставить картинку, кнопку, grid какой-то с текстами, таблицу, ткнул пару кнопок, установил размер, надписи, свойства и все готово! Все работает, а в VC танцы с бубном.

    Сообщение отредактировал Jak - 16.6.2023, 21:53
    Ответить Цитировать
    310/314
    + 0
  • Jak, я имел ввиду что я в delphi не смогу помочь потому что посл раз видел его 17 лет назад в универе, пишите на нем если нравится

    Думаю тема исчерпана

    Jak @ 16.06.23 

    говоришь, что это сокращенный вариант

     

    ЗЫ. Вот какой мне смысл переходить на другой язык?

    Полный вариант точно невлезет, там таблица переходов будет много гигабайт, но как нибудь попробую

     

    Пока что ближайшая цель сделать датасет 10 000 000 раздач и сыграть их ну против фантазии например

    Посмотреть евшку какую покажет

    Ответить Цитировать
    866/882
    + 0
1 110 111 112 113 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.