最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

機(jī)器人Q-Learning算法避障尋找目標(biāo)點(diǎn)源碼

2023-08-15 23:53 作者:中電新青年-探索號(hào)  | 我要投稿

機(jī)器人Q-Learning算法避障尋找目標(biāo)點(diǎn)源碼

尋找目標(biāo)地圖(紅色方塊:機(jī)器人,黑色方塊:障礙物,黃色區(qū)域:目標(biāo)點(diǎn),網(wǎng)格地圖)

#地圖文件代碼

maze_env.py

"""
Reinforcement learning maze example.
Red rectangle: ? ? ? ? ?explorer.
Black rectangles: ? ? ? hells ? ? ? [reward = -1].
Yellow bin circle: ? ? ?paradise ? ?[reward = +1].
All other states: ? ? ? ground ? ? ?[reward = 0].

"""

import numpy as np
import time
import sys
if sys.version_info.major == 2:
? ?import Tkinter as tk
else:
? ?import tkinter as tk

UNIT = 40 ? # pixels
MAZE_H = 4 ?# grid height
MAZE_W = 4 ?# grid width


class Maze(tk.Tk, object):
? ?def __init__(self):
? ? ? ?super(Maze, self).__init__()
? ? ? ?self.action_space = ['u', 'd', 'l', 'r']
? ? ? ?self.n_actions = len(self.action_space)
? ? ? ?self.title('maze')
? ? ? ?self.geometry('{0}x{1}'.format(MAZE_H * UNIT, MAZE_H * UNIT))
? ? ? ?self._build_maze()

? ?def _build_maze(self):
? ? ? ?self.canvas = tk.Canvas(self, bg='white',
? ? ? ? ? ? ? ? ? ? ? ? ? height=MAZE_H * UNIT,
? ? ? ? ? ? ? ? ? ? ? ? ? width=MAZE_W * UNIT)

? ? ? ?# create grids
? ? ? ?for c in range(0, MAZE_W * UNIT, UNIT):
? ? ? ? ? ?x0, y0, x1, y1 = c, 0, c, MAZE_H * UNIT
? ? ? ? ? ?self.canvas.create_line(x0, y0, x1, y1)
? ? ? ?for r in range(0, MAZE_H * UNIT, UNIT):
? ? ? ? ? ?x0, y0, x1, y1 = 0, r, MAZE_H * UNIT, r
? ? ? ? ? ?self.canvas.create_line(x0, y0, x1, y1)

? ? ? ?# create origin
? ? ? ?origin = np.array([20, 20])

? ? ? ?# hell
? ? ? ?hell1_center = origin + np.array([UNIT * 2, UNIT])
? ? ? ?self.hell1 = self.canvas.create_rectangle(
? ? ? ? ? ?hell1_center[0] - 15, hell1_center[1] - 15,
? ? ? ? ? ?hell1_center[0] + 15, hell1_center[1] + 15,
? ? ? ? ? ?fill='black')
? ? ? ?# hell
? ? ? ?hell2_center = origin + np.array([UNIT, UNIT * 2])
? ? ? ?self.hell2 = self.canvas.create_rectangle(
? ? ? ? ? ?hell2_center[0] - 15, hell2_center[1] - 15,
? ? ? ? ? ?hell2_center[0] + 15, hell2_center[1] + 15,
? ? ? ? ? ?fill='black')

? ? ? ?# create oval
? ? ? ?oval_center = origin + UNIT * 2
? ? ? ?self.oval = self.canvas.create_oval(
? ? ? ? ? ?oval_center[0] - 15, oval_center[1] - 15,
? ? ? ? ? ?oval_center[0] + 15, oval_center[1] + 15,
? ? ? ? ? ?fill='yellow')

? ? ? ?# create red rect
? ? ? ?self.rect = self.canvas.create_rectangle(
? ? ? ? ? ?origin[0] - 15, origin[1] - 15,
? ? ? ? ? ?origin[0] + 15, origin[1] + 15,
? ? ? ? ? ?fill='red')

? ? ? ?# pack all
? ? ? ?self.canvas.pack()

? ?def reset(self):
? ? ? ?self.update()
? ? ? ?time.sleep(0.5)
? ? ? ?self.canvas.delete(self.rect)
? ? ? ?origin = np.array([20, 20])
? ? ? ?self.rect = self.canvas.create_rectangle(
? ? ? ? ? ?origin[0] - 15, origin[1] - 15,
? ? ? ? ? ?origin[0] + 15, origin[1] + 15,
? ? ? ? ? ?fill='red')
? ? ? ?# return observation
? ? ? ?return self.canvas.coords(self.rect)

? ?def step(self, action):
? ? ? ?s = self.canvas.coords(self.rect)
? ? ? ?base_action = np.array([0, 0])
? ? ? ?if action == 0: ? # up
? ? ? ? ? ?if s[1] > UNIT:
? ? ? ? ? ? ? ?base_action[1] -= UNIT
? ? ? ?elif action == 1: ? # down
? ? ? ? ? ?if s[1] < (MAZE_H - 1) * UNIT:
? ? ? ? ? ? ? ?base_action[1] += UNIT
? ? ? ?elif action == 2: ? # right
? ? ? ? ? ?if s[0] < (MAZE_W - 1) * UNIT:
? ? ? ? ? ? ? ?base_action[0] += UNIT
? ? ? ?elif action == 3: ? # left
? ? ? ? ? ?if s[0] > UNIT:
? ? ? ? ? ? ? ?base_action[0] -= UNIT

? ? ? ?self.canvas.move(self.rect, base_action[0], base_action[1]) ?# move agent

? ? ? ?s_ = self.canvas.coords(self.rect) ?# next state

