2009-10-28 23 views
6

我曾经写过俄罗斯方块AI,该俄罗斯方块AI相当出色。我使用的算法(described in this paper)是一个两步过程。确定在进化算法中权衡哪些输入

第一步,程序员决定跟踪对问题“感兴趣”的输入。在俄罗斯方块中,我们可能有兴趣跟踪连续有多少间隙,因为最小化间隙可以帮助更轻松地放置未来的棋子。另一个可能是柱子的平均高度,因为如果你即将输球,冒险是一个不好的主意。

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

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

我一直想知道是否有办法将学习算法应用到第一步,在那里我们找到“有趣”的潜在投入。编写一个计算机似乎是可能的,计算机首先学习什么输入可能是有用的,然后应用学习来权衡这些输入。之前有没有做过这样的事情?它是否已被用于任何AI应用程序?

+1

+1我想在这个领域开始。我有几个宠物演示程序,但没有大的。有兴趣看看你回答什么样的答案。 – 2009-10-28 18:15:09

回答

1

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

+0

在这种情况下,“分类相关”是什么意思? – Kai 2009-10-28 18:10:36

+0

假设你正在训练一个神经网络来将模式分类为“字母A”或“不是字母A”。你有一堆训练案例,你有一些数据,你知道它是否是答案。你可以用任意数量的方法对这些数据进行切片和裁切,每一种方式都是潜在的输入。最好的潜在投入是与A或非A状态显示出强大数字相关性的投入。如果潜在的投入不变,那就没用了。如果它随机变化,那就没用了。如果它与这种模式的A或不Aness协调变化,那就是黄金。 – chaos 2009-10-28 18:17:38

+0

啊,我明白了!我没有想过使用预先存在的样本数据(在俄罗斯方块中很难想象)。实际上,我认为recaptcha(http://recaptcha.net/learnmore.html)是这样做的。直到我看完你的例子,它才发生。 – Kai 2009-10-28 18:21:59

0

我想我可能会通过将更原始的数据提供给学习算法来处理您所描述的问题。例如,俄罗斯方块游戏状态可以用被占用的单元格列表来描述。描述这些信息的一串位是适合于学习算法阶段的输入。实际上对此的培训仍然充满挑战;你怎么知道这些是否是有用的结果。我想你可以把整个算法放到一个单一的blob中,在这个blob中,算法被连续播放,并且输出只是块放置,为后代选择更高的评分算法。

另一种选择可能是使用来自其他来源的大量剧本的语料库;例如来自人类玩家或手工制作的ai的录制的戏剧,并且选择那些输出与未来剧本中某个有趣的或者另一个有趣的事实紧密相关的算法,例如在接下来的10个动作中获得的分数。

+0

我认为你的第一个建议是改变问题所代表的模型。编写代码可能更容易,但我想知道它是否对学习有帮助。不过,我真的很喜欢使用其他来源的想法。 – Kai 2009-10-28 18:39:34

+0

我对自己的答案也不完全满意。如果我不得不猜测,我想这可能会增加约2个数量级的学习时间。 – SingleNegationElimination 2009-10-28 18:52:43

0

是的,有一种方法。

如果您选择M所选功能有2^M个子集,所以有很多值得关注的东西。 我会于以下内容:

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

然后为每一对S-W,您可以为每一对摹游戏并保存得分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的),并决定哪些功能是值得解释scoreL。提示:在运行代码以优化W时,播种随机数生成器,以便针对相同的片段序列测试每个不同的“进化的大脑”。

我希望它对某件事有帮助!