Tic-Tac-Toe:井字游戏(井字棋)


本文介绍了井字游戏变种方案,可通过设置xsize、ysize指定棋盘大小,winnum指定连珠数。用两个深度学习模型分别扮演玩家和电脑自动对弈,借QLearning记录每步,依胜负判定方案好坏。代码展示了模型训练等过程,包括迭代、下棋、胜负判定及模型更新等。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

tic-tac-toe:井字游戏(井字棋) -

Tic-Tac-Toe:井字游戏(井字棋)

是一种在3x3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X)。由最先在任意一条直线上成功连接三个标记的一方获胜。

Tic-Tac-Toe:井字游戏(井字棋) -    

方案介绍

该方案为井字游戏的变种,可以通过设置xsize、ysize来指定棋盘大小,通过设置winnum来指定连珠数,每局结束的判定在VictoryRule.py文件中写明,QLearning.py文件是Q表格,用于记录电脑和玩家的每一步。

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 123 查看详情 简小派

方案设置了两个深度学习模型扮演玩家和电脑,双方自动下棋,根据最后获胜方来判别方案的好坏

代码实现

In [1]
import numpy as npimport paddlefrom Model import Modelfrom VictoryRule import Rulefrom QLearning import QLearningfrom visualdl import LogWriter
log_writer = LogWriter(logdir="./log")


Max_Epoch = 200           #最大迭代次数xsize = 3                 #多少行ysize = 3                 #多少列winnum = 3                #连珠数,多少个连珠则获胜learning_rate = 1e-3      #学习率decay_rate = 0.6          #每步衰减率player=1                  #玩家是数字,非0,非负computer=2                #电脑的数字,非0,非负remain = []               #地图中剩余可下棋子位置rule = Rule(xsize,ysize,winnum) #规则Qchart = QLearning(xsize * ysize,decay_rate)#Q表格player_model = Model(xsize * ysize,xsize * ysize)
player_model.train()
computer_model = Model(xsize * ysize,xsize * ysize)
computer_model.train()
player_optimizer = paddle.optimizer.SGD(parameters=player_model.parameters(),
                                  learning_rate=learning_rate)
computer_optimizer = paddle.optimizer.SGD(parameters=computer_model.parameters(),
                                  learning_rate=learning_rate)def restart():
    "重启环境"
    Qchart.clear()
    remain.clear()
    rule.map = np.zeros(xsize * ysize,dtype=int)    for i in range(xsize * ysize):
        remain.append(i)def modelupdate(player_loss,computer_loss):
    "模型更新"
    log_writer.add_scalar(tag="player/loss", step=epoch, value=player_loss.numpy())
    log_writer.add_scalar(tag="computer/loss", step=epoch, value=computer_loss.numpy())    # 梯度更新
    player_loss.backward()
    computer_loss.backward()
    player_optimizer.step()
    player_optimizer.clear_grad()
    computer_optimizer.step()
    computer_optimizer.clear_grad()
    paddle.s*e(player_model.state_dict(),'player_model')
    paddle.s*e(computer_model.state_dict(),'computer_model')    

for i in range(xsize * ysize):
    remain.append(i)for epoch in range(Max_Epoch):    while True:
        player_predict = player_model(paddle.to_tensor(rule.map, dtype='float32',stop_gradient=False))#玩家方预测
        for pred in np.argsort(-player_predict.numpy()):            if pred in remain:
                remain.remove(pred)                break
        rule.map[pred] = player
        Qchart.update(pred,'player')        print('player down at {}'.format(pred))
        overcode=rule.checkover(pred,player)        if overcode == player:            "获胜方为玩家"
            player_loss = paddle.nn.functional.mse_loss(player_predict, paddle.to_tensor(Qchart.playerstep, dtype='float32', stop_gradient=False))
            computer_loss = paddle.nn.functional.mse_loss(computer_predict, paddle.to_tensor(-1 * Qchart.computerstep, dtype='float32', stop_gradient=False))#损失计算中,失败方的label为每步的负数
            print("Player Victory!")            print(rule.map.reshape(xsize,ysize))            #print("epoch:{}\tplayer loss:{}\tcomputer loss:{}".format(epoch,player_loss.numpy()[0],computer_loss.numpy()[0]))
            modelupdate(player_loss,computer_loss)
            restart()            break
        elif overcode == 0:
            player_loss = paddle.nn.functional.mse_loss(player_predict, paddle.to_tensor(Qchart.playerstep, dtype='float32', stop_gradient=False))
            computer_loss = paddle.nn.functional.mse_loss(computer_predict, paddle.to_tensor(Qchart.computerstep, dtype='float32', stop_gradient=False))            print("Draw!")            print(rule.map.reshape(xsize,ysize))            #print("epoch:{}\tplayer loss:{}\tcomputer loss:{}".format(epoch,player_loss.numpy()[0],computer_loss.numpy()[0]))
            modelupdate(player_loss,computer_loss)
            restart()            break
        computer_predict = computer_model(paddle.to_tensor(rule.map, dtype='float32',stop_gradient=False))#电脑方预测
        for pred in np.argsort(-computer_predict.numpy()):            if pred in remain:
                remain.remove(pred)                break
        rule.map[pred] = computer
        Qchart.update(pred,'computer')        print('computer down at {}'.format(pred))
        overcode=rule.checkover(pred, computer)        if overcode == computer:
            player_loss = paddle.nn.functional.mse_loss(player_predict, paddle.to_tensor(-1 * Qchart.playerstep, dtype='float32', stop_gradient=False))
            computer_loss = paddle.nn.functional.mse_loss(computer_predict, paddle.to_tensor(Qchart.computerstep, dtype='float32', stop_gradient=False))            print("Computer Victory!")            print(rule.map.reshape(xsize,ysize))            #print("epoch:{}\tplayer loss:{}\tcomputer loss:{}".format(epoch,player_loss.numpy()[0],computer_loss.numpy()[0]))
            modelupdate(player_loss,computer_loss)
            restart()            break
        elif overcode == 0:
            player_loss = paddle.nn.functional.mse_loss(player_predict, paddle.to_tensor(Qchart.playerstep, dtype='float32', stop_gradient=False))
            computer_loss = paddle.nn.functional.mse_loss(computer_predict, paddle.to_tensor(Qchart.computerstep, dtype='float32', stop_gradient=False))            print("Draw!")            print(rule.map.reshape(xsize,ysize))            #print("epoch:{}\tplayer loss:{}\tcomputer loss:{}".format(epoch,player_loss.numpy()[0],computer_loss.numpy()[0]))
            modelupdate(player_loss,computer_loss)
            restart()            break
   

