Artificial intelligence 在进化算法中确定要权衡的输入

Artificial intelligence 在进化算法中确定要权衡的输入,artificial-intelligence,evolutionary-algorithm,tetris,Artificial Intelligence,Evolutionary Algorithm,Tetris,我曾经写过一个俄罗斯方块AI,玩得很好。我使用的算法()是一个两步过程 在第一步中,程序员决定跟踪对问题“感兴趣”的输入。在俄罗斯方块中,我们可能有兴趣跟踪一行中有多少间隙,因为最小化间隙有助于更轻松地放置未来的片段。另一个可能是平均柱高,因为如果你即将失败,冒险可能是个坏主意 第二步是确定与每个输入相关联的权重。这是我使用遗传算法的部分。只要根据结果随时间调整权重,任何学习算法都可以。其想法是让计算机决定输入与解决方案的关系 使用这些输入及其权重,我们可以确定采取任何行动的价值。例如,如果将直

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

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

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

使用这些输入及其权重,我们可以确定采取任何行动的价值。例如,如果将直线形状一直放在右边的列中,将消除4个不同行的间隙,那么如果该操作的权重很高,则该操作可能会得到很高的分数。同样地,将其平铺在顶部可能会造成间隙,因此动作得分较低


我一直想知道是否有一种方法可以将学习算法应用到第一步,即我们找到“有趣的”潜在输入。似乎可以编写一种算法,计算机首先学习哪些输入可能有用,然后应用学习来权衡这些输入。以前做过这样的事吗?它已经被用于任何人工智能应用中了吗?

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

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

另一种选择可能是使用其他来源的大量剧本;例如,从人类玩家或手工制作的人工智能中录制剧本,并选择与未来剧本中的某个有趣事实有强烈相关性的算法,例如在接下来的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),并决定哪些功能值得解释scoreL

提示:当运行优化W的代码时,给随机数生成器添加种子,这样每个不同的“进化大脑”都会根据相同的片段序列进行测试


我希望它能有所帮助

在这种情况下,你所说的“与分类的相关性”是什么意思?假设你正在训练一个神经网络,将模式分类为“字母a”或“不是字母a”。你有一系列的训练案例,其中你有一些数据,你知道它是否是a。你可以用多种方法对数据进行切分,每种方法都是一种潜在的输入。最好的潜在输入是那些与a或非a状态表现出强烈数值相关性的输入。如果一个潜在的输入没有变化,它是无用的。如果它随机变化,它是无用的。若它和图案的A或非A协调变化,它就是金色的。啊,我明白了!我没有想过使用预先存在的样本数据(在俄罗斯方块中很难想象)。事实上,我认为recaptcha()可以做到这一点。直到我读了你的例子,我才意识到这一点。就俄罗斯方块已有的数据而言,当你的系统玩了一个游戏时,它所面临的情况、所做的决定的记录(可能是随机开始的)现在的结果构成了一个可以用于训练的数据集。让人们玩一些游戏并将其作为样本是一个好主意吗?我认为如果这些行动是有目的的,那么它会收敛得更快。我有几个宠物演示程序,但还没有什么大的。我很想看看你得到了什么样的答案。我认为你的第一个建议是改变问题的模型。编写代码可能更容易,但我想知道它是否真的有助于学习。不过,我真的很喜欢使用其他来源的想法。我对自己的答案也不完全满意。如果让我猜的话,我想这可能会使学习时间增加大约2个数量级。