我知道这个问题的标题有点模糊,但在这里承担问题,每次我为游戏编写游戏或机器人时都使用状态机,决策树或行为树。这些技术的问题在于,它们要求我预先设定角色/机器人将要遇到的所有条件,以便在用户做出意想不到的事情时,我没有为他们输掉一个条件。
现在我正在寻找一个星际机器人(bwapi),使用状态机,我正在考虑为每个单元使用一个状态机,一个主要命令焊接器做什么,但它仍然需要我预先编程和对于像星际争霸这样的游戏来说,这是不可能的,我能想到的唯一可以让它学习的方法就是使用gp来改进这些状态机。
如果20名海军陆战队员试图同时通过大桥同时会有一个大的交通堵塞我可以使用哪些技术以便它可以从错误中吸取教训?所以我不必预先编程说明逐个通过桥梁的条件。
编辑:只是因为一个问题中有星球或机器人这个词,它不会自动使它成为非问题,这个问题也适用于机器人。
答案 0 :(得分:7)
要获得任何地方,您首先需要为您的机器人定义适合度的经验测量。它必须比“交通堵塞”更清晰。#34;
你如何衡量?
什么是胜利?是否有数字指标,您的机器人是"赢得"?首先解决这个问题,然后当你有一个真实的方法将一个机器人与任何其他机器人进行评级时,将其作为GP算法的适应度函数插入。
答案 1 :(得分:2)
你在这里问两个不同的问题。
第一个是“什么是可以学习的人工智能”?这是机器学习研究试图回答的一般性问题。有许多不同的工具用于实现机器学习,但没有适用于您的应用程序的灵丹妙药。你必须更加努力地思考AI应该“学习”的内容 - 它的输入是什么,输出什么?
第二个是“20名海军陆战队员如何能够同时穿过一座桥而不会变成一团”。您正在描述群组寻路,这是AI的另一个区域,称为启发式搜索。同时为多个单元(代理)求解路径有其自己的算法集,但通常比您的第一个更容易理解。在我的脑海中,您可以使用一种方法同时解决单元的子集(取决于桥的宽度)并同时移动每个组中的成员。您也可以尝试从最靠近桥梁另一侧的船舶开始解决每个单独的船舶。
使用谷歌搜索查找任何一项都会让你得到更多的信息,而不是我可以填写答案,特别是考虑到你的问题是开放式的(w.r.t。学习系统)。
答案 2 :(得分:1)
由于您已经使用有限状态机,请尝试查看KB-NEAT。
这是一种神经进化技术;也就是说,通过进化创造神经网络。
还可以看看rtNEAT,这可能会派上用场。 NEAT的普通实现使用代数方法,即运行多个游戏,比如说100个,选择最佳候选者并从中创建后代。 (其他提到的适应性;这总是用于进化方法,因此也在这里)rtNEAT允许进化实时发生;也就是说,在玩游戏时。 (这需要更复杂的健身计算,因为它发生在游戏中,你仍然不知道结果)
实施实际上并不那么难,但它们对这种技术的关键是遗传历史,这对进化过程至关重要。 (与早期的神经进化尝试相比,这也是使这项技术如此惊人的原因;这里的问题在于输入和输出必须相同,而且情况可能并非如此)
哦,您的问题可以由更高级别的策划人员解决,也可以由单位自己学习。并且输入包括最近的友方单位和障碍物,可以通过正确的健身状况了解到这样做可能会对管道计时产生反作用。这被称为紧急行为,并且已经表明上述技术能够自主地发展这种行为。
这是一个我认为非常适合您的工作的实现;
http://nn.cs.utexas.edu/?windowsneat
以上使用了几代人。我没见过rtNEAT的实现。但是你可以看一下John Holland的书“自然和人工系统的适应”。不可否认,它可能很难阅读,因为它非常数学。但跳过大部分内容,并查看算法提案。它适用于所有进化算法,其中神经进化算法是一个子域。它有一个通常是rtNEAT使用的算法。 (如果您不熟悉用于进化算法的遗传学,它可以很好地定义基因,等位基因,染色体,表型和基因组是什么,您将在NEAT出版物中找到它们; NEAT使用基因组来描述一般来说,它只是一组共同描述表型的染色体,因为编码比遗传算法和遗传编程更复杂一些)
该技术的主页在这里;
http://www.cs.ucf.edu/~kstanley/neat.html
这是按时间顺序排列的出版物;
http://nn.cs.utexas.edu/keyword?stanley:ec02
http://nn.cs.utexas.edu/keyword?stanley:ieeetec05
http://nn.cs.utexas.edu/?kbneat
(KB-NEAT已在上述出版物中使用rtNEAT)
关键是你基本上可以把你拥有的东西,把它放入神经进化技术,然后从那里进化。它是域特定AI和机器学习AI之间的混合。
哦,还有一张纸条;进化部分是处理器密集型的,至少没有rtNEAT。 rtNEAT是时间密集型的,因为你需要在学习之前对它进行大量的反对。 (KB-NEAT虽然显然提供了智能基础)然而,当进化时,它非常非常快,因为来自神经网络的响应计算速度非常快。 (这是一个相当小的图表,并且不涉及搜索)
哦,第二件事;你需要认真考虑输入和输出。输出可能很简单,因为这是游戏允许你的单位做的事情。但输入是你希望他们看到的,你不能包含所有内容;这将使问题难以解决进化,至少在现实的时间。 (虽然理论上会在无限时间收敛于最优解)
哦,还有第三个音符;你可以为单位发展几个大脑,甚至为每个单位类型都有不同的大脑。天空才是极限。也许你想为你或敌人的每个技术水平都有一个大脑。这当然需要额外的时间来进化,但是大脑的内存很小,所以数量不是问题。
Ack和第四个音符;这是一种黑盒技术。你不能将大脑转换回FSM。神经网络中的编码不是人类可理解的,因此无法知道它是如何工作的。因此存在着你最终会得到你喜欢的东西的危险,但是你无法理解为什么。而且你不能轻易地与其他代理商分享这些知识。 (尽管你当然可以将它作为基础来为那些人发展新行为)
答案 3 :(得分:0)
Starcraft AI是否已经实施了单位的移动?例如只需选择12名海军陆战队员,然后告诉他们像人类玩家一样穿过桥梁。当然,人工智能存在很大的缺陷,并且没有像SCII的群体AI那样好。但是,在您需要担心对每个单元进行微观管理之前,我认为设计AI还有许多其他问题。
例如,知道在何处/何时定位您的单位可能比确定如何以100%的效率实现它更重要。
我个人认为处理这个游戏的最佳方法是使用状态机。游戏中有关键阶段有适当的反应(例如潜伏者是科学船吗?等等)。但是,不是将每个单独的单元作为SM,而是将重点放在更大的实体上,例如控制组单元。我相信这会大大简化事情,如果以后你可以根据需要改进你的AI。
答案 4 :(得分:0)
我认为实际上让你的角色学习是一个坏主意。他们会发展意识,突破计算机,并试图用鼠标电缆在睡梦中扼杀你。
好的,开个玩笑。我认为这只是过度工程化。演变一个角色并不一定会使它对所有可能性做出强有力的反应,但可能会使其难以处理,扩展它并对其属性进行概述。
您可能对基于目标的方法感兴趣:
http://www.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf
开始时需要付出一些努力,但从长远来看,它可以让你更加清洁,更容易扩展你的男人的行为。
答案 5 :(得分:0)
我认为有必要首先解决您尝试解决的问题,而不是向您提供特定算法或技术的建议。我经常玩“星际争霸”,所以我知道“大堵车”是什么意思。然而,“大堵车”只是一个标签,在机器学习环境中毫无意义。
在您的特定领域中,可以说机器人可以从经验E中学习某些任务T和绩效测量P,如果其在T中的任务中的表现(由P测量)随着经验E而改善。 / p>
我们现在必须以对游戏中可能遇到的每个问题都有意义的方式来定义E,T和P.例如,任务类可能包括在一个组中将单元从一个区域移动到另一个区域。该区域可能具有一些特征,表明它很窄,因此无法以最佳组大小移动单位。因此,性能测量可能是单位通量所需的时间(每单位面积每单位时间内一定数量的海军陆战队员的移动)。您当然希望通过体积来测量这种通量,这只是通量操作的归一化总和。凭借经验,您将最大化这种变化。
一旦您更好地理解了这个问题,您就可以开始提出最能体现您所有要求的设计。