1. 简介
启动无人机并观察300个神经网络尝试学习最佳方法。流程大致为300个神经网络连接到简单的2D无人机上,尝试学习保持在空中并在多代中达到红色目标。
2. 工作原理
神经无人机使用简单遗传算法来选择每一代最好的无人机,并让它们克隆和变异自己,从而使得无人机更好地适应当前任务。在这个项目中,通过计算他们与墙壁或地面接触时间、与地面碰撞次数以及距离目标平均距离(如果打开)等因素来计算“适应度”(神经网络表现如何)。
然后,设计calFitness()函数中使用这些因素来计算适应度评分,并将其与组内所有其他适应度评分进行比较。此过程每10秒重复一次,引入新一代。
// 该函数用于计算一个人的适应度。适应度是根据一个人在空中的时间,与障碍物的接触时间,以及距离目标点的最近时间来评估的。函数的参数是一个包含这些属性的对象。函数的返回值是一个数字,表示适应度的大小。函数的代码如下:
// 定义一个名为calFitness的函数,接受一个名为agent的参数
function calFitness(agent) {
// 获取person对象中的timeAtClosest属性,表示距离目标点的最近时间,单位为秒
let timeAtClosest = agent.timeAtClosest;
// 将timeAtClosest的值平方,以增加其对适应度的影响
timeAtClosest *= timeAtClosest;
// 获取person对象中的collisionTime属性,表示与障碍物的总接触时间,单位为秒
let totalContactTime = agent.collisionTime;
// 将totalContactTime的值平方,以增加其对适应度的影响
totalContactTime *= totalContactTime;
// 获取agent对象中的bestAirTime属性,表示在空中的最长时间,单位为秒
let airTime = agent.bestAirTime;
// 将airTime的值平方,以增加其对适应度的影响
airTime *= airTime;
// 定义一个名为fit的变量,用于存储适应度的值
let fit = 0;
// 从fit中减去totalContactTime,表示与障碍物接触越少,适应度越高
fit -= totalContactTime;
// 在fit中加上timeAtClosest,表示距离目标点越近,适应度越高
fit += timeAtClosest;
// 在fit中加上airTime,表示在空中停留越久,适应度越高
fit += airTime;
// 返回fit和1中较大的值,表示适应度至少为1
return Math.max(1, fit);
}
评论区