? ? ? ?# reward function
? ? ? ?if s_ == self.canvas.coords(self.oval):
? ? ? ? ? ?reward = 1
? ? ? ? ? ?done = True
? ? ? ? ? ?s_ = 'terminal'
? ? ? ?elif s_ in [self.canvas.coords(self.hell1), self.canvas.coords(self.hell2)]:
? ? ? ? ? ?reward = -1
? ? ? ? ? ?done = True
? ? ? ? ? ?s_ = 'terminal'
? ? ? ?else:
? ? ? ? ? ?reward = 0
? ? ? ? ? ?done = False

? ? ? ?return s_, reward, done
? ?def render(self):
? ? ? ?time.sleep(0.1)
? ? ? ?self.update()
def update():
? ?for t in range(10):
? ? ? ?s = env.reset()
? ? ? ?while True:
? ? ? ? ? ?env.render()
? ? ? ? ? ?a = 1
? ? ? ? ? ?s, r, done = env.step(a)
? ? ? ? ? ?if done:
? ? ? ? ? ? ? ?break

if __name__ == '__main__':
? ?env = Maze()
? ?env.after(100, update)
? ?env.mainloop()

#Q learning 訓(xùn)練算法代碼

RL_brain.py

"""
This part of code is the Q learning brain, which is a brain of the agent.
All decisions are made in here.

"""
import numpy as np
import pandas as pd


class QLearningTable:
? ?def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):
? ? ? ?self.actions = actions ?# a list
? ? ? ?self.lr = learning_rate
? ? ? ?self.gamma = reward_decay
? ? ? ?self.epsilon = e_greedy
? ? ? ?self.q_table = pd.DataFrame(columns=self.actions, dtype=np.float64)

? ?def choose_action(self, observation):
? ? ? ?self.check_state_exist(observation)
? ? ? ?# action selection
? ? ? ?if np.random.uniform() < self.epsilon:
? ? ? ? ? ?# choose best action
? ? ? ? ? ?state_action = self.q_table.loc[observation, :]
? ? ? ? ? ?state_action = state_action.reindex(np.random.permutation(state_action.index)) ? ? # some actions have same value
? ? ? ? ? ?action = state_action.idxmax()
? ? ? ?else:
? ? ? ? ? ?# choose random action
? ? ? ? ? ?action = np.random.choice(self.actions)
? ? ? ?return action

? ?def learn(self, s, a, r, s_):
? ? ? ?self.check_state_exist(s_)
? ? ? ?q_predict = self.q_table.loc[s, a]
? ? ? ?if s_ != 'terminal':
? ? ? ? ? ?q_target = r + self.gamma * self.q_table.loc[s_, :].max() ?# next state is not terminal
? ? ? ?else:
? ? ? ? ? ?q_target = r ?# next state is terminal
? ? ? ?self.q_table.loc[s, a] += self.lr * (q_target - q_predict) ?# update

? ?def check_state_exist(self, state):
? ? ? ?if state not in self.q_table.index:
? ? ? ? ? ?# append new state to q table
? ? ? ? ? ?self.q_table = self.q_table.append(
? ? ? ? ? ? ? ?pd.Series(
? ? ? ? ? ? ? ? ? ?[0]*len(self.actions),
? ? ? ? ? ? ? ? ? ?index=self.q_table.columns,
? ? ? ? ? ? ? ? ? ?name=state,
? ? ? ? ? ? ? ?)
? ? ? ? ? ?)

#運(yùn)行主函數(shù)

run.py

"""
Reinforcement learning maze example.

Red rectangle: ? ? ? ? ?explorer.
Black rectangles: ? ? ? hells ? ? ? [reward = -1].
Yellow bin circle: ? ? ?paradise ? ?[reward = +1].
All other states: ? ? ? ground ? ? ?[reward = 0].

"""

from maze_env import Maze
from RL_brain import QLearningTable


def update():
? ?for episode in range(100):
? ? ? ?# initial observation
? ? ? ?observation = env.reset()

? ? ? ?while True:
? ? ? ? ? ?# fresh env
? ? ? ? ? ?env.render()

? ? ? ? ? ?# RL choose action based on observation
? ? ? ? ? ?action = RL.choose_action(str(observation))

? ? ? ? ? ?# RL take action and get next observation and reward
? ? ? ? ? ?observation_, reward, done = env.step(action)

? ? ? ? ? ?# RL learn from this transition
? ? ? ? ? ?RL.learn(str(observation), action, reward, str(observation_))

? ? ? ? ? ?# swap observation
? ? ? ? ? ?observation = observation_

? ? ? ? ? ?# break while loop when end of this episode
? ? ? ? ? ?if done:
? ? ? ? ? ? ? ?break

? ?# end of game
? ?print('game over')
? ?env.destroy()

if __name__ == "__main__":
? ?env = Maze()
? ?RL = QLearningTable(actions=list(range(env.n_actions)))

? ?env.after(100, update)
? ?env.mainloop()

機(jī)器人Q-Learning算法避障尋找目標(biāo)點(diǎn)源碼的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
尉犁县| 封开县| 呼伦贝尔市| 武夷山市| 东兴市| 县级市| 滕州市| 永昌县| 修水县| 大宁县| 城固县| 永济市| 东乌珠穆沁旗| 龙南县| 贵溪市| 耒阳市| 乡宁县| 叶城县| 易门县| 乐平市| 句容市| 哈尔滨市| 日照市| 大冶市| 中方县| 靖江市| 波密县| 天门市| 沈阳市| 如东县| 高密市| 商水县| 甘泉县| 五家渠市| 石河子市| 得荣县| 磴口县| 辉南县| 稻城县| 乌苏市| 凤阳县|