您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iProcess 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
     
   
 订阅
  捐助
人工智能20行代码构建浏览器中自动驾驶的tensorflow强化学习环境
 
作者:趣说人工智能
49 次浏览     评价:  
 2019-12-2
 
编辑推荐:
本文演示一个使用metacar环境的强化学习算法的简单工作示例,希望对您的学习有所帮助。
本文来自搜狐,由火龙果软件Delores编辑推荐

人工智能20行代码构建浏览器中自动驾驶的tensorflow强化学习环境,Metacar浏览器中自驾车的强化学习环境。

Metacar是在浏览器中运行的自主车辆的2D强化学习环境。该项目旨在通过解决有趣的问题让每个人更容易接受强化学习。Metacar带有一组预定义的级别,其中一些难以解决。更多级别和可能的场景将很快添加(行人,自行车...)。此外,图书馆让您创建自己的关卡并个性化环境以创建您想要的场景。如果您想成为项目的一部分,无论是在环境中实现功能还是演示算法,都可以随时加入闲散频道,提出问题并讨论所有您的梦幻想法!要开始使用metacar进行开发,请查看文档和API参考,你也可以看看在线演示。

用法实例:const env = new metacar.env("canvas", metacar.level.fullCity);

env.load();

通过阅读文档了解如何从metacar开始。

查看使用metacar创建的算法示例

Q表学习 在这个例子中,目标是演示一个使用metacar环境的强化学习算法的简单工作示例。您可以查看 演示或查看中级教程。

策略蒙特卡罗这是一个基于蒙特卡罗探索的策略梯度算法的示例。神经网络是使用tensorflow.js构建的。看看演示。 完全控制,这个级别还没有解决(正在工作)。但是,您可以通过解决问题并共享您的实施来为项目做出贡献!

创建你自己的关卡!Metacar让你使用编辑器编辑自己的关卡。另外,欢迎您对该项目做出贡献。

入门

安装Metacar

您可以在您的HTML文件中直接链接Metacar,或从NPM安装它。但是,metacar基于Pixi.js:4.7.1,因此您需要在您的HTML中包含pixi.js作为全局依赖项。

脚本标签

<!DOCTYPE html> <html> <head>
<metacharset="utf-8" /> <title>
Metacar: Documentation</title>
<src="https://cdnjs.cloudflare.com
/ajax/libs/pixi.js/4.7.1/pixi.min.js">
</> </head> <body>
<src="https://cdn.jsdelivr.net/npm/
metacar@0.0.5/dist/metacar.min.js">
</> </body> </html>

脚本标签和NPM

npm i metacar
<!DOCTYPE html> <html> <head>
<metacharset="utf-8" />
<title>Metacar: Documentation</title>
<src="https://cdnjs.cloudflare.com
/ajax/libs/pixi.js/4.7.1/pixi.min.js">
</> </head> <body> <src="your.js"></>
</body> </html>
importMetacarfrom"metacar";

你的第一个环境

即使你可以创建自己的关卡,Metacar也可以在metacar.level下找到一组预定义的关卡。一旦选定了关卡,您就可以使用它创建第一个环境。

// Select a levelconstlevel=
metacar.level.level1;//
Create the environementconstenv=
newmetacar.env("env", level);
// Load itenv.load();
You also have to create the
container in your HTML file.
<divid="env"></div>

(注意:metacar.env可以通过一个对象或字符串为level参数实例化:doc API)

精彩!你刚创建你的第一个掌上电脑环境。你可以花一些时间玩箭头键来移动汽车。当前的碰撞系统支持检测以下事件:

与其他车辆碰撞。

用激光雷达探测车辆,地面和道路。

检测汽车走出轨道。

如果你想添加新的功能到检测系统,你可以考虑对项目做出贡献 :)

与环境互动

行动空间

人工智能20行代码构建浏览器中自动驾驶的tensorflow强化学习环境。默认情况下,环境带有一个简单的动作引擎(如何更改动作引擎?),它允许您用箭头控制汽车。然后,这些动作是向上,向左,向右,向下,等待。加载环境后,您可以查看操作空间。

