为什么这段代码能找到最佳路径，麻烦举例说明
import numpy as np 
import random 

# 建立 Q 表
q=np.zeros((6, 6)) 
q=np.matrix(q) 

# 建立奖励值表 R
r=np.matrix([[-5,1,-5,-5,-5,-5],[-4,-5,2,-5,-5,-5],[-5,-3,-5,3,-5,-5],[-5,-5,-2,-5,4,-5],
             [-5,-5,-5,-1,-5,-5],[-5,-5,-5,-5,4,-5]]) 
# 设立学习参数
gamma = 0.8 
# 训练得到 Q 矩阵
for i in range(100): 
    # 对每一个训练,随机选择一种状态
    state = random.randint(0, 5) 
    while True: # 进入循环
        # 选择 r 表中>-5 的值的动作
        r_pos_action = [] 
        for action in range(6): 
            if r[state, action] >= -4: 
                r_pos_action.append(action) # 如果回报≥-4则将该动作添加到r_pos_action列表中
        # 从r_pos_action随机选取下一个状态
        next_state = r_pos_action[random.randint(0, len(r_pos_action) - 1)] 
        q[state, next_state] = r[state, next_state] + gamma *(q[next_state]).max() 
        # Q 矩阵进行学习
        state = next_state 
        # 状态 4 位最优库存状态
        if state==4: 
            break     # 如果当前状态为4，则跳出循环
print(q)
state=int(input("请输入 agent 的初始状态([0,5]):"))   # int整数类型
print('agent 的初始状态为{}'.format(state)) 
count=0 
while state != 4:  # 进入循环，直到状态为 4 时跳出循环
    if count > 20: # 如果循环次数大于 20 次，表示失败
        print('fail') 
        break 
    # 选择最大的 q_max 
    q_max = q[state].max() 
    q_max_action = [] 
    for action in range(6): 
        # 如果当前状态下该动作的Q值等于最大值，则将该动作添加到q_max_action列表中
        if q[state, action] == q_max: 
            q_max_action.append(action)  
    # 从q_max_action随机选择下一个状态
    next_state = q_max_action[random.randint(0, len(q_max_action) - 1)] 
    print("the agent goes to " + str(next_state) + '.') 
    state = next_state 
    count += 1  # 循环次数加1
print("over!")