強化學習例項

2021-08-16 09:13:28 字數 3157 閱讀 3692

機器學習演算法完整版見fenghaootong-github

匯入模組

# -*- coding: utf-8 -*-

import numpy as np

import pandas as pd

import time

設定引數

#產生偽隨機數列

np.random.seed(2)

n_states = 6

actions = ['left', 'right']

epsilon = 0.9

alpha = 0.1

lambda = 0.9

max_episodes = 13

fresh_time = 0.3 #走一步的時間

構建乙個table

def

build_q_tabel

(n_states, actions):

table = pd.dataframe(np.zeros((n_states, len(actions))), columns = actions)

return table

build_q_tabel(n_states, actions)

left

right

00.0

0.01

0.00.0

20.0

0.03

0.00.0

40.0

0.05

0.00.0

選擇行動

def

choose_action

(state, q_table):

state_actions = q_table.iloc[state, :]

if (np.random.uniform() > epsilon) or (state_actions.all() == 0):

action_name = np.random.choice(actions)

else:

action_name = state_actions.argmax()

return action_name

環境搭建

def

get_env_feedback

(s, a):

if a == 'right':

if s == n_states - 2:

s_ = 'terminal'

r = 1

else:

s_ = s + 1

r = 0

else:

r = 0

if s == 0:

s_ = s

else:

s_ = s - 1

return s_, r

更新環境

def

update_env

(s, episode, step_counter):

env_list = ['-']*(n_states-1) + ['t']

if s == 'terminal':

interaction = 'episode %s: total_steps = %s' % (episode+1, step_counter)

print('\r{}'.format(interaction), end='')

time.sleep(2)

print('\r ',end='')

else:

env_list[s] = 'o'

interaction = ''.join(env_list)

print('\r{}'.format(interaction), end='')

time.sleep(fresh_time)

rl過程

def

rl():

q_table = build_q_tabel(n_states, actions)

for episode in range(max_episodes):

step_counter = 0

s = 0

is_terminated = false

update_env(s, episode, step_counter)

while

not is_terminated:

a = choose_action(s, q_table)

s_, r = get_env_feedback(s, a)

q_predict = q_table.loc[s, a]

if s_ != 'terminal':

q_target = r + lambda * q_table.iloc[s_, :].max()

else:

q_target = r

is_terminated = true

q_table.loc[s, a] += alpha * (q_target - q_predict)

s = s_

update_env(s, episode, step_counter+1)

step_counter += 1

return q_table

測試

rl()

left

right

00.000002

0.005031

10.000001

0.027061

20.000007

0.111953

30.000204

0.343331

40.000810

0.745813

50.000000

0.000000

**來自莫煩python

強化學習 強化學習基礎

為了應對車載網路中通訊環境快速變化的難題,可以使用強化學習進行解決,這裡對強化學習的基礎進行整理。主要的應用場景為車載網路中資源分配問題。本文源自莫煩python 強化學習章節,有需要請查閱原文 20200413補充了一些內容,來自這篇部落格,是李巨集毅的深度強化學習的筆記。強化學習的主要構成有 a...

強化學習 1 1 0 強化學習介紹

abstract 本文介紹reinforcement learning的具體特點和與其他機器學習演算法不同之處,本文是乙個骨架性的文章,所有專有名詞都保持英文原始單詞,具體內容會在後續中給出詳細解答。keywords reinforcement learning,situation,action,e...

強化學習系列1 強化學習簡介

2015年10月,alphago在和歐洲冠軍進行的圍棋賽上獲得了5 0的完勝,其後的深度強化學習也隨之火了起來。從本期開始開個新坑,一步步把強化學習的內容捋一遍。強化學習 reinforcement learning 是用來解決連續決策問題的一種方法。針對的模型是馬爾科夫決策過程 markov de...