0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

观察AI如何找到出口 强化游戏体验

ouxn_HW_Digital 来源:华为开发者社区 作者:华为开发者社区 2021-08-24 09:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作为一名快乐的肥宅,玩游戏是居家必备,无论是王者荣耀、吃鸡、原神这些大热游戏,还是跳一跳、合成大西瓜、2048、这些风靡一时得小游戏,咱都有涉及。但是为了成为一个“头号玩家”,我总是疯狂的去个各大社区、网站寻找各种攻略,跟着攻略成长,我时常在想,什么时候俺才能成为一代攻略大神啊,让大家学习我的技术,岂不是很刺激!

灵光一闪,毕竟我是个有点小技术的肥宅,曾经也痴迷过deepmind,跑过AlphaGo,这不得训练一个AI玩一玩。

强化学习训练2048游戏,

观察AI如何找到出口?

既然要练手,那就先从2048这种简单,不考验操作,纯策略的游戏入手吧。在网上搜罗了一番,果然让我找到了开源的2048游戏环境,GitHub地址:

https://github.com/rgal/gym-2048。

下一步就是把这个算法和强化学习结合了。

算法部分很简单,目前我才用的是最传统的DQN,10分钟就可以达到一个还可以的模型效果。如果小伙伴们有想法,可以试试RainBow,PPO,A2C,SAC这类算法,相信会获得更佳的效果。

我开发这个模型,用的是来自华为云的ModelArts(它是一个在线、开箱即用的AI平台,还有免费的GPU算力,每天不限次数使用,不要太爽!),所以代码是在ipynb中跑的。

整体步骤大概可以分为3步:

1.创建游戏环境

2.创建DQN算法

def learn(self, buffer): # 当replaybuffer中存储的数据大于batchsize时,从中随机采样一个batch的数据学习 if buffer.size 》=self.args.batch_size: # 更新target_model的参数 if self.learn_step_counter %args.target_update_freq == 0: self.target_model.load_state_dict(self.behaviour_model.state_dict()) self.learn_step_counter += 1 # 从replaybuffer中随机采样一个五元组(当前观测值,动作,下一个观测值,是否一局结束,奖励值) s1, a, s2, done, r =buffer.get_sample(self.args.batch_size) s1 =torch.FloatTensor(s1).to(device) s2 = torch.FloatTensor(s2).to(device) r = torch.FloatTensor(r).to(device) a = torch.LongTensor(a).to(device) if args.use_nature_dqn: q =self.target_model(s2).detach() else: q = self.behaviour_model(s2) # 每个动作的q值=r+gamma*(1-0或1)*q_max target_q = r +torch.FloatTensor(args.gamma * (1 - done)).to(device) * q.max(1)[0] target_q =target_q.view(args.batch_size, 1) eval_q = self.behaviour_model(s1).gather(1,torch.reshape(a, shape=(a.size()[0], -1))) # 计算损失函数 loss = self.criterion(eval_q,target_q) self.optimizer.zero_grad() loss.backward() self.optimizer.step() def get_action(self, state, explore=True): # 判断是否探索,如果探索,则采用贪婪探索策略决定行为 if explore: if np.random.uniform() 》=args.epsilon: action = randint(0,self.action_dim - 1) else: # Choose the best action accordingto the network. q =self.behaviour_model(torch.FloatTensor(state).to(device)) m, index = torch.max(q, 1) action =index.data.cpu().numpy()[0] else: q = self.behaviour_model(torch.FloatTensor(state).to(device)) m, index = torch.max(q, 1) action =index.data.cpu().numpy()[0] return action classReplayBuffer: def __init__(self, buffer_size, obs_space): self.s1 = np.zeros(obs_space, dtype=np.float32) self.s2 = np.zeros(obs_space,dtype=np.float32) self.a = np.zeros(buffer_size,dtype=np.int32) self.r = np.zeros(buffer_size,dtype=np.float32) self.done = np.zeros(buffer_size,dtype=np.float32) # replaybuffer大小 self.buffer_size = buffer_size self.size = 0 self.pos = 0 # 不断将数据存储入buffer def add_transition(self, s1, action, s2,done, reward): self.s1[self.pos] = s1 self.a[self.pos] = action if not done: self.s2[self.pos] = s2 self.done[self.pos] = done self.r[self.pos] = reward self.pos = (self.pos + 1) %self.buffer_size self.size = min(self.size + 1,self.buffer_size) # 随机采样一个batchsize def get_sample(self, sample_size): i = sample(range(0, self.size), sample_size) return self.s1[i], self.a[i],self.s2[i], self.done[i], self.r[i]

