基于 STM32+4G 模块设计的智能灌溉系统
一、前言
农业灌溉会直接影响作物的生长,合理的灌溉能够提升作物的质量和产量,更有助于水资源的持续利用。过度的灌溉不仅降低水资源利用率,还可能造成作物养分流失、病虫害、内涝等众多问题。因此随着农业智能化发展,我国农业需要提升农业灌溉合理性,因此为智能灌溉行业提供发展机遇。
传统的灌溉方式灌溉时长久,且费时费力,还容易造成水资源浪费的问题,随着现代农业的迅速发展,传统灌溉方式逐渐被淘汰。智能灌溉方式具有规模化、智能化、集约化的优点,是现代农业现代化发展的必然趋势,因此未来智能灌溉一行业将得到快速发展。
根据新思界产业研究中心发布的《2021-2025年中国智能灌溉行业市场深度调研及发展前景预测报告》显示,农业灌溉是世界上最大的淡水消耗之一,世界上几乎60%取自河流、湖泊、水库和水井的水用于灌溉。我国作为用水大户,70%以上的用水用于农业灌溉。随着农业智能化,农业灌溉的降本要求提升,水资源的有效利用成为重要问题。当前在发达国家,农业水资源利用率已经达到82%左右,但我国目前农业水资源利用率不到55%。智能灌溉作为一种高效利用水资源的农业灌溉的方式,在我国农业现代化中应用需求较高,行业发展前景较好。
二、设计需求
当前智能灌溉系统分为三个部分:温湿度采集部分、灌溉系统部分、OneNet云平台。
(1)温湿度采集部分
硬件组合:STM32F103+4G模块+DHT11
功能: 采集环境温湿度后,通过4G模块将数据上传到OneNet云平台实时显示。
(2) 灌溉系统部分
硬件组合:STM32+4G模块+继电器(控制水泵灌溉)。
功能:通过MQTT协议连接OneNet云端,手机上可以打开控制页面的按钮对继电器进行远程控制,实现远程操作水泵灌溉。
灌溉系统部分增加刷卡功能,用户可以通过IC卡刷卡将金额刷到灌溉系统设备里,灌溉系统设备里会记录金额,并且在手机可视化页面上会显示当前的设备金额。 金额会随着时间进行递减,按分钟计费,如果计费到0,就无法启动灌溉,需要重新充值金额才能继续。
(3)OneNet云平台
OneNet云平台提供了服务器可以接入设备,也提供了可视化页面设计功能,可以通过OneNet的可视化页面设计web网页,完成温度湿度显示,继电器控制等等操作。 网页发布后可以设置密码访问,也可以公开访问。手机、电脑浏览器打开就能看到页面。 同时也提供了设备云手机APP,打开就可以登录看到设备信息。
三、硬件选型
3.1 STM32开发板-2份
主控CPU采用STM32F103RCT6,这颗芯片包括48 KB SRAM、256 KB Flash、2个基本定时器、4个通用定时器、2个高级定时器、51个通用IO口、5个串口、2个DMA控制器、3个SPI、2个I2C、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口,芯片属于大容量类型,配置较高,整体符合硬件选型设计。当前选择的这款开发板自带了一个1.4寸的TFT-LCD彩屏,可以显示当前传感器数据以及一些运行状态信息。
3.2 杜邦线-2份
3.3 4G模块(有人科技)-2份
特点: 在2G退、4G贵、NB慢的趋势下,采用全新网络制式推出的4G DTU透传插针模块-WH-LTE-7S1系列,为中低速物联网通讯提供全新解决方案,在速率、延迟、功耗和成本等方面,为用户提供多样选择。
最大的优点:
(1)价格便宜(目前因为活动价便宜),一个BC26-NBIOT模块价格都在80块以上。
(2)内置电信卡,不需要单独插卡,买卡,内置卡每月100M流量连送8年,可以满足一般的物联网场景。
3.4 天线(4G模块使用)-2份
天线是给4G模块使用的,增加信号强度。
3.5 继电器模块
3.6 DHT11温湿度模块
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度595%RH, 温度-20+60℃。
3.7 RFID-RC522刷卡模块
四、OneNet云平台设计
OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。
4.1 创建产品
(1)登录OneNet
官网:open.iot.10086.cn/
(2)进入控制台
不用切换到旧版,当前使用的是新版的MQTTS物联网套件。
(3)选择MQTT物联网套件
(4)添加产品
点击左上角添加产品。
根据自己的设备信息填写。
设备创建完成。
(5)查看产品详情信息
点击产品名称,会进入到产品详情页面,可以看到产品的ID和key。 这些信息在后续的MQTT登录、可视化界面的数据流关联里都非常重要。
这里先提前记录下来,方便后续的使用:
access_key:9R1ZQrptumB63QxmY0wmQU0uY4epEEWaIuUW605kQZw=
产品ID: 557229
4.2 创建设备-温湿度采集设备
目前灌溉系统分为两个部分,一个是温湿度采集,一个是水泵灌溉部分。设备对应2个。
(1)添加设备
在设备页面点击添加设备。
(2)填写设备信息
(3)添加完成
(4)查看设备详情
点击设备列表的详情按钮,可以看设备的详细信息。 设备ID和设备的key非常重要,后续生成MQTT三元组需要使用。
当前数据采集设备的信息如下:
设备ID :1016390805
key : sYAKWlI1r7+47kzPrj6O94RBC57tKsVsGD1tJj5s2x0=
4.3 创建设备-水泵灌溉端
(1)添加设备
(2)填写设备信息
(3)添加完成
(4)查看设备详情
点击设备列表上的详情按钮,可以看到设备DI和key。
当前设备信息如下:
设备ID 1016393316
key gD3creX6+GfTKoGON6XdbSxtr7tHUwJfF7mHryNNCww=
4.4 创建数据流模板
(1)添加数据流模板
数据流是存储设备上传的数据的。设备需要上传哪些数据上来,就创建对应的数据点去对应。
(2)采集端需要的数据流
当前数据采集端主要是采集温度和湿度,就创建两个数据流。
(3)水泵灌溉端需要的数据流
水泵灌溉设备需要完成计费金额显示,水泵控制两个数据流。
(4)添加完毕
当前所有的数据流如下:
dht11_t 环境温度
dht11_h 环境湿度
motor 水泵控制
money 当前可用金额
4.5 MQTT设备登录(软件模拟)
(1)MQTT协议介绍
OneNet的云平台采用MQTT协议接入,MQTT协议是一种消息列队传输协议,采用订阅、发布机制,订阅者只接收自己已经订阅的数据,非订阅数据则不接收,既保证了必要的数据的交换,又避免了无效数据造成的储存与处理。因此在工业物联网中得到广泛的应用。MQTT协议是一种基于TCP/IP协议上传输的轻量级通信协议,只要设备支持TCP协议,就可以组建MQTT协议包完成通信。
目前硬件设备联网采用的是有人科技的4G模块,这个模块本身没有内置MQTT协议,只是支持TCP协议,所以需要在单片机里通过软件自己封装MQTT协议完成与OneNet云平台的通信。
在设计硬件代码之前,需要先了解云平台如何接入,MQTT协议如何使用,接下来会先介绍MQTT协议登录需要 的三元组如何生成,MQTT服务器地址、主题订阅、主题发布的数据格式,最后再利用MQTT客户端软件模拟设备完成OneNet云平台登录,完成数据上传,命令下发测试。 只要MQTT软件测试没有问题,那么接下来通用硬件接入的流程就是一样的操作。
(2) OneNet的MQTT服务器地址
在这里可以看到MQTT协议接入平台时,填入的服务器IP和端口号。‘
文档地址: open.iot.10086.cn/doc/v5/deve…
MQTTS 接入套件支持标准 MQTT V3.1.1 版本,支持TLS加密,接入服务地址如下:
MQTT mqttstls.heclouds.com 8883 加密接口
MQTT mqtts.heclouds.com 1883 非加密接口
对于单片机而言,使用非加密接口比较方便。本次项目就采用的是非加密接口。 端口号是1883。
上面的域名转为IP之后信息如下:(如果设备不支持域名解析,可以直接填IP地址)
IP地址: 183.230.40.96
端口号: 1883
(3)下载密匙生成工具
密匙生成工具是生成MQTT协议登录的密码。设备要登录OneNet平台需要填账号、密码等信息。
地址: open.iot.10086.cn/doc/v5/deve…
点击进行下载。
这是工具打开的页面:
工具软件里需要填写的参数如下:
【1】res选项参数的格式: products/{产品ID}/devices/{设备名称}
【2】et是设置token过期时间:算出1970-1-1到你想要设置的到期时间,单位是秒,填入即可。
比如: 超时时间设置为2022-4-7,那么,这里填入的秒就是:1970-1-1到2022-4-7之间的秒单位时间。
【3】key的参数格式: 就是设备创建之后,在设备详情页的key
(4) 生成token过期时间
下面通过C代码计算得一个时间范围:
#include <stdio.h>
#include <time.h>
#include <time.h>
int main()
{
time_t time_sec;
time_sec=time(NULL); //当前的秒单位时间--UTC时间
printf("当前时间(秒):%ld\n",time_sec);
printf("加一年的时间(秒):%ld\n",time_sec+12*30*24*60*60);
return 0;
}
设置的过期时间-1年: 1698635613
设置的过期时间-2年: 2040780102
(5)密匙生成工具参数
密码生成工具软件的选项框需要填入的格式: (关于产品ID和设备key的查看方式在设备创建章节里已经讲过了)
res选项格式:products/<产品ID>/devices/<设备名字>
res选项填入:products/557229/devices/DHT11 (数据采集设备)
res选项填入:products/557229/devices/motor (水泵)
et是设置token过期时间:2040780102
设备key:sYAKWlI1r7+47kzPrj6O94RBC57tKsVsGD1tJj5s2x0= (数据采集设备)
设备key:gD3creX6+GfTKoGON6XdbSxtr7tHUwJfF7mHryNNCww= (水泵)
下面把这些参数截图标注出来,方便各位去对应寻找:
打开工具填入参数,生成密匙:
第一步生成数据采集设备的密匙。
得到的密匙信息如下:
version=2018-10-31&res=products%2F557229%2Fdevices%2FDHT11&et=2040780102&method=md5&sign=ymz%2F6wBGP%2Fikh64%2BkNb%2FTQ%3D%3D
第二步生成水泵灌溉设备的密匙:
得到的密匙信息如下:
version=2018-10-31&res=products%2F557229%2Fdevices%2Fmotor&et=2040780102&method=md5&sign=C4DxNR6cKDB95%2FcfcNh5FA%3D%3D
(6)主题订阅格式
主题订阅是设备订阅平台的消息,如果设备想知道平台下发的消息,就需要订阅主题。
帮助文档: open.iot.10086.cn/doc/mqtt/bo…
目前支持订阅的主题如下:
订阅 topic | 订阅效果 |
---|---|
$sys/{pid}/{device-name}/dp/post/json/accepted | 订阅设备数据点上报成功的消息 |
$sys/{pid}/{device-name}/dp/post/json/rejected | 订阅设备数据点上报失败的消息 |
$sys/{pid}/{device-name}/dp/post/json/+ | 订阅设备数据点上报结果 |
$sys/{pid}/{device-name}/cmd/request/+ | 订阅设备所有命令消息 |
$sys/{pid}/{device-name}/cmd/response/+/+ | 订阅设备所有命令应答结果消息 |
$sys/{pid}/{device-name}/cmd/# | 订阅设备所有命令相关消息 |
$sys/{pid}/{device-name}/# | 订阅设备所有相关消息 |
如果想知道设备所有相关信息,直接订阅$sys/{pid}/{device-name}/#
即可。 (其中的PID就是产品ID)
(分别是数据采集设备和水泵控制设备)
$sys/557229/DHT11/#
$sys/557229/motor/#
为了确保设备上传消息确实被平台所接受处理,设备可以订阅系统 topic 获取上传数据点结果消息;
topic 命名规则如下:
$sys/{pid}/{device-name}/dp/post/json/+
本例中,订阅topic为: (分别是数据采集设备和水泵控制设备)
$sys/557229/DHT11/dp/post/json/+
$sys/557229/motor/dp/post/json/+
(7)主题发布格式
主题发布: 就是设备向平台上传数据。
帮助文档地址:open.iot.10086.cn/doc/mqtt/bo…
文档里介绍了数据点上传的格式:
根据当前设备,总结的格式如下: (分别是数据采集设备和水泵控制设备)
发布主题: $sys/557229/DHT11/dp/post/json
发布消息:
{"id":123,"dp":{"dht11_t":[{"v":24.5}],"dht11_h":[{"v":60}]}}
发布主题: $sys/557229/motor/dp/post/json
发布消息:
{"id":123,"dp":{"motor":[{"v":1}],"money":[{"v":88}]}}
dp
对象里面就是需要上传的数据点字段。 这个数据点的名字就是自己创建数据流模板的时候创建的。
数据采集设备是上传温度和湿度。
水泵控制设备是上传水泵开关状态和当前剩余金额。
(8)MQTT登录参数总结
MQTT协议登录时,需要输入3个参数: MQTT-设备ID,MQTT-设备名称,MQTT-密码。
对应OneNet的参数:
MQTT- 设备ID -----> 就是OneNet的设备名称
MQTT-设备名称-----> 就是OneNet的产品ID
MQTT-密码------------> 就是OneNet的密匙工具生成的密码
这是温湿度数据采集设备的MQTT接入信息总结:
IP地址: 183.230.40.96
端口号: 1883
clientId: DHT11
username: 557229
password: version=2018-10-31&res=products%2F557229%2Fdevices%2FDHT11&et=5040780102&method=md5&sign=9twQIaGu5yecBvSlTEcBHw%3D%3D
订阅主题: $sys/557229/DHT11/#
发布主题: $sys/557229/DHT11/dp/post/json
发布消息:
{"id":123,"dp":{"dht11_t":[{"v":24.5}],"dht11_h":[{"v":60}]}}
这是水泵控制设备的MQTT接入信息总结:
IP地址: 183.230.40.96
端口号: 1883
clientId: motor
username: 557229
password: version=2018-10-31&res=products%2F557229%2Fdevices%2Fmotor&et=2040780102&method=md5&sign=C4DxNR6cKDB95%2FcfcNh5FA%3D%3D
订阅主题: $sys/557229/motor/#
发布主题: $sys/557229/motor/dp/post/json
发布消息:
{"id":123,"dp":{"motor":[{"v":1}],"money":[{"v":88}]}}
(9)MQTT客户端工具登录:数据采集设备
根据软件的输入框提示,输入对应的参数,然后登录设备,订阅主题,发布主题即可完成一个流程的测试。
然后打开网页查看设备状态: (可以看到设备已经在线了)
打开设备详情页面查看设备上传的数据:
(10)MQTT客户端工具登录:水泵灌溉设备
根据软件的输入框提示,输入对应的参数,然后登录设备,订阅主题,发布主题即可完成一个流程的测试。
然后打开网页查看设备状态: (可以看到设备已经在线了)
打开设备详情页面查看设备上传的数据:
到此,模拟设备上传数据到OneNet云平的测试已经完成。
4.6 可视化页面设计
(1)可视化组件介绍
为了方便查看设备的状态,控制设备,一般需要设计一个可视化页面,onenet提供了可视化组件框架,支持接入设备的数据源,显示设备数据,控制设备等等。
地址:open.iot.10086.cn/studio/view…
(2)新建项目
新建项目选择空项目新建,不过也可以选择模板,就看自己项目是否合适了。
(3)编辑项目
点击项目界面的编辑按钮。
(4)设置界面布局
页面可以设计手机页面,PC页面,为了方便,可以设计两个页面,一个电脑端打开的,一个手机端打开的。
(5)设计界面样式
在设计页面有很多控件可以选择,根据自己的需求可以使用合适的控件显示数据。 比如:温度,湿度一般使用仪表盘显示比较合适。水泵开关自然是使用按钮控件比较合适。
下面是设计的好的页面效果。
选中控件之后,在右边可以设置相关的属性。 比如:名称,大小,样式,数据源,位置等等信息。
(6)设置数据源
界面上的控件最终是要实时显示设备的状态,显示设备上传的数据,接下来为控件设置数据源。
选中控件,在右边页面可以看到管理数据源的选项,点击进去。
数据类型选择OneNet,下面就是编辑自己要管理的设备数据源,根据自己要关联的设备进行设置。
这是关联数据采集设备的数据源:
这是管理水泵控制的数据源:
关联完成:
回到设计页面,给对应的控件设置数据源进行显示。
剩余金额显示使用的是翻牌器控件,设备上传的数据不符合显示要求,需要利用数据过滤器写代码转换一下。
(7)水泵开关按钮配置
为了方便设备判断水泵开关按钮下发的指令,可以对水泵开关的命令标识符进行修改。
修改后,点击按钮下发的数据就是:motor:0
或者 motor:1
(8)设计电脑页面
手机页面设计好之后,可以将控件都复制一份到电脑页面进行重新布局即可。
这是电脑端页面设计效果:
(9)保存发布
设计完毕之后,点击右上角进行预览,没问题然后点击保存,然后回到项目管理页面发布。
项目发布链接如下:
链接:https://open.iot.10086.cn/view/main/index.html#/share2d?id=63720141bb4cd10035240fed
这是手机上显示效果:
这是电脑页面显示效果:
在上方有工具条可以展开,切换页面。
(10) 数据通信测试
现在页面已经完毕,接下利用MQTT客户端登录OneNet平台,发送数据进行测试,点击界面按钮测试。
当点击界面按钮时,MQTT客户端收到数据如下:
len:73,Data:$sys/557229/motor/cmd/request/72380c2d-10b8-4bb3-b299-eb2a6e27d613motor:1
len:73,Data:$sys/557229/motor/cmd/request/2682baf7-bff8-4c35-8b22-98e389e0ca1fmotor:0
MQTT客户端发送数据,界面也响应及时,同步做出反应。
五、硬件设备代码设计
5.1 有人云4G模块使用介绍
模块的使用说明书:www.usr.cn/Down/WH-LTE…
拿到模块之后首先就是要了解引脚说明,明白每个引脚的功能。 在手册的第9
页,有对模块引脚的介绍。
下面是模块的实物图:
调试模块时,必接的引脚有5个。 分别是:电源VCC(5V),电源GND,串口发送,串口接收,开机引脚。
下面标出这几个引脚的位置:
下面是接好线的实物图:
下面是标出引脚的排线编号规律:
接线说明: 接线时认真看IO口编号,对号入座,千万别接错了。
目前模块供电的VCC+正极有2个脚。一个支持3.4-4.2V (第16脚),一个支持5V16V(第13脚和第14脚)。供电的时候,这两个脚只能选择其中一个。 其中,3.4-4.2V 供电是留给锂电池使用的,5V16V的供电接口方便接单片机的电源。
当前的这个项目是需要使用STM32开发板来驱动模块完成网络连接,处理。 所以,这里模块供电引脚直接选择5V,方便接在单片机开发板引出的电源口上。
接线总结:
模块的第6个脚(UART-TX): 接单片机或者USB转TTL模块的RXD
模块的第7个脚(UART-RX): 接单片机或者USB转TTL模块的TXD
模块的第10个脚(key): 接单片机的电源正-3.3v (表示模块开机)
模块的第12个脚(GND): 接单片机的电源地-GND (给模块供电)
模块的第13个脚(DCIN): 接单片机的电源正-5v (给模块供电)
5.2 温湿度数据采集端
(1)功能介绍
温湿度采集端设备,负责采集温度,湿度数据上传到OneNet平台。
使用的硬件:STM32F103RCT6系统板、DHT11温湿度传感器、有人科技的4G模块。
(2)接线说明
(1) 有人的WH-LTE-7S1-4G模块与STM32的串口3连接。
模块的第6个脚(UART-TX): 接单片机PA3(RXD)
模块的第7个脚(UART-RX): 接单片机PA2(TXD)
模块的第10个脚(key) : 接单片机的电源正-3.3v (表示模块开机)
模块的第12个脚(GND) : 接单片机的电源地-GND (给模块供电)
模块的第13个脚(DCIN) : 接单片机的电源正-5v (给模块供电)
(2) DHT11温度湿度传感器
VCC--VCC
GND---GND
DAT---PA5
(3)代码介绍
使用keil打开工程:
工程代码如下:
5.3 水泵控制端
(1)功能介绍
水泵控制端设备,负责接收手机页面按钮下发的指令,完成浇水控制。并且将当前的剩余电费上传到云平台。
灌溉设备里默认金额100元,灌溉期间每分钟减去1元(不足一分钟按1分钟计算),刷卡一次可以充值100元。
使用的硬件:STM32F103RCT6系统板、DHT11温湿度传感器、有人科技的4G模块。
(2)接线说明
(1) 有人的WH-LTE-7S1-4G模块与STM32的串口3连接。
模块的第6个脚(UART-TX): 接单片机PA3(RXD)
模块的第7个脚(UART-RX): 接单片机PA2(TXD)
模块的第10个脚(key) : 接单片机的电源正-3.3v (表示模块开机)
模块的第12个脚(GND) : 接单片机的电源地-GND (给模块供电)
模块的第13个脚(DCIN) : 接单片机的电源正-5v (给模块供电)
(2) RC522射频模块外部的接口:
*1--SDA <----->PB5--片选脚
*2--SCK <----->PB4--时钟线
*3--MOSI<----->PA12--输出
*4--MISO<----->PA11--输入
*5--悬空
*6--
*7--RST <----->PA8--复位脚
*8--VCC <----->VCC
(3) 继电器控制接口
GND <----->GND
VCC <----->VCC
IN <----->PA5
(3)代码介绍
使用keil打开工程。
工程代码如下:
本文正在参加「金石计划」
上一篇: Android Parcelize
推荐阅读
-
基于 STM32+4G 模块设计的智能灌溉系统
-
基于 Python 的智能语音识别系统设计
-
人工智能讲师叶子,大模型训练师:基于大型语言模型的自主智能:架构设计与应用前景
-
基于 STM32 设计的智能家居系统(使用 ESP8266+OneNet 云平台)
-
机器人/车] 基于中明 E2RCU 设计的智能轮式巡线避障机器人(文末完整工程信息源代码 PPT 等)
-
NeurIPS 2022 | 最强斗地主AI!网易互娱AI Lab提出基于完美信息蒸馏的方法-完美信息蒸馏(PTIE) 在斗地主游戏中,非完美信息的引入主要是由于三位玩家均不能看到别人的手牌,对于任意一位玩家而言,仅可知道其余两位玩家当前手牌的并集,而难于精准判断每位玩家当前手牌。完美信息蒸馏的思路是针对这种非完美问题,构建一个第三方角色,该角色可以看到三位玩家的手牌,该角色在不告知每位玩家完美信息的情况下通过信息蒸馏的方式引导玩家打出当前情况下合理的出牌。 以强化学习常用的 Actor-Critic 算法为例,PTIE 在 Actor-Critic 算法的应用中可以利用 Critic 的 Value 输出作为蒸馏手段来提升 Actor 的表现。具体而言即在训练中 Critic 的输入为完美信息(包含所有玩家的手牌信息),Actor 的输入为非完美信息(仅包含自己手牌信息),此种情况下 Critic 给予的 Value 值包含了完美信息,可以更好地帮助 Actor 学习到更好的策略。 从更新公式上来看,正常的 Actor-Critic 算法 Actor 更新的方式如下: 在 PTIE 模式下,对于每个非完美信息状态 h,我们可以在 Critic 中构建对应的完美信息状态 D(h),并用 Critic 的输出来更新 Actor 的策略梯度,从而达到完美信息蒸馏的效果。 PTIE 框架的整体结构如下图所示: 无论是训练还是执行过程中智能体都不会直接使用完美信息,在训练中通过蒸馏将完美信息用于提升策略,从而帮助智能体达到一个更高的强度。 PTIE 的另一种蒸馏方式是将完美信息奖励引入到奖励值函数的训练中,PerfectDou 提出了基于阵营设计的完美信息奖励 node reward,以引导智能体学习到斗地主游戏中的合作策略,其定义如下: 如上所示,完美信息部分 代表 t 时刻地主手牌最少几步可以出完,在斗地主游戏中可以近似理解为是距游戏获胜的距离, 代表 t 时刻地主阵营和农民阵营距游戏获胜的距离之差, 为调节系数。通过此种奖励设计,在训练时既可以一定程度地引入各玩家的手牌信息(出完的步数需要知道具体手牌才能计算),同时也鼓励农民以阵营的角度做出决策,提升农民的合作性。 特征构建: PerfectDou 针对牌类游戏的特点主要构建了两部分特征:牌局状态特征和动作特征。其中牌局状态特征主要包括当前玩家手牌牌型特征、当前玩家打出的卡牌牌型特征、玩家角色、玩家手牌数目等常用特征,动作特征主要用于刻画当前状态下玩家的所有可能出牌,包括了每种出牌动作的牌型特征、动作的卡牌数目、是否为最大动作等特征。 牌型特征为 12 * 15 的矩阵,如下图所示: 该矩阵前 4 行代表对应每种卡牌的张数,5-12 行代表该种卡牌的种类和对应位置。 网络结构和动作空间设计 针对斗地主游戏出牌组合数较多的问题,PerfectDou 基于 RLCard 的工作上对动作空间进行了简化,对占比最大的两个出牌牌型:飞机带翅膀和四带二进行了动作压缩,将整体动作空间由 27472 种缩减到 621 种。 PerfectDou 策略网络结构如下图所示: 策略网络结构同样分为两部分:状态特征部分和动作特征部分。 在状态特征部分,LSTM 网络用于提取玩家的历史行为特征,当前牌局状态特征和提取后的行为特征会再通过多层的 MLP 网络输出当前的状态信息 embedding。 在动作特征部分,每个可行动作同样会经过多层 MLP 网络进行编码,编码后的动作特征会与其对应的状态信息 embedding 经过一层 MLP 网络计算两者间的相似度,并经由 softmax 函数输出对应的动作概率。 实验结果
-
基于javaWeb的长安智能医疗管理系统的设计与实现 - 致谢
-
基于 Springboot 计算机毕业设计源码 88160 的智能公园管理系统的设计与实现
-
毕业设计 51 基于单片机的智能水表流量计流量报警温度设计
-
基于 51 微控制器的 IC 卡智能水表设计