问题描述
如图所示,从左上角出发,每次只能往上下左右四个方向移动1个单位,要求设计一个路径,尽可能避免红色障碍,到达蓝色方格处。 首先,我们将问题抽象化,25个方格位置分别编号为0-24,表示25个状态,上、下、左、右为四个动作,如下图所示:
def get_init_feedback_table(S,a):
tab=np.ones((25,4))
tab[8][1]=-10;tab[4][3]=-10;tab[14][2]=-10
tab[11][1]=-10;tab[13][0]=-10;tab[7][3]=-10;tab[17][2]=-10
tab[16][0]=-10;tab[20][2]=-10;tab[10][3]=-10;
tab[18][0]=-10;tab[16][1]=-10;tab[22][2]=-10;tab[12][3]=-10
tab[23][1]=50;tab[19][3]=50
return tab[S,a]
如代码所示,当某个动作导致下一状态为红色障碍物时,R=-10,若进入蓝色终点,则R=50,否则R=1,需要注意的是,这里的R和Q表的Q(S,A)是不一样的,R是状态S采用动作A后得到的即时奖励。
Q-learning算法import numpy as np
import pandas as pd
import time
N_STATES = 25 # the length of the 2 dimensional world
ACTIONS = ['left', 'right','up','down'] # available actions
EPSILON = 0.3 # greedy police
ALPHA = 0.8 # learning rate
GAMMA = 0.9 # discount factor
MAX_EPISODES = 1000 # maximum episodes
FRESH_TIME = 0.00001 # fresh time for one move
def build_q_table(n_states, actions):
table = pd.DataFrame(
np.zeros((n_states, len(actions))), # q_table initial values
columns=actions, # actions's name
)
return table
def choose_action(state, q_table):
state_actions = q_table.iloc[state, :]
if (np.random.uniform() > EPSILON) or ((state_actions == 0).all()): # act non-greedy or state-action have no value
if state==0:
action_name=np.random.choice(['right','down'])
elif state>0 and state20 and state
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?