河北省住房和城乡建设网站微信营销管理系统
news/
2025/9/23 7:57:50/
文章来源:
河北省住房和城乡建设网站,微信营销管理系统,wordpress修改首页代码,html5商城网站模板一、游戏介绍
木棒每保持平衡1个时间步#xff0c;就得到1分。每一场游戏的最高得分为200分每一场游戏的结束条件为木棒倾斜角度大于41.8或者已经达到200分。最终获胜条件为最近100场游戏的平均得分高于195。代码中env.step#xff08;#xff09;#xff0c;的返回值就分…一、游戏介绍
木棒每保持平衡1个时间步就得到1分。每一场游戏的最高得分为200分每一场游戏的结束条件为木棒倾斜角度大于41.8°或者已经达到200分。最终获胜条件为最近100场游戏的平均得分高于195。代码中env.step的返回值就分别代表了。观测Observation当前step执行后环境的观测。奖励Reward执行上一步动作action后智能体agent获得的奖励不同的环境中奖励值变化范围也有不同但是强化学习的目标就是总奖励值最大。完成Done表示是否需要将环境重置env.reset大多数情况下当Done为True时就表明当前回合episode结束。信息Info针对调试过程的诊断信息在标准的智能体仿真评估当中不会使用到这个info。
二、代码批注
import gym
import numpy as npenv gym.make(CartPole-v0)max_number_of_steps 200 # 每一场游戏的最高得分
#---------获胜的条件是最近100场平均得分高于195-------------
goal_average_steps 195
num_consecutive_iterations 100
#----------------------------------------------------------
num_episodes 5000 # 共进行5000场游戏
last_time_steps np.zeros(num_consecutive_iterations) # 只存储最近100场的得分可以理解为是一个容量为100的栈# q_table是一个256*2的二维数组
# 离散化后的状态共有4^4256中可能的取值每种状态会对应一个行动
# q_table[s][a]就是当状态为s时作出行动a的有利程度评价值
# 我们的AI模型要训练学习的就是这个映射关系表
q_table np.random.uniform(low-1, high1, size(4 ** 4, env.action_space.n))# 分箱处理函数把[clip_min,clip_max]区间平均分为num段位于i段区间的特征值x会被离散化为i
def bins(clip_min, clip_max, num):return np.linspace(clip_min, clip_max, num 1)[1:-1]# 离散化处理将由4个连续特征值组成的状态矢量转换为一个0~~255的整数离散值
def digitize_state(observation):# 将矢量打散回4个连续特征值cart_pos, cart_v, pole_angle, pole_v observation# 分别对各个连续特征值进行离散化分箱处理digitized [np.digitize(cart_pos, binsbins(-2.4, 2.4, 4)),np.digitize(cart_v, binsbins(-3.0, 3.0, 4)),np.digitize(pole_angle, binsbins(-0.5, 0.5, 4)),np.digitize(pole_v, binsbins(-2.0, 2.0, 4))]# 将4个离散值再组合为一个离散值作为最终结果return sum([x * (4 ** i) for i, x in enumerate(digitized)])# 根据本次的行动及其反馈下一个时间步的状态返回下一次的最佳行动
def get_action(state, action, observation, reward):next_state digitize_state(observation) # 获取下一个时间步的状态并将其离散化next_action np.argmax(q_table[next_state]) # 查表得到最佳行动#-------------------------------------训练学习更新q_table----------------------------------alpha 0.2 # 学习系数αgamma 0.99 # 报酬衰减系数γq_table[state, action] (1 - alpha) * q_table[state, action] alpha * (reward gamma * q_table[next_state, next_action])# -------------------------------------------------------------------------------------------return next_action, next_statedef get_action2(state, action, observation, reward, episode):next_state digitize_state(observation)epsilon 0.2*(0.95**episode) # ε-贪心策略中的εif epsilon np.random.uniform(0, 1):next_action np.argmax(q_table[next_state])else:next_action np.random.choice([0, 1])#-------------------------------------训练学习更新q_table----------------------------------alpha 0.2 # 学习系数αgamma 0.99 # 报酬衰减系数γq_table[state, action] (1 - alpha) * q_table[state, action] alpha * (reward gamma * q_table[next_state, next_action])# -------------------------------------------------------------------------------------------return next_action, next_state# 重复进行一场场的游戏
for episode in range(num_episodes):observation env.reset() # 初始化本场游戏的环境state digitize_state(observation) # 获取初始状态值action np.argmax(q_table[state]) # 根据状态值作出行动决策episode_reward 0# 一场游戏分为一个个时间步for t in range(max_number_of_steps):env.render() # 更新并渲染游戏画面observation, reward, done, info env.step(action) # 获取本次行动的反馈结果print(reward)if done:reward -200action, state get_action2(state, action, observation, reward, episode) # 作出下一次行动的决策episode_reward rewardif done:# print(%d Episode finished after %f time steps / mean %f % (episode, t 1, last_time_steps.mean()))last_time_steps np.hstack((last_time_steps[1:], [episode_reward])) # 更新最近100场游戏的得分stackbreak# 如果最近100场平均得分高于195if (last_time_steps.mean() goal_average_steps):# print(Episode %d train agent successfuly! % episode)breakprint(Failed!)三、问题回答
代码中两个策略get_action和get_action2分别对应哪个算法去除第73-74行游戏结束的reward值赋值结果有什么变化
get_actionQ-learning 上面的α被称为学习系数γ被称为报酬衰减系数rt为时间步为t时得到的报酬。如果在时间步t时状态为st我们采取的行动为at本次行动的有利程度记为Q(st,at)。 get_action2Q-learning ε-贪心策略 在get_action2中加入了贪心的策略。以ε的概率以均匀概率随机选一个方向进行移动以1-ε的概率选择目前为止探索到的对于当前状态的最佳行动方向进行移动。 如果取去掉reward得不到反馈。在main函数中的开头这里的意思其实就是每次获得一个最好的action然后计算用更好的去填补他。这里evn.step每次返回的reward都是1if done其实就代表了游戏被迫结束如果不减值那么相当于对模型没有反馈模型会每次会找最好的值但呢个最好的值是随机算出来的最终的结果会卡在一个比较低的分数附近上上下下。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911837.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!