env.load(() =>
{ console.log(env.actionSpace()); });
{ type: "Discrete",
// The number is discrete size: 1,
// Only one number is expected range:
[0, 1, 2, 3, 4] //
The action can be either
0, 1, 2, 3 or 4 }

播放和停止

假设你的经纪人已经接受了培训,可以向前发展(幸运的是,我们正在进行模拟)。然后,您可能想要实时测试以查看结果。最快的方法就是让环境在每次循环调用时调用给定的函数。

env.load().then(() =>
{ env.addEvent("play",
() => { // Move forwardconstreward
=env.step(0); // Log the
rewardconsole.log(reward); }); });

你应该在屏幕上看到一个播放按钮。点击后,汽车将向前移动,只要汽车正常行驶,奖励应为正值,然后在汽车离开道路时为负值。要停止调用您的功能,您可以在屏幕上添加一个停止按钮。

env.load().then(() =>
{ env.addEvent("play",
() => { // Move
forwardconstreward=env.step(0);
// Log the rewardconsole.log(reward); }); env.addEvent("stop", () =>
{ console.log
("The stop button have been pressed.")
; }); });

训练你的经纪人

在培训期间,环境不再在屏幕上呈现。一旦训练完成,您必须通过调用env.render(true)来重新渲染环境来通知环境。环境状态是每个激光雷达点的价值。这是一个简单训练循环的例子。

env.load().then(() =>
{ env.addEvent("train", () =>
{ for (let s=0; s <100; s++)
{// Get the current state of the lidarconststate=env.getState();
// Move forwardconstreward=
env.step(0); } //
Log the rewardenv.render(true)
; }); });

重置env

要重置环境,您可以致电

env。reset();

或者从网页上添加一个按钮来完成它。

env.load().then(() =>
{ env.addEvent("custom",
() => { env.reset(); }); });

定制environement

更改运动引擎

有两种可用的运动引擎:BasicMotion和ControlMotion。

BasicMotion

这是默认的动作引擎。汽车的运动是向上,向下,向左,向右或等待。汽车从左侧和右侧动作的给定角度转向。您可以使用setMotion方法更改运动引擎的参数。

env.setAgentMotion
(metacar.motion.BasicMotion,
{rotationStep:0.25});
// Load the environment
after having changed the
properties.env.load();

ControlMotion

运动控制基于汽车油门和转向角的两个连续值。然后该动作是一个包含两个浮动值的数组。(请参阅actionSpace)

env.setAgentMotion
(metacar.motion.ControlMotion);
// Load the environment
after having changed the
properties.env.load();

改变激光雷达的属性

有四个属性可以更改。每行的点数(点数),激光雷达覆盖区域的宽度和高度以及相对于汽车的位置(pos)。

env.setAgentLidar
({pts:3, width:1.5, height:1.5, pos:1});
// Load the environment after having
changed the properties.env.load();

停止其他车辆

您可以选择使用env.carsMoving()移动或停止其他车辆

env.carsMoving(false);
// Load the environement after
changing the propeties.env.load();

其他方法

从计算机加载文件

此功能对于从计算机加载一个文件的内容非常有用(例如,训练有素的模型的结果)。

env.load().then(() =>
{ env.load("load", (content) =>
{ // Here the content of the loaded file.console.log(content); },
{local:true}); });

在电脑上保存一个文件

另外,您可能希望将训练好的模型的结果保存在计算机上。

env.save("content of my model",
"model.metacar")

添加一个自定义事件

env.addEvent()带有一组预定义的事件(“train”,“play”,“stop”,“reset_env”,“load”),但您也可以使用页面上的关联按钮创建自定义事件。贝娄,一个自定义事件保存onClick文件的例子。

env.load().then(() =>
{ env.load("My custom event",
() => {
env.save("content of my model",
"model.metacar"); }); });

编辑一个新的水平

创建编辑器只需要三行:

const level =
metacar.level.level1;
var editor =
new metacar.editor
("editor", levelToLoad);editor.load();

保存关卡

editor.load().then(() =>
{ editor.addEvent("save",
(content) => { //
Save the content into the
localstorage here or just //
retrieve the downloaded json. },
{download: true, name:
"mylevel.json"});});
   
49 次浏览  评价: 差  订阅 捐助
相关文章

我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
 
相关文档

数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
相关课程

高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优