ບັນລຸເປົ້າໝາຍໄດ້ດີ ແລະ ໄວຂຶ້ນ
SARSA(λ), Q(λ), Dyna-Q: ໃຊ້ຂໍ້ມູນໃຫ້ຄຸ້ມຂຶ້ນ.
ບົດນີ້ເຮັດໃຫ້ agent ໃຊ້ຂໍ້ມູນໄດ້ຄຸ້ມຄ່າຂຶ້ນ (sample efficient) ດ້ວຍ 2 ທາງ: ສົ່ງ credit ໄວຂຶ້ນ ແລະ ຮຽນ model ແລ້ວວາງແຜນ.
ໃນໂຄດ Dyna-Q: ຫຼັງຈາກພົບເປົ້າໝາຍຄັ້ງທຳອິດ ການວາງແຜນ 20 ຮອບຕໍ່ກ້າວຊ່ວຍສົ່ງລາງວັນກັບຄືນໄວຫຼາຍ. ພຽງເກມຖັດມາ agent ກໍຍ່າງເສັ້ນທາງສັ້ນທີ່ສຸດ (6 ກ້າວ) ໄດ້ແລ້ວ.
ສົ່ງ credit ໄວຂຶ້ນ: SARSA(λ), Q(λ)ໃຊ້ eligibility traces ສົ່ງລາງວັນກັບໄປຫາຫຼາຍ state ທີ່ຜ່ານມາພ້ອມກັນ. λ=1 ໃຫ້ credit ທຸກ state ໃນເກມ
ຮຽນ model ແລ້ວວາງແຜນ: Dyna-Qຈື່ວ່າ "ເຮັດ a ໃນ s ແລ້ວໄປ s' ໄດ້ r" ແລ້ວໃຊ້ model ນີ້ອັບເດດ Q ເພີ່ມ ໂດຍບໍ່ຕ້ອງຫຼິ້ນຈິງ
Trajectory sampling ຄ້າຍກັບ Dyna-Q ແຕ່ຈິນຕະນາການເປັນເສັ້ນທາງຕໍ່ເນື່ອງຈາກ state ປັດຈຸບັນ. ວິທີແບບ model-based ເໝາະກັບງານທີ່ເກັບຂໍ້ມູນແພງ ເຊັ່ນ ຫຸ່ນຍົນຈິງ.
ສິ່ງທີ່ຄວນຈື່
- Effective = ແກ້ບັນຫາໄດ້, Efficient = ໃຊ້ຂໍ້ມູນໜ້ອຍ
- ບົດຕໍ່ໄປເພີ່ມ "ສຸ່ມ": state ຫຼາຍຈົນເຫັນບໍ່ຄົບ
import numpy as np
import gymnasium as gym
env = gym.make("FrozenLake-v1", is_slippery=False)
n_s, n_a = env.observation_space.n, env.action_space.n
Q = np.zeros((n_s, n_a))
model = {} # (s, a) -> (r, s2, term) ໂມເດວທີ່ຮຽນຈາກປະສົບການ
rng = np.random.default_rng(0)
gamma, alpha, eps, n_planning = 0.95, 0.5, 0.1, 20
def update(s, a, r, s2, term):
target = r + gamma * Q[s2].max() * (not term)
Q[s, a] += alpha * (target - Q[s, a])
for ep in range(30):
s, _ = env.reset(seed=ep)
done, steps = False, 0
while not done:
if rng.random() < eps or Q[s].max() == Q[s].min():
a = rng.integers(n_a)
else:
a = int(np.argmax(Q[s]))
s2, r, term, trunc, _ = env.step(a)
update(s, a, r, s2, term) # 1) ຮຽນຈາກປະສົບການຈິງ
model[(s, a)] = (r, s2, term) # 2) ບັນທຶກລົງໂມເດວ
keys = list(model)
for _ in range(n_planning): # 3) "ຈິນຕະນາການ" ຈາກໂມເດວ
ps, pa = keys[rng.integers(len(keys))]
update(ps, pa, *model[(ps, pa)])
s, done, steps = s2, term or trunc, steps + 1
if r == 1:
print(f"ເກມທີ {ep:2d}: ໄປຮອດເປົ້າໝາຍໃນ {steps} ກ້າວ")
ຜົນລັບ
ເກມທີ 20: ໄປຮອດເປົ້າໝາຍໃນ 43 ກ້າວ ເກມທີ 21: ໄປຮອດເປົ້າໝາຍໃນ 7 ກ້າວ ເກມທີ 22: ໄປຮອດເປົ້າໝາຍໃນ 6 ກ້າວ ເກມທີ 23: ໄປຮອດເປົ້າໝາຍໃນ 6 ກ້າວ ເກມທີ 24: ໄປຮອດເປົ້າໝາຍໃນ 6 ກ້າວ ເກມທີ 25: ໄປຮອດເປົ້າໝາຍໃນ 6 ກ້າວ ເກມທີ 26: ໄປຮອດເປົ້າໝາຍໃນ 7 ກ້າວ ເກມທີ 28: ໄປຮອດເປົ້າໝາຍໃນ 6 ກ້າວ ເກມທີ 29: ໄປຮອດເປົ້າໝາຍໃນ 6 ກ້າວ
- #DeepRL
- #ReinforcementLearning
- #PythonສຳລັບຄົນLaos
- #AI
- #ບອກຕໍ່ຄວາມຮູ້