У меня проблема с игрой, которую я делаю.Я думаю, что знаю решение (или какое решение применить), но не уверен, как все «кусочки» сочетаются друг с другом.
Как работает игра:
(от Как подойти к алгоритму игры в угадайку чисел (с изюминкой)? )
пользователям будут предоставлены элементы со значением (значения меняются каждый день, и программа знает об изменении цены),Например,
Apple = 1
Pears = 2
Oranges = 3
Затем они получат возможность выбрать любую понравившуюся им комбинацию (например, 100 яблок, 20 груш и 1 апельсин).Единственный вывод, который получает компьютер, - это общая стоимость (в данном примере это $ 143).Компьютер попытается угадать, что у них есть.Который, очевидно, не сможет правильно получить первый ход.
Value quantity(day1) value(day1)
Apple 1 100 100
Pears 2 20 40
Orange 3 1 3
Total 121 143
В следующий ход пользователь может изменить свои числа, но не более 5% от общего количества (или какой-то другой процент, который мы можемвыбрал. Я буду использовать 5%, например.).Цены на фрукты могут изменяться (случайным образом), поэтому общая стоимость также может изменяться в зависимости от этого (для простоты в этом примере я не изменяю цены на фрукты).Используя приведенный выше пример, во второй день игры пользователь возвращает значение $ 152 и $ 164 в третий день. Вот пример.
quantity(day2) %change(day2) value(day2) quantity(day3) %change(day3) value(day3)
104 104 106 106
21 42 23 46
2 6 4 12
127 4.96% 152 133 4.72% 164
* (надеюсь, таблицы отображаются правильно, у меня былоНадеюсь, что они будут размещены вручную, поэтому не просто делать это на моем экране, если это не сработает, дайте мне знать, и я попытаюсь загрузить скриншот).
Я пытаюсь понять, смогу ли я понятьузнать, какие количества есть со временем (при условии, что у пользователя будет терпение продолжать вводить числа).Я знаю, что сейчас мое единственное ограничение - это общее значение не может превышать 5%, поэтому я не могу быть в пределах 5% точности, поэтому пользователь будет вводить его всегда.
То, что я сделал до сих пор:
Я взял все значения фруктов и общую стоимость корзины фруктов, которые мне дали, и создал большую таблицувсе возможности.После того, как у меня есть список всех возможностей, я использовал теорию графов и создал узлы для каждого возможного решения.Затем я создаю ребра (связи) между узлами из каждого дня (например, от дня 1 до дня 2), если его изменение не превышает 5%.Затем я удаляю все узлы, которые не имеют ребер (ссылки на другие узлы), и, поскольку пользователь продолжает играть, я также удаляю целые пути, когда путь становится тупиком.Это здорово, потому что это сужает выбор, но теперь я застрял, потому что я хочу сузить этот выбор еще больше.Мне сказали, что это скрытая проблема Маркова, но более хитрая версия, потому что состояния меняются (как вы можете видеть выше, новые узлы добавляются каждый ход, а старые / не вероятные удаляются).
** если это поможет, я получил удивительный ответ (с примером кода) о реализации на python модели baum-welch (используется для обучения данных) здесь: Пример реализации Baum-Welch **
Что я думаю нужно сделать (это может быть неправильно):
Теперь, когда я сузил результаты, я в основном пытаюсь разрешить программупопытаться правильно спрогнозировать, основываясь на суженной базе результатов.Я думал, что это невозможно, но несколько человек предлагают решить эту проблему с помощью скрытой модели Маркова.Я думаю, что могу выполнить несколько итераций над данными (используя модель Баума-Уэлча), пока вероятности не стабилизируются (и не должны улучшаться с большим количеством поворотов от пользователя).Способ, которым скрытые марковские модели могут проверять орфографию или почерк и улучшать их при возникновении ошибок (в данном случае ошибки - это выбрать корзину, которая будет удалена на следующем ходу как маловероятная).вопросы:
How вычислить ли матрицу перехода и эмиссии, если все состояния сначала равны? Например, поскольку все состояния одинаково вероятны, необходимо использовать что-то, чтобы выделить вероятность изменения состояний. Я думал об использовании графика, который я сделал, чтобы взвесить узлы с наибольшим числом ребер как часть расчета переходных / эмиссионных состояний? Это имеет смысл или есть лучший подход?
Как я могу отслеживать все изменения в состояниях? Когда добавляются новые корзины и удаляются старые, возникает проблема отслеживания корзин. Я думал, что мне нужна модель скрытого марковского процесса иерархического процесса Дирихле (hdp-hmm), но я не совсем уверен, как ее применить.
(извините, если я звучу немного разочарованно ... это немного сложно, зная, что проблема разрешима, но не в состоянии концептуально понять, что нужно сделать).
Как всегда, спасибо за ваше время и любые советы / предложения будут с благодарностью.