强化学习实践二:迭代法评估4*4方格世界下的随机策略

2024-06-02 20:58

本文主要是介绍强化学习实践二:迭代法评估4*4方格世界下的随机策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇用代码演示《强化学习》第三讲中的示例——方格世界,即用动态规划算法通过迭代计算来评估4*4方格世界中的一个随机策略。具体问题是这样:

已知(如上图):

  • 状态空间 S:S_{1} - S_{14}为非终止状态;S_{0}S_{15}终止状态,图中灰色方格所示两个位置;
  • 行为空间 A:{n, e, s, w} 对于任何非终止状态可以有向北、东、南、西移动四个行为;
  • 转移概率 P:任何试图离开方格世界的动作其位置将不会发生改变,其余条件下将100%地转移到动作指向的位置;
  • 即时奖励 R:任何在非终止状态间的转移得到的即时奖励均为-1,进入终止状态即时奖励为0;
  • 衰减系数 γ:1;
  • 当前策略π:个体采用随机行动策略,在任何一个非终止状态下有均等的几率往任意可能的方向移动,即π(n|•) = π(e|•) = π(s|•) = π(w|•) = 1/4。

问题:评估在这个方格世界里给定的策略。

该问题等同于:求解该方格世界在给定策略下的(状态)价值函数,也就是求解在给定策略下,该方格世界里每一个状态的价值。

 

我们使用Python编写代码解决该问题。

  • 声明状态
states = [i for i in range(16)]
  • 声明状态价值,并初始化各状态价值为0
values = [0  for _ in range(16)]
  • 声明行为空间
actions = ["n", "e", "s", "w"]
  • 结合方格世界的布局特点,简易声明行为对状态的改变(-4表示向前移4格,相当于向上移1格)
ds_actions = {"n": -4, "e": 1, "s": 4, "w": -1} 
  • 声明衰减系数为1
gamma = 1.00
  • 根据当前状态和行为确定下一状态
def nextState(s, a):next_state = sif (s%4 == 0 and a == "w") or (s<4 and a == "n") or \((s+1)%4 == 0 and a == "e") or (s > 11 and a == "s"):passelse:ds = ds_actions[a]next_state = s + dsreturn next_state
  • 得到某一状态的即时奖励
def rewardOf(s):return 0 if s in [0,15] else -1
  • 判断某一状态是否为终止状态
def isTerminateState(s):return s in [0,15]
  • 获取某一状态的所有可能的后继状态
def getSuccessors(s):successors = []if isTerminateState(s):return successorsfor a in actions:next_state = nextState(s, a)# if s != next_state:successors.append(next_state)return successors
  • 根据后继状态的价值更新某一状态的价值
def updateValue(s):sucessors = getSuccessors(s)newValue = 0  # values[s]num = 4       # len(successors)reward = rewardOf(s)for next_state in sucessors:newValue += 1.00/num * (reward + gamma * values[next_state])return newValue
  • 进行一次迭代
def performOneIteration():newValues = [0 for _ in range(16)]for s in states:newValues[s] = updateValue(s)global valuesvalues = newValuesprintValue(values)
  • 辅助函数输出状态价值
def printValue(v):for i in range(16):print('{0:>6.2f}'.format(v[i]),end = " ")if (i+1)%4 == 0:print("")print()
  • 主函数
def main():max_iterate_times = 160cur_iterate_times = 0while cur_iterate_times <= max_iterate_times:print("Iterate No.{0}".format(cur_iterate_times))performOneIteration()cur_iterate_times += 1printValue(values)

 

由于事先知道该算法将在150次左右收敛,我们将最大迭代次数设为了160,最后得到的价值函数如下:

The value function converges to:0.00  -14.00 -20.00 -22.00 
-14.00 -18.00 -20.00 -20.00 
-20.00 -20.00 -18.00 -14.00 
-22.00 -20.00 -14.00   0.00 
At Iterate No.153

从以上代码我们可以看出,我们设置了一个获取某一状态所有后续可能状态的集合这么一个方法,这就是体现动态规划算法思想的地方。如果无法获取一个状态的所有可能后续状态,那么就不能使用动态规划算法来求解。此外,我们使用的是异步更新价值的方法,即某一时刻状态的价值由前一时刻状态价值来计算。

完整的Python代码参考,这里还有一个使用javascript编写的Demo,该Demo还可以展示策略迭代和价值迭代过程。地址如下:动态规划 价值与策略迭代。此Demo借鉴了ReinforceJS的示例。

 

本文转自:https://zhuanlan.zhihu.com/p/28084990

 

 

 

这篇关于强化学习实践二:迭代法评估4*4方格世界下的随机策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4