[忤旭]《模糊控制》模糊控制理論及Python簡(jiǎn)單模糊控制

大家好,我是忤旭!
今天分享內(nèi)容的主題是模糊控制,因?yàn)樽罱枰玫竭@個(gè)技術(shù),所以學(xué)習(xí)了相關(guān)內(nèi)容。文中將會(huì)從模糊意義、模糊理論和Python實(shí)現(xiàn)簡(jiǎn)單模糊控制三部分進(jìn)行分享。下面直接開始

一.模糊意義
從理論上講,一切事物都可以用數(shù)學(xué)模型來(lái)描述,但可惜的是我們無(wú)法建立出每一個(gè)事物的精確數(shù)學(xué)模型,于是模糊數(shù)學(xué)誕生了。模糊數(shù)學(xué)不關(guān)注建立事物的精確數(shù)學(xué)模型,只注重以人們的經(jīng)驗(yàn)來(lái)建立數(shù)學(xué)模型,這就使得人們可以不用求出事物的精確數(shù)學(xué)模型而以對(duì)事物的經(jīng)驗(yàn)來(lái)表征事物的表現(xiàn)規(guī)律,如
歐姆定律U=IR,表征電壓、電阻和電流三者的關(guān)系,這是一個(gè)精確數(shù)學(xué)模型。但假如我們根據(jù)經(jīng)驗(yàn)得出,電壓增大,電流增大,就可以得到歐姆定律的模糊數(shù)學(xué)模型。
這對(duì)于解決不清楚事物精確數(shù)學(xué)模型,只知道事物的表現(xiàn)規(guī)律的問(wèn)題,很有用處。但由于模糊模型基于對(duì)事物認(rèn)識(shí)的經(jīng)驗(yàn)或規(guī)律,故若這些經(jīng)驗(yàn)或規(guī)律認(rèn)知不到位,則模糊模型將不會(huì)有很好的性能,所以這些對(duì)事物認(rèn)識(shí)的經(jīng)驗(yàn)或規(guī)律又稱為專家經(jīng)驗(yàn)。
二.模糊理論
在講模糊控制之前,先了解一下模糊理論。學(xué)藝不精,有問(wèn)題歡迎指出。
論域:論域就是全集,一般用大寫字母表示,如X=[0,10],代表包含0~10的一個(gè)集合;論域中的元素一般用小寫字母表示,如x。
論域量化:論域量化就是區(qū)間縮放并離散,將當(dāng)前論域長(zhǎng)度縮放到指定長(zhǎng)度后按一定規(guī)律離散。如一個(gè)論域?yàn)閄=[0,10],將其量化到新論域Y=[-2,2]中,那我們就需要知道原論域長(zhǎng)度和新論域長(zhǎng)度,這樣就可以得到原論域到新論域的量化因子,即比例尺
式中,——新論域中最大取值;
——新論域中最小取值;
——舊論域中最大取值;
——舊論域中最小取值。
有了比例尺后,根據(jù)量化公式(本文中給出的量化公式理解為X論域中任意元素距離X論域中間值的距離,再乘上比例尺),就可以將X論域量化到Y(jié)論域,y中元素為
如k=0.4,x取4,則x量化值y為
模糊集:模糊描述論域中一個(gè)子集的集合。
隸屬度函數(shù):隸屬度函數(shù)描述一個(gè)元素對(duì)一個(gè)模糊集的歸屬情況,即一個(gè)元素有多大可能是一個(gè)模糊集中的,取值范圍[0,1],可以根據(jù)經(jīng)驗(yàn)建立,也可以利用現(xiàn)有隸屬度函數(shù)。如論域X={1,2,3,4,5,6},模糊集Y=[‘比較大的數(shù)’],如果設(shè)定模糊集Y的隸屬度函數(shù)為

則論域X中的元素x對(duì)模糊集Y的隸屬度為{0,0,0,0,0.5,0.9}。
當(dāng)然你也可以利用你自己的經(jīng)驗(yàn)來(lái)設(shè)定,如{0,0,0,0,0,0.3,0.9}。
其它還有一些常見的隸屬度函數(shù)有Triangle

鐘形

梯型

最后隸屬度函數(shù)及模糊集需要滿足以下幾點(diǎn)要求才能比較好的發(fā)揮隸屬作用
模糊集數(shù)量:3~10。
完備性:模糊集要覆蓋每個(gè)區(qū)間。
一致性:論域任一模糊集的隸屬度不能有1個(gè)以上的1。
隸屬度函數(shù)交點(diǎn)適中:0.2~0.7。
序偶:2個(gè)論域之間各元素的線性組合,稱為序偶。如有2個(gè)論域X={1,2},Y={3,4},則有序偶(1,3),(1,4),(2,3),(2,4)。序偶的計(jì)算可以通過(guò)將X看作列向量,Y看作行向量,進(jìn)行矩陣乘后得到一個(gè)序偶矩陣。
論域的普通關(guān)系:論域的普通關(guān)系描述的是2個(gè)論域的序偶對(duì)某種約束關(guān)系的隸屬度。對(duì)上面提到的序偶矩陣,求該矩陣對(duì)某種約束關(guān)系的隸屬度,就可以得到2個(gè)論域的關(guān)系矩陣。如2個(gè)論域X={1,2},Y={3,4},可以得到序偶矩陣

