最近一直在研究强化学习中的Q学习算法,鉴于网上的代码对于新手来说太过于复杂,我在MATLAB以及Python下都写了相对容易的代码,以便于新手理解与学习。
python代码:
''' 1,环境:先从简单的6x6的方格环境做起,起始位置为右下角,终止位置为右上角, 其中选中两处为障碍物,其余的位置为平地,环境的选择为坐标系(0,0)->(5,5). 2,选择的动作为‘上下左右’,步长为单位一. 3,策略:Q-Learning算法. ''' import numpy as np import pandas as pd import matplotlib.pyplot as plt '''变量初始化''' ################################################################################################ gamma = 0.8#衰减率 learning_rate = 0.1#学习效率 actions = 4#四个动作选择方式 epsilon = 0.9#explora = 0.1 x_matrix = [ 0 , 0 , -1 , 1 ]#对应上下左右 y_matrix = [ 1 , -1 , 0 , 0 ] ac_matrix = [ -5 , 5 , -1 , 1 ]#就可以换号了 '''建立一个零矩阵,环境矩阵,其中有障碍物''' ################################################################################################ maze =np.zeros(25) maze[7]=1 maze[16]=1 #print(maze) '''这三个表的应用规律相同''' ac_rol = [0,1,2,3] #定义Q值表 q_table = pd.DataFrame(np.zeros(100).reshape(25,4),index=np.arange(25),columns=ac_rol) ##print(q_table) r_step = [] '''#Q值表边界条件的设定''' q_t_r = 0 while q_t_r < 5: q_table.loc[q_t_r,0] = float('-inf') q_t_r += 1 q_t_r = 0 while q_t_r < 5: q_table.loc[5*q_t_r,2] = float('-inf') q_t_r += 1 q_t_r = 0 while q_t_r < 5: q_table.loc[5*(q_t_r)+4,3] = float('-inf') q_t_r += 1 q_t_r = 0 while q_t_r <5: q_table.loc[20+q_t_r,1] = float('-inf') q_t_r += 1 #print(q_table.loc[2,3]) #q_table.iloc[2,3] = 2#更改矩阵中的某个数值 ##print(q_table) trace = []#机器人的轨迹 '''开始进行打的循环迭代''' ############################################################################################### for episode in range(1000): #在这之前要拥有一个大循环,需要遍历1000次 x = 4 y = 0 initial_s = 24 terminal_s = 0 s = initial_s step = 1 while s != 0: if np.random.uniform() < epsilon: # 输出0-1的随机数 # choose best action state_action