花粉乐分享平台宣传视频
> 乐学堂 > > OpenAI,这里给你个教程
OpenAI,这里给你个教程
来源:林小婵的店
2023-08-16 21:43:36
348
管理

假设人类仍在犯错误,有时会损失数十亿美元,而人工智能是一种可能的替代方案,可以应用于导航,以减少事故数量。

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加油站

4
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与花粉乐分享无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
凡本网注明 “来源:XXX(非花粉乐分享)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。
QQ:2443165046 邮箱:info@hflfx.com
关于作者
吵架没输过..(普通会员)
文章
475
主题
5
关注
0
粉丝
0
点击领取今天的签到奖励!
签到排行
随手拍
53个圈友 0个话题
华为手机随手拍,记录生活点滴之美好
华为P30pro
51个圈友 0个话题
这里是华为P30pro手机交流圈,欢迎华为P30pro用户进群交流
体验官
60个圈友 2个话题
华为花粉体验官,体验官专属的交流群
登录后查看您创建的圈子
登录后查看您创建的圈子
所有圈子
猜你喜欢
杭州互联网违法和不良信息举报平台 网络110报警服务 浙ICP备2024061738号-1
4
0
分享

个人中心

每日签到

我的消息

内容搜索