Я пытаюсь изменить среду FrozenLake для применения в моем простом проекте управления доходами, который направлен на оптимизацию. В моем проекте 300 состояний (количество не проданных мест) и 15 акций (разброс цен на места).
Я пытался самостоятельно. префикс для некоторых мест в коде.
import gym
import numpy as np
import time, pickle, os
env = gym.make('FrozenLake-v0')
env.observation_space.n=300
env.action_space.n=15
epsilon = 0.9
total_episodes = 1000
max_steps = 50
lr_rate = 0.81
gamma = 0.96
Q = np.zeros((env.observation_space.n, env.action_space.n))
print(Q)
def choose_action(state):
action=0
if np.random.uniform(0, 1) < epsilon:
action = env.action_space.sample()
else:
action = np.argmax(Q[state, :])
return action
def learn(state, state2, reward, action, action2):
predict = Q[state, action]
target = reward + gamma * Q[state2, action2]
Q[state, action] = Q[state, action] + lr_rate * (target - predict)
# Start
rewards=0
for episode in range(total_episodes):
t = 0
state = env.reset()
action = choose_action(state)
while t < max_steps:
state2, reward, done, info = env.step(action)
action2 = choose_action(state2)
learn(state, state2, reward, action, action2)
print("these are env.render(state) and env.render(state2)")
env.render(state)
env.render(state2)
state = state2
action = action2
t += 1
rewards+=1
print("Q table for episode",episode,"and time",t,"is:")
print(Q)
if done:
break
# epsilon = min_epsilon + (max_epsilon - min_epsilon) * np.exp(-decay_rate * episode)
# os.system('clear')
time.sleep(0.1)
print ("Score over time: ", rewards/total_episodes)
print(Q)
Это дает:
KeyError Traceback (most recent call last)
<ipython-input-5-4d1e8742ec38> in <module>()
55 while t < max_steps:
56
---> 57 state2, reward, done, info = env.step(action)
58
59
Я ожидаю получить таблицу Q, которая отличается от полных нулей.