若現(xiàn)在給定該序偶矩陣的約束關(guān)系為

則可以得到X,Y的關(guān)系矩陣

論域關(guān)系的合成:將2個(gè)論域關(guān)系進(jìn)行關(guān)系合成運(yùn)算后得到的新的論域關(guān)系,可以通過(guò)已知的論域關(guān)系,推導(dǎo)出未知的論域關(guān)系。如論域X,Y,Z,已知有X和Y的關(guān)系矩陣R,Y和Z的關(guān)系矩陣S,則X和Z的關(guān)系矩陣Q可以直接通過(guò)R和S的關(guān)系矩陣合成獲得,表示為

計(jì)算方法有Zadeh和Mamdani,Zadeh計(jì)算法為R直積S后并R補(bǔ)集

表達(dá)的關(guān)系為“如果A就B,如果不A就不B”。Mamdani計(jì)算法為R直積S

表達(dá)的關(guān)系為“如果A就B”,Mamdani計(jì)算法用的更多。其實(shí)就是類似于矩陣乘,但不同的是計(jì)算時(shí)的乘用交(取小)代替,加用并(取大)代替。如某個(gè)矩陣元素的值為0.4*1+0.5*1=0.5。此外需要注意關(guān)系合成只適用于剛性系統(tǒng),即關(guān)系可傳遞的系統(tǒng)。
條件語(yǔ)句:描述2個(gè)集合之間關(guān)系的語(yǔ)句。如“如果x很大,那么y很小”,那這句話實(shí)則是在描述x很大集合和y很小集合之間的關(guān)系,換言之就是2個(gè)模糊集之間的關(guān)系,故也叫模糊推理關(guān)系。
論域的模糊蘊(yùn)含關(guān)系:描述的是在給定條件語(yǔ)句后,2個(gè)論域的模糊集之間的關(guān)系,因此求該關(guān)系需要先求出2個(gè)論域?qū)ζ涓髂:碾`屬度。如有X,Y論域,給定1個(gè)條件語(yǔ)句“如果x很大,那么y很小”,那這個(gè)模糊處理機(jī)在同一時(shí)刻能激活的規(guī)則只有這一條,只要進(jìn)行輸入模糊集與輸出模糊集的關(guān)系合成,不需要輸入模糊集之間的關(guān)系合成和輸出模糊集的關(guān)系合成,下面舉例說(shuō)明輸出模糊集的關(guān)系合成
如果給定了2個(gè)條件語(yǔ)句,如“如果x很大,那么y很小”和“如果x很大,那么y比較小”,可以發(fā)現(xiàn)輸入條件能夠在同一時(shí)刻激活了2個(gè)規(guī)則,這個(gè)時(shí)候就需要分別對(duì)2個(gè)條件語(yǔ)句進(jìn)行模糊推理,最后將結(jié)果進(jìn)行關(guān)系合成,得到一個(gè)輸出模糊集。
接著講例子,利用經(jīng)驗(yàn)寫出X對(duì)x很大模糊集和Y對(duì)y很小模糊集的隸屬度,假設(shè)我的經(jīng)驗(yàn)是A={0.9,0.1},B={0.1,0.9},在輸入給定并量化后激活的模糊集為A,為什么要說(shuō)激活,因?yàn)閯偛耪f(shuō)過(guò)可能輸入論域不止一個(gè)模糊集,若還有一個(gè)C={0.5, 0.3},那它同樣是要激活并參加制定好的模糊推理的。
然后根據(jù)輸入量化后的值來(lái)選擇模糊集A中的元素,如論域?yàn)閇-1,1],得到的輸入量化值為-1,能夠激活的非0模糊集只有1個(gè)模糊集A,所以輸入隸屬度取0.9,然后再對(duì)0.9與B取交集,表示的意思是現(xiàn)在輸入在x很大模糊集中的概率為0.9,這個(gè)時(shí)候引起輸出論域中各元素對(duì)x很大并且y很小的模糊集的隸屬度各為多少。
下面以一個(gè)完整例子來(lái)說(shuō)明,條件如下

給定3個(gè)條件語(yǔ)句,來(lái)實(shí)現(xiàn)模糊推理
“如果x小并且y小,則z大”
“如果x0并且y0,則z0”
“如果x大并且y大,則z小”
現(xiàn)在有輸入x=80,y=80,求輸出z
第一步,量化輸入,根據(jù)量化公式,得量化x為0.6,量化y為0.6,四舍五入后為1,1
第二步,激活輸入模糊集
根據(jù)x和y的隸屬度函數(shù),可以知道x激活了Z和P,值為0.3和0.9,y激活了Z和P,值為0.1和0.9
第三步,根據(jù)激活的模糊集來(lái)激活條件語(yǔ)句進(jìn)行模糊推理
根據(jù)x和y激活的模糊集,發(fā)現(xiàn)第二句和第三句滿足前置條件,故它們被激活。然后根據(jù)前置條件合成隸屬度。在第二句中,x和y對(duì)Z的隸屬度因?yàn)椴⑶谊P(guān)系而取交集,結(jié)果為0.1;同理,在第三句中,x和y對(duì)P的隸屬度因?yàn)椴⑶谊P(guān)系而取交集,結(jié)果為0.9。
在完成前置條件的關(guān)系合成后,還要合成出各自的輸出模糊集。在第二句中,z0的模糊集為{0,0.3,0.9,0.3,0},將先前合成出的0.1與之合成,可得{0,0.1,0.1,0.1,0};在第三句中,z小的模糊集為{0.9,0.3,0,0,0},將先前合成出的0.9與之合成,可得{0.9,0.3,0,0,0}。
最后需要對(duì)所有得到的輸出模糊集進(jìn)行合成,由于這些模糊集是同時(shí)成立的,故對(duì)它們?nèi)〔⑦\(yùn)算。{0,0.1,0.1,0.1,0}U{0.9,0.3,0,0,0},可得最后輸出模糊集{0.9,0.3,0.1,0.1,0}。
逆模糊:將模糊集以某種算法推算出量化輸出量。常見算法有最大隸屬度法,極左最大隸屬度法,極右最大隸屬度法,面積中心法、面積平分法等。
最大隸屬度法是指取最后輸出模糊集中最大隸屬度所對(duì)應(yīng)的量化值。
極左最大隸屬度法是指取最后輸出模糊集中多個(gè)相同最大隸屬度最左側(cè)所對(duì)應(yīng)的量化值。
極右最大隸屬度法是指取最后輸出模糊集中多個(gè)相同最大隸屬度最右側(cè)所對(duì)應(yīng)的量化值。
面積中心法又稱為重心法,是指按隸屬度為權(quán)重,從而計(jì)算出距離各個(gè)量化值滿足權(quán)重要求的最佳量化值。

式中,xi——論域中的元素;f(xi)——xi對(duì)某模糊集的隸屬度。
面積平分法是指找到可以2等分隸屬度與量化值包圍面積的量化值,表達(dá)式為

式中,——面積一部分量化值。
論域逆量化:論域量化的逆向運(yùn)算,將量化論域縮放到一個(gè)連續(xù)區(qū)間,同樣存在比例尺

式中,——輸出論域最大值;
——輸出論域最小值;
——輸出量化論域最大值;
——輸出量化論域小小值。
然后可以利用下式計(jì)算逆量化后的連續(xù)值

式中,z——輸出的量化值。
三.Python簡(jiǎn)單模糊控制
分享2段程序,第一段是極簡(jiǎn)模糊控制,第二段是比較完整的模糊控制
運(yùn)行結(jié)果
實(shí)際輸入:0 量化輸出:-1 量化輸出:1 實(shí)際輸出:100.0
實(shí)際輸入:10 量化輸出:-1 量化輸出:1 實(shí)際輸出:100.0
實(shí)際輸入:20 量化輸出:-1 量化輸出:1 實(shí)際輸出:100.0
實(shí)際輸入:30 量化輸出:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:40 量化輸出:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:50 量化輸出:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:60 量化輸出:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:70 量化輸出:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:80 量化輸出:1 量化輸出:-1 實(shí)際輸出:0.0
實(shí)際輸入:90 量化輸出:1 量化輸出:-1 實(shí)際輸出:0.0
實(shí)際輸入:100 量化輸出:1 量化輸出:-1 實(shí)際輸出:0.0
運(yùn)行結(jié)果
實(shí)際輸入:0 量化輸入:-1 量化輸出:1 實(shí)際輸出:100.0
實(shí)際輸入:10 量化輸入:-1 量化輸出:1 實(shí)際輸出:100.0
實(shí)際輸入:20 量化輸入:-1 量化輸出:1 實(shí)際輸出:100.0
實(shí)際輸入:30 量化輸入:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:40 量化輸入:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:50 量化輸入:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:60 量化輸入:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:70 量化輸入:0 量化輸出:0 實(shí)際輸出:50.0
實(shí)際輸入:80 量化輸入:1 量化輸出:-1 實(shí)際輸出:0.0
實(shí)際輸入:90 量化輸入:1 量化輸出:-1 實(shí)際輸出:0.0
實(shí)際輸入:100 量化輸入:1 量化輸出:-1 實(shí)際輸出:0.0
可以看到比較模糊的推理,得到的輸出也是范圍較大,所以如果要增加輸出的精度,應(yīng)增加模糊集的數(shù)量,即細(xì)化