MOCHET [7] 
11.09.2018 22:38
 0просмотров 23 6

Проблемы метода наименьших квадратов (least squares).

  1. How to find undervalued Hearthstone cards automatically
  2. Метод наименьших квадратов (wikipedia)
  3. Least Squares Fitting (Wolfram)

Вот так можно использовать этот метод в аркомаге:

  1. Hacking Arcomage. Ideas from DEFCON22.
  2. Arcomage. Card scoring. Game beginning. Me first.

Проблемы:

  1. Проблемы с нестандартными эффектами наподобие "играем снова". Например я давал вручную оценку таким эффектам (1-2 очка). Но вручную это делать как-то не очень.
  2. Как правильно давать оценку "сложным" картам? В Аркомаге есть два типа сложных карт: Первые это карты с условиями. Пример: "Если башня больше чем у врага, то 10 урона, иначе 5", т.е. у карты 2 возможных исхода, а не один. Вторые это эксплуатируемые карты. Пример: "-8 маны всем игрокам". Если у нас например 1 мана, а у противника 8 (не зависимо от каких-либо других карт), то карта сама по себе выгодна, т.к. почти весь "урон" по мане достаётся противнику, т.е. мы эксплуатируем карту в наших целях. У такой карты очень много различных исходов, но эксплуатируемые карты это тоже карты с условиями, но я добавил их в отдельную категорию. Вспомните например о карте вор - как можно максимировать её эффект?
    Получается, что нужно делать оценку не карты такой какой она есть, а делать оценку либо для всех вариантов (через симуляцию), либо делать оценку динамичной (как и было сделанно), т.е. каждый ход смотрим на эффект, который сделает карта и оцениваем её - оправдывает ли она свою стоимость?
  3. Комбинации из карт. В принципе всё очень просто: суммируем все эффекты. А дальше? - Ведь мы же делаем так: играем картой А, играет противник, мы играем картой Б. А и Б и есть наша комбинация из карт, т.е. противник играет между каждым ходом. Комбинация по сути наша тактика. Суммируем все эффекты - а потом делим на количество карт из комбинации? или делим на количество всех ходов? Или вообще не делим? Возможностей есть много разных. Вот появилась ещё одна мелкая сложность.

Wikipedia: Приближение с помощью кривых

И всё же - всё равно можно использовать. Неплохой метод, но только для поиска выгодных карт.

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

Вообще для чего нужна оценка?

  • Определить выгодность карты
  • Определить, что может карта - лимит её действий. Имбоватая ли она? Или всегда такая "плохая"? Т.е. качество - мин/макс и значение на данный момент
  • Оценить комбинацию из карт - какая более перспективная в плане нашей победы?
  • Оценить и сравнить какие-то определённые эффекты
  • Оценить игровое состояние или переходы между состояниями

Оценка это вроде как единая валюта для карт и игровых состояний.
Комментарии
1 / 14.09.2018 11:29 / Iulian [16] ?
Пример комбинации можно?
Есть например карта с уроном, и потом "игрок с меньшей стеной теряет одну казарму и получает по башне". Топовая комбинация. Но. Соперник может использовать карту - Стена +20, башня +8, или "ваша и вражеская стена меняются местами" и комбинация сломалась - нужно снова ломать стену соперника или нарастить свою. Помню как-то раз пытался - ходов десять стена становилась выше у того кто ходит, т.е. не получалось удерживать высоту на второй ход.
С играть снова, сбросить, сходить посрать, играем снова - тоже проблема - ты считаешь сумму карт на руках, но ты выбросил - пришла новая карта, сбросил - пришла новая карта - и уже нужно перепроверить - а не надо ли другую карту сыграть?
2 / 14.09.2018 16:10 / MOCHET [7] ?
Цитата: Iulian
С играть снова, сбросить, сходить посрать, играем снова - тоже проблема - ты считаешь сумму карт на руках, но ты выбросил - пришла новая карта, сбросил - пришла новая карта - и уже нужно перепроверить - а не надо ли другую карту сыграть?

да это важно давать возможность передумывать
3 / 14.09.2018 16:17 / MOCHET [7] ?
Я вот так кодирую комбинации:
Пока без конкретных примеров

turn=0, значит играй картой с АйДи 0
drop=X, значит сбрось любую карту (надо ещё потом оценивать какие карты шлак. но сейчас это пофиг)
wait=3, жди 3 хода (играй любой картой, но не трать никаких ресов (карты с 0 ресурсом), и не ломай свой вещи. проще всего выкинуть карту конечно)

Example 1:
[['turn=0','turn=1'],['turn=2']]
['turn=0','turn=1'] = current turn;
['turn=2']          = next turn;

Example 2:
[['turn=1','drop=X'],['turn=2']]
['turn=1','drop=X'] = play card 1, drop any card X;
-> don't use resources;
['turn=2']          = next turn (play card);
[[['turn=1','drop=2'],['drop=3']],[['turn=4']]]
4 / 14.09.2018 16:23 / MOCHET [7] ?
[['turn=0','turn=1'],['turn=2']]

[[turn=0, turn=1], turn=2]
читается так: играем картой с АйДи 0. Карта из категории "играем снова", значит после неё сразу играем картой с АйДи 1.
Потом что-то делает противник
Потом снова мы играем картой с АйДи 2

Потом дальше нужно расчитывать следующую комбинацию.

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

формат кодировки комбов нужно менять например на  JSON и делать какую-то engine для анализа старых ходов и конструкции новых
5 / 14.09.2018 16:26 / MOCHET [7] ?
Цитата: MOCHET
формат кодировки комбов нужно менять например на  JSON и делать какую-то engine для анализа старых ходов и конструкции новых
я пока ещё не до конца продумал все детали
6 / 14.09.2018 17:27 / MOCHET [7] ?
Цитата: MOCHET
JSON
вообще сейчас уже JSON
но помню, что нужна была какая-то дополнительная мета-информация, которой в сейчашном формате пока нет, чтобы сэкономить лишние вычисления

Возможность комментировать доступна после регистрации