Q-Learning 和 SARSA 算法对比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Q-Learning 和 SARSA 算法对比相关的知识,希望对你有一定的参考价值。

参考技术A Q-learning算法的过程可以根据下面的步骤:

首先,我们会初始化一个Q-table,可以是全0或者是其他的数值,一般都是全0,然后我们设定训练的轮数episodes,这里从初始状态直到终止状态算作一轮。那么在每一轮中,我们会有一个初始状态,然后会不断的采取动作,这里每一个动作叫做一个step。在每一个step中,我们根据当前的状态通过一定的策略选择动作A,这里的策略可能是以0.9的概率选择Q-table中当前状态对应的q值最大的动作,以0.1的概率选择随机动作。然后在选择动作A之后,我们可以得到奖励值R和新的状态S,那么当前q值的更新基于下面的公式:

其中alpha是学习率,表示保留之前训练效果的多少,学习速率α越大,保留之前训练的效果就越少,如果学习率是1的话,完全用新学到的q值替换掉了原来的q值。R是从环境获得的奖励,而gamma是折现系数,我们会选择到新状态之后能够得到的最大的Q值来更新当前的Q值。

对于Q-learning来说,
1.在状态s'时,只是计算了 在s'时要采取哪个a'可以得到更大的Q值,并没有真的采取这个动作a'。
2.动作a的选取是根据当前Q网络以及策略(e-greedy),即每一步都会根据当前的状况选择一个动作A,目标Q值的计算是根据Q值最大的动作a'计算得来,因此为off-policy学习。

SARSA算法根Q-learning很像,也是基于Q-table,但是不同的是,在每一个episode的每一个step,我们会确定下一步采取的动作,而不是在下一个step开始时动态的确定step,算法步骤看下面的图示。

因此对于SARSA来说
1.在状态s'时,就知道了要采取哪个a',并真的采取了这个动作。
2.动作a的选取遵循e-greedy策略,目标Q值的计算也是根据(e-greedy)策略得到的动作a'计算得来,因此为on-policy学习。

