基于Grey-Markov的生鲜配送需求量预测系统

2023-02-05 11:31吴卓葵何宏浩张文峰张小花
计算机技术与发展 2023年1期
关键词:窗体原始数据需求量

吴卓葵,何宏浩,张文峰,张小花,叶 祥

(1.仲恺农业工程学院 自动化学院,广东 广州 510225;2.广东省农产品冷链运输与物流工程技术研究中心,广东 广州 510225)

0 引 言

对生鲜农产品配送需求量进行预测,实现按需配送,可以降低甚至实现生鲜农产品的零库存,减少生鲜农产品变质、腐烂等损耗,降低企业经营成本,提高企业利润[1]。

目前存在多种生鲜农产品配送需求量预测方法,主要有时间序列法、因果分析法、现代预测方法和组合预测法等[2]。其中组合预测法可以弥补单项预测方法的不足,预测结果通常更加准确[3-4]。相关的组合预测法有Grey-Markov模型[5]、Grey线性组合模型[6]、偏二叉树SVM(Support Vector Machine,SVM)销量区间预测模型[7]和皇冠模型[8]等。然而,如何高效应用这些方法对生鲜农产品配送需求量进行预测的问题仍然没有很好地解决。

针对以上问题,该文提出一种基于Grey-Markov的生鲜配送需求量预测系统,利用计算机软件技术、数据库技术和网络技术,实现原始数据导入、原始数据管理、历史销量分析和需求量预测等功能,用于高效预测生鲜农产品配送需求量,实现按需配送,,减少生鲜农产品变质、腐烂等损耗。

1 总体设计

1.1 架构设计

系统需要处理海量的生鲜农产品销量数据,为了更流畅地对数据进行处理,达到更好的交互效果,确定系统采用C/S架构[9-10]。

系统架构设计如图1所示,其由客户端PC和MySQL服务器两部分组成。系统软件由系统程序和数据库组成。客户端PC安装系统程序,为用户提供生鲜农产品配送需求量预测服务。数据库服务由MySQL服务器提供,在MySQL服务器中建立系统数据库[11]。MySQL是目前最流行的免费开源关系型数据库管理系统。系统程序通过Internet连接MySQL服务器进行远程数据存取操作。

图1 系统架构

1.2 功能设计

为了高效地实现生鲜农产品配送需求量的预测,结合用户需求分析和调研结果,设计生鲜配送需求量预测系统的功能模块,如图2所示[12]。

图2 系统功能模块

表1为生鲜配送需求量预测系统各功能模块的详细设计内容。

表1 系统各功能模块设计内容

1.3 开发语言和开发工具

根据生鲜配送需求量预测系统的架构,采用C#语言设计系统。C#是Microsoft公司发布的一种由C和C++衍生出来的面向对象的编程语言,为当前Windows桌面程序开发的最热门语言[13]。系统程序采用Visual Studio 2019开发,Visual Studio是Microsoft 公司发布的Windows平台应用程序的集成开发环境,是C#语言的首选开发工具[14]。数据库管理系统采用MySQL 8.0。

2 系统详细设计

2.1 数据库设计

根据生鲜配送需求量预测系统的功能,在数据库中设计users和sales两个数据表,分别用于存储用户信息和生鲜农产品销量信息。表2为sales表的设计信息。

表2 sales表设计信息

2.2 界面设计

界面设计围绕系统需要实现的功能进行,并充分考虑人机交互便利性。设计的系统界面由登录窗体、注册窗体、系统主界面窗体、原始数据导入窗体、原始数据管理窗体、年销量统计窗体、季度销量统计窗体、月销量统计窗体、日销量统计窗体、需求量预测结果与导出窗体、需求量预测详情窗体、个人信息管理窗体、修改个人信息窗体和修改密码窗体等14个窗体组成,分别对应系统设计的各个功能。

系统主界面窗体布局包含窗体头部、左导航栏和窗体主体三部分。窗体头部放置PictureBox控件,用于显示系统Banner。左侧导航栏放置系统主体功能的各个操作按钮,包括原始数据导入、历史销量分析和需求量预测等操作按钮。窗体主体中放置Panel容器,程序根据用户操作或者需要在Panel容器中载入操作项对应的窗体。

2.3 关键功能模块设计

