q-learning 路由 matlab代码
时间: 2023-08-27 13:05:02 浏览: 54
下面是一个简单的 Q-learning 路由的 Matlab 代码示例:
```matlab
% 初始化
num_states = 5; % 状态数量
num_actions = 3; % 动作数量
Q = zeros(num_states, num_actions); % Q表
gamma = 0.9; % 衰减因子
alpha = 0.1; % 学习率
num_episodes = 1000; % 模拟次数
% 开始模拟
for episode = 1:num_episodes
state = randi(num_states); % 随机初始状态
done = false;
while ~done
% 选择动作
[~, action] = max(Q(state,:));
if rand < 0.1 % epsilon-greedy 探索
action = randi(num_actions);
end
% 执行动作并更新 Q 表
next_state = randi(num_states);
reward = -1; % 每步的负收益
Q(state, action) = Q(state, action) + alpha * (reward + gamma * max(Q(next_state,:)) - Q(state, action));
% 更新状态
state = next_state;
if state == num_states % 终止状态
done = true;
end
end
end
% 打印学到的 Q 表
disp(Q);
```
这个示例代码是一个简单的 Q-learning 算法,用于学习一个具有 5 个状态和 3 个动作的路由问题。在每个模拟中,首先随机选择一个初始状态,然后根据当前状态和 Q 表选择一个动作。使用 epsilon-greedy 策略进行探索,以便在一定程度上进行随机选择。然后,执行该动作并更新 Q 表。在每步中,都会获得一个负收益,以鼓励算法尽快找到终止状态。模拟循环直到达到终止状态或达到一定数量的步数。最后,打印学到的 Q 表。