输出格式

player down at 7computer down at 3player down at 1computer down at 8player down at 6computer down at 2player down at 0computer down at 5Computer Victory!
[[1 1 2]
 [2 0 2]
 [1 1 2]]
   

以上就是Tic-Tac-Toe:井字游戏(井字棋)的详细内容,更多请关注其它相关文章!


# 迭代  # seo排名点击 sit  # 吉林百度网站关键词排名  # seo挖掘技巧  # 黄岩seo公司如何调整  # pc关键词排名软件  # 鄂州推广网站建设哪家好  # seo黑帽手段的技术  # seo杜文博  # 芙蓉区新闻营销推广中心  # SEO工作轻松  # 是一种  # 小鹏  # 电脑  # 稳居  # 大揭秘  # 中国  # 四分  # 新能源  # 欧洲  # 中文网  # type  # writer  # red  # ai  # 工具 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 官宣!爱康AI未来之夜三大亮点提前剧透!  中国最强AI研究院的大模型为何迟到了  商业智能决策技术助力降本增效,世界人工智能大会举办商业AI高峰论坛  机构研选 | 虚拟电厂是电力物联网升级版 智能电网望迎来高速发展  人脸识别+全景双摄+AI算法 萤石推动智能锁行业革新  人工智能领域,突破难题:国产大模型“无源之水”问题得到解决。  2025 世界人工智能大会闭幕,32 个重大产业签约总额达 288 亿元  “上海市民营企业人工智能赋能创新中心”揭牌成立  搭载星火认知大模型 讯飞听见智慧屏开启AI办公新体验  朝鲜出现国产大型察打一体无人机,实力世界第二,太意外了  英伟达H100霸榜权威AI性能测试 11分钟搞定基于GPT-3的大模型训练  联想创投携手12家被投企业MWC展示元宇宙、机器人等技术  彬州市第三届青少年机器人创新大赛成功举办  网易数帆以AI融合创新引领数据分析与软件开发新趋势  世界人工智能大会中西部县域数字就业中心组团亮相  1000万张照片训练AI模型 科学家找到水下定位新方法  闪电快讯|京东推出言犀AI大模型 面向零售、医疗、物流等产业场景  图像生成过程中遭「截胡」:稳定扩散的失败案例受四大因素影响  关于开展“与AI共创未来”——2025年全国青少年人工智能创新实践活动的通知  2025VR&AR显示技术峰会视频解析: 歌尔光学展示最新一代VR/AR光学模组  小红书陷入麻烦!被指控未经许可使用用户图片进行AI训练  谷歌推出RT-2视觉语言动作模型,使机器人能够掌握垃圾丢弃技能  微软新出热乎论文:Transformer扩展到10亿token  腾讯TRS之元学习与跨域推荐的工业实战  “踩油门,也要会踩刹车” 互联网企业高管谈人工智能发展  苹果AIGC专利:可通过语音指令生成AR/VR虚拟场景  Intel酷睿Ultra发布会官宣!迈向全新的AI时代  Moka AI产品后观察:HR SaaS迈进AGI时代  OpenAI大神Karpathy最新分享:为什么OpenAI内部对AI Agents最感兴趣  九号公司主导制定短途交通和送物机器人领域首个国际标准,标志着零的突破发布  人工智能赋能无人驾驶:商业化进程再提速  AI大模型火了!科技巨头纷纷加入,多地政策加码加速落地  人工智能行业急缺人 AI人才年薪能达近42万元  值得买科技入选“北京市通用人工智能产业创新伙伴计划”应用伙伴  全新“AI助手”!讯飞星火助手中心人机协作共创新生态  城市在采用人工智能方面进展如何?  AI大举入侵内容行业,哪些上市*及动漫公司进行了布局?  丰田汽车研究院推出生成式人工智能汽车设计工具  网易加速行业AI大模型应用,将覆盖100多个应用场景  奥比中光子公司和斯坦德机器人深度合作,共同推进新一代激光雷达的研发  视觉中国推出AI灵感绘图功能  IBM 与 NASA 携手开源地理空间 AI 模型,促进气候科学研究进步  下一个前沿:量子机器学习和人工智能的未来  猿力科技入选北京市通用人工智能产业创新伙伴计划  华为HarmonyOS 4将集|成人|工智能大型模型  人工智能改变网络安全和用户体验的三种方式  国网辉南供电:无人机空中巡检 全力护航端午佳节  英伟达首席执行官黄仁勋:生成式 AI 时代「人类」会是新的编程语言  昇思开源社区理事会成立,基于昇思AI框架的全模态大模型“紫东.太初2.0”发布  从医疗康复外骨骼到通用人形机器人,傅利叶智能推动核心技术升级 

 2025-07-24

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.