非线性规划问题求解(举例)
1.概述
非線性規(guī)劃是一種求解目標(biāo)函數(shù)或約束條件中有一個或幾個非線性函數(shù)的最優(yōu)化問題的方法。運(yùn)籌學(xué)的一個重要分支。20世紀(jì)50年代初,庫哈(H.W.Kuhn) 和托克 (A.W.Tucker) 提出了非線性規(guī)劃的基本定理,為非線性規(guī)劃奠定了理論基礎(chǔ)。這一方法在工業(yè)、交通運(yùn)輸、經(jīng)濟(jì)管理和軍事等方面有廣泛的應(yīng)用,特別是在“最優(yōu)設(shè)計(jì)”方面,它提供了數(shù)學(xué)基礎(chǔ)和計(jì)算方法,因此有重要的實(shí)用價(jià)值。
簡單來說,若規(guī)劃問題的目標(biāo)函數(shù)或約束條件中包含非線性函數(shù),則稱為非線性規(guī)劃。
2.模型
本文主要采用matlab進(jìn)行非線性規(guī)劃的求解,lingo的求解以后會專門出一個教程。
下面是Matlab中非線性規(guī)劃的標(biāo)準(zhǔn)形式:
其中,大部分參數(shù)同線性規(guī)劃;‘fun’為目標(biāo)函數(shù);VLB、VUB為邊界約束;A、b、Aeq、beq為線性約束,其中A、b為不等式約束,Aeq、beq為等式約束;‘nonlcon’為非線性約束;x0是初始值,也就是迭代的起點(diǎn);options是算法中相關(guān)的設(shè)置,一般可以先用默認(rèn)的求解,然后根據(jù)matlab的提示再調(diào)整。
3.舉例求解
????????小龍蝦因體型比其他淡水蝦類大,肉也相對較多,及肉質(zhì)鮮美之原因,而被制成多種料理,都受到了普遍的歡迎。《中國小龍蝦產(chǎn)業(yè)發(fā)展報(bào)告(2021)》中指出,2021年我國小龍蝦產(chǎn)業(yè)繼續(xù)保持較快發(fā)展,養(yǎng)殖面積和養(yǎng)殖產(chǎn)量再創(chuàng)新高,據(jù)測算, 2021年我國小龍蝦養(yǎng)殖總產(chǎn)量將達(dá)208.96萬噸,小龍蝦產(chǎn)業(yè)總產(chǎn)值達(dá)4110億元,其中,小龍蝦養(yǎng)殖業(yè)產(chǎn)值約710億元。
????????現(xiàn)在請運(yùn)用數(shù)學(xué)知識來研究一下小龍蝦養(yǎng)殖的相關(guān)問題。小龍蝦在一個繁殖周期內(nèi),龍蝦數(shù)量以斐波那契數(shù)列增長,1,2,3,5,8,13,21,34,55,89...這個數(shù)列的前后項(xiàng)之比越來越趨近于黃金分割0.618,換而言之,這個數(shù)量增長的速度幾乎是以為底數(shù)的指數(shù)增長列。
????????假設(shè)某種龍蝦分四個年齡組,分別為一歲到四歲。各年齡組龍蝦的平均重量分別為5.17、11.58、17.66、22.98(g),各年齡組龍蝦的自然死亡率為0.79(/年),且龍蝦為季節(jié)性繁殖,平均每只四歲蝦的產(chǎn)卵量為?(個),三歲蝦的產(chǎn)卵量為這個數(shù)的一半,兩歲蝦和一歲蝦不產(chǎn)卵,產(chǎn)卵和孵化期為每年的最后4個月,卵孵化并成活為一歲蝦,其成活率(一歲蝦條數(shù)與產(chǎn)卵總量 之比)為 。龍蝦養(yǎng)殖場每年只在產(chǎn)卵孵化期前的8個月內(nèi)進(jìn)行捕撈作業(yè).如果每年捕撈強(qiáng)度固定不變,這時單位時間捕撈量與各年齡組蝦群條數(shù)成正比,比例系數(shù)稱捕撈強(qiáng)度系數(shù).通常只捕撈三歲蝦和四歲蝦,其兩個捕撈強(qiáng)度系數(shù)之比為0.42:1。
現(xiàn)假設(shè)有一荒廢的池塘中龍蝦數(shù)量隨時間變化如表1所示
表1? 某荒廢的池塘中龍蝦數(shù)量隨時間變化表
請你和你的團(tuán)隊(duì)嘗試解決以下問題:
問題1:為了滿足龍蝦養(yǎng)殖場的長期運(yùn)營,需要實(shí)現(xiàn)每年開始捕撈時養(yǎng)殖場中各年齡蝦的數(shù)量基本保持不變。請建立數(shù)學(xué)模型分析如何在此前提下得到最高的年收獲量(捕獲龍蝦總重量)。
問題2:若某龍蝦養(yǎng)殖場計(jì)劃養(yǎng)殖這種龍蝦,要求5年后蝦群的生產(chǎn)能力不能受到太大破壞。已知承包時各年齡組蝦群的數(shù)量分別為:125、31.7、9.7、3.09( 只),如果采用相同的捕撈強(qiáng)度,該養(yǎng)殖場應(yīng)采取怎樣的策略才能使總收獲量最高。
以問題1為例說明如何分析非線性規(guī)劃以及利用MATLAB求解非線性規(guī)劃問題
由題易知其為最優(yōu)化問題,故須確立目標(biāo)函數(shù),約束條件進(jìn)行優(yōu)化求解。
目標(biāo)函數(shù):收獲的蝦的總重量最大
約束條件:
第j+1年y+1歲蝦的數(shù)量n(j+1)(y+1) =第j年y歲蝦的數(shù)量njy *(1-0.79)(存活率)
(j=1,2……;y=1,2)
第j+1年4歲蝦的數(shù)量n(j+1)4 =第j年3歲蝦的數(shù)量nj3 *(1-0.79)(存活率)-第j年3歲蝦的捕撈量bj3
(n=1,2……)
第j+1年1歲蝦的數(shù)量n(j+1)1 =(第j年4歲蝦的數(shù)量nj4 -第j年4歲蝦的捕撈量b4)*4歲蝦的產(chǎn)卵量 +(第j年3歲蝦的數(shù)量nj3 -第j年3歲蝦的捕撈量b3)*3歲蝦的產(chǎn)卵量(四歲蝦的一半)
蝦的捕撈量和其數(shù)量有關(guān)。
(b3/n3)/(b4/n4)=0.42
各個年齡段的蝦的數(shù)量基本保持不變(k=5%)
njy*(1-k)≤nj+1y≤njy*(1+k)
(j+1年y歲蝦的數(shù)量處于j年y歲蝦的數(shù)量*百分比(1k))范圍內(nèi)
捕撈量小于龍蝦數(shù)量:b3<n13,b4<n14;
蝦的數(shù)量為整數(shù):njy(j=1,2;y=1,2,3,4),
捕撈量為整數(shù):b3,b4
第一年各年齡蝦的數(shù)量:1226,308,99,41;
第二年各年齡蝦的數(shù)量:1273,293,100,39。
前后兩年蝦的數(shù)量波動在5%以內(nèi)
捕獲的3歲蝦29只,4歲蝦28只
收獲29*17.66+28*22.98=1155.6克
代碼實(shí)現(xiàn)
%非線性規(guī)劃main.m p=0.79;%死亡率 k=0.05;%與前一年相比,今年各個年齡段蝦的數(shù)量的波動系數(shù) %% 線性不等式約束 A=[1-k,0,0,0,-1,0,0,0,0,0;-1-k,0,0,0,1,0,0,0,0,0;0,1-k,0,0,0,-1,0,0,0,0;0,-1-k,0,0,0,1,0,0,0,0;0,0,1-k,0,0,0,-1,0,0,0;0,0,-1-k,0,0,0,1,0,0,0;0,0,0,1-k,0,0,0,-1,0,0;0,0,0,-1-k,0,0,0,1,0,0;0,0,-1,0,0,0,0,0,1,0;0,0,0,-1,0,0,0,0,0,1;]; b=[0;0;0;0;0;0;0;0;0;0]; %% 線性等式約束 Aeq=[1-p,0,0,0,0,-1,0,0,0,0;0,1-p,0,0,0,0,-1,0,0,0;0,0,1-p,0,0,0,0,-1,-1,0]; beq=[0;0;0]; lb=[0;0;0;0;0;0;0;0;0;0]; ub=[]; x0=[1000,1000,1000,1000,1000,1000,1000,1000,210,500]; %% 求解 [x,fval,exitflag] = fmincon('fmin',x0,A,b,Aeq,beq,lb,ub,'fcontr'); %% 目標(biāo)函數(shù)fmin.m function f = fmin(t) b3=t(9);b4=t(10); f=-(b3*17.66+b4*22.98); end %% 非線性fcontr.m function [c d] = fcontr(t) n13=t(3);n14=t(4);n21=t(5);%各類蝦的數(shù)量 b3=t(9);b4=t(10);%捕撈量 l4 = 1.108*10^5; %產(chǎn)卵量 l3 = 0.5*l4; p34=1.21*10^11/(1.21*10^11+(n13-b3)*l3+(n14-b4)*l4);%卵的成活率 d1 = ((n13-b3-8/12*n13*0.79)*l3+(n14-b4-8/12*n14*0.79)*l4)*p34-n21; %假設(shè)平均每月蝦的死亡數(shù)量為每年的死亡數(shù)量/12,到了9月份開始產(chǎn)卵 d2 = b3/b4-n13/n14*0.42; d=[d1;d2];%非線性等式約束 c=[]; end總結(jié)
以上是生活随笔為你收集整理的非线性规划问题求解(举例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Playful Bunny
- 下一篇: 模拟摄像头CCD板机揭秘