Qlearning matlab代码5*5迷宫案例代码,只能向上或者向左走,初始位置在最右下角,目标位置在最左上角
时间: 2023-07-14 16:13:21 浏览: 105
下面是一个简单的 Q-learning 算法的 MATLAB 代码,用于在一个 5x5 的迷宫中寻找从右下角到左上角的路径。在此迷宫中,智能体只能朝上或向左移动,因此只有两个动作可供选择。
```matlab
% 初始化 Q 表
Q = zeros(25,2);
% 定义迷宫
maze = zeros(5,5);
maze(1,1) = 1;
maze(5,5) = 2;
% 定义奖励矩阵
R = -1*ones(5,5);
R(1,1) = 100;
% 定义参数
gamma = 0.8; % 折扣因子
alpha = 0.5; % 学习率
epsilon = 0.1; % 探索率
% 进行训练
for i = 1:10000 % 进行 10000 次迭代
% 选择初始状态
state = 25;
% 开始探索
while state ~= 1
% 以 epsilon 的概率进行探索
if rand < epsilon
% 随机选择一个动作
action = randi([1 2],1);
else
% 选择当前状态下 Q 值最大的动作
[~,action] = max(Q(state,:));
end
% 根据当前状态和选择的动作,计算下一状态和对应的奖励值
if action == 1 % 向上移动
[next_state,~] = find(maze == state-5);
else % 向左移动
[next_state,~] = find(maze == state-1);
end
reward = R(next_state);
% 更新 Q 表
Q(state,action) = Q(state,action) + alpha*(reward + gamma*max(Q(next_state,:)) - Q(state,action));
% 更新状态
state = next_state;
end
end
% 使用 Q 表进行测试
state = 25;
path = [state];
while state ~= 1
[~,action] = max(Q(state,:));
if action == 1 % 向上移动
[next_state,~] = find(maze == state-5);
else % 向左移动
[next_state,~] = find(maze == state-1);
end
state = next_state;
path = [path state];
end
% 绘制迷宫和路径
figure;
imagesc(maze);
colormap(gray);
hold on;
x = mod(path-1,5)+0.5;
y = 5-floor((path-1)/5)+0.5;
plot(x,y,'ro-','LineWidth',2);
```
请注意,这只是一个简单的示例代码,可能需要进行更多的调整和优化,以便在使用不同的迷宫或动作空间时产生更好的结果。
阅读全文