python井字棋游戏大作业实验报告_Part 1.2 - 实现一个井字棋游戏的gym环境

上文已经描述了怎么创建和注册一个自定义的gym环境。但是环境类中的4个函数都是空的,本文将描述怎么实现那4个函数,实现一个完整的井字棋游戏的环境。

游戏规则:两个玩家在3x3的棋盘上,一方执X,一方执O。哪方先下的连续3个子(不管在对角,竖直还是水平方向)为胜。(类似五子棋)。赢得一方将会获得+100的奖励。

完整的环境代码访问GitHub。

其中,step函数已经指定了双方下棋的规则,也就是说这个程序不是依靠某个强化学习算法来下棋,而是靠固定规则。因为本系列文章的目的就是要说明如何自定义环境,而不是应用强化学习算法。

def step(self,target):

if self.done==1:

print('game over')

return [self.state,self.reward,self.done,self.add]

elif self.state[int(target/3)][target%3] != '-':

print('invalid step')

return [self.state,self.reward,self.done,self.add]

else:

if(self.counter%2==0):

self.state[int(target/3)][target%3]='o'

else:

self.state[int(target/3)][target%3]='x'

self.counter+=1

if(self.counter==9):

self.done=1

self.render()

win=self.check()

if(win):

self.done=1

print('Player ', win, 'wins. ', sep='',end='\n')

self.add[win-1]=1

if win==1:

self.reward=100

else:

self.reward=-100

return [self.state,self.reward,self.done,self.add]

环境的代码已经写好了,下面我们安装并且注册环境。

pip install -e .

我们编写下面的代码来测试环境。

import gym

import gym_tictac

env = gym.make('tictac-v0')

for e in range(3):

env.reset()

print("######")

print("EPISODE: ", e)

print("######")

for t in range(9):

env.render()

action = t

state, reward, done, info = env.step(action)

print("reward: ", reward)

print("")

env.close()

如果输出是这样

######

EPISODE: 0

######

- - -

- - -

- - -

o - -

- - -

- - -

reward: 0

o - -

- - -

- - -

o x -

- - -

- - -

reward: 0

o x -

- - -

- - -

o x o

- - -

- - -

reward: 0

o x o

- - -

- - -

o x o

x - -

- - -

reward: 0

o x o

x - -

- - -

o x o

x o -

- - -

reward: 0

o x o

x o -

- - -

o x o

x o x

- - -

reward: 0

o x o

x o x

- - -

o x o

x o x

o - -

Player 1wins.

reward: 100

意味着环境已经正确编写并配置。

这个环境已经足够简单了,action是固定规则,我们只是为了阐述自定义gym环境的配置。

下文会讲述gym环境如何结合PyBullet。

参考

https://www.datamachinist.com/applied-reinforcement-learning/part-8-virtual-environments-for-reinforcement-learning/part-2-implementing-a-simple-gym-environment-tic-tac-toe/

你可能感兴趣的:(python井字棋游戏大作业实验报告_Part 1.2 - 实现一个井字棋游戏的gym环境)