根據2023年全國大學生數學建模D題,規模化的湖羊養殖場一般建有標準羊欄,每個標準羊欄允許存放的羊只數量由羊的性別、生長周期、大小決定。本文根據自然交配期、孕期、哺乳期、羔羊育肥期、母羊空懷休整期、公羊非交配期可以存放的羊欄類型和數量限制,設計動態規劃算法,將公羊和母羊按比例分批次間隔交配,計算得出每天所有批次的湖羊使用的羊欄類型和數量,以最大化年化出欄羊只的數量。進一步考慮自然交配成功率、分娩羔羊的數量、死亡率、哺乳時間波動等不確定因素,利用蒙特卡洛方法模擬驗證概率分布,調整原動態規劃算法,給出期望損失最小的生產計劃。
湖羊是國家級保護品種,湖羊養殖場一般會根據羊的大小、生長階段以及性別來決定標準羊欄所能容納的湖羊數量。在實際的圈養中,需要盡量減少空間閑置所引起的資源浪費,空間利用率也是影響湖羊養殖場經濟效益的重要因素。
對于養殖場的管理者來說,需要通過制定合適的生產計劃合理優化養殖場的空間利用率來達到獲取最高效益的目的,而生產計劃則是指規劃什么時候種公羊和多少可接受配種的基礎母羊來進行配種,通過控制母羊的繁育期從而確定對羊欄的需求量,要確保有足夠的羊欄,同時盡量縮小羊欄的閑置。
一、問題1模型的建立與求解
(一)問題1模型的建立
已知自然交配期為20天,此時期每欄可以放1只公羊和最多14只母羊;孕期149天,每胎可產2只羔羊,此時期每欄最多可以放8只待產母羊;哺乳期40天,此時期每欄最多可以放6只母羊和它們的羔羊;羔羊的育肥期需要210天,此時期每欄最多可以放14只羔羊;母羊的空懷休整期需要20天,此時期每欄最多可以放14只母羊。
根據問題1,在算法中母羊的數量m從1疊加到1000,根據種公羊與基礎母羊的比例配置不低于1:50,求出種公羊的數目g。根據種公羊和母羊的數量及羊欄放置的要求,在每一個周期中,將種公羊和基礎母羊分批次間隔20天進行交配。因母羊每間隔229天可以進行一次交配,根據天數i的取值,判斷出母羊、種公羊、羔羊處于自然交配期、孕期、哺乳期、育肥期、空懷休整期以及非交配期,并計算出對應時期所需的羊欄數量,求和得出每天所需的總的羊欄數Li,羊欄數的最大值Lmax,若Lmax不超過112,得出此時的種公羊和基礎母羊的數量,從而算出年化出欄羊只數量的范圍。根據計算出的年化出欄數量,判斷年化出欄羊只數量不少于1500只時,需要多少標準羊欄,從而計算出現有標準羊欄數量的缺口。具體動態規劃的算法思路如下:
步驟一:給定基礎母羊的數量m,算出相應的種公羊數目和應分配的批次。將m從1疊加到1000,因種公羊與基礎母羊的比例配置不低于1:50,取種公羊的數目g=。自然交配期每欄最多可放1只公羊和14只母羊,首先將1只公羊配夠14只母羊,首先將1只公羊配夠14只母羊進行分批,共分為p=批,還剩mp+1=m-14gp只母羊在第(p+1)批次,按照全部使用公羊的原則分組進行自然交配。
步驟二:判斷母羊、種公羊、羔羊每天所處的時期,計算出每天所需總的羊欄數Li。以母羊的繁育周期Tjp=tj+ty+tb+tk=229天為一個基礎周期,對天數i=1:365n(n為正整數),令a=,對于第1個批次,當i20+229a,說明該批次所有母羊都處在自然交配期,因此使用的羊欄數為母羊數除以14,即為。若20+229a<i169+229a,說明此時該批次所有母羊都處在孕期,因此使用的羊欄數為。若169+229a<i209+229a,說明此時該批次所有基礎母羊和所生的羊羔處在哺乳期,因此使用的羊欄數為。若209+229×a<i209+229×a,說明此時該批次所有母羊處在空懷休整期,該批次所有羔羊都處在育肥期,因此使用的羊欄數為母羊和羔羊的總和,即為+。按照上述方法,依次進行到最后一個批次。最后計算公羊使用欄數,因為公羊在20(p+1)天后完成所有母羊的交配,并且在229天母羊經歷完空懷休整期后,才能開始下一次交配,因此當20(p+1)+229a<i209+229a時,公羊處在非交配期,使用羊欄數為,在其他天數內,公羊處在和母羊的交配期,不用額外計算羊欄數。而從羔羊育肥期開始,每經過時間210天,羊羔就會出欄,因此羔羊育肥期羊欄數這時就會更新為0,綜上,計算第i天所有批次使用的羊欄數和公羊使用的總的羊欄數,記為Li。
步驟三:求出Lmax=112個標準羊欄對應的種公羊和基礎母羊數量。對天數i=1:365n,將第一天的羊欄數Lj賦為最大值Lmax,將后一天的使用的羊欄數與前一天的羊欄數做比較,將數值更大的賦值為Lmax,依次進行,直到Lmax=112,則滿足條件,輸出種公羊和基礎母羊數量。
步驟四:依據上一步得出的母羊數量,構造函數x軸表示時間第1年到100年,y軸表示每年年化出欄羊只數量,從第12年起,圖像趨于平緩,故選擇12年作為計算年化出欄羊只數量的基數,輸出年化出欄羊只數量的范圍。
需要求出年化出欄羊只數目,可得計算公式為:
其中,Nc表示年化出欄羊只的數量,m表示在整個周期中母羊的總數量,n表示進行年化計算所取的年限。
(二)問題1模型的求解
根據動態規劃算法思路編寫MATLAB程序代碼,計算得出最多使用112個羊欄條件下,種公羊和基礎母羊的合理數量有3種類型,分別為公羊數8只和基礎母羊數369只,公羊數8只和基礎母羊數370只,公羊數8只和基礎母羊數371只。
圖1 年化出欄羊只數量變化圖
圖1中x軸表示時間第1年到100年,y軸表示每年年化出欄羊只數量,觀察圖像可知,從第12年起,圖像逐漸趨于平穩,故選擇12年作為計算年化出欄羊只數量的基數,因此得出:
當基礎母羊為369只和種公羊數量8只時,年化出欄羊只數量為:
同理,當基礎母羊為370只和種公羊數量8只時,計算得出Nc=1110,當基礎母羊為371只和種公羊數量8只時,計算得出Nc=1113。
綜上所述,最大使用標準羊欄數為112個時,種公羊和基礎母羊的合理數量分別為8只和369只、8只和370只、8只和371只3種類型,年化出欄羊只數量的取值范圍為[1107,1113]。
要滿足養殖場每年出欄羊只數目大于等于1500只,不妨設總基礎母羊數目為m,計算出基礎母羊的數量:
計算得出m的取值范圍為m500,因此取m的最小值m=500,通過動態規劃算法1思路編寫的MATLAB程序,計算出第419天占用的標準羊欄數目為L419=151,即為Lmax的取值,因此現有標準羊欄數量的缺口Lq取值為:
Lq=Lmax-112=151-112=39
二、問題2模型的建立與求解
(一)問題2模型的建立
問題2需要在112個標準羊欄的條件下,求出種公羊和基礎母羊數量的合理取值,以最大化年化出欄羊只數量Nc,設決策變量為基礎母羊的數量m,可得目標函數為:
對于天數i從1到365n取值,都有每天的基礎母羊數量的取值均為m,得出第1個約束條件:
其中,mi為第i天的基礎母羊總量,為第i天處于自然交配期的基礎母羊數量,為第i天處于孕期的基礎母羊數量,為第i天處于哺乳期的基礎母羊數量,為第i天處于空懷修整期的基礎母羊數量。
由于總標準羊欄數為112個,因此可以得出每天的羊欄使用數都不超過112個,得出第2個約束條件:
其中,為第i天正在非交配期的種公羊的數量,為第i天育肥期的羔羊的數量。
綜上所述,得出本題數學優化模型如下:
(二)問題2模型的求解
根據問題1的算法,在使用112個標準羊欄的條件下,為最大化年化出欄羊只數量,給母羊數m賦值為371,得出公羊數g==8,年化計算周期為12年,計算得Nc的最大值為:
第1個周期的羔羊在第479天全部育肥期結束出欄,間隔229天后,第2個周期的羔羊在第937天全部育肥期結束后出欄,因此取天數i=1:937,通過算法,可計算出第1天到第937天種公羊和基礎母羊的配種時間、羊欄的使用個數,具體生產計劃見表1。
三、問題3模型的建立與求解
(一)問題3模型的建立
母羊自然交配的受孕率為85%,可使用蒙特卡洛算法進行大量模擬得出的成功受孕數量應向上取整,即S=,剩余的交配不成功的15%的母羊數量為m=,這個周期內都安置在空懷休整欄。以平均97%的羔羊存活率,平均產羔2.2只每胎作為估算值,計算出羔羊出生數量并向下取整。每個基礎周期228天內將未受孕的基礎母羊安置空懷休整期,在孕期147~150天之間波動,可將受孕母羊分為4份,前3份受孕母羊數量均為,第4份受孕母羊數量為S-3×,在孕期波動的情況下,以哺乳期40天為基準,可以通過分別延長哺乳期3天、2天、1天和0天,使得同一周期的母羊哺乳期的結束時間一致,以便于后續計算。以最短18天作為空懷休整期的時間,這樣可以讓母羊更早的進入下一個周期循環中。
在同一批次中,分娩日期相差不超過7天的哺乳期母羊及所產羔羊可以同欄,故可將上述哺乳期時間不一致的母羊及其所產羔羊安置在一塊,因為孕期在147~150天之間波動,故最大時間差為3天;斷奶日期相差不超過7天的育肥期羔羊可以同欄,故同樣可將結束哺乳期的羔羊放在同一個羊欄中,其最大時間差也為3天;且斷奶日期相差不超過7天的休整期母羊一樣可以同欄,及可將結束哺乳期的母羊安置在同一個羊欄中,最大時間差同樣為3天。
對問題1的算法進行改進,在算法中母羊的數量m從1疊加到1000,根據種公羊與基礎母羊的比例配置不低于1:50,求出種公羊的數目g,根據種公羊和母羊的數量及羊欄放置的要求,在每一個周期中,將種公羊和基礎母羊分批次間隔20天進行交配。因母羊每間隔228天可以進行一次交配,根據天數i的取值,判斷出母羊、種公羊、羔羊處于自然交配期、孕期、哺乳期、育肥期、空懷休整期、非交配期,因為孕期存在波動,希望所有母羊同時進入空懷休整期,故通過延長哺乳期,因為延長了哺乳期所以羔羊育肥期會相應的縮短,并計算出每天所需的羊欄數量Li,Li與112進行比較,從而得出每天損失量。
(二)問題3模型的求解
根據問題3的算法思路,在使用112個標準羊欄的條件下,得出母羊數m,從而得出母羊數m=400,g==8,第一個周期的羔羊在第480天全部育肥期結束出欄,因此取天數i=1:480,通過蒙特卡洛算法,在MATLAB中得到最多次數的成功受孕數s,如圖2所示,s的值取360。
通過算法,可計算出第1天到第480天種公羊和基礎母羊的配種時間、羊欄的使用個數,具體生產計劃見表2。
其次再計算出每天產生的損失欄數,然后統計相同的損失量的天數,得出的天數再進行年化,求出相同的損失量的和,乘以在總天數的占比可得期望損失。可得:
其中,v表示根據損失量的天數所劃分的結果數,Rv表示第v種結果發生的概率,Xv表示第v種結果的損失。
在MATLAB中實現可得圖3:
根據圖3可知,當基本母羊數為423時,最小羊欄年化損失量為4160。
本文設計的動態規劃算法統籌分析了自然交配期、孕期、哺乳期、羔羊育肥期、母羊空懷休整期、公羊非交配期可以存放的羊欄的類型和數量限制。限制標準羊欄數的取值,可以得出每天具體的湖羊生產計劃。限制年化出欄羊只數量的范圍,可以得出需要使用的最大標準羊欄數量。因此該算法可以運用于解決規模化的養殖場中關于空間利用率分配和生產計劃的難題,對于最大化空間利用率,減少成本以及提高生產量具有積極的作用。
(作者單位:阜陽職業技術學院)
作者簡介:房麗,1993年出生,女,安徽省阜陽市人,漢族,阜陽職業技術學院助教,碩士。主要研究方向:應用數學。
基金項目:本論文為2023年度安徽省高校自然科學研究項目“機器學習算法在工業互聯網入侵檢測模型中的應用研究”研究成果,項目編號:2023AH052421。