Reputation: 73
I get the error message init() missing 1 required positional argument: 'environment' for the line player_o = QLearningAgent()
. Am not experienced in writing constructors. Please can you explain why I get this message and how I can correct it?
class RandomAgent:
def choose_action(self, env):
action = np.random.choice(np.array(env.available_actions))
return action
class QLearningAgent:
def __init__(self, environment, alpha=0.1, epsilon=0.2, gamma=1):
self.environment = environment
self.alpha = alpha
self.epsilon = epsilon
self.gamma = gamma
self.Q = {}
self.opponent_rewards = []
def choose_q_action()...
def play(env, player_o, player_x, episodes=1):
rewards_per_episode = np.zeros(episodes)
for episode in range(episodes):
env.reset()
# Let random player play first!
x_action_index = player_x.choose_action(env)
reward, game_over = env.act(x_action_index)
while not game_over:
o_action_index = player_o.choose_action(env)
reward, game_over = env.act(o_action_index)
if not game_over:
x_action_index = player_x.choose_action(env)
reward, game_over = env.act(x_action_index)
rewards_per_episode[episode] = reward
return rewards_per_episode
env = connect.Connect(verbose=False)
m = 10
n = 200
k = 30
# Test a random agent at episodes 0, n, 2n, ...., kn for m games.
np.random.seed(3)
rewards = np.zeros(k)
# player_o is the agent to test
# player_x should always be a random agent
player_o = QLearningAgent()
player_x = RandomAgent()
for kx in range(k):
rewards_per_episode = play(env,
player_o=player_o,
player_x=player_x,
episodes=m)
mean_reward = np.mean(rewards_per_episode)
rewards[kx] = mean_reward
line1, = plt.plot(rewards)
plt.legend([line1], ["Random Agent"])
plt.show()
Upvotes: 1
Views: 1406
Reputation: 6740
QLearningAgent
's __init__
method requires an environment
argument which you're not passing.
Upvotes: 3