强化学习实例5:构建简单蛇棋环境

蛇棋游戏

import numpy as np
import gym
from gym.spaces import Discrete

class SnakeEnv(gym.Env):
    SIZE=100  # 格子数
    def __init__(self, ladder_num, dices):
        self.dices = dices            # 不同骰子方法的最大值
        self.ladder_num = ladder_num  # 梯子数
        # 构建梯子
        self.ladders = dict(np.random.randint(1, self.SIZE, size=(self.ladder_num, 2)))
        temp = dict()
        for k,v in self.ladders.items():
            temp[v] = k
        self.ladders.update(temp)
        self.pos = 1
        self.observation_space=Discrete(self.SIZE+1)  # 状态空间
        self.action_space=Discrete(len(dices))        # 行为

    def reset(self):
        self.pos = 1
        return self.pos

    def step(self, a):
        step = np.random.randint(1, self.dices[a] + 1)  # a为选择的骰子编号,然后随机
        self.pos += step
        if self.pos == SIZE:
            return SIZE, SIZE, 1, {}
        elif self.pos > SIZE:
            self.pos = SIZE*2 - self.pos

        if self.pos in self.ladders:  # 是否有梯子
            self.pos = self.ladders[self.pos]
        return self.pos, -1, 0, {}

    def reward(self, s):
        if s == SIZE:  # 到达终点
            return SIZE
        else:
            return -1

    def render(self):
        pass

测试

env = SnakeEnv(10, [3,6])
env.reset()
while True:
    state, reward, terminate, _ = env.step(0)
    print(reward, state)
    if terminate == 1:
        break

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值