今天分享一个基于深度学习而开发的AI小游戏

简单介绍

这一款基于深度学习的五子棋小游戏的界面是使用Unity开发的,而网络结构是使用keras搭建的。

环境

笔者的环境如下

操作系统 windows 10
使用框架是keras

初始化界面

游戏界面

棋谱部分代码

using System;
using System.Collections;
using System.Collections.Generic;
using Wineforever;
using System.Linq;
using System.IO;
using UnityEngine;
using System.Diagnostics;
using System.Text;public static class ai{public struct Point{public int X;public int Y;}public static Point move(){var root = System.IO.Directory.GetCurrentDirectory();//调用预测脚本System.Console.InputEncoding = System.Text.Encoding.UTF8;System.Diagnostics.Process exep = new System.Diagnostics.Process();exep.StartInfo.UseShellExecute = false;exep.StartInfo.FileName = "cmd.exe";exep.StartInfo.RedirectStandardInput = true;exep.Start();exep.StandardInput.WriteLine("cd /d "+ root);exep.StandardInput.WriteLine("python predict.py");exep.StandardInput.WriteLine("exit()");exep.WaitForExit();//分析输出信息var policy_dic = Wineforever.String.client.LoadFromSheet(root + "\\policy.wf")["Policy"];//预测落子//var eva = double.Parse(Wineforever.String.client.LoadFromSheet(System.AppDomain.CurrentDomain.BaseDirectory + "Assets\\eva.wf")["Evaluation"][0]);//胜率指数var policy_list = policy_dic.Select((i => double.Parse(i))).ToList();var sorted = policy_list.Select((x, i) => new KeyValuePair<double, int>(x, i)).OrderByDescending(x => x.Key).ToList();//var policy_sorted = sorted.Select(i => i.Key).ToList();var policy_index = sorted.Select(i => i.Value).ToList();//转换成落子坐标var Move = new Point();for (int i = 0; i < 361; i++){int index = policy_index[i];int Y = index % 19, X = index / 19;if (GameObject.Find("board").GetComponent<logic>().Board_State[X,Y] == -1){Move.X = X;Move.Y = Y;break;}}return Move;}
}

网络结构

网络结构就很简单了,使用keras搭建四层卷积层,输入的尺寸是4x19x19

ef create_model():lr = 1e-4policy_net = Sequential()policy_net.add(Convolution2D(filters=32,kernel_size=(5,5),padding='same', data_format="channels_first", activation="relu",kernel_regularizer=l2(lr),input_shape=(4,19,19)))policy_net.add(Convolution2D(filters=64,kernel_size=(3,3),padding='same', data_format="channels_first", activation="relu",kernel_regularizer=l2(lr)))policy_net.add(Convolution2D(filters=128,kernel_size=(3,3),padding='same', data_format="channels_first", activation="relu",kernel_regularizer=l2(lr)))policy_net.add(Convolution2D(filters=4,kernel_size=(1,1),padding='same', data_format="channels_first", activation="relu",kernel_regularizer=l2(lr)))policy_net.add(Flatten())policy_net.add(Dense(361,activation="softmax",kernel_regularizer=l2(lr)))adam = Adam(lr=2e-4)policy_net.compile(optimizer=adam,loss='categorical_crossentropy')policy_net.save('policy_model.h5')

训练

使用命令:

python train.py

测试

在文件夹下点击gobang.exe即可

说明

项目中我已经将tarin的一部分数据放在Assets下的train中了,数据的数量比较的少,大概只用三四百个数据的样子,这里呢,当你完整和AI玩一盘游戏后所产生的对战数据也会被保存在train的目录下,这样即可为后面的训练提供数据的基础。训练时,它的loss下降的是很漫长的,这里提供的模型,是经过使用了30000条数据经过大概三天的时间训练而来的。大家在这个模型的基础上继续训练,会有一个相对好的结果。但是呢,这个AI现在的棋力还是很弱的,暂时性的只是学会了如何下棋,想要达到打败普通人还是很难的。想要达到一个很好的效果,还是需要花费大量的时间和资源进行训练。

总结

由于笔者的水平有限,在表述上有不准确的地方,还请谅解。。。
源码地址:https://github.com/huzixuan1/AI_Gomoku
有问题欢迎添加1017190168讨论交流

基于深度学习的一款五子棋小游戏相关推荐

  1. 基于c++EGE图形库编写的五子棋小游戏

    基于c++EGE图形库编写的五子棋小游戏 EGE图形库 新手推荐使用 EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向 ...

  2. 【Pygame小游戏】来了来了它来了——这款五子棋小游戏超A的,分享给你的小伙伴儿一起pk吧~

    前言

  3. 基于深度学习的烟火检测——yolov5

    基于深度学习的烟火检测--yolov5 今天先写到这里,明天再写 背景介绍 数据集介绍 训练结果 测试效果 今天先写到这里,明天再写 写在最前面:分享记录自己在目标检测的爬坑之路,一起探讨学习 数据集 ...

  4. python语言编写五子棋小游戏

    摘要 这是我基于pygame库做个一个五子棋小游戏,通过上网学习pygame库内的具体函数,以及一些前辈的指导.在这里我们需要绘画棋盘,棋子.棋盘直接调用pygame库中的draw.lines()函数 ...

  5. vs代码补全的快捷键_效率工具 | 一款基于深度学习的代码自动补全神器

    前言 代码补全对于大多数开发人员来说是至关重要的,它可以有效的提高开发效率.减少拼写错误和输入代码量.我们使用的大多数开发工具都自带补全功能,或者可以通过安装插件具备补全功能.但是,以往的代码补全功能 ...

  6. 小目标检测:基于深度学习的小目标检测方法

    基于深度学习的小目标检测方法 小目标检测的难点:分辨率低.信息少,噪音多.图像模糊 解决方法:图像金字塔.特征金字塔.对包含小目标的图像进行oversampling.对小目标进行复制粘贴操作(不遮挡原 ...

  7. 基于深度学习的小目标检测方法综述

    随着深度学习的发展,基于深度学习的目标检测技术取得了巨大的进展,但小目标由于像素少,难以提取有效信息,造成小目标的检测面临着巨大的困难和挑战. 为了提高小目标的检测性能,研究人员从网络结构.训练策略. ...

  8. 基于深度学习的计算机视觉技术在无人驾驶中的应用

    基于深度学习的计算机视觉技术在无人驾驶中的应用 背景 当前,人工智能是下一代信息技术的核心和焦点,而无人配送则是人工智能典型的落地场景,因为完成无人配送需要自动驾驶技术.机器人技术.视觉分析.自然语言 ...

  9. 基于深度学习的动物识别方法研究与实现

    基于深度学习的动物识别方法研究与实现 目  录 摘  要 I ABSTRACT II     第一章  绪论 1 1.1 研究的目的和意义 1 1.2国内外研究现状 1 1.2.1 目标检测国内外研究 ...

最新文章

  1. 一键安装python3环境
  2. IntelliJ IDEA注册码
  3. 关于ping telnet
  4. 职业高中高一计算机的基本知识,职业高中计算机论文
  5. mysql主备切换 自动_核电生产管理信息系统EAM完成首次备用环境切换演练
  6. XsdGen:通过自定义Attribute与反射自动生成XSD
  7. C++--第25课 - 异常处理 - 上
  8. 深入理解C语言内存管理
  9. 矩阵分解MF与非负矩阵分解NMF的应用
  10. 计算机试图启动宏,打开电子表格时,将提示禁用或启用宏的解决方案
  11. python百度热搜指数+动态可视化排行榜
  12. 【Tom原创】我是这样手写Spring的,麻雀虽小五脏俱全
  13. 【EXCEL绘制地图】获取地图图标信息时遇到问题。请确保处于联机状态,然后重试
  14. 从“靠山吃山,靠水吃水”到守望“绿水青山”
  15. java和c#通过esb服务互调用组件
  16. 字节跳动 C++面经总结第四期
  17. 01-Redis核心数据结构和高性能原理
  18. 抢先体验TPS轻松过万的SDAG区块链(一)
  19. iOS警告:ignoring file /Users/apple/Documents/拷贝1/.../CorePlot_1.3/Binar
  20. 87年兔竟然和88年龙是绝配,以后不要拿兔龙不合当借口了。

热门文章

  1. nginx服务器能ping通,访问不了的解决办法
  2. HDU-1172 猜数字 广搜
  3. 基于序列图像的三维体绘的视线投射算法
  4. Java中继承和面向接口的编程
  5. 尚学堂科技_王勇_JAVA视频教程_Hibernate
  6. win10系统远程ubuntu(linux)桌面
  7. tcp 组播_深入了解TCP/IP协议
  8. mysql和timescale联合查询_[技术干货] 时序数据库timescaleDB安装
  9. sudo: add-apt-repository:找不到命令_C++腾讯面试题库干货!作为程序员,这些都掌握了,还有什么理由拿不到offer?...
  10. Atlassian JIRA 插件开发之三 创建