c00l0ne @ 03.02.23Запускаешь 10 раздач на расчет параллельно, пока первая 25 сек считает и вот тебе скорость
Такого не будет на одном компе, это точно. Одна раздача займет 100% проца.
c00l0ne @ 03.02.23Надо еще формат сохранить/загрузить придумать ...
Этой херней я заниматься не буду.
c00l0ne @ 03.02.23Пс я к тому что ты типа заработать не хочешь на этом софте, просто выкласть хочешь ?
Софт просто быстро крякнут, ничего ты не заработаешь ...
Заработать, конечно, не плохо... Только как? Делать подписку? Сопровождать... Отвечать на возмущенные письма?...
Не, это не для меня.
Вот отдать это какому-нибудь спецу, пусть занимается. Мне процентик. Ну или отдать оптом за деньги кому-то, а он пусть организует продажи и тд. И зарабатывает в розницу.
Весь этот проект мне интересен как задачка, быстро посчитать что-то. Хобби. Деньги я по-другому зарабатываю.
c00l0ne @ 03.02.23Пс надеюсь это не из разряда "алгоритм 5 строк и оптимизаций на 5000 строк кода" ...
Нет. Вся канитель именно расчета любой позиции на 52 карты занимает 320 строк. Конечно операторов побольше. Ну, пусть 700 операторов. Ну и + параллельно все. Проц на 100% занят, из-за этого скорость.
Если еще переработать распараллеливание, можно еще в 2 раза минимум ускорить. Там некоторые потоки самые длинные, Их тоже можно разделить.
c00l0ne @ 03.02.23514 сек
Против твоих 2.6 с
Это примерно 20 потоков, если в 1 поток - то 10сек.
Я же говорю, можно еще ускорить, если выровнять потоки по объему вычислений.
Jak @ 04.02.23Такого не будет на одном компе, это точно. Одна раздача займет 100% проца.
На пару секунд займет, но вся очередь посчитается за 25 сек ... Я про это...
Jak @ 04.02.23Весь этот проект мне интересен как задачка, быстро посчитать что-то. Хобби.
Если цель быстро то задачка видимо решена...
Нужна утилита для подсчета стартера и сохранения результатов... Стартер и первая сдача...
Например :
Utility-starter.exe 10 8c9cTcJcQc
Ev = 20.0
Starter file = 8c9cTcJcQc_10_starter.txt
Первый ход = 8c9cTcJcQc_10_first.txt
Где 10 индекс хода все карты вниз ...
Если надумаешь сделать ...
Пиши прайс...
Подумаю...
10 минут неплохое время для стартера... Можно попробовать базу обсчитать
..
Jak, reinforcement learning
Сама учится
И все притихли, типа асе сделали... Ну давайте накину на вентилятор...
Jak @ 04.02.23Нет. Вся канитель именно расчета любой позиции на 52 карты занимает 320 строк. Конечно операторов побольше. Ну, пусть 700 операторов. Ну и + параллельно все. Проц на 100% занят, из-за этого скорость.
Если еще переработать распараллеливание, можно еще в 2 раза минимум ускорить. Там некоторые потоки самые длинные, Их тоже можно разделить.
Да здорово, молодцом , алгоритм прокачал впечатляет...
Jak @ 03.02.23Ты его напишешь (в чем я сомневаюсь)
Немного обидно, я с++ третий месяц то изучаю, дай немного времени хаха, у меня тут еще форсмажорные жизненные лбстоятельства кек...
В любом случае никакого алгоритма мы тут не увидели (а ждун ждет)...
Мне кажется давно пора его было тут опубликовать, типо "а мужики то не знают" ... Или в "гроб" с собой по старинке...
Варимся все в одной каше, я вот заметил что вы не в ту сторону считаете и поправил вас, а вот от вас не услышал подобного совета...
Но не про это я...
А про то что а нифига толком и не сделано до сих пор...
Стартера не считаются...
Софт лайны не учитывает...
Кривые стратегии расчитывает...
Да
2.5 сек на первый ход это крутой результат но это 1 вариант , а вариантов много ...
Первый ход считается на самом деле десчтки секунд...
В итоге что имеем , а ничего не имеем.
Вот и какой смысл в Вашем потраченном времени? )
Вот я не хотел 3-4 мес назад сюда писать по этой причине , что велью в этой теме нулевое... Но чисто ради Джака... Апнул топик...
Ну давайте начнем с чего нибудь простого :
Вот в сети есть такой метод решения карточных игр :
Это reinforcement learning с линейным полиндромом
Если поразбираться там не сложно...
Я года три назад делал... Штука забавная...
Попозже расскажу как это работает и как это устроено... Но решать скорее будем харстоун , а не китайский ) или и то и то
Идея такая закладывается, в мк обьем невероятно большой вычислений...
Что предлагают нейросети:
Создать функцию для оценки ев состояний...
Фкнкция эта будет нейросетью, которая обучается в процессе игры сама с собой
Так же как в AlphaZero, но тут попроще.
В работе выше вместо нейросети используется линейный перцептерон ...
Выглядит он вот так:
y= a1 * x1 + a2 * x2 ... И тд
Где x итое это определенные параметры(фичи) и "a" итое это коэфициенты обученного перцептерона
Допустим в покере мы будем считать евшку
Ev = a1* x1 + a2 * x2 ...
В чем же преимущество?
Преимущество заключается в том что после обучения нам нужно сделать "n" умножений и мы получаем ев любого спота... Ну и малый размер ... Нам необходимо хранить n коэффициентов для решения всей игры
...
Jak @ 07.02.23Проблема как выбрать эти фичи
После сессии напишу
Да в другом там проблема...
Обучение провести ...
Оно долгое и оч не приятное когда неудачное...
Фич можно напридумывать сотни...
Можно вообще напрямую подавать состояние
Карты стартера от 1-52 например , как это делали в игре Go в AlphaZero
c00l0ne @ 07.02.23После сессии напишу
Фичи то понятно какие, ну разные вероятности, флеша стрита текущей доски
Вероятности прихода карт тех или иных
А нейросеть эти цифорки сама соберет в правильную формулу после обучения...
Чем крут линейный перцептерон:
Там используются атомные фичи
И их комбинации, и можно посмотреть как определенные фичи и их комбинации влияют...
Что в обычной нейросети сделать нельзя, там черный ящик с уровнем сложности 99 лвл если хочешь его распаковать и посмотреть формулы ...
В чем подводные камни линейного перцептерона, он достаточно простой и нужно много фич, а это много вычислений... Чтобы формула линейная приблизилась к апроксимации нелинейной формулы
Еще острый вопрос это параллезация... В основном сейчас считают на GPU как я понял ... Но мне ближе CPU ...
На выходных посмотрим покрутим короче ...
Ну а до выходных , домашнее вам задание:
Накодить сим игры
В этом симуляторе должно быть состояние игры
Типа доска и колода...
Как только игра заканчивается считается роялти ...
Желательно на python написать ...можно с++ ... Java ... Delphi ...
Короче кто на чем горазд делайте...
Мне нужен код будет...
Создадим дискорд сервер ...
Кто ничего не будет публиковать кикну... Гл
А то тратишь на челов гигавремя а фидбек нулевой...
Jak, а не с полной колодой? Сколько стартер у тебя считает , где карты от 0 до 12?
Есть еще парочка идей для МК , но они уже глубокие и доооолгие : сложный алгоритм проработать , формулировать напрямую формулами, бинарные вычисления попробуйте или CUDA ...
Если у тебя все ветки считает быстро так, то я думаю сложный алгоритм выдаст стартер в секунд 10 ... Опять же не понятно засчет чего у тебя ускорение...
Рассказывай... Без деталей можешь ... Чтобы принципиально понять где их можно применить, эти твои оптимизации гениальные...
Если флешей нет (на обоих линиях есть разные масти), колода не важна. Если есть все 13 карт, то неважно на 1 аут умножать или на 3-4.
Скорость почти одинакова.
Заточенный вариант (без проверки на флеши), полный универсальный вариант (с проверкой на флеш)
с полной колодой: 103, 127сек.
мы третьи (-10 карт): 68, 109сек.
Если есть флеш внизу, скорость сразу падает. Карты не 0..12, а 0..25. Добавляются ауты на флеш. Ну, конечно циклов будет не 26, тк нек флешовые карты еже у нас.
Полный перебор, сразу 2600сек
Jak, ну ты конечно заморочился
Я просто 0-52 впечатал...
Когда проверял твои расчеты...
В любом случае МК уперся в колво умножений и дальше только ьоги оптимизации многопотоковой смогут сдвинуть данный алгоритм в сторону уменьшения времени вычисления...
Поэтому предлагаю бросить его ... И заняться более продвинутым методом... Q-learning и иже с ним
Сорямба, пока нет времени нэйросетями заниматтся... Перенимайте эстафету...
https://t.me/+h05TvoKJ8cY3NmMy
на свой страх и риск публикую программку для расчета позиции.
Все "лишнее" убрал, прога может только считать текущую позицию. Фактически пользоваться ей как подсказчиком нет смысла.
Пользуйтесь, проверяйте свои расчеты.
Если нашли ошибки, пишите.
Если не лень, считайте стартеры ...
Jak, благодарочка
файл проверил на вирусы :
вирусов не обнаружено ...
Я мельком накидал алгоритм на 52 карты:
Конечно я криво пишу на с++, но не настолько же
514 сек
Против твоих 2.6 с
Ты Бог интегера)))
Если будет желание/время/возможности расскажи как оптимизировал этот трактор...
Пс надеюсь это не из разряда "алгоритм 5 строк и оптимизаций на 5000 строк кода" ...