У меня проблема с игрой, которую я делаю. Я думаю, что я знаю решение (или какое решение применить), но не уверен, как все "штуки подходят друг другу".
Как работает игра:
(from Как подойти к алгоритму угадывания номера (с помощью скручивания)?)
пользователям будут предоставлены элементы со значением (значения меняются каждый день, и программа знает об изменении цены). Например
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 в день 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% точности прямо сейчас, чтобы пользователь входил в нее навсегда.
Что я сделал до сих пор:
Я взял все ценности фруктов и общую стоимость корзины фруктов, которые мне дали, и создал большую таблицу всех возможностей. Как только у меня есть список всех возможностей, я использовал теорию графов и создал узлы для каждого возможного решения. Затем я создаю ребра (ссылки) между узлами с каждого дня (например, day1 to day2), если он изменяется в пределах 5%. Затем я удаляю все узлы, у которых нет ребер (ссылки на другие узлы), и по мере того, как пользователь продолжает играть, я также удаляю целые пути, когда путь становится тупиком. Это здорово, потому что это сужает выбор вниз, но теперь я застрял, потому что я хочу еще больше сузить эти варианты. Мне сказали, что это скрытая проблема с маркой, но более сложная версия, потому что состояния меняются (как вы можете видеть выше, новые узлы добавляются каждый ход, а старые/не вероятные удаляются).
**, если это помогает, я получил замечательный ответ (с образцом кода) на реализацию python модели baum-welch (ее используется для обучения данных) здесь: Пример реализации Баум-Вельча **
Что мне нужно сделать (это может быть неправильно):
Теперь, когда я сузил результаты, я стараюсь, чтобы программа пыталась предсказать правильную основу суженной базы результатов. Я думал, что это невозможно, но несколько человек предполагают, что это можно решить с помощью скрытой марковской модели. Я думаю, что я могу запустить несколько итераций по данным (используя модель Baum-Welch), пока вероятности не стабилизируются (и должны улучшаться с большим количеством поворотов от пользователя). Способ, которым скрытые марковские модели могут проверять орфографию или почерк и улучшать, поскольку они делают ошибки (ошибки в этом случае состоят в том, чтобы выбрать корзину, которая была удалена при следующем повороте, как невероятное).
Два вопроса:
-
Как определить матрицу перехода и излучения, если все состояния вначале равны? Например, поскольку все состояния одинаково вероятны, необходимо что-то использовать для определения вероятности изменения состояний. Я думал использовать граф, который я сделал, чтобы весить узлы с наибольшим числом ребер, как часть расчета состояний перехода/излучения? Это имеет смысл или есть лучший подход?
-
Как я могу отслеживать все изменения в состояниях? Когда новые корзины добавляются и старые удаляются, возникает проблема отслеживания корзин. Я, хотя скрытая марковская модель иерархического процесса Дирихле (hdp-hmm) была бы тем, что мне нужно, но не совсем точно, как ее применять.
(извините, если я немного расстроен... немного усердно зная, что проблема разрешима, но не может концептуально понять, что нужно сделать).
Как всегда, спасибо за ваше время, и любые советы/предложения были бы весьма признательны.