注意事项
网络的输入
__init__函数的self.state决定model(网络)的输入shape,如果self.state的shape是(1,32),那么网络的输入也应该是一样的。
关于策略
step函数根据输入的动作会返回不同的reward,策略不同后面动作出现的次数就会不同,如action 0 对应的 reward=0,action 1 对应的reward=-10,action 2对应的reward=-5,则训练的结果会使得action=0的动作变多。所以不同的动作需要合理的设置reward。
虽然不能显示画面但是能够正常的训练
运行环境:
python 3.7.9
gym 0.19.0
pygame 2.1.2
from rl.memory import SequentialMemory
from rl.policy import BoltzmannQPolicy
from rl.agents.dqn import DQNAgent
from keras.layers import Dense,Flatten
import keras
#from keras.optimizers import Adam
import tensorflow as tf
import numpy as np
import random
import pygame
import gym
class Env(gym.Env):
def __init__(self):
self.action_space = gym.spaces.Discrete(4)
self.observation_space = gym.spaces.MultiDiscrete([39, 27])
self.screen = pygame.display.set_mode((800, 600))
self.PlayerX = 0
self.PlayerY = 0
self.FoodX = 0
self.FoodY = 0
self.state = [self.FoodX - self.PlayerX + 19, self.FoodY - self.PlayerY + 14]
self.