3.创建网络模型

此处我用的就是一个非常简单的三层卷积网络

classNet(nn.Module): #obs是状态空间输入,available_actions_count为动作输出维度 def __init__(self, obs,available_actions_count): super(Net, self).__init__() self.conv1 = nn.Conv2d(obs, 128,kernel_size=2, stride=1) self.conv2 = nn.Conv2d(128, 64,kernel_size=2, stride=1) self.conv3 = nn.Conv2d(64, 16,kernel_size=2, stride=1) self.fc1 = nn.Linear(16,available_actions_count) self.relu = nn.ReLU(inplace=True) def forward(self, x): x = x.permute(0, 3, 1, 2) x = self.relu(self.conv1(x)) x = self.relu(self.conv2(x)) x = self.relu(self.conv3(x)) x = self.fc1(x.view(x.shape[0], -1)) return x

完成以上三步,就可以愉快的开始训练啦:

print(‘

training.。。’)begin_t= time.time()max_reward= 0fori_episode in range(args.epochs): # 每局开始,重置环境 s = env.reset() # 累计奖励值 ep_r = 0 while True: # 计算动作 a = dqn.get_action(np.expand_dims(s,axis=0)) # 执行动作 s_, r, done, info = env.step(a) # 存储信息 memory.add_transition(s, a, s_, done,r) ep_r += r # 学习优化过程 dqn.learn(memory) if done: print(‘Ep: ’, i_episode, ‘| Ep_r: ’, round(ep_r, 2)) if ep_r 》 max_reward: max_reward = ep_r print(“current_max_reward{}”.format(max_reward)) # 保存模型 torch.save(dqn.behaviour_model,“2048.pt”) break s = s_print(“finish!time cost is {}s”.format(time.time() - begin_t))

我只训练了10分钟,在这个不能错步的严格环境下,推理时可以达到256分,如果采用更先进算法,更长的训练时间,2048不是梦。

详细代码获取方式:

通过此链接可直接在线运行,或者下载

https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=3a11d09b-85f5-4ae4-b4a7-9b19be2b444d

这个技术来源是我在去年华为云AI全栈成长计划中接触到的,据说今年华为云又开始了新一轮【AI实战营】,6大分类实战营Python、ModelArts、MindSpore AI框架、深度、强化、机器学习,助我们成为“AI王者”!

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    89

    文章

    38161

    浏览量

    296838
  • 强化学习
    +关注

    关注

    4

    文章

    269

    浏览量

    11905
  • 华为云
    +关注

    关注

    3

    文章

    2805

    浏览量

    19092

原文标题:游戏“外挂”?- AI生成游戏最强攻略

