人工智能开发,Unity的神经网络+遗传算法(二)

发表于2017-12-19
评论0 2.8k浏览
因为游戏中的神经网络(以后用BP代替)不是识别用途,没有一个样本值,我们只需要阈值来判断行为的大小和幅度,学习能力的速度也来源于代码中的判断和条件,但并不是简单的If{}判断;
上文构建层的代码中,就是一个多连线过程,下标对应的过程;首先上文中的代码单独拿出来就是没有什么,因为它没有输入,当你定出他的规则和输入的规则的时候才是它发挥效力的时候。
运用BP来达到学习能力的最重要的就是寻找规律,没有规则它不知道怎样学习是正确的;
这里不详细说遗传算法,我就根据需要浅表的一带;后面再详细介绍。
遗传算法在此文的功能实例:
有一个非常著名的解释:
一群袋鼠生存在一座山上,是随机位置和高度生存,山下有一圈毒雾,每年都会向山顶移动,这群袋鼠在生存的时候并不知道往山顶上跑能存活下来,就是漫无目的的随意溜达生存,然后每年都会毒死一批在最下面的袋鼠,留下了爬的最高的袋鼠,爬的最高的袋鼠需要繁殖后代,在进行溜达。在无意识的情况下,有一批袋鼠通过代代的繁殖在山顶生存了下来。
也就是说我们并没有强制性的订下这个条件,让他们往上爬,他们的基因决定了他们会爬的越来越高。因为他们的输入基因权重是决定他们向上爬的输出行为是正确的,一遍遍刷下来就确定了这个信念,自然而然的他们会优先想上登顶。足够的时间和环境输入会让他们进化到一定程度;
  每次的繁殖都带来了上一辈的心得和体会;
BP只是控制了他的无意识行为;但是这个无意识行为也是一个规则;通过遗传传承下去;
 
现在我们只控制它的行为:
  假设第一批有仅有一只袋鼠向上爬了,他的神经网络中的神经元一定是处理了不同的方法函数,让他产生的因为不同输入产生的输出;后来只有这一只袋鼠活了下来,我们进行一波超越性的逻辑;它自我繁殖了。繁殖的新的一批袋鼠继承了这只袋鼠的网络和权重比。这批就又继续生存通过代代繁殖和死亡,明显他们已经慢慢知道造物者所给他们挑战是什么了,我没并没有控制这批袋鼠和这些毒雾的关系,但是他们慢慢的知道了往上爬才能活下去。

相信到这应该懂了我们这个基于Unity的人工智能到底要做些什么了:
对!作为造物主,需要指定规则,让这些物种具有自己的行为;而规则将强制影响他们进化。
这时会有,我们做游戏之前难道还要先训练自己的Npc么,如果你需要他更真实,当然需要,我的游戏NPC从一个弱智变成一个风趣的逗比。。。。
基因是可以储存的!
现在总结来说上一章写的就是在控制物种行为;跟生存规则没有关系!

在控制物种行为时需要给他的一个输入层,也就是double[]input 可以有多个输入;
就拿坦克大战为例:
input[0]=自身坦克到最近坦克的距离/视距在视野外围内是0-1的值不在就直接给个1的值;
Input[1]=dot(坦克的right,(地方坦克-自身坦克)的标准向量)也要判断是否在,在就有值不在就是1
Input[2]=坦克的武器是否准备就绪  就绪1;没就绪0
Input[3]=目标移动速度时速;
Input[4]=目标转向;
5个输入揉到神经网络里;经过一连续的加权函数处理(见一章节神经网络铺建的Compute方法);注:第一次我们的权重一定是随机的,因为我们不知道他的准确值;
把输出定为3  输出1=移动方法函数里的参数;输出2=转向方法里的参数 输出3=输出>0执行射击方法;
然后运用到遗传算法后;我们制定一个规则,什么样的坦克是好坦克:比如杀一个坦克+15,按存活时间+10,死亡后-25
这样判别优秀的坦克基因;然后遗传给下一代重新训练。
你会发现第一次一群坦克跟一群智障一样疯狂的瞎射击瞎转,
大约在8次左右吧  坦克就能自己熟练的躲避追踪射击敌人了。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引