我正在寻找一个基于回合的游戏中最长路径的地图。我有1秒的计算时间,需要在那一点上移动。
现在我再一次生成树。
是否可以使用我的旧树和堆栈(我在其中存储尚未访问的节点)以获得更大的深度,从而获得更好的结果?
现在我的SearchClass基于一个接口,因此更改返回类型和我的函数的输入变量是很多工作。我的问题有一个简单的解决方案吗?
答案 0 :(得分:0)
如果你的地图是静态的而不是太大,你可以提前生成你的树。
对于每个节点,计算到地图上每个其他节点的最长路径,然后将路径及其长度存储在原始节点上。这样,您不再需要在程序执行期间计算路径;您只需要使用从当前节点到所选目的地的预先计算的最长路径。
答案 1 :(得分:0)
你可以让你的(玩家)树静止吗?或者如果你是唯一的玩家,你可以将它作为玩家方整个程序的全局变量,但这取决于许多事情,你没有与我们分享。我仍然建议你看看MCTS:Wikipedia description和Here, it has sample code。
使用MCTS的想法很简单:你计算所有900毫秒,然后让玩家移动到具有最高获胜概率的节点。如果你可以将树保持为全局或静态(或两者都是:D)变量,那么你在下一轮(或下一次计算)开始时所做的第一件事就是去掉前一棵树的所有部分。 ,你不能再访问了 - 因为你不在[0][0]
的位置,但在位置让我们说[1][3]
...这样就缩小了你的树大小,这很好。因此,您需要做的是用一个新的树替换原始树,该树从节点开始,您当前正站在那里。好的是,你有一些预计算的值,现在它取决于你的实现,你希望如何探索节点和/或概率更新。但是随着游戏的进行,程序应该有足够的数据,可以保证它获得非常高的获胜概率。
这种方法非常好,因为它不计算你不采取的步骤的概率,一旦知道,你不会采取它们(这是你在你的方法中没有提到的事情,我发现它必要性,这就是我回应的原因。
请原谅任何失败,我会根据要求指定/更新/更正。 你正在做的所有事情似乎都符合某种大学交付模式see for example,如果不是你的情况,你可以很好地激励那里。如果您必须参加一些学校交付,请确保您不要过多地讨论细节和/或不要求技术实施帮助。