为下面的问题(a*)找到一个好的启发式方法



我正试图为以下问题找到一个启发式函数。给你n桶油漆,最大容量为max_i,当前容量为curr_i,油漆颜色为color_i,i=1,n,以及一个可能的颜色组合列表:col1+col2->col3。问题的最终状态是必须在bucket#(final_state(<=水桶数量。

目标是混合这些桶,比如最后,从最终状态中找到的每一对都至少在一个桶中。每次移动时,如果你倒入的桶没有装满,你可以从一个桶倒入另一个桶。

问题是,我想不出一个经典的启发式方法来解决这个问题,因为我无法将初始状态的桶与最终状态的桶进行比较(这不是唯一的(。启发式是必须是从当前状态到最终状态的移动次数,还是可以是随着我们接近范围而减少的某个数字?

启发式必须是可接受的,因此不应低估实际距离。当你离目标越来越近时,原则上它应该更精确,因此可能会突然变得更小、更快。但这是完全可以的,只要它不被低估。

由于距离目标的距离通常是移动的次数,因此很难看出它是完全无关的。因此,是的,启发式应该与移动次数有关,但不必如此,只要它是悲观的而不是乐观的。

最新更新