吳卓葵,何宏浩,張文峰,張小花,葉 祥
(1.仲愷農業工程學院 自動化學院,廣東 廣州 510225;2.廣東省農產品冷鏈運輸與物流工程技術研究中心,廣東 廣州 510225)
對生鮮農產品配送需求量進行預測,實現按需配送,可以降低甚至實現生鮮農產品的零庫存,減少生鮮農產品變質、腐爛等損耗,降低企業經營成本,提高企業利潤[1]。
目前存在多種生鮮農產品配送需求量預測方法,主要有時間序列法、因果分析法、現代預測方法和組合預測法等[2]。其中組合預測法可以彌補單項預測方法的不足,預測結果通常更加準確[3-4]。相關的組合預測法有Grey-Markov模型[5]、Grey線性組合模型[6]、偏二叉樹SVM(Support Vector Machine,SVM)銷量區間預測模型[7]和皇冠模型[8]等。然而,如何高效應用這些方法對生鮮農產品配送需求量進行預測的問題仍然沒有很好地解決。
針對以上問題,該文提出一種基于Grey-Markov的生鮮配送需求量預測系統,利用計算機軟件技術、數據庫技術和網絡技術,實現原始數據導入、原始數據管理、歷史銷量分析和需求量預測等功能,用于高效預測生鮮農產品配送需求量,實現按需配送,,減少生鮮農產品變質、腐爛等損耗。
系統需要處理海量的生鮮農產品銷量數據,為了更流暢地對數據進行處理,達到更好的交互效果,確定系統采用C/S架構[9-10]。
系統架構設計如圖1所示,其由客戶端PC和MySQL服務器兩部分組成。系統軟件由系統程序和數據庫組成。客戶端PC安裝系統程序,為用戶提供生鮮農產品配送需求量預測服務。數據庫服務由MySQL服務器提供,在MySQL服務器中建立系統數據庫[11]。MySQL是目前最流行的免費開源關系型數據庫管理系統。系統程序通過Internet連接MySQL服務器進行遠程數據存取操作。

圖1 系統架構
為了高效地實現生鮮農產品配送需求量的預測,結合用戶需求分析和調研結果,設計生鮮配送需求量預測系統的功能模塊,如圖2所示[12]。

圖2 系統功能模塊
表1為生鮮配送需求量預測系統各功能模塊的詳細設計內容。

表1 系統各功能模塊設計內容
根據生鮮配送需求量預測系統的架構,采用C#語言設計系統。C#是Microsoft公司發布的一種由C和C++衍生出來的面向對象的編程語言,為當前Windows桌面程序開發的最熱門語言[13]。系統程序采用Visual Studio 2019開發,Visual Studio是Microsoft 公司發布的Windows平臺應用程序的集成開發環境,是C#語言的首選開發工具[14]。數據庫管理系統采用MySQL 8.0。
根據生鮮配送需求量預測系統的功能,在數據庫中設計users和sales兩個數據表,分別用于存儲用戶信息和生鮮農產品銷量信息。表2為sales表的設計信息。

表2 sales表設計信息
界面設計圍繞系統需要實現的功能進行,并充分考慮人機交互便利性。設計的系統界面由登錄窗體、注冊窗體、系統主界面窗體、原始數據導入窗體、原始數據管理窗體、年銷量統計窗體、季度銷量統計窗體、月銷量統計窗體、日銷量統計窗體、需求量預測結果與導出窗體、需求量預測詳情窗體、個人信息管理窗體、修改個人信息窗體和修改密碼窗體等14個窗體組成,分別對應系統設計的各個功能。
系統主界面窗體布局包含窗體頭部、左導航欄和窗體主體三部分。窗體頭部放置PictureBox控件,用于顯示系統Banner。左側導航欄放置系統主體功能的各個操作按鈕,包括原始數據導入、歷史銷量分析和需求量預測等操作按鈕。窗體主體中放置Panel容器,程序根據用戶操作或者需要在Panel容器中載入操作項對應的窗體。
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);//需求量最終預測值
為了測試設計的生鮮配送需求量預測系統是否實現了預期的功能,對系統進行黑盒測試[20]。根據系統預期的功能,設計12個用例對系統進行測試。
圖5為測試時系統運行界面,為配送需求量預測詳情界面。

圖5 系統運行界面
表3為系統測試結果。由表3所示,各個測試用例都取得了預期的輸出結果,系統實現了預期的功能。

表3 系統測試結果
為了分析系統的預測效果,使用設計的系統和指數回歸方法對某農產品銷售企業連續18天的番茄配送需求量進行預測,并將預測結果與實際需求量進行對比,圖6為預測結果。

圖6 配送需求量預測結果
由圖6可見,無論是系統的基于Grey-Markov的預測方法,還是指數回歸預測方法,都能較好地對配送需求量進行預測,但基于Grey-Markov的預測方法的預測結果曲線在總體上更貼近實際需求量曲線,具有更好的精度。其中,Grey-Markov的平均相對誤差約為7.87%,指數回歸的平均相對誤差約為12.49%。
為了分析系統的應用效果,將設計的系統在農產品銷售企業中進行了應用。采取調查的方式了解系統應用情況,調查主要圍繞以下三個方面進行:
(1)對操作體驗是否滿意;
(2)對預測結果是否滿意;
(3)使用系統前后,日剩余未售出生鮮農產品總量變化比例。
表4為系統應用調查結果。

表4 系統應用調查結果
由表4可看出,系統應用效果良好,操作方便,可高效對生鮮農產品配送需求量進行預測。與使用系統前相比,日剩余未售出生鮮農產品總量可降低20百分點以上,能有效減少生鮮農產品的損耗。
該文提出一種基于Grey-Markov的生鮮配送需求量預測系統,用于實現高效地對生鮮農產品配送需求量進行預測。系統采用C/S架構,具有登錄模塊、注冊模塊、原始數據導入模塊、原始數據管理模塊、歷史銷量分析模塊、需求量預測模塊和個人信息管理模塊等7個功能模塊。詳細介紹了系統的架構設計、功能設計、數據庫設計和程序設計,并對系統進行了測試與分析。測試與應用結果表明,系統實現了預期的功能,應用效果良好,可有效減少生鮮農產品的損耗。與使用系統前相比,日剩余未售出生鮮農產品總量可降低20百分點以上。