文章出处:【微信号:HW-DigitalHome,微信公众号:华为数字家庭】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自动驾驶中常提的“强化学习”是个啥?

    下,就是一个智能体在环境里行动,它能观察到环境的一些信息,并做出一个动作,然后环境会给出一个反馈(奖励或惩罚),智能体的目标是把长期得到的奖励累积到最大。和监督学习不同,强化学习没有一一对应的“正确答案”给它看,而是靠与环境交互、自我探索来发现
    的头像 发表于 10-23 09:00 331次阅读
    自动驾驶中常提的“<b class='flag-5'>强化</b>学习”是个啥?

    科技云报到:找到真场景,抓住真需求,这样的具身智能才是好AI

    科技云报到:找到真场景,抓住真需求,这样的具身智能才是好AI
    的头像 发表于 10-10 14:49 4100次阅读

    【「AI芯片:科技探索与AGI愿景」阅读体验】+AI的科学应用

    和量子计算的两项新兴的技术,将在生产假说方面发挥重要作用,从而改变科学发现的范式。 生成式AI: 2、穷举搜索 3、分析排错与组合优化 分析排错是生成假说的重要手段。强化学习也在优化假说组合、寻找科学发现
    发表于 09-17 11:45

    AI Coding + TuyaOpen,1小时快速打造AI女友和2048游戏

    七夕快到了,涂鸦本次准备教大家用AI给自己做个虚拟女友,它能根据对话情绪显示不同表情;在你游戏瘾上来的时候,还能秒变2048游戏机,让你一边玩游戏,一边和
    的头像 发表于 08-21 18:53 1222次阅读
    <b class='flag-5'>AI</b> Coding + TuyaOpen,1小时快速打造<b class='flag-5'>AI</b>女友和2048<b class='flag-5'>游戏</b>

    AI开启更逼真的游戏时代

    本文编译自semiengineering神经网络负责图形渲染,AI智能体指导玩法,而‘幻觉’则用于填补缺失的细节,让游戏世界更加完整。随着处理性能和内存的大幅提升,以及数据传输速度的显著加快
    的头像 发表于 08-20 11:22 996次阅读
    <b class='flag-5'>AI</b>开启更逼真的<b class='flag-5'>游戏</b>时代

    大家都在用什么AI软件?有没有好用的免费的AI软件推荐一下?

    大家都在用什么AI软件?有没有好用的免费的AI软件推荐一下?直接发个安装包,谢谢。比如deepseek、Chatgpt、豆包、阿里AI、百度AI、腾讯
    发表于 07-09 18:30

    技嘉正式推出 RTX™ 5060 Ti 和 5060 显卡,先进散热方案提升游戏AI 体验

    ™ 5060 系列显卡,并将于 4 月 16 日起陆续上市。此系列产品专为主流游戏玩家、创作者与 AI 入门使用者设计,通过升级版 WINDFORCE 散热系统,在性能与散热效率间达到绝衡,带来更流畅
    的头像 发表于 04-16 10:07 741次阅读

    韩国半导体对华出口暴跌 信息通信产业出口额减少31.8%

    据外媒《朝鲜日报》报道称,在2025年2月份韩国信息通信产业出口额创下了历年同月第二高的好成绩;出口额达到167.1亿美元,同比增长了1.2%。但是对我国的出口减少31.8%。 而韩国对越南
    的头像 发表于 03-18 15:26 957次阅读

    AI Agent 应用与项目实战》----- 学习如何开发视频应用

    上传与视频生成相关的知识库文档,以便AI助手能够基于这些知识进行回答和生成视频。 在AI助手的配置中,找到与视频生成相关的功能模块。 根据需要选择或上传视频生成模型,这些模型可以是语聚AI
    发表于 03-05 19:52

    联发科技携手Cocos共建端侧生成式AI游戏开发生态,推动行业升级

    全球领先的半导体公司联发科技与知名游戏引擎开发商Cocos正式宣布达成深度合作!这一合作将把联发科技在端侧生成式AI领域的尖端技术,与Cocos在游戏开发领域的深厚积累深度结合,为开发者带来更便
    的头像 发表于 01-10 09:24 718次阅读

    拜登拟在卸任前加强AI芯片出口管制

    拜登政府计划在离任之际宣布对中国实施最广泛的人工智能(AI)芯片出口管制,引发美国科技行业的广泛批评。代表美国科技行业的贸易协会——美国信息技术产业理事会(ITI)7日敦促拜登政府不要在卸任前最后
    的头像 发表于 01-09 17:27 596次阅读

    韩国半导体出口动态:2024年对华出口下滑,对台越出口增长

    近日,最新发布的产业数据揭示了韩国半导体出口在2024年的新趋势。据韩国产业通商资源部于1月5日公布的官方数据显示,尽管整体半导体出口额实现了显著增长,但出口市场的分布却发生了显著变化。 数据显示
    的头像 发表于 01-07 14:32 1133次阅读

    巨人网络发布“千影”大模型,加速“游戏+AI”布局

    近日,巨人网络在2024年度中国游戏产业年会上,正式推出了名为“千影 QianYing”的有声游戏生成大模型。这一创新举措标志着巨人网络在“游戏+AI”赛道上的又一重要布局。 “千影
    的头像 发表于 12-16 09:45 1948次阅读

    行业首个芯片级游戏技术,OPPO「风驰游戏内核」正式亮相一加游戏大会

    12月12日,一加游戏大会在中国深圳正式举行。OPPO首席产品官刘作虎宣布,继影像与AI后,游戏体验将成为OPPO性能赛道的战略级方向,OPPO将着力打造行业第一的游戏体验。同时,OP
    的头像 发表于 12-13 10:20 955次阅读
    行业首个芯片级<b class='flag-5'>游戏</b>技术,OPPO「风驰<b class='flag-5'>游戏</b>内核」正式亮相一加<b class='flag-5'>游戏</b>大会