小编Phi*_*p H的帖子

设置优先队列值以优化找到“礼物”的概率

我有一个“门牌号”的优先队列。我从优先级队列中(即对应优先级值最低的门)得到隔壁门号,然后开门。门后可能有礼物,也可能没有。根据礼物的存在/不存在,更新此门号的优先级,并将其放回优先级队列。然后我重复一遍,打开隔壁的门号,依此类推。

假设每扇门都有不同的礼物补货率(即有些可能每天都收到新礼物,有些则根本没有),我应该如何更新优先级值以最大化我找到的礼物数量?也就是说,我想最大化我有礼物打开的门与没有礼物打开的门的比例。

我应该指出,补货率不能保证随着时间的推移而固定/存在随机变化。但我可以在这里简化假设。

这对我来说几乎像是一个蒙特卡洛问题,只是我探索一个节点(门)的次数越多,它的期望值就越低。(当然,没有要构建的树;我们只需要计算 depth-1 节点的值。)

最简单的方法是跟踪上次优先级 (LP) 和当前优先级 (CP),其中 delta = CP - LP。如果我们找到礼物,则设置下一个优先级 NP = CP + delta - 1;否则设置 NP = CP + delta + 1。我猜这是可行的,但它的优化似乎相当缓慢。

或者我们可以有一个乘法值:NP = CP + delta *shrink 或 NP = CP + delta *grow,其中shrink < 1 和grow > 1。这就是我目前所拥有的,它似乎可以正常工作几个月,但现在我遇到了一些门被背对背打开的情况(即打开门 D,找到礼物,放回优先队列,D 现在再次成为最佳选择,当然没有找到礼物,现在放回去在优先级较差的队列中),这看起来很糟糕。作为参考,我使用了shrink = 0.9 和grow = 1.3。

是否有数学公式(如蒙特卡罗)表达探索门的最佳方式?

algorithm priority-queue montecarlo nonlinear-optimization monte-carlo-tree-search

5
推荐指数
1
解决办法
54
查看次数