如何修改遗传算法适应度函数,实现Unity城市车辆导航至目标点?
适应度函数修改方案
首先分析当前函数的核心问题:(1 / (1 + totalDistanceTravelled))项会惩罚所有移动行为,导致智能体倾向于保持静止,这和"前往目标点"的核心需求完全冲突,必须调整。以下是具体修改建议:
核心调整方向
- 移除总行驶距离惩罚项:该项会抑制智能体的移动意愿,直接移除可避免干扰核心目标的达成。
- 强化目标距离的权重:将
(1 / (1 + distanceToTarget))作为适应度的核心项,通过乘以系数放大其优先级,让智能体优先关注靠近目标的行为。 - 平衡避障与目标导向的权重:保留碰撞惩罚和传感器奖励,但降低它们的权重,避免盖过目标导向的优先级。
修改后的适应度函数示例
// 核心奖励:靠近目标,乘以大系数强化优先级 float targetReward = 100f / (1f + distanceToTarget); // 碰撞惩罚:碰撞越多,惩罚越重 float collisionPenalty = 10f / (1f + numberOfCollisions); // 避障奖励:传感器平均值越高(离障碍物越远),奖励越高 float obstacleReward = sensors.Average(); // 总适应度 float fitness = targetReward + collisionPenalty + obstacleReward;
额外优化建议
- 添加到达目标的高额奖励:当智能体到达目标点时,给予固定高额奖励(比如1000f),加速进化收敛。
- 动态调整权重:进化初期适当提高避障项权重,让智能体先学会存活;后期逐步提高目标项权重,引导其专注于导航。
- 可选:添加有效移动奖励:计算智能体向目标靠近的距离(初始目标距离 - 当前目标距离),将其作为奖励项加入,强化正向移动行为:
float progressReward = initialDistanceToTarget - distanceToTarget; float fitness = targetReward + progressReward + collisionPenalty + obstacleReward;
内容的提问来源于stack exchange,提问作者Oliver Fox
相关产品推荐
相关产品推荐

