韦引超,高彦玉,周 琼,钟伟朝,罗土玉
(1.广东省现代农业装备研究所,广东 广州 510630;2.广东广兴牧业机械设备有限公司,广东 广州 510520;3.农业农村部华南现代农业智能装备重点实验室,广东 广州 510630)
国以农为本,农以种为先,种质资源是农业科技原始创新、现代种业发展的物质基础,是保障粮食安全、建设生态文明、支撑农业可持续发展的战略性资源[1-3]。畜禽养殖生长性能测定对畜禽育种水平的快速提升非常重要,传统人工测定方式会对畜禽产生应激、影响其采食量,数据量少、数据记录精度低,不能完全、真实地反映畜禽的生长情况并为育种企业或育种研究院提供智能饲喂和记录装备,已成为突破育种工作繁琐、加快现代育种技术发展、提升育种产业化水平的迫切需要[4-11]。基于目前行业现状,为实现畜禽品种选育工作向标准化、数据化和高效化发展,本文以计算机软件技术在畜禽品种选育养殖中的应用进行了研究,设计了一个与终端设备一起配套使用的畜禽养殖通用数据管理系统。系统设计内容在种猪生长性能测定方面实现了实际应用,并达到预期的测定效果,可为规模化育种企业在种猪测定方面提供精确可靠的数据可视化管理服务。
畜禽生长性能测定普遍通过给待测畜禽佩戴电子耳标或电子脚环,采用终端饲喂设备对测定期内待测畜禽的日常采食、生长数据(如采食量、体重等)进行记录,计算机数据管理软件系统对数据进行收集并做统计分析处理,为管理者提供畜禽各项生长性能数据报表的整体解决方案过程[12-17]。本研究结合业务场景,将系统分为数据接收存储、数据预处理、业务逻辑处理和用户可视化交互界面4 部分。
系统总体采用前后端分离的设计模式,遵循软件工程“高内聚,低耦合”的设计思想,总体架构如图1 所示。
图1 系统总体架构图
数据收存储:系统主要用于线上的数据统计分析和管理,其原始数据来源于线下的终端饲喂设备,两者通过遵循TCP/IP 通信协议开发对外接口,可实现远程或本地的相互连接,使用相应的控制指令完成对数据的双向传输交流。系统将接收到的测定过程原始数据存储到关系型数据库MySQL中,再进行后续的统计分析和管理。
数据预处理:系统原始数据主要为畜禽日常详细采食事件,畜禽每天的真实体重值对于系统统计分析的结果至关重要,在每次数据接收任务完成时,借助回归算法预测模型,以畜禽近期体重为训练集,实现畜禽日体重的挑选,减小系统统计分析误差。
业务逻辑处理:使用后端应用框架Spring Boot 开发API 数据接口,接收用户可视化交互界面发送的各类业务请求并返回响应处理结果,同时使用键值数据库Redis 对访问路由和处理结果以键值的形式按需缓存。
用户可视化交互界面:使用前端应用框架Vue、图表插件ECharts 和UI 组件ElementUI 开发可视化交互界面,向用户展示畜禽生长性能测定过程原始数据详情和统计分析结果,提供各项条件需求查询、数据导入导出和系统数据管理功能。
通过对畜禽生长性能测定过程的分析,结合系统在实际生产环境中的使用情况,系统主要分为7个模块,各功能模块如图2 所示。
图2 系统功能模块
原始数据管理:主要对接收到的各类原始测定数据进行多条件组合查询展示,对于存在的异常数据,用户可进行自定义修正、系统批量修正或还原重置。
站组汇总统计:同畜禽生长统计模块类似,以站组为统计单位,对站组下的相应测定畜禽信息进行汇总和查询展示。
畜禽生长统计:整理畜禽原始采食数据,统计畜禽群体和个体在测定过程中的生长情况和各类采食信息,实时计算饲料消耗量与体重增长的比值——料肉比,提供多条件组合查询功能,便于用户查看和筛选畜禽优良品种或个体。
畜禽信息管理:对畜禽每日的生长数据进行修正(系统结合当日前后几天的数据变化情况提供修改参考值),如修改体重、采食量或批量导入日生长数据,对畜禽个体进行自定义编号、合并数据、移动站组和测定结束控制等操作,同时也可撤销以上所有操作,恢复原始数据。
中控设备管理:系统同畜禽测定终端饲喂设备进行通信的功能模块,主要有设备信息管理、设备连接状态实时显示、数据接收信息实时同步和回归算法体重挑选预处理等功能。
测定批次管理:用户登录后先选择或还原相应测定批次后再进入系统,用户可以创建新测定批次或修改批次信息,同时在测定过程中或结束时可进行数据备份和还原。
系统权限管理:包含用户登录和退出功能,以及用户访问权限验证,如用户未登录时无法查看系统内任何数据。
为满足系统实际应用需求和考虑性能,系统数据库共设计15 张数据表,分别用于存储系统在运行过程中产生的原始测定数据和用户操作记录,数据冗余较小、结构合理。系统主要实体关系如图3 所示。中控设备信息表、畜禽信息表和原始采食数据表的具体结构设计信息如表1、表2 和表3 所示。
表1 中控设备信息表结构设计
表2 畜禽信息表结构设计
表3 采食数据表结构设计
图3 系统主要实体关系
畜禽每天的采食记录中有多个不同的体重值,一般情况下系统默认以当天记录的中位数作为真实值。但由于其体重变化总体呈曲线缓慢上升的趋势,波动幅度范围较小,因此可使用算法模型对个体近期已确定的体重值进行曲线拟合,利用拟合训练好的模型从当天所有记录中挑选出与预测值最接近的体重作为当日真实值,从而替换默认体重,提高系统数据统计分析的正确率。其算法模型挑选畜禽体重的流程如图4 所示。
图4 算法模型挑选畜禽体重流程
回归算法通过学习或训练过程得到变量与因变量之间的相关关系,可用于预测或分类等回归分析中,常见的回归算法有线性回归、逻辑回归、多项式回归和岭回归等。结合畜禽实际生长情况,系统采用一元m 次多项式回归算法建立畜禽体重与养殖时间之间的相关关系,用于畜禽每日体重的挑选。多项式回归相较于线性回归加入了变量的更高次方,可以通过修改变量的高次项对真实点进行逼近,从而更好的拟合畜禽体重增长曲线。一元m 次多项式的数学表达式为
式中:
M——多项式的最高次数;
x j——x的j次幂;
wj——x j的系数。
曲线拟合的过程即求解多项式的所有系数wj和最高次数M,从而确定方程表达式y(x,w)。
为了较好地实现本系统的相关功能,验证系统设计,本研究以种猪为测试对象进行详细分析,具体如下。
系统数据接收存储使用Socket 通信、Java 多线程、面向对象数据封装和数据库访问接口JDBC 连接技术实现。开发Socket 网络通信程序,实现系统和种猪测定终端设备相互数据传输,由于发送和接收过程同时并发执行,且单次发送指令只能获取单条数据,数据的批量获取需要同设备进行不断的轮询交互,存在数据丢失等传输安全问题,因此采用Java 多线程技术来解决。对获取到的原始采食记录按需分割,创建相应数据对象进行封装,待整个接收过程完成后使用数据库访问接口JDBC 执行相关SQL 语句,将对象数组统一存入到MySQL 数据库中。系统中控设备数据接收功能界面如图5 所示。
图5 系统中控设备数据接收功能界面
数据接收存储后使用多项式回归算法模型完成种猪每日体重的挑选,考虑软件开发成本和编程语言环境,使用开源组织Apache 下的Java 数学工具类commons.math3.fitting.PolynomialCurveFitter 完成体重增长曲线的拟合。首先准备待拟合的数据时间节点数组x[]和体重数组y[],将其逐一添加到权重观测点工具类WeightedObservedPoints的实例化对象中生成参数,然后创建多项式曲线拟合工具类PolynomialCurveFitter对象,指定拟合的最高次数,最后调用其类的fit方法传入参数完成拟合并返回系数结果。
根据体重挑选流程,在实现过程中,以种猪生长性能测定起始前几天的体重记录中位数作为训练集,代入回归模型计算出后一天的预测值完成体重挑选。新挑选出的体重依次加入训练集,替换离预测点距离较远的记录,从而保持训练集长度固定和预测准确。为了确定多项式的最高次数,以2 头种猪连续3 个月的所有采食体重记录作为实验数据,分别对其进行最高次数由一次、二次增至多次的曲线拟合,通过对比分析,一元一次多项式回归算法模型的挑选情况相对最优。一次和二次回归挑选体重与默认中位数体重的增长曲线对比如图6 和图7 所示。
图6 种猪1 体重增长曲线对比图
图7 种猪2 体重增长曲线对比图
业务逻辑处理程序基于应用框架Spring Boot、数据持久层框架MyBatis 和键值数据库Redis,使用IntelliJ IDEA 工具开发完成,运行环境主要依赖Java 8 和MySQL 数据库。该后端应用主要组成部分如下。
数据封装实体类JavaBean:结合数据库设计,分别创建各表对应的实体类XXBean,设置成员属性类型和参数校验规则,提供各类参数构造方法。同时抽取数据库核心表中的公共字段创建父类Common,供其他相关数据实体继承使用,降低代码冗余。
对外接口交互类Controller:提供前端发送的各类GET 和POST 请求响应接口,调用相关XXService业务实现类完成业务操作并返回处理结果。
数据库操作接口类Dao 及对应XML 映射文件:结合MyBatis 数据持久层框架,对数据库表完成CRUD 操作。
业务实现类Service:根据XXController 类的需求,使用XXDao 接口的实现类获取数据进行加工或执行业务逻辑流程,同时借助Redis 数据库对结果进行按需缓存,提高业务处理效率,减小MySQL 数据访问压力和用户等待时间。
公共常量管理类Constants:对身份通行令牌Token 和用户基本信息UserName 等公共常量进行状态管理和实时更新。
全局异常控制类Exception:对程序执行过程中所有可能出现的异常报错提前收集和分类处理,根据异常类型执行相应程序或返回相应提示,保证程序正常平稳运行。
基本配置类Config:设置访问路由权限、跨域请求和定时任务等基础信息。
访问权限拦截类Interceptor:对所有访问请求进行拦截过滤,根据配置设置进行权限验证,检查携带Token 的合法性等,保证系统数据安全。
通信实现类Socket:使用Java 多线程和Socket网络通信技术,对数据接收存储功能进行统一封装。
工具服务类Util:提供List 分页、字符串和时间格式处理、多项式回归模型应用、Redis 缓存和WebSocket 前端实时通信等工具服务。
用户可视化交互界面基于前端主流开发框架Vue开发完成,为了保证界面美观和提高开发效率,系统引入了开源UI 组件ElementUI 和图表插件ECharts,以及Http 请求库Axios、文件导入导出工具xlsx 和进度条组件NProgress 等基础开发工具。系统用户可视化交互界面详情如图8、图9 所示。
图8 原始数据采食事件界面
图9 统计数据站组累计汇总界面
系统开发完成后既可以安装到本地PC 机上使用,也可以部署到Linux 服务器上实现远程访问,两者安装部署方式和适用场景相对不同。针对于Windows 操作系统的单节点PC 机,为了便于用户安装使用和更新卸载,需要对系统和运行依赖环境进行整体打包封装处理。本文使用exe4j Wizard工具将系统开发完成后导出的JAR 包和Java 环境JRE 文件打包成一个exe 类型的可执行文件,然后编写MySQL 数据库自动安装配置脚本,最后使用Inno Setup Compiler 工具对系统可执行文件、MySQL和Redis 安装包及其运行依赖等相关文件内容进行整体统一封装,使其成为一个用户简单快捷操作的Windows 系统安装软件。系统安装过程如图10 所示。
图10 系统本地安装过程界面
系统在实际生产环境中的运行情况符合预期。
通过调节与种猪测定终端设备的接收速度,可实现每分钟平稳接收存储1 万条左右的原始数据,并且无错误存储或数据丢失等情况发生。
系统所有基础功能使用正常,通过对种猪连续90 d 的真实测定,其数据统计分析结果正确,同时用户管理操作后能实时准确更新,缓存结果显示迅速,用户体验良好。
系统本地安装使用可兼容Windows 10 版本的操作系统,无特殊硬件环境要求,适用于大部分PC 机,用户能独立完成系统软件的安装卸载和更新。
本畜禽养殖数据管理系统实现了同种猪测定终端设备相互通信、种猪生长性能测定数据管理、数据实时统计分析和图表结果可视化展示等功能,为规模化育种企业种猪测定业务提供了精确的数据管理和分析服务。