强化学习 5 —— SARSA 和 Q-Learning算法代码实现

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>测试CSS页面</title>
  6     <style>
  7         body{
  8             background-color: #d0e4fe;
  9             background-image: url("timg.jpg");/*CSS 中给字段设置图片背景*/
 10             /*background-repeat: repeat-x;!*图像只在水平方向平铺 (repeat-x)*!*/
 11             background-repeat: no-repeat;/*设置背景图像是否及如何重复*/
 12             background-attachment: fixed;/*图像不会随着页面的其他部分滚动*/
 13             background-position: right top;/*利用 background-position 属性改变图像在背景中的位置*/
 14             /*background: url("timg.jpg") no-repeat right top;!*属性合并在同一个属性中*!*/
 15         }
 16         /*h1 {*/
 17         /*    color: orange;*/
 18         /*    text-align: center;*/
 19         /*}*/
 20         p{/*CSS 中p标签来定义*/
 21             font-family: "Times New Roman";
 22             font-size: 20px;
 23         }
 24         p.para_inden{
 25             text-indent: 50px;/*段落缩进*/
 26         }
 27         #para1{/*CSS 中 id 选择器以 "#" 来定义*/
 28             text-align: center;
 29             color: red;
 30         }
 31         .center{/*CSS 中 class 选择器以 "." 来定义*/
 32             text-align: center;
 33         }
 34         p.center1{/*CSS 中 所有的 p 元素使用 class="center" 让该元素的文本居中*/
 35             text-align: center;
 36         }
 37         p.just{text-align: justify;}/*文本两端对齐*/
 38         a{text-decoration: none;}/*删除链接下划线*/
 39         h1.underscore1{
 40             text-decoration: overline;/*上划线*/
 41             text-transform: uppercase;/*全部大写*/
 42         }
 43         h2.underscore2{
 44             text-decoration: line-through;/*中划线*/
 45             text-transform: lowercase;/*全部小写*/
 46         }
 47         h3.underscore3{
 48             text-decoration: underline;/*下划线*/
 49             text-transform: capitalize;/*全部首字母大写*/
 50         }
 51         h1.letter_space1{letter-spacing: 2px;}
 52         h1.letter_space2{letter-spacing: -3px;}
 53         h1.letter_space3{word-spacing: 30px;}
 54         h1.letter_space4{word-spacing: -30px;}
 55         p.small{line-height: 70%;}
 56         p.big{line-height: 200%;}
 57         p.white_space{white-space: nowrap;}
 58         img.top{vertical-align: text-top;}
 59         img.bottom{vertical-align: text-bottom;}
 60         h1.text_shadow1{text-shadow: -5px -5px #FFFF00;}
 61         h1.text_shadow2{text-shadow: 2px 2px #FF0000;}
 62 
 63         p.serif{font-family: "Times New Roman",Times,serif;}
 64         p.sansserif{font-family: Arial, Helvetica,sans-serif;}
 65 
 66         p.normal{font-style: normal;}
 67         p.italic{font-style: italic;}/* italic 是使用文字的斜体*/
 68         p.oblique{font-style: oblique;}/* oblique 是让没有斜体属性的文字倾斜*/
 69 
 70         p.normal1{font-weight: normal;}
 71         p.light{font-weight: lighter;}
 72         p.thick{font-weight: bold;}
 73         p.thicker{font-weight: 900;}
 74 
 75         p.normal2{font-variant: normal;}
 76         p.small1{font-variant: small-caps;}
 77 
 78         p.all{font: italic bold 12px/30px Georgia,serif;}
 79 
 80         a.diff_style:link{/* 未访问连接*/
 81             color: #000000;
 82             background-color: #B2FF99;
 83             text-decoration: none;
 84         }
 85         a.diff_style:visited{/* 已访问连接*/
 86             color: #00FF00;
 87             background-color: #FFFF85;
 88             text-decoration: none;
 89         }
 90         a.diff_style:hover{/* 鼠标移动到链接上*/
 91             color: #FF00FF;
 92             background-color: #FF704D;
 93             text-decoration: underline;
 94         }
 95         a.diff_style:active{/* 鼠标点击时*/
 96             color: #0000FF;
 97             background-color: #FF704D;
 98             text-decoration: underline;
 99         }/* 1、a:hover 必须跟在 a:link 和 a:visited后面;2、a:active 必须跟在 a:hover后面*/
100 
101         ul.a{list-style-type: circle;}
102         ul.b{list-style-type: square;}
103         ul.b1{list-style-image: url("timg.jpg")}
104         /*ul.b{list-style: square url("timg.jpg")}*/
105         ol.c{list-style-type: upper-roman;}
106         ol.d{list-style-type: lower-alpha;}
107         li.link{display: inline;}/*inline把列表项显示为内联元素;block把span元素作为块元素;display:none可以隐藏某个元素,且隐藏的元素不会占用任何空间;visibility:hidden可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间*/
108 
109         table,td,th{border: 1px solid black;border-collapse: collapse;}/*border-collapse: collapse表格单边框*/
110         /*border-style:属性1,属性2,属性3,属性4------上->右->下->左
111             border-style:属性1,属性2,属性3------上->左右->下
112             border-style:属性1,属性2------上下->左右
113             border-style:属性1-------------上下左右属性相同*/
114         table{width: 100%;}
115         caption{caption-side: bottom;}
116         th{
117             height: 50px;
118             background-color: green;
119             color: white;
120         }
121         td{
122             text-align: center;
123             height: 30px;
124             vertical-align: bottom;
125             padding: 55px;/*表中的内容与边框之间的距离*/
126         }
127 
128         p.none{border-style: none;}
129         p.dotted{border-style: dotted;}
130         p.dashed{border-style: dashed;}
131         p.solid{
132             border-style: solid;
133             /*border-top-style: solid;!*单独设置各边top;right;bottom;left*!*/
134             border-top-color: #FF704D;/*单独设置各边top;right;bottom;left*/
135             outline-style: dotted;/*绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用,类似边框border*/
136         }
137         p.double{border-style: double;}
138         p.groove{border-style: groove;}
139         p.ridge{border-style: ridge;}
140         p.inset{border-style: inset;}
141         p.outset{border-style: outset;}
142         p.hidden{border-style: hidden;}
143 
144         p.ex1{margin-top: 2cm;}
145         p.pos_fixed{top:30px;right:5px;position: fixed;}/*fixed即使窗口是滚动的它也不会移动;relative相对定位元素的定位是相对其正常位置;absolute相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于<html>*/
146         div.sticky{
147             position: sticky;
148             top: 0;
149             padding: 5px;
150             background-color: #FF704D;
151             border: 2px solid #FFFF00;
152         }
153         img.z_index{
154             position: absolute;
155             /*left: 0px;*/
156             /*top: 0px;*/
157             z-index: -1;
158             clip: rect(0px,100px,200px,0px);/*被剪裁成这种形状,并显示出来*/
159             /*overflow属性创建一个滚动条;style="cursor:crosshair"改变光标*/
160         }
161         p img.float{float: right;}/*clear:both;属性指定元素两侧不能出现浮动元素*/
162 
163         .dropbtn{/* 下拉按钮样式 */
164             background-color: #FF704D;
165             color: white;
166             padding: 16px;
167             font-size: 16px;
168             border: none;
169             cursor: pointer;/*鼠标样式*/
170         }
171         .dropdown{/* 容器 <div> - 需要定位下拉内容 */
172             position: relative;
173             display: inline-block;
174         }
175         .dropdown-content{/* 下拉内容 (默认隐藏) */
176             display: none;
177             position: absolute;
178             background-color: #FFFF00;
179             min-width: 160px;
180             box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
181             padding: 12px 16px;
182         }
183         .dropdown-content a{/* 下拉菜单的链接样式 */
184             color: black;
185             padding: 12px 16px;
186             text-decoration: none;/* 下划线去除*/
187             display: block;
188         }
189         .dropdown-content a:hover{background-color: #00FF00}/* 鼠标移上去后修改下拉菜单链接颜色 */
190 
191         .dropdown:hover .dropdown-content{display: block;}/*在鼠标移上去后显示下拉菜单;:hover 选择器用于在用户将鼠标移动到下拉按钮上时显示下拉菜单。*/
192 
193         .dropdown:hover .dropbtn{background-color: #0000FF}/* 当下拉内容显示后修改下拉按钮的背景颜色 */
194 
195         .tooltip{/* Tooltip 容器 */
196             position: relative;
197             display: inline-block;
198             border-bottom: 1px dotted black;/* 悬停元素上显示点线 */
199         }
200         .tooltip .tooltiptext{/* Tooltip 文本 */
201             visibility: hidden;
202             width: 120px;
203             background-color: black;
204             color: #0000FF;
205             text-align: center;
206             border-radius: 6px;/* 给元素设置圆角边框 */
207             padding: 5px 0;
208             /* 定位 */
209             position: absolute;
210             z-index: 1;
211             /*top: -5px;*/
212             /*left: 105%;*//*文本显示在左侧;*/
213             /*right: 105%;!*文本显示在右侧;*!*/
214             /*top: 100%;!*文本显示在上面;*!*/
215             bottom: 100%;/*文本显示在下面;*/
216             left: 50%;
217             margin-left: -60px;/* 使用一半宽度 (120/2 = 60) 来居中提示工具 */
218             /* 淡入 - 1秒内从 0% 到 100% 显示: */
219             opacity: 0;
220             transition: opacity 1s;
221         }
222         .tooltip .tooltiptext::after{
223             content: "";
224             position: absolute;
225             top: 100%;/*在提示工具内定位箭头: top: 100% , 箭头将显示在提示工具的底部*/
226             left: 50%;/*left: 50% 用于居中对齐箭头*/
227             margin-left: -5px;
228             border-width: 5px;
229             border-style: solid;
230             border-color: black transparent transparent transparent;/* 设置顶部边框为黑色,其他是透明的 */
231         }
232         .tooltip:hover .tooltiptext{
233             visibility: visible;/* 鼠标移动上去后显示提示框 */
234             opacity: 1;
235         }
236 
237         div ol{
238             counter-reset: section1;
239             list-style-type: none;
240         }
241         div li::before{
242             counter-increment: section1;
243             content: counters(section1,".") " ";
244         }
245 
246 
247     </style>
248 </head>
249 <body>
250         <h1>CSS实例!</h1>
251         <p class="para_inden">这是一个段落。</p>
252     <hr>
253         <p id="para1">Hello World!</p><!--ID属性不要以数字开头-->
254     <hr>
255         <h1 class="center">标题居中</h1><!--类名的第一个字符不能使用数字-->
256     <hr>
257         <h1 class="center1">这个标签不受影响</h1>
258         <p class="center1">这个段落居中对齐</p>
259     <hr>
260         <p class="just">两端对齐</p>
261     <hr>
262         <a href="http://www.baidu.com" target="_blank">百度一下</a>
263             <h1 class="underscore1">This is heading 1</h1>
264             <h2 class="underscore2">This is heading 2</h2>
265             <h3 class="underscore3">This is heading 3</h3>
266     <hr>
267         <p>增加或减少字符之间的空间</p>
268         <h1 class="letter_space1">This is heading 1</h1>
269         <h1 class="letter_space2">This is heading 2</h1>
270         <p>增加或减少单词之间的空间</p>
271         <h1 class="letter_space3">This is heading 3</h1>
272         <h1 class="letter_space4">This is heading 4</h1>
273     <hr>
274     <hr>
275         <p>指定在一个段落中行之间的空间</p>
276         <p>这是一个标准行高的段落。<br>
277             这是一个标准行高的段落。<br>
278             大多数浏览器的默认行高约为110%至120%。<br></p>
279         <p class="small">这是一个更小行高的段落。<br>
280             这是一个更小行高的段落。<br>
281             这是一个更小行高的段落。<br>
282             这是一个更小行高的段落。<br>
283             这是一个更小行高的段落。<br>
284         </p>
285         <p class="big">这是一个更大行高的段落。<br>
286             这是一个更大行高的段落。<br>
287             这是一个更大行高的段落。<br>
288             这是一个更大行高的段落。<br>
289             这是一个更大行高的段落。<br>
290         </p>
291     <hr><p>禁用一个元素内的文字环绕(即不换行)</p>
292         <p class="white_space">这是一些文本。这是一些文本。这是一些文本。这是一些文本。这是一些文本。
293             这是一些文本。这是一些文本。这是一些文本。这是一些文本。这是一些文本。
294             这是一些文本。这是一些文本。这是一些文本。这是一些文本。这是一些文本。
295             这是一些文本。这是一些文本。这是一些文本。这是一些文本。这是一些文本。
296             这是一些文本。这是一些文本。这是一些文本。这是一些文本。这是一些文本。</p>
297     <hr><p>设置文本的垂直对齐图像</p>
298         <p>一个<img src="test01.jpg" alt="测试图片" width="270" height="50"/>默认对齐的图像。</p>
299         <p>一个<img class="top" src="test01.jpg" alt="测试图片" width="270" height="50"/>text-top对齐的图像。</p>
300         <p>一个<img class="bottom" src="test01.jpg" alt="测试图片" width="270" height="50"/>text-bottom对齐的图像。</p>
301     <hr><p>设置文本阴影:Text-shadow 效果</p>
302         <h1 class="text_shadow1">Text-shadow 效果1</h1>
303         <h1 class="text_shadow2">Text-shadow 效果2</h1>
304     <hr><h1>CSS font-family</h1>
305         <p class="serif">这一段字体是 Times New Roman</p>
306         <p class="sansserif">这一段字体是 Arial.</p>
307     <hr><h1>斜体文字</h1>
308         <p class="normal">这是一个段落,正常。normal</p>
309         <p class="italic">这是一个段落,斜体。italic</p>
310         <p class="oblique">这是一个段落,斜体。oblique</p>
311     <hr><h1>设置字体的加粗</h1>
312         <p class="normal1">这是一个段落,正常。normal</p>
313         <p class="light">这是一个段落。light</p>
314         <p class="thick">这是一个段落。thick</p>
315         <p class="thicker">这是一个段落。thicker</p>
316     <hr><h1>设置字体的转变</h1>
317         <p class="normal2">My name is Hege Refsnes.</p>
318         <p class="small1">My name is Hege Refsnes.</p>
319     <hr><h1>字体属性设置在一个声明之内</h1>
320         <p class="all">My name is Hege Refsnes.</p>
321     <hr><h1>链接样式</h1>
322         <a class="diff_style" href="http://www.baidu.com" target="_blank">这是一个连接</a>
323     <hr><h1>列表属性</h1>
324         <p>无序列表实例:</p>
325         <ul class="a">
326             <li>咖啡</li>
327             <li></li>
328             <li>饮料</li>
329         </ul>
330         <ul class="b">
331             <li>咖啡</li>
332             <li></li>
333             <li>饮料</li>
334         </ul>
335         <ul class="b1">
336             <li>咖啡</li>
337             <li></li>
338             <li>饮料</li>
339         </ul>
340         <p>有序列表实例:</p>
341         <ol class="c">
342             <li>咖啡</li>
343             <li></li>
344             <li>饮料</li>
345         </ol>
346         <ol class="d">
347             <li>咖啡</li>
348             <li></li>
349             <li>饮料</li>
350         </ol>
351     <hr><h1>链接列表的水平显示</h1>
352         <ul>
353             <li class="link"><a href="timg.jpg" target="_blank">HTML</a></li>
354             <li class="link"><a href="timg.jpg" target="_blank">CSS</a></li>
355             <li class="link"><a href="timg.jpg" target="_blank">JavaScript</a></li>
356             <li class="link"><a href="timg.jpg" target="_blank">XML</a></li>
357         </ul>
358     <hr><h1>表格</h1>
359         <table>
360             <caption>Table 1.1 Customers</caption>
361             <tr>
362                 <th>Firstname</th>
363                 <th>Lastname</th>
364             </tr>
365             <tr>
366                 <td>Peter</td>
367                 <td>Griffin</td>
368             </tr>
369             <tr>
370                 <td>Lois</td>
371                 <td>Griffin</td>
372             </tr>
373         </table>
374     <hr><h1>边框样式</h1>
375         <p class="none">无边框</p>
376         <p class="dotted">虚线边框</p>
377         <p class="dashed">虚线边框</p>
378         <p class="solid">实线边框</p>
379         <p class="double">双边框</p>
380         <p class="groove">凹槽边框</p>
381         <p class="ridge">垄状边框</p>
382         <p class="inset">嵌入边框</p>
383         <p class="outset">外凸边框</p>
384         <p class="hidden">外凸边框</p>
385     <hr><h1>margin外边距</h1>
386         <p>一个没有指定边距大小的段落</p>
387         <p class="ex1">一个2厘米上边距的段落</p>
388         <p>一个没有指定边距大小的段落</p>
389     <hr><h1>元素的位置相对于浏览器窗口是固定位置</h1>
390         <p class="pos_fixed">这段文字不会随着窗口的下滑滚动,而变动</p>
391         <p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p><p>Some text</p>
392     <hr><h1>sticky 定位,粘性定位,基于用户的滚动位置来定位</h1>
393         <p>尝试滚动页面</p>
394         <div class="sticky">这是一个粘性定位!</div>
395         <div>
396             <p>滚动</p>
397             <p>来回滚动</p>
398             <p>滚动</p>
399             <p>来回滚动</p>
400             <p>滚动</p>
401             <p>来回滚动</p>
402         </div>
403     <hr><h1>重叠的元素</h1>
404         <p>This is a heading</p>
405         <img src="timg.jpg" class="z_index" width="500" height="320">
406         <p>因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后</p>
407     <hr><h1>图像是右浮动,下面的文本流将环绕在它左边</h1>
408         <p>在下面的段落中,我们添加了一个<b>float:right</b>的图片。导致图片将会浮动在段落的右边。</p>
409         <p>
410             <img src="timg.jpg" class="float" width="500" height="320">
411             因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
412              因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
413              因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
414              因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
415              因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
416              因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
417              因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
418              因为图像元素设置了z-index属性值为-1,所以它会显示在文字之后
419         </p>
420     <hr><h1>使用 CSS 创建一个鼠标移动上去后显示下拉菜单的效果</h1>
421         <div class="dropdown">
422             <button class="dropbtn">下拉菜单</button>
423             <div class="dropdown-content">
424                 <a href="http://www.baidu.com" target="_blank">百度1</a>
425                 <a href="http://www.baidu.com" target="_blank">百度2</a>
426                 <a href="http://www.baidu.com" target="_blank">百度3</a>
427             </div>
428         </div>
429     <hr><h1>提示框(Tooltip)</h1>
430         <div style="text-align: center;">
431             <div class="tooltip">鼠标移动到这来
432                 <span class="tooltiptext">提示文本</span>
433             </div>
434         </div>
435     <hr><h1>计数器也可用于列表</h1>
436         <div>
437             <ol>
438                 <li>item</li>
439                 <li>item
440                     <ol>
441                         <li>item</li>
442                         <li>item</li>
443                         <li>item
444                             <ol>
445                                 <li>item</li>
446                                 <li>item</li>
447                                 <li>item</li>
448                             </ol>
449                         </li>
450                     </ol>
451                 </li>
452                 <li>item</li>
453                 <li>item</li>
454             </ol>
455             <ol>
456                 <li>item</li>
457                 <li>item</li>
458             </ol>
459         </div>
460 
461 
462 </body>
463 </html>

 

以上是关于Q-Learning 和 SARSA 算法对比的主要内容,如果未能解决你的问题,请参考以下文章

深度学习中sarsa算法和Q-learning算法的区别

强化学习 5 —— SARSA 和 Q-Learning算法代码实现

强化学习笔记:Sarsa 与 Sarsa(lambda)

强化学习笔记:Sarsa 与 Sarsa(lambda)

强化学习 - Q-learning Sarsa 和 DQN 的理解

一文搞懂sarsa和Q-Learning的区别