我曾经写过一个很好玩俄罗斯方块的俄罗斯方块AI。我使用的算法(本文中描述)是两步法过程

在第一步中,程序员决定跟踪“有趣”的输入。问题。在俄罗斯方块中,我们可能有兴趣跟踪连续存在的差距,因为最小化差距可以帮助更容易地放置未来的碎片。另一个可能是平均柱高,因为如果您即将失败,承担风险可能是一个坏主意。

第二步是确定与每个输入相关的权重。这是我使用遗传算法的部分。只要根据结果随时间调整权重,任何学习算法都会在此处执行。我们的想法是让计算机决定输入与解决方案的关系。

使用这些输入及其权重,我们可以确定采取任何行动的价值。例如,如果将直线形状一直放在右列中将消除4个不同行的间隙,那么如果其重量很高,则此动作可以获得非常高的分数。同样地,将它平放在上面可能会导致间隙,因此动作得分较低。

我一直想知道是否有办法将学习算法应用到第一步,我们发现“有趣”的方法。潜在的投入。似乎可以编写一种算法,其中计算机首先学习哪些输入可能有用,然后应用学习来权衡这些输入。之前有过这样的事吗?它是否已经在任何AI应用程序中使用?

有帮助吗?

解决方案

在神经网络中,您可以通过找到与您正在训练的分类具有最强相关性(正面或负面)的潜在输入来选择“有趣”潜在输入。我想你可以在其他情况下做同样的事情。

其他提示

我想我可能会通过向学习算法提供更原始的数据来解决您所描述的问题。例如,可以通过占用小区列表来描述俄罗斯方块游戏状态。描述该信息的一串比特将是学习算法的该阶段的合适输入。实际上对此进行培训仍然充满挑战;你怎么知道这些是否有用。我想你可以将整个算法转化为单个blob,其中算法以连续的播放状态提供,输出只是块放置,为后代选择更高的评分算法。

另一个选择可能是使用来自其他来源的大型剧集;例如来自人类玩家或手工制作的ai的录制的剧本,并选择输出的算法与未来游戏中的一些有趣事实或其他事件有很强的相关性,例如在接下来的10个动作中获得的分数。

是的,有办法。

如果您选择 M 所选功能,则有2 ^ M个子集,因此需要注意很多。 我想以下几点:

For each subset S
   run your code to optimize the weights W
   save S and the corresponding W

然后对于每对S-W,你可以为每一对运行G游戏并保存每一对的得分L.现在你有一个这样的表:

feature1    feature2    feature3    featureM   subset_code game_number    scoreL
1           0           1           1           S1         1              10500
1           0           1           1           S1         2              6230
...
0           1           1           0           S2         G + 1          30120
0           1           1           0           S2         G + 2          25900

现在您可以运行一些组件选择算法(例如PCA)并确定哪些功能值得解释得分。

小贴士:当运行代码来优化W时,播种随机数生成器,以便针对相同的片段序列测试每个不同的“进化大脑”。

我希望它有所帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top