2.3.1 原始数据导入模块设计

原始数据导入模块主要实现导入销量数据文件和上传销量数据至数据库的功能。销量数据文件为Excel文件格式,Excel文件中表的列名应该包含且名称为:生鲜农产品编号、生鲜农产品名称、销量、单位、时间。采用ADO.Net技术读取Excel文件数据,图3为导入销量数据文件功能实现流程[15]。

图3 导入销量数据文件功能实现流程

2.3.2 历史销量分析模块设计

历史销量分析模块包括年销量统计、季度销量统计、月销量统计和日销量统计4个子模块,分别对生鲜农产品销量进行按年、按季度、按月和按日的统计分析。在每个子模块中,使用ListVIEW控件显示具体的生鲜农产品销量统计数据和使用Chart控件以折线的形式显示销量变化趋势,也可将统计结果数据导出至Excel文件。对生鲜农产品销量进行按年统计的实现方法如算法1所示。

算法1:生鲜农产品销量按年统计算法。

(1)//构造对生鲜农产品销量按年统计的SQL语句

string queryStr ="select product_id,product_name, Year(sale_time) AS 年份, Sum(sale_quantity) As 销量,sale_unit From sales where account='" + loginUser + "' and product_id=" + product_id + " group by 年份";

(2)//执行SQL语句,将获取的数据存储进表格变量dt;

(3)MySqlDataAdapter myDap = new MySqlDataAdapter(queryStr, myCon);

(4)DataTable dt = new DataTable();

(5)myDap.Fill(dt);

(6)//将数据在ListView控件listView1中显示

(7)//以折线的形式显示销量变化趋势

(8)chart1.DataSource = dt;//设置对象的数据源

(9)chart1.Series[0].XValueMember = "年份";

(10)chart1.Series[0].YValueMembers = "销量";

(11)chart1.Series[0].Label = "#VAL";

2.3.3 基于Grey-Markov的配送需求量预测模块设计

系统以Grey-Markov为预测模型,对生鲜农产品下一日的配送需求量进行预测,以实现按需配送。Grey-Markov模型与指数回归等预测模型相比,具有更强的稳定性,且可消除外在因素可能对生鲜农产品销量产生大幅度变化的影响,具有更好的准确性[16-17]。

2.3.3.1 基于Grey-Markov的配送需求量预测方法设计

基于Grey-Markov模型,生鲜农产品配送需求量预测方法设计为:

(1)建立生鲜农产品销量的Grey模型GM(1,1),确定下一天的生鲜农产品配送需求量的初步预测值。具体为:

①将前12天的生鲜农产品销量数据作为GM(1,1)的原始数据序列:x(0)={x(0)(1),x(0)(2),…,x(0)(12)};

④根据Grey系统理论建立GM(1,1)的灰微分方程模型x(0)(k)+αz(1)(k)=β,其中x(0)(k)为灰导数,z(1)(k)为白化背景值,α为发展系数,β为灰色作用量;

⑤将k=2,3,…,12代入x(0)(k)+αz(1)(k)=β,得方程组:

采用最小二乘法对上面的方程组进行求解,求得发展系数α和灰色作用量β的值:

其中:

于是得到生鲜农产品销量数据累加值的预测值:

则下一天的生鲜农产品配送需求量的初步预测值为:

代入k=12,求得具体的初步预测值:

②计算相邻值变化状态组合的数目。若分别用数字1、2、3表示状态一般、畅销和滞销,则为统计 (1→1,1→2,1→3,2→1,...)等状态趋势的数目:

若p1>1,则转移概率矩阵第1行修改为:

2.3.3.2 基于Grey-Markov的需求量预测程序设计

基于Grey-Markov的需求量预测程序由需求量预测结果与输出和需求量预测详情两个子模块组成。需求量预测结果与输出子模块以Grey-Markov为预测模型,预测所有生鲜农产品下一日的配送需求量,使用ListVIEW控件显示预测结果,并实现将预测结果导出为Excel文件的功能[19]。需求量预测详情子模块以ListVIEW控件显示每一种生鲜农产品的需求量预测依赖的原始数据、以折线形式显示的原始数据变化趋势以及需求量预测结果。

图4为需求量预测结果与输出子模块中的需求量预测功能实现流程。

图4 需求量预测功能实现流程

