假设人类仍在犯错误,有时会损失数十亿美元,而人工智能是一种可能的替代方案,可以应用于导航,以减少事故数量。
2 - 模拟器为了创建一个人工智能代理来控制船只,我们需要一个环境,在这个环境中,人工智能代理可以执行导航体验,并通过自己的错误学习如何正确地导航整个通道。此外,由于我们不能使用真实的船只来训练AI代理,最好的替代方法是使用模拟真实船只动态行为的模拟器。为此,我们可以使用现有的商业软件,但在本教程中,我们将创建自己的船舶模拟器。
为此,采用了一些假设,例如:船是刚体,在船上唯一的外力是水阻力(无风,无水流),而推进力和方向舵控制力是用来控制船的方向和速度。控制船舶动力学的完整方程是复杂的。在这里,我们将使用一个非常简单的3DOF模型:
在前6行中我们只定义了从x1到x6的变量名,beta和alpha是用于控制方向舵和推进控制的控制常数,在我们计算阻力之后最后我们将导数项fx1,fx2 ...,fx6隔离开来。这样:
第2步:积分器。作为模拟积分器,我们使用scipy库的5-order Runge-Kutta积分器。
from scipy.integrate import RK45
我们定义了一个函数,它使用scipy RK45对一个有趣的函数进行积分,这个函数的起点是y0。从t0到t_bound进行积分,得到相对公差rtol和绝对公差atol。
def scipy_runge_kutta(self, fun, y0, t0=0, t_bound=10): return RK45(fun, t0, y0, t_bound, rtol=self.time_span/self.number_iterations, atol=1e-4)
step3:step函数
对于每个step,我们通过方向舵angle_level和旋转水平(rot_level)来控制推进力传递的推力。
def step(self, angle_level, rot_level): self.current_action = np.array([angle_level, rot_level]) while not (self.integrator.status == 'finished'): self.integrator.step() self.last_global_state = self.integrator.y self.last_local_state = self._global_to_local(self.last_global_state) self.integrator = self.scipy_runge_kutta(self.simulate_scipy, self.get_state(), t0=self.integrator.t, t_bound=self.integrator.t self.time_span) return self.last_global_state
因为我们反映了状态,所以我们也必须反映出方向舵动作。在本教程中,我们将创建一个网络来仅控制方向舵动作并保持旋转角度不变(rot_action = 0.2)。
我们还使用库 turtle创建了一个查看器,您可以在这里查看代码。它用于显示学习过程或训练后的表现。在函数render中调用查看器。
def render(self, mode='human'): if self.viewer is None: self.viewer = Viewer() self.viewer.plot_boundary(self.borders) self.viewer.plot_guidance_line(self.point_a, self.point_b) img_x_pos = self.last_pos[0] - self.point_b[0] * (self.last_pos[0] // self.point_b[0]) if self.last_pos[0]//self.point_b[0] > self.number_loop: self.viewer.end_episode() self.viewer.plot_position(img_x_pos, self.last_pos[1], self.last_pos[2], 20 * self.last_action[0]) self.viewer.restart_plot() self.number_loop = 1 else: self.viewer.plot_position(img_x_pos, self.last_pos[1], self.last_pos[2], 20 * self.last_action[0])
最后,经过训练,我们得到以下结果:代理已经学会了如何控制方向舵以及如何在中途保持通道。
更详细的船模型,还包括由AI代理控制的推进动作。可以在此处找到项目存储库。
花粉社群VIP加油站
猜你喜欢