Применение машинного обучения к игре в угадайку?

У меня проблема с игрой, которую я делаю. Я думаю, что знаю решение (или какое решение применить), но не знаю, как все «кусочки» сочетаются друг с другом.

Как работает игра:

(из How to алгоритм игры по угадыванию числа (с поворотом)? )

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

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%, например). Цены на фрукты могут изменяться (случайным образом), поэтому общая стоимость может также изменяться в зависимости от этого (для простоты я не меняю цены на фрукты в этом примере). Используя приведенный выше пример, на 2-й день игры пользователь возвращает значение 152 доллара и 164 доллара на 3-й день. Вот пример.

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-реализацию модели Баума-Велча (она используется для обучения данных) здесь: Пример реализации Баума-Велча **

Что, по моему мнению, необходимо сделать (это могло быть неправильно):

Теперь, когда я сузил результаты, я в основном пытаюсь позволить программе попытаться предсказать правильный результат на основе суженного результата база. Я думал, что это невозможно, но некоторые люди предполагают, что это можно решить с помощью скрытой модели Маркова. Я думаю, что могу выполнить несколько итераций над данными (используя модель Баума-Велча), пока вероятности не стабилизируются (и должны улучшиться с увеличением количества поворотов от пользователя). Способ, которым скрытые марковские модели могут проверять орфографию или почерк и улучшать их по мере совершения ошибок (в данном случае ошибка заключается в выборе корзины, которая удаляется при следующем повороте как маловероятная).

Два вопроса:

  1. Как мне вычислить матрицу перехода и излучения, если все состояния сначала равны? Например, поскольку все состояния равновероятны, что-то должно использоваться для обозначения вероятности изменения состояний.Я думал об использовании созданного мной графика для взвешивания узлов с наибольшим количеством ребер как части расчета переходных / эмиссионных состояний? Имеет ли это смысл или есть лучший подход?

  2. Как я могу отслеживать все изменения в состояниях? По мере добавления новых корзин и удаления старых возникает проблема отслеживания корзин.Я думал, что мне нужна скрытая марковская модель иерархического процесса Дирихле (hdp-hmm), но я не совсем уверен, как ее применить.

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

Как всегда, спасибо за ваше время и будем благодарны за любые советы / предложения.

22
задан Community 23 May 2017 в 11:59
поделиться