算法2为基于Grey-Markov的生鲜配送需求量预测算法。

算法2:基于Grey-Markov的生鲜配送需求量预测算法。

Input:前12天的生鲜农产品销量序列x0[0],...,x0[12]

Output:下一天的生鲜农产品配送需求量result

(1)x1[0]=x0[0];

(2)for (int i=1;i<11;i++) x1[i]=x1[i-1]+x0[i];

(3)double[,] derivedData = new double[11, 2];

(4)for (int i=0;i<11;i++){

(5)derivedData[i,0]=-0.5*(x1[i]+x1[i+1]);

(6)derivedData[i,1]=x0[i+1];}

(7)LinearRegression(derivedData,out a,out b);

(8) //配送需求量初步预测值

result1=(x0[0]-b/a)*(1-Math.Exp(a))*Math.Exp(-a*12);

(9)for (int i=0;i<12;i++){

(10)if (i==0) xxi=x0[i];

(11)else xxi=(x0[0]-u/a)*(1-Math.Exp(a))*Math.Exp(-a * i);

(12)chazhi[i]=Math.Abs(x0[i]/xxi);}

(13) result=Markov(result1,chazhi);//需求量最终预测值

3 系统测试与应用

3.1 功能测试与分析

为了测试设计的生鲜配送需求量预测系统是否实现了预期的功能,对系统进行黑盒测试[20]。根据系统预期的功能,设计12个用例对系统进行测试。

图5为测试时系统运行界面,为配送需求量预测详情界面。

图5 系统运行界面

表3为系统测试结果。由表3所示,各个测试用例都取得了预期的输出结果,系统实现了预期的功能。

表3 系统测试结果

3.2 性能测试与分析

为了分析系统的预测效果,使用设计的系统和指数回归方法对某农产品销售企业连续18天的番茄配送需求量进行预测,并将预测结果与实际需求量进行对比,图6为预测结果。

图6 配送需求量预测结果

由图6可见,无论是系统的基于Grey-Markov的预测方法,还是指数回归预测方法,都能较好地对配送需求量进行预测,但基于Grey-Markov的预测方法的预测结果曲线在总体上更贴近实际需求量曲线,具有更好的精度。其中,Grey-Markov的平均相对误差约为7.87%,指数回归的平均相对误差约为12.49%。

3.3 系统应用与分析

为了分析系统的应用效果,将设计的系统在农产品销售企业中进行了应用。采取调查的方式了解系统应用情况,调查主要围绕以下三个方面进行:

(1)对操作体验是否满意;

(2)对预测结果是否满意;

(3)使用系统前后,日剩余未售出生鲜农产品总量变化比例。

表4为系统应用调查结果。

表4 系统应用调查结果

由表4可看出,系统应用效果良好,操作方便,可高效对生鲜农产品配送需求量进行预测。与使用系统前相比,日剩余未售出生鲜农产品总量可降低20百分点以上,能有效减少生鲜农产品的损耗。

4 结束语

该文提出一种基于Grey-Markov的生鲜配送需求量预测系统,用于实现高效地对生鲜农产品配送需求量进行预测。系统采用C/S架构,具有登录模块、注册模块、原始数据导入模块、原始数据管理模块、历史销量分析模块、需求量预测模块和个人信息管理模块等7个功能模块。详细介绍了系统的架构设计、功能设计、数据库设计和程序设计,并对系统进行了测试与分析。测试与应用结果表明,系统实现了预期的功能,应用效果良好,可有效减少生鲜农产品的损耗。与使用系统前相比,日剩余未售出生鲜农产品总量可降低20百分点以上。

猜你喜欢
窗体原始数据需求量
GOLDEN OPPORTUNITY FOR CHINA-INDONESIA COOPERATION
从数学角度看“弹性”
受特定变化趋势限制的传感器数据处理方法研究
价格战是一定的! 2020年虾苗需求量预计减少10%~20%,苗价下调是趋势
试谈Access 2007数据库在林业档案管理中的应用
全新Mentor DRS360 平台借助集中式原始数据融合及直接实时传感技术实现5 级自动驾驶
2017年我国汽车软管需求量将达6.4亿m
我国长江流域汽车需求量分析及预测
巧设WPS窗体控件让表格填写更规范
世界经济趋势