【问题标题】:Determining which inputs to weigh in an evolutionary algorithm确定在进化算法中要权衡哪些输入
【发布时间】:2009-10-28 18:00:17
【问题描述】:

我曾经写过一个玩得很好的俄罗斯方块 AI。我使用的算法 (described in this paper) 是一个两步过程。

在第一步中,程序员决定跟踪对问题“感兴趣”的输入。在俄罗斯方块中,我们可能对跟踪连续有多少间隙感兴趣,因为最小化间隙有助于更容易地放置未来的碎片。另一个可能是平均柱高,因为如果你即将失败,冒险冒险可能是个坏主意。

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

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

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

【问题讨论】:

  • +1 我正在尝试在这个领域开始。我有几个宠物演示程序,但还没有什么大不了的。有兴趣看看你得到什么样的答案。

标签: artificial-intelligence evolutionary-algorithm tetris


【解决方案1】:

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

【讨论】:

  • 在这种情况下,“与分类的相关性”是什么意思?
  • 假设您正在训练一个神经网络来将模式分类为“字母 A”或“非字母 A”。您有一堆训练案例,其中您有一些数据并且您知道它是否是 A。您可以通过多种方式对数据进行切片和切块,每一种方式都是潜在的输入。最好的潜在输入是那些与 A-or-not-A 状态具有强数值相关性的输入。如果一个潜在的输入没有变化,那它是没有用的。如果它随机变化,它是无用的。如果它与模式的 A-or-not-Aness 协调变化,那就是黄金。
  • 啊,我明白了!我没有想过使用预先存在的样本数据(在俄罗斯方块中很难想象)。事实上,我认为 recaptcha (recaptcha.net/learnmore.html) 就是这样做的。直到我读了你的例子,我才想到。
  • 就俄罗斯方块的现有数据而言,当您的系统玩游戏时,它所面临的情况、做出的决定(可能是随机开始)以及现在的结果的记录构成可用于训练的数据语料库。
  • 让人们玩一些游戏并将其用作样本是否是个好主意?我认为如果行动是有目的的,它会收敛得更快
【解决方案2】:

我想我可以通过向学习算法提供更多原始数据来解决您所描述的问题。例如,俄罗斯方块游戏状态可以通过占用单元列表来描述。描述此信息的一串位将是学习算法该阶段的合适输入。实际上,这方面的培训仍然具有挑战性;你怎么知道这些是否是有用的结果。我想你可以将整个算法滚动到一个单一的 blob 中,在该算法中输入连续的游戏状态,输出只是块放置,为后代选择更高得分的算法。

另一种选择可能是使用来自其他来源的大量戏剧语料库;例如从人类玩家录制的游戏或手工制作的人工智能,并选择输出与未来游戏中的某些有趣事实或其他事物具有强相关性的算法,例如在接下来的 10 步中获得的分数。

【讨论】:

  • 我认为您的第一个建议是更改表示问题的模型。编码可能更容易,但我想知道它是否真的有助于学习。不过,我真的很喜欢使用其他来源的想法。
  • 我对自己的回答也不完全满意。如果我不得不猜测,我想这可能会使学习时间增加大约 2 个数量级。
【解决方案3】:

是的,有办法。

如果您选择 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)并决定哪些特征值得解释 scoreL。

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

我希望它能有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 2018-03-04
    • 2015-03-27
    • 2015-05-22
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多