Příklad řízení přívodu paliva bytového vytápění +-----------+ palivo I I Vnitřní teplota ------X---->I Objekt +--->+ I I I I I +-----------+ I I I FUZZY I I +-----+ REGULACE +<---+ I I Optimální pokojová teplota bude 21°C V pravidlech řízení bude TEPLOTA reprezentována slovními hodnotami: nizka, normalni, vysoka Hodnoty řízené veličiny PALIVO budou: otevri, ponech, zavri
Báze faktů a pravidel pozadovana_teplota(21). %Definice slovních hodnot vstupů teplota(nizka). teplota(normalni). teplota(vysoka). % P R A V I D L A pravidlo(TEPLOTA, PALIVO):- TEPLOTA == nizka -> PALIVO = otevri. TEPLOTA == normalni ->PALIVO = ponech. TEPLOTA == vysoka -> PALIVO = zavri.
R E A L I Z A C E F U Z Z Y M N O Ź I N slovních hodnot % Vstup Řízená veličina - akce I Mu nizka normalni vysoka I zavri ponech otevri I------+-------+-------+------ ---+-------+-------+----- I \ / \ / I /.\ /.\ /.\ I \ / \ / I/ . \ / . \ / . \ I \ / \ / I . \ / . \ / . \ I + + I . + . + . \ I / \ / \ I . / \ . / \ . I / \ / \ I . / \ . / \ . I / \ / \ I ./ \./ \.ventil -+------+-------+-------+------>T ---+-------+-------+----- I 16 21 26 0 Norm Max nizka(T,Mu):- (T < 16 -> Mu is 1; T < 21 -> Mu is -(T-21)/5; Mu is 0). normalni(T,Mu):- (T < 16 -> Mu is 0; T < 21 -> Mu is (T-16)/5; T < 26 -> Mu is-(T-26)/5; Mu is 0). vysoka(T,Mu):- (T < 21 -> Mu is 0; T < 26 -> Mu is (T-21)/5; Mu is 1).
FUZZIFIKACE fuzzifikace(T, FRES):- % T - aktuální teplota v místnosti findall([TEPLOTA, Mu], (teplota(TEPLOTA), TEPLOTA(T,Mu)), FRES). % Kontrola: ?- fuzzifikace(21, FRES), % FRES=[[nizka,0],[normalni,1],[vysoka,0]] ......OK
INFERENCE inference(FRES,IRES):- findall([PALIVO,Mu], (member([STEMP,Mu],FRES), pravidlo(STEMP,PALIVO), Mu>0), IRES). % Kontrola: %?- inference([[nizka,0],[normalni,1],[vysoka,0]],RES). %RES=[[ponech,1]]
DEFINICE důsledků pravidel (akcí) %Defince hodnot důsledků pravidel - řízené veličiny= palivo palivo(zavri,Mu,[PL,0]):- PL is Mu*(1-Mu/2)*Max. palivo(ponech,Mu,[PL,TZ]):- ventil_max(Max),PL is Mu*(1-Mu/2)*Max, TZ is Max/2. palivo(otevri,Mu,[PL,Max]):- ventil_max(Max), PL is Mu*(1-Mu/2)*Max. 1 zavri ponech otevri Max/2 Max
KOMPOZICE kompozice(I_RES,KRES):- %KRES=[[PL1,TZ1],[PL2,TZ2]....] % K O M P O Z I C E představuje sestavení výsledné fuzzy množiny z odřezků %všech důsledků s nenulovým stupněm jistoty, (pro každou řízenou proměnnou) %Jako výsledek budeme požadovat seznam ploch odřezků s polohou těžiště. kompozice(I_RES,KRES):- %KRES=[[PL1,TZ1],[PL2,TZ2]....] findall(PL_TZ, (member([AKCE,Mu],I_RES), palivo(AKCE,Mu,PL_TZ)), K_RES). % Kontrola: % ?- kompozice([[ponech,1]],K_RES). % K_RES=[[5,5]]
DEFUZZIFIKACE defuzzifikace(KRES, VENTIL):- sum(KRES, PLOCHY, MOMENTY), VENTIL is MOMENTY/PLOCHY. sum([],0,0). % součty ploch a momentů sum([[PL,TZ]|T], SP, SM):- sum(T,SPx, SMx), SP is SPx+PL, SM is SMx+PL*TZ. % Kontrola: % ?- defuzzifikace([[2.5, 0],[2.5, 5]],VENTIL). % Regulacni cyklus
REGULAČNÍ CYKLUS regulace(TEPLOTA, VENTIL):- fuzzifikace(TEPLOTA, FRES), inference(FRES, IRES), kompozice(IRES, KRES), defuzzifikace(KRES, VENTIL). %KONTROLA % ?- regulace(15, VENTIL). % VENTIL=