Example 8.2 Mountain–Car Task

2023-10-30 00:20
文章标签 example 8.2 task car mountain

本文主要是介绍Example 8.2 Mountain–Car Task,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面讲过coarse coding,Tile Coding是Coarse Coding的一种,特别适合用于多维连续空间。之前降到Coarse Coding,多个特征,特征与特征之间存在互相覆盖。而在Tile Coding中,特征的receptive field(感受野)作为输入空间的一个分区。每个分区称为tiling,分区里面的元素称为tile。如下图所示,是一个二维状态空间的最简单的分区,有4个分区。每个分区通过一定的位移形成新的分区。这四个分区对应4个特征。状态空间中的每个点在每个tiling中都能找到对应的tile,有且只有一个tile,每个点的特征数都是一样的——4个。
这里写图片描述

假设有m个tiling,则某状态由m个tile组成。状态之间的tile可能是相同的。当某一状态更新,则另一状态也可能发生变化。

接下来举个例子。
sutton的rl第一版本的8.2案例,第二版本的10.1。
如图,有一辆小车,通过向左,
这里写图片描述
小车的发动机能给一个向前或向后的动力,小车的发动机有三个选择:向前(+1)、向后(-1)和不发动(0)。小车根据简单化的物理规则行动,它的位置 xt 和速度 x˙t 根据以下更新:

xt+1=˙bound[xt+x˙t+1]
x˙t+1=˙bound[x˙t+0.001At0.0025cos(3xt)]

其中bound规定 1.2xt+10.5 以及 0.07x˙t+10.07
另外,如果 xt+1 到达最左边,那么 x˙t+1 ,也就是加速度被设为0。到达最右边,则episode结束。每个episode从一个随机的位置 xt[0.6,0.4) 开始,开始时速度为0。为了将连续的状态变量用二元特征表示,我们使用grid-tiling(tile coding的一种)。

我们使用的tile-coding是网上公开的python3代码。使用下面两行代码就行了:

iht = IHT(2048)
features = tiles(iht, 8, [8*x/(0.5+1.2), 8*xdot/(0.07+0.07)], A) 

IHT是处理特征的结构,tiles (ihtORsize, numtilings, floats, ints=[], readonly=False)根据floats和ints返回特征tile。返回的特征tile维数为numtilings。floats为当前状态,ints为采取的行动。

根据rl第二版本的伪代码(Episodic Semi-gradient Sarsa for Control)跑了一下:
这里写图片描述
其实和Sarsa差不多,除了 q^(S,A,θ) 体现了梯度。向量微分算子,Nabla算子(nabla operator),又称劈形算子,倒三角算子,是一个微分算子,符号为 。定义为 =ddr

根据rl第一版本的伪代码:
这里写图片描述
这里多了eligibility trace。对比两个实验,发现并无多大差别,所以我还是搞不清eligibility trace的作用。。

实验代码:https://github.com/Mandalalala/Reinforcement-Learning-an-introduction/blob/master/Chapter%208/Example_8_2_Mountain_Car_Task.ipynb

这篇关于Example 8.2 Mountain–Car Task的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/304360

相关文章

兔子--Android Studio出现错误:Error:Execution failed for task ':myapp:dexDebug'. com.android.ide.common.pro

重点在:finished with non-zero exit value 2. 这里表明了有重复的内容存在。 由于:Android Studio中引入包的方式有如下2种:    compile 'com.android.support:support-v4:22.0.0'    compile files('libs/support-v

《数据结构(C语言版)第二版》第八章-排序(8.2-插入排序)

【8.2插入类、8.3交换类、8.4选择类、8.5归并类、8.6分配类 都属于内部排序。 】 8.2 插入排序 8.2.1 直接插人排序 【算法特点】 (1)稳定排序。 (2)算法简便,且容易实现。 (3)也适用于链式存储结构,只是在单链表上无需移动记录,只需修改相应的指针。 (4)更适合于初始记录基本有序(正序)的情况。 当初始记录无序,n较大时,此算法时间复杂度较高,不宜采用。 #in

25版王道数据结构课后习题详细分析 第八章 8.2 插入排序

一、单项选择题 ———————————————————— ———————————————————— 解析:直接插入排序在最坏的情况下要做n(n-1)/2次关键字的比较,当n=5时, 关键字的比较次数为10。注意不考虑与哨兵的比较。 正确答案: ———————————————————— ———————————————————— 解析:由于序列初始基本有序,因此使用直接插入排序

深入理解.NET 中的 Task 和 Task.WhenAll

一、Task 的原理         Task 代表一个异步操作。它允许你在不阻塞主线程的情况下执行耗时的操作,如文件读取、网络请求等。 异步执行 当你调用一个异步方法时,它会立即返回一个 Task 对象。这个 Task 对象表示正在进行的异步操作。异步方法会在后台线程上执行,而不会阻塞调用它的线程。例如,使用 Task.Run(() => { /* 耗时操作 */ }); 可以在一个新的线

Linux的进程,线程以及调度(fork与僵尸,内存泄漏,task结构体,停止状态与作业控制)

1.Linux进程生命周期(就绪、运行、睡眠、停止、僵死) 2.僵尸是个什么鬼? 3.停止状态与作业控制,cpulimit 4.内存泄漏的真实含义 5.task_struct以及task_

swoole http服务器task投递异步任务

官网的task案例代码是在tcp服务器中写的,本人在想,http服务器也是server服务器中的一种,应该也可以投递task任务。 一个简单的http服务器代码:    $server = new Swoole\Http\Server('127.0.0.1',8888);$server->on('request',function($request, $response) use($serv

Linux操作系统学习笔记(五)进程的核心——task_truct

一. 前言   在前文中,我们分析了内核启动的整个过程以及系统调用的过程,从本文开始我们会介绍Linux系统各个重要的组成部分。这一切就从进程和线程开始,在 Linux 里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构 task_struct 进行管理。这个结构非常复杂,本文将细细分析task_struct结构。主要分析顺序会按照该架构体中的成员变量和函数

Maximum Number in Mountain Sequence

Given a mountain sequence of n integers which increase firstly and then decrease, find the mountain top. Example Example 1: Input: nums = [1, 2, 4, 8, 6, 3] Output: 8 Example 2: Input: nums = [

transformer之预训练task小析(五)

上接transformer预训练task之小析(四)      首先思考一个问题,怎么表示掌握了一门语言?      最好的方式可能体现在遣词造句上吧,比如饱受诟病的八股文上有很多的旷世奇作[1],比如很多读起来朗朗上口的👇 天对地,雨对风。大陆对长空。山花对海树,赤日对苍穹。雷隐隐,雾蒙蒙。日下对天中。风高秋月白,雨霁晚霞红。牛女二星河左右,参商两曜斗西东。十月塞边,飒飒寒霜惊

HDU3572_Task Schedule(网络流最大流)

解题报告 题意: 工厂有m台机器,需要做n个任务。对于一个任务i,你需要花费一个机器Pi天,而且,开始做这个任务的时间要>=Si,完成这个任务的时间<=Ei。对于一个任务,只能由一个机器来完成,一个机器同一时间只能做一个任务。但是,一个任务可以分成几段不连续的时间来完成。问,能否做完全部任务。 思路: 网络流在于建模,这题建模方式是: 把每一天和每个任务看做点。由源点到每一任务,建容量