编辑推荐: |
本文演示一个使用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.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"});}); |
|