【发布时间】:2011-12-24 20:51:21
【问题描述】:
我正在制作的游戏有问题。我想我知道解决方案(或应用什么解决方案),但不确定所有“部分”如何组合在一起。
游戏如何运作:
(来自How to approach number guessing game(with a twist) algorithm?)
用户将获得具有价值的物品(价值每天都在变化,并且程序会意识到价格的变化)。例如
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 美元,在第 3 天返回 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% 的准确度,所以用户将永远输入它。
到目前为止我做了什么:
我已经把给我的水果的所有价值和水果篮的总价值都计算出来了,并创建了一个包含所有可能性的大表。一旦我列出了所有可能性,我就会使用图论并为每个可能的解决方案创建节点。然后,如果它的变化在 5% 以内,我会在每天(例如第 1 天到第 2 天)的节点之间创建边(链接)。然后我删除所有没有边的节点(链接到其他节点),并且当用户继续播放时,当路径变成死胡同时,我也会删除整个路径。 这很好,因为它缩小了选择范围,但现在我被困住了,因为我想进一步缩小这些选择范围。有人告诉我这是一个隐藏的马尔可夫问题,但是一个更棘手的版本,因为状态正在发生变化(正如您在上面看到的,每轮都在添加新节点,并且正在删除旧的/不可能的节点)。
** 如果有帮助,我在这里得到了关于 baum-welch 模型(用于训练数据)的 python 实现的惊人答案(带有示例代码):Example of implementation of Baum-Welch **
我认为需要做的事情(这可能是错误的):
现在我缩小了结果范围,我基本上是在尝试让程序根据缩小的结果库来尝试预测正确的结果。我认为这是不可能的,但有几个人建议这可以通过隐藏马尔可夫模型来解决。我认为我可以对数据进行多次迭代(使用 Baum-Welch 模型),直到概率稳定(并且应该随着用户的更多轮次而变得更好)。 隐藏马尔可夫模型能够检查拼写或笔迹并在出错时进行改进的方式(在这种情况下,错误是选择了一个在下一回合被删除的篮子,因为这是不可能的)。
两个问题:
如果所有状态起初都相等,我如何计算转换和发射矩阵?例如,由于所有状态的可能性相同,因此必须使用某些东西来确定状态变化的概率。我正在考虑使用我制作的图表来加权具有最多边数的节点作为过渡/发射状态计算的一部分?这有意义还是有更好的方法?
如何跟踪状态的所有变化?随着新篮子的添加和旧篮子的移除,跟踪篮子就成了问题。虽然我需要一个层次化狄利克雷过程隐藏马尔可夫模型(hdp-hmm),但不完全确定如何应用它。
(对不起,如果我听起来有点沮丧......知道问题是可以解决的但无法从概念上掌握需要做什么有点困难)。
与往常一样,感谢您抽出宝贵的时间和任何建议/建议,我们将不胜感激。
【问题讨论】:
-
如果对输入的唯一约束是总量变化不超过 5%,那么建模,HMM 或其他方面没有太多。例如第 1 天:(100,20,1) 第2 天:(20, 100,1) 第3 天:(55, 44, 22) ... 除了总量不变(0%每天都在变化)。您在问题陈述中遗漏了哪些隐藏的假设?
-
不同的数量会产生不同的总值,因此您可以检测数量是否发生了变化(以及变化了多少)。
-
@Dave 我相信隐藏的价值是篮子里水果的实际数量。在隐藏马尔可夫模型的 wiki 页面上,他们有一个示例问题/代码,他们可以从中获取一个人的行为(走到外面、购物等),并基于该模型找出外面的天气情况。我可以看到我的问题如何适应这个例子,随着时间的推移,它可以稳定到对篮子本身持有什么的预测(通过提高/改变每轮的概率)。
-
我对其他解决方案 100% 持开放态度,但我问过很多人,大多数人都说这可以通过隐藏马尔可夫模型解决,但我认为问题在于训练他们时,除了所有州是有限的/静态的,而不是不断变化的(对于我的问题,正在添加和删除新节点)。我拥有的示例代码(链接到上面的答案)是如何训练隐藏马尔可夫模型的一个很好的例子。但问题是它仅适用于 3 个状态(1、2 或 3 个冰淇淋锥它用来预测外面是热还是冷)。
-
马尔可夫模型有一组状态和一组一阶状态转移概率。 (在 Wikipedia 示例中,2 个状态和一个 2x2 转换矩阵)。在您的示例中,没有状态,只有一个用户在制作大量水果。如果您想将马尔可夫建模应用于您的示例,您需要一组庞大的状态(所有可能的数量组合)和一组更大的 (N^2) 组给定今天的明天数量的概率。而且您的模型没有隐藏 - 没有概率输出,每个状态只有一个已知输出。
标签: python artificial-intelligence machine-learning