Retele Neuronale Si Logica Fuzzy In Automatizari
CUPRINS
Prefață 1
§.1 Modele fuzzy 2
§.2 Control fuzzy adaptiv indirect pentru sisteme neliniare 5
§.2.1 Control fuzzy adaptiv 5
§.2.2 Sinteza sistemelor fuzzy de control adaptiv indirect pe baza teoriei stabilității a lui Lyapunov 5
2.3 Etapele în proiectarea unui sistem fuzzy adaptiv indirect folosind primul tip de model fuzzy 10
2.4 Etapele în proiectarea unui sistem fuzzy adaptiv indirect folosind al doilea tip de model fuzzy 12
14
Capitolul 3: Control fuzzy adaptiv direct 14
3.1 Sinteza sistemelor fuzzy de control fuzzy adaptiv direct pe baza teoriei stabilității a lui Lyapunov 14
3.2 Etapele în proiectarea unui sistem fuzzy adaptiv direct folosind primul tip de model fuzzy 16
3.3 Etapele în proiectarea unui sistem de control fuzzy adaptiv direct folosind al doilea tip de model fuzzy 18
Capitolul 4: Simulări algoritmi 20
4.1 Aplicație: Sistem de urmărire traiectorie pentru pendulul invers 20
4.2 Aplicație pentru un sistem liniar 34
Anexe de Programe de simulare 41
CUPRINS 59
=== Retele Neuronale si Logica Fuzzy in Automatizari ===
Prefață
În proiectarea sistemelor de reglare automată, un algoritm competitiv ar trebui să valorifice orice fel de informație legată de procesul supus automatizării. Pentru o largă categorie de probleme, o bună parte din informație este deținută de expertul uman. Această informație de obicei nu este o informație exactă, pentru descrierea acesteia dezvoltându-se teoria sistemelor cu procesare fuzzy a informației. Apare astfel necesară încorporarea informație lingvistice de la expertul uman într-o manieră sistemică astfel încât asupra sistemului rezultat să poată fi analizat din punct de vedere al performanțelor, stabilității, etc.
O altă parte a informației este informația numerică obținută de la senzori sau conform cu legile fizice care descriu procesul. Între aceste două tipuri de informație există mari diferențe. astfel informație numerică este supusă legilor fizicii sau axiomelor matematicii, inexistente pentru informația lingvistică. Altfel spus legile care guvernează informația lingvistică sunt fundamental diferite de legile care guvernează informația numerică. Există două lumi: lumea fizică și lumea umană, și cum interacțiunea om-mașină este în continuă creștere tot mai multe sisteme inginerești aparțin intersecției acestor două lumi. Scopul sistemelor adaptive fuzzy va fi tocmai modelarea acestei informații hibride lingvistico-numerice. În principiu un astfel de sistem este un sistem logic fuzzy înzestrat cu un algoritm de antrenare, algoritm care are rolul de a ajusta parametrii sistemului fuzzy pe baza perechilor de intrare-ieșire obținute prin măsurători efectuate pe proces.
Conceptual sistemele fuzzy adaptive combină informația lingvistică cu informația numerică astfel: deoarece sistemul fuzzy e constituit în principiu dintr-un set de reguli if-then, informația lingvistică va fi direct încorporată în baza de reguli; pe de altă parte informația numerică conținută de perechile de intrare-ieșire este încorporată antrenând sistemul conform datelor măsurate de la proces, conform algoritmului de antrenare. Sistemul adaptiv fuzzy poate fi văzut ca un sistem logic fuzzy ale cărui set de reguli sunt generate automat prin antrenare conform setului de antrenare.
Lucrarea abordează sistemele adaptive fuzzy pornind de la conceptele care stau la baza construirii sistemelor cu procesare fuzzy a informației, lucru care le justifică denumirea de sisteme adaptive fuzzy, însă la același formalism matematic se poate ajunge abordând problema din punctul de vedere al rețelelor neuronale sau al metodelor de interpolare.
Autorii.
§.1 Modele fuzzy
Principial, în literatura de specialitate se consideră pentru un sistem cu procesarea fuzzy a informației următoarea structură:
Figura 1.1
Un sistem fuzzy logic fuzzy caracterizat prin: fuzzificarea intrărilor reale în mulțimi fuzzy singleton; printr-un algoritm de inferență de tip produs; și defuzzificare prin metoda sumei ponderate a centrelor mulțimilor fuzzy ale consecințelor conduce în final la următoarea formă sistemică pentru sistemul cu procesare fuzzy a informației:
(1.1)
Referitor la notațiile folosite se fac următoarele precizări:
, (1.2)
reprezintă setul de semnale de intrare reale. Dacă se consideră regulile IF-THEN de forma:
IF is and . . . and THEN y is cu , (1.3)
unde M=numărul de reguli, va reprezenta funcția de apartenență asociată mulțimii fuzzy ce descrie o variabilă lingvistică, va fi centrul mulțimii fuzzy , adică punctul în care funcția de apartenență atinge valoarea maximă 1. În baza ipotezelor făcute se poate demonstra pe baza formalismului matematic formula (1.1):
fuzzificarea singleton conduce la următoarea mulțime fuzzy:
(1.4)
rezultatul activării regulii l îl constituie mulțimea fuzzy calculată conform următoarei reguli de compunere:
(1.5)
care constituie de fapt exprimarea analitică a regulii de deducție modus ponens. Apoi definim implicația ca produs:
(1.6)
definim produsul cartezian ca produs:
(1.7)
În final rezultă concluzia fuzzy considerând T-norma * ca și produs pentru funcțiile de apartenență:
(1.8)
Ca rezultat al activării celor M reguli se obțin M mulțimi fuzzy caracterizate prin funcțiile de apartenență: . Mulțimea fuzzy B care exprimă concluzia finală va fi reuniunea celor M mulțimi fuzzy:
(1.9)
cu funcția de apartenență calculată ca o sumă de T-conorme:
(1.10)
pentru T-conormă alegându-se operația de însumare. Revenind la relația (1.8) cum și conform cu relația (1.4) rezultă supremul astfel:
(1.11)
procedura de defuzzificare se consideră a fi media ponderată a centrelor mulțimilor fuzzy ale consecințelor regulilor de deducție:
(1.12)
unde ținând cont de relația (1.11) obținem relația de pornire (1.1).
Observație: Dacă în loc de produs pentru definirea T-normei s-ar fi utilizat minimizarea ar fi rezultat următoarea relație care descrie global un sistem fuzzy:
(1.13)
Pentru dezvoltarea algoritmilor de antrenare trebuie specificată forma funcției de apartenență, care poate fi aleasă triunghiulară, trapezoidală, etc. În cazul studiat în cele ce urmează se va alege o funcție de apartenență Gaussiană de forma:
(1.14)
sistemul (1.1) putând fi pus sub forma:
(1.15)
Pentru forma sistemului fuzzy (1.15) informația lingvistică poate fi încorporată inițial în setul de reguli IF-THEN, iar în algoritmul de ajustare (antrenare) a parametrilor sistemului , , se încorporează informația numerică.
Următoarea teoremă justifică folosirea formei (1.15) pentru modelarea oricăror procese neliniare cu orice grad de precizie impus:
Teorema universală de aproximare : Oricare ar fi funcția reală continuă , mulțime compactă și oricare ar fi , real, există sistemul fuzzy (1.13) astfel încât:
(1.16)
Demonstrația se poate studia în [1]. Forma (1.15) a unui sistem fuzzy se poate interpreta astfel: Se consideră baza de funcții radiale:
j=1..M (1.17)
Atunci sistemul (1.13) va fi echivalent cu următoarea formă:
(1.18)
unde . Având în vedere teorema de universală de aproximare se deduce că oricare funcție neliniară poate fi descompusă în serie de funcții radiale conform relației (1.18), ordinul M al dezvoltării în cazul de față interpretându-se ca și numărul de reguli din baza de reguli.
În ceea ce privește parametrii ajustabili ai modelului fuzzy, acestea se împart în două tipuri și anume:
primul tip de model fuzzy pentru se folosește modelul (1.18), rezultând un algoritm liniar de ajustare a parametrilor;
al doilea tip de model fuzzy pentru care se folosește modelul (1.15) , parametrii care se ajustează fiind , algoritmul de ajustare fiind neliniar.
§.2 Control fuzzy adaptiv indirect pentru sisteme neliniare
§.2.1 Control fuzzy adaptiv
Sistemele de control fuzzy se presupun că lucrează în situația existenței incertitudinilor sau a variațiilor mari de parametri sau structură ale procesului de condus. În aceste condiții de incertitudine se cere sistemului de control menținerea performanțelor impuse. Pe de altă parte se impune adaptarea parametrilor sistemului de control deoarece setul de reguli provenite de la expertul uman deși conțin foarte multă informație calitativă aceasta nu este întotdeauna suficientă. Se impune astfel un mecanism de ajusta, eventual de a adăuga noi reguli în scopul realizării unui sistem de control cât mai eficient.
În literatura de specialitate sistemele de reglare adaptive se clasifică în două categorii: directe și indirecte. Controlul adaptiv direct presupune reducerea erorii de urmărire prin ajustarea directă a parametrilor regulatorului. În sistemele de control adaptiv indirect există un estimator recursiv al parametrilor procesului iar legea de comandă se calculează pe baza parametrilor estimați "on-line". Astfel sistemele fuzzy de control adaptiv directe folosesc ca și regulator un sistem fuzzy, astfel că informația lingvistică poate fi încorporată direct în controller. Pe de altă parte sistemele fuzzy de control adaptiv indirecte folosesc sistemele fuzzy ca să modeleze procesul. Din punct de vedere al modelului fuzzy folosit se remarcă că algoritmul de ajustare este liniar dacă se folosește primul tip de model fuzzy, respectiv devine neliniar în cazul folosirii celui de-al doilea tip de model fuzzy.
§.2.2 Sinteza sistemelor fuzzy de control adaptiv indirect pe baza teoriei stabilității a lui Lyapunov
Se consideră sistemul neliniar de ordinul n în forma normală:
(2.1)
sau forma echivalentă:
(2.2)
cu f, g funcții continue, reprezintă intrarea, respectiv ieșirea din sistem, iar constituie vectorul de stare care poate fi măsurat. Pentru ca sistemul (2.2) să fie un sistem controlabil se impune ca într-o regiune de controlabilitate . Fără a pierde din generalitate se presupune că pentru .
Obiectivul sistemului de control pentru acest sistem îl va constitui urmărirea unui semnal de referință mărginit de către ieșirea procesului y astfel încât toate semnalele implicate să fie mărginite. Deci se cere determinarea semnalului de control și a unei legi de adaptare a parametrilor astfel încât sistemul închis să fie global stabil în sensul că toate variabilele să fie uniform mărginite:
, , oricare ar fi
unde sunt parametrii stabiliți de proiectant. Eroarea de urmărire se impune ca să fie cât mai mică posibil cu îndeplinirea obiectivelor anterioare.
Să considerăm atunci vectorul și astfel încât toate rădăcinile polinomului să se găsească în semiplanul stâng al planului complex. Dacă funcțiile f, respectiv g sunt cunoscute atunci legea de control:
(2.3)
care se aplicat în (2.2) implică:
(2.4)
conform ipotezelor făcute. Astfel . Dar forma funcțiilor f, g nefiind cunoscută, conform teoremei universale de aproximare le înlocuim cu modelele fuzzy , respectiv conform cu cele prezentate în primul capitol. Rezultă următoarea lege de control:
(2.5)
Prin aplicarea acestei legi de control în sistemul (2.2) și o serie de artificii de calcul se obține ecuația care descrie dinamica erorii de urmărire a traiectoriei impuse:
(2.6)
sau echivalentul cu variabile de fază:
(2.7)
unde:
, respectiv (2.8)
Se observă că polinomul caracteristic este stabilă. Există atunci o matrice unică P pozitiv definită, simetrică nxn care satisface ecuația Lyapunov:
(2.9)
unde Q este o matrice arbitrar aleasă pozitiv definită. Să construim atunci funcția Lyapunov care descrie comportamentul energetic al sistemului: , a cărei derivată se calculează utilizând ecuația erorii (2.7):
(2.9)
Conform teoriei Lyapunov pentru ca să fie mărginit, ( adică e să fie mărginit întrucât ym este mărginit prin proiectare ) se impune ca ( energia sistemului erorii ) să fie mărginită, ceea ce implică când impusă prin proiectare. Din ecuația (2.8) se observă că este destul de dificil de a găsi comanda care facă termenul al doilea din membrul drept al relației (2.8) să devină foarte apropiat de zero. Problema se rezolvă prin introducerea în componența semnalului de comandă a unei așa numite comenzi supervizoare , astfel că semnalul de comandă final va fi:
(2.10)
Scopul acesteia va fi de a forța când . Noul semnal de comandă introducându-l în sistemul (2.2), și utilizând aceleași artificii de calcul ca și în cazul obținerii relației (2.7) conduce la noua formă pentru ecuația care descrie dinamica erorii:
(2.11)
Recalculăm din nou prima variație a funcției Lyapunov conform cu noua ecuație (2.10):
(2.12)
Pentru a proiecta astfel încât membrul drept al relației (2.11) să fie negativ se presupune că se pot determina funcțiile astfel încât: , respectiv pentru , cu .
Pe baza marginilor funcțiilor f, respectiv g alegem comanda supervizoare de forma:
(2.13)
unde , .
Introducând (2.13) în (2.12) și considerând cazul , rezultă:
(2.14)
Legea de adaptare a parametrilor:
Se definesc:
(2.15)
unde , cu , constante de proiectare. Dacă se folosește primul tip de model fuzzy ,se ignoră ( prin acesta se impune ca implicate în definirea funcțiilor de apartenență să fie pozitive și să nu existe puncte necuprinse în nici o partiție fuzzy).
(2.16), semnificația constantelor fiind aceeași cu precizarea că restricția s-a introdus pentru a impune pozitiv conform ipotezelor preliminare.
Se definește eroarea minimă de aproximare:
(2.17)
Rescriem atunci ecuația erorii (2.10):
(2.18)
Dacă alegem pentru modelele fuzzy prima formă pentru care se realizează ajustarea numai a centrelor consecințelor a regulilor și tratând modelul ca pe o serie de funcții radiale relația (2.18) se rescrie:
(2.19)
unde . Considerăm funcția Lyapunov:
(2.20)
unde , respectiv sunt constante pozitive. Derivata acesteia de-a lungul traiectoriei (2.19) este:
(2.21)
utilizându-se ecuația Lyapunov (2.9) și . Conform relației (2.12) prin care s-a introdus comanda supervizoare și cum pe domeniul de controlabilitate rezultă .
Alegând apoi următoarea lege de adaptare a parametrilor:
(2.22)
atunci (2.21) devine:
(2.23)
Se observă că relația este dependentă de eroarea de aproximare minimă w. Revenind la alegerea modelelor fuzzy pentru f, respectiv g, dacă alegem tipul al doilea de model fuzzy care permite și ajustarea centrelor premizelor regulilor și a dispersiei a funcțiilor de apartenență gaussiene se parcurg aceleași etape cu remarca că inițial se face aproximarea modelelor printr-o descompunere în serie Taylor în jurul valorilor parametrilor care asigură eroarea de aproximare minimă:
(2.24)
Făcând substituția în relația (2.18) rezultă ecuația care modelează dinamica erorii de urmărire:
(2.25)
unde:
(2.26)
Apare următoarea problemă și anume menținerea parametrilor în interiorul domeniului . Pentru aceasta se utilizează algoritmul vectorului de gradient proiectat, domeniile fiind văzute ca niște restricții. Astfel dacă parametrii care se ajustează sunt în interiorul domeniului se utilizează legea de ajustare (2.22). Dacă s-a ajuns pe granița domeniului și tendința parametrilor este de a părăsi domeniul, ajustăm parametrii pe direcția proiecției gradientului conform relației (2.22) pe limita domeniului în punctul unde ne aflăm:
Schematic algoritmul poate fi reprezentat:
Valorile inițiale ale parametrilor se stabilesc pe baza informațiilor lingvistice existente. Dacă nu există informații lingvistice se stabilesc arbitrar cu respectarea restricțiilor impuse.
2.3 Etapele în proiectarea unui sistem fuzzy adaptiv indirect folosind primul tip de model fuzzy
Calcule off-line
alege astfel încât toate rădăcinile polinomului să fie în semiplanul stâng al planului complex.
se alege o matrice Q nxn pozitiv definită și se rezolvă ecuația Lyapunov unde , respectiv
se dau parametrii bazându-ne pe cunoștințe practice asupra procesului
Construirea unui controller inițial
se definesc mulțimi fuzzy ale premizelor regulilor de deducție ale căror funcții de apartenență acoperă uniform proiecția domeniului pentru variabilele de intrare pe coordonata a i-a, unde și , n fiind numărul de intrări.
se construiește baza de reguli pentru modelele fuzzy , fiecare având reguli ale căror premize cuprinde toate combinațiile posibile ale mulțimilor fuzzy pentru . Regulile sunt de forma: Mulțimile fuzzy și regulile fuzzy înglobează cunoștințele lingvistice despre proces dacă ele există, în caz contrar se iau arbitrar lăsând pe seama algoritmului de antrenare ajustarea acestora.
se construiesc funcțiile radiale de bază: și se ordonează în ordinea naturală pentru în vectorul , – dimensional. Se construiesc vectorii parametrilor ajustabili , respectiv ca și argumentele funcțiilor , respectiv în care aceasta ating valoarea maximă adică 1. rezultă atunci modelele fuzzy ca și serii de funcții radiale :
Adaptarea on-line
se aplică procesului comanda unde și
unde: , .
vectorul parametrilor se ajustează conform următorului algoritm unde operatorul de proiecție se definește:
vectorul parametrilor se ajustează conform următorului algoritm:
oricând un element se utilizează
altfel se utilizează: unde operatorul de proiecție se definește analog:
Proprietățile controllerului astfel construit sunt cuprinse în următoarea teoremă:
Teoremă: Sunt garantate următoarele proprietăți pentru algoritmul de control adaptiv indirect cu primul tip de model fuzzy:
și toate elementele vectorului sunt mai mari decât ,
, unde este cea mai mică valoare proprie a matricii P și
, , cu a, b constante și w eroarea minimă de aproximare definită de (2.17).
Dacă atunci
Demonstrația teoremei se găsește în [1].
2.4 Etapele în proiectarea unui sistem fuzzy adaptiv indirect folosind al doilea tip de model fuzzy
Calcule off-line analoage
Construirea unui controller inițial
Se consideră modele fuzzy de tipul al doilea de forma: unde constituie vectorul parametrilor ajustabili. Deci se va considera pentru fiecare model fuzzy o bază de M reguli, în care sunt încorporate dacă există cunoștințe inițiale despre proces. Vectorul inițial al parametrilor ajustabili se alege conform cunoștințelor lingvistice disponibile, restul de parametrii despre care nu cunoaștem nimic se aleg arbitrar.
Adaptarea on-line a parametrilor
se calculează conform următorului algoritm:
unde , relațiile fiind deduse prin efectuarea derivării corespunzătoare asupra modelului. Pentru g derivata se calculează identic, schimbând f cu g în relațiile de mai sus.
se aplică procesului comanda unde și (2.12)
unde: , .
vectorul parametrilor se ajustează conform următorului algoritm:
oricând un element se utilizează
altfel se utilizează:
vectorul parametrilor se ajustează conform următorului algoritm:
oricând un element se utilizează
oricând un element se utilizează
altfel se utilizează:
Proprietățile algoritmului sunt identice ca și în cazul folosirii primului tip de model cu modificarea lui w cu v în relația mărginirii erorii. Algoritmul va asigura o eroare de aproximare minimă mai bună deoarece spațiul unde se caută parametrii este mai mare. Sensibilitatea performanțelor la alegerea valorilor inițiale ale parametrilor va fi mai mare.
Observație: De obicei forma generală a sistemelor neliniare este: . Pentru a putea aplica algoritmul expus este necesară găsirea unei relații directe între ieșirea sistemului y și intrarea u. Aceasta se realizează printr-un algoritm de liniarizare care constă în diferențierea repetată a ieșirii y până când apare intrarea u, apoi se proiectează legea de comandă u astfel încât să neliniaritatea să dispară, rezultând în final o lege de comandă liniară. Presupunând că după r diferențieri repetate apare intrarea u, unde n dimensiunea vectorului variabilelor de stare se va numi gradul relativ al sistemului: . Se poate arăta că pentru orice sistem controlabil de ordinul n, după cel mult n diferențieri succesive va apărea intrarea u. În continuare se aplică algoritmul prezentat anterior, cu excepția că nu va mai exista o comandă supervizoare, necunoscând funcțiile f, g fiind total necunoscute.
Capitolul 3: Control fuzzy adaptiv direct
3.1 Sinteza sistemelor fuzzy de control fuzzy adaptiv direct pe baza teoriei stabilității a lui Lyapunov
Se consideră că procesul poate este descris de următorul sistem de ecuații diferențiale:
(3.1)
unde f constituie funcția necunoscută, b este o constantă pozitivă , este semnalul de comandă și y este ieșirea din proces. Presupunem că vectorul variabilelor de stare este accesibil măsurătorilor. Obiectivele de control vor fi aceleași, cu deosebirea că semnalul de comandă se consideră a fi un sistem fuzzy.
Presupunem că semnalul de control are forma: (3.2)
Prin înlocuire în (3.1) rezultă: (3.3)
Dacă f și b sunt cunoscute atunci legea de comandă: (3.4) va forța eroarea de urmărire e să conveargă spre 0, unde și astfel ales astfel încât rădăcinile polinomului să de găsească în semiplanul stâng al planului complex. În ecuația (3.3) adăugăm și scădem , rezultând după câteva artificii de calcul ecuația erorii care guvernează comportamentul sistemului închis:
(3.5) sau echivalentul acesteia cu variabile de fază: (3.6) unde
(3.7)
Asociem acestei ecuații funcția Lyapunov unde P este o matrice simetrică pozitiv definită, soluție s ecuație Lyapunov: (3.8) cu Q>0. Calculăm derivata funcției Lyapunov: (3.9).
Pentru a găsi o comandă supervizoare astfel încât se consideră că se poate determina o funcție și o constantă astfel încât: și . Comanda supervizoare se va construi conform cu următoarea relație:
(3.10)
unde semnificația constantelor este aceași. În cazul în care () rezultă prin înlocuire în (3.9): (3.11)
Cum P>0 mărginirea lui implică mărginirea lui care va implica mărginirea lui .
În continuare se va considera pentru sistemul fuzzy de primul sau al doilea tip și se va prezenta legea de ajustare a vectorului parametrilor sistemului . Se consideră vectorul parametrilor optimali ai sistemului: (3.12) și eroarea minimă de aproximare: (3.13). Ecuația (3.6) care descrie comportamentul erori de reglare se rescrie:
(3.14)
Alegând și notând , ecuația (3.14) devine:
(3.15)
Redefinim atunci funcția Lyapunov : (3.14) a cărei derivată va fi:
(3.16)
Fie ultima coloană a matricii P astfel că: (3.17)
Înlocuind (3.17) în (3.16) rezultă: (3.18)
Cum , alegând legea de ajustare: (3.19) atunci relația (3.18) devine:
(3.20)
S-a utilizat faptul: . De asemenea pentru a garanta se utilizează algoritmul vectorului gradient proiectat.
Dacă alegem tipul al doilea de model fuzzy, este necesară descompunerea în serie Taylor în jurul lui :
(3.21) caz pentru care ecuația erorii de urmărire devine:
(3.22) unde , algoritmul de calcul fiind în continuare analog.
Schema generală va fi analoagă cu cea prezentată în capitolul 2.
3.2 Etapele în proiectarea unui sistem fuzzy adaptiv direct folosind primul tip de model fuzzy
Calcule off-line
alege astfel încât toate rădăcinile polinomului să fie în semiplanul stâng al planului complex.
se alege o matrice Q nxn pozitiv definită și se rezolvă ecuația Lyapunov unde , respectiv
se dau parametrii bazându-ne pe cunoștințe practice asupra procesului
Construirea unui controller inițial
se definesc mulțimi fuzzy ale premizelor regulilor de deducție ale căror funcții de apartenență acoperă uniform proiecția domeniului pentru variabilele de intrare pe coordonata a i-a, unde și , n fiind numărul de intrări.
se construiește baza de reguli pentru modelele fuzzy , având reguli ale căror premize cuprinde toate combinațiile posibile ale mulțimilor fuzzy pentru . Regulile sunt de forma: Mulțimile fuzzy și regulile fuzzy înglobează cunoștințele lingvistice despre proces dacă ele există, în caz contrar se iau arbitrar lăsând pe seama algoritmului de antrenare ajustarea acestora.
se construiesc funcțiile radiale de bază: și se ordonează în ordinea naturală pentru în vectorul , – dimensional. Se construiesc vectorii parametrilor ajustabili ca și argumentele funcțiilor în care aceasta ating valoarea maximă adică 1. Rezultă atunci modelul fuzzy al controllerului ca și serii de funcții radiale :
Adaptarea on-line
se aplică procesului comanda unde
unde: , .
vectorul parametrilor se ajustează conform următorului algoritm unde operatorul de proiecție se definește:
Proprietățile controllerului astfel construit sunt cuprinse în următoarea teoremă:
Teoremă: Sunt garantate următoarele proprietăți pentru algoritmul de control adaptiv indirect cu primul tip de model fuzzy:
, , unde este cea mai mică valoare proprie a matricii P și
, , cu a, b constante și w eroarea minimă de aproximare.
Dacă atunci
Demonstrația teoremei se găsește în [1].
3.3 Etapele în proiectarea unui sistem de control fuzzy adaptiv direct folosind al doilea tip de model fuzzy
Calcule off-line analoage, fiind necesară și introducerea limitei inferrioare pentru dispersia funcțiilor de apartenență
Construirea unui controller inițial
Se consideră modele fuzzy de tipul al doilea de forma: unde constituie vectorul parametrilor ajustabili. Deci se va considera pentru modelul fuzzy al controllerului o bază de M reguli, în care sunt încorporate dacă există cunoștințe inițiale despre proces. Vectorul inițial al parametrilor ajustabili se alege conform cunoștințelor lingvistice disponibile, restul de parametrii despre care nu cunoaștem nimic se aleg arbitrar.
Adaptarea on-line a parametrilor
se calculează conform următorului algoritm:
unde , relațiile fiind deduse prin efectuarea derivării corespunzătoare asupra modelului.
se aplică procesului comanda unde
unde: , .
vectorul parametrilor se ajustează conform următorului algoritm:
oricând un element se utilizează
altfel se utilizează: unde operatorul de proiecție se definește:
Algoritmul garantează aceleași proprietăți, conform teoremei enunțate în (3.2).
Capitolul 4: Simulări algoritmi
4.1 Aplicație: Sistem de urmărire traiectorie pentru pendulul invers
Se consideră următorul sistem, denumit pendulul invers pentru care se va construi un controller fuzzy pe baza algoritmilor enunțați anterior cu scopul de a urmări o traiectorie impusă.
Ca și referință se alege , respectiv treapta . Algoritmul necesită niște date preliminare privind restricțiile: :
Unghiului făcut de ax cu pol I se alege domeniul: , rezultând imediat:
Forței u care acționează asupra căruciorului îi impunem: . Cum dacă putem face atunci și . De asemenea o să avem . Parametrii astfel încât restricțiile asupra semnalului de control u, respectiv stării să fie îndeplinite, în concordanță totodată cu teorema care stabilește performanțele sistemului de control, ,
Cum și impunem , rezultă , adică
Aleg ceea ce conduce la un polinom cu rădăcini în semiplanul stâng, matricea , pozitiv definită și simetrică. Rezolvând ecuația Lyapunov rezultă matricea Lyapunov: pozitiv definită a cărei valoare minimă este , rezultând . Coeficienții se determină ținând cont de mărginirea semnalului de comandă pe care o impune algoritmul, rezultând: . Pentru ce de-al doilea tip de controller fuzzy se alege .
Programele de simulare au fost realizate sub mediul MATLAB. Vectorul parametrilor ce se ajustează inițializat cu respectarea restricțiilor care i se impun.
Controller fuzzy adaptiv indirect cu primul tip de model fuzzy
Se folosesc 5 variabile lingvistice pentru acoperirea domeniului .
Referință treaptă unitate , Ts=0.01,
, rezultând în final o eroare de urmărire e=3.0746e-010 , de modelare em= 0.1047 și valoarea funcției Lyapunov V=4.7265e-019. Comanda supervizoare va fi zero, valoarea funcției Lyapunov neatingând pragul de activate a acesteia.
Referință sinusoidală , Ts=0.01
x10=-pi/60; e= 9.2416e-005,V= 4.6366e-008
Perturbez referința cu un semnal stochastic având amplitudinea jumătate din amplitudinea semnalului de referință:
Se observă că sistemul filtrează perturbația, ieșirea semnalul de ieșire fiind aproape sinusoidal.
x10=pi/60; e=1.7942e-004 , V= 4.1228e-008
semnal de referință triunghiular e= -0.0012, V= 1.9207e-007
Folosesc 3 variabile lingvistice pentru acoperirea domeniului, reconsiderând semnalul sinusoidal
Consider cazul unei referințe sinusoidale dar de amplitudine pi/4 în afara domeniului considerat pentru x, considerându-se tot 3 variabile lingvistice , pașii de căutare fiind gam1=5, gam2=0.1.
Se observă că indiferent de starea finală eroarea de modelare ca și semnal din sistemul închis e stabilă în sens Lyapunov. Indiferent de starea inițială a procesului ce se modelează oscilațiile sunt mărginite de aceeași margine. Din modul cum oscilează încă parametrii supuși ajustării se deduce că parametrii nu sunt încă cei mai buni.
Presupunem că despre proces nu avem disponibile informații cum ar fi mărginirea funcțiilor,etc, ci numai cunoaștem că gradul relativ al sistemului este 2. Necunoscând domeniul de variație al parametrilor sistemului, ajustez parametrii acestuia direct după gradient, nemaiintroducând limitarea acestora pe un domeniu.
e= 7.5342e-005; V=3.2025e-006
Controller fuzzy adaptiv indirect cu al doilea tip de model fuzzy
Referință treaptă unitate , Ts=0.01
, rezultând în final o eroare de urmărire e= 2.6499e-010, de modelare
em= -2.0343e-006 și valoarea funcției Lyapunov V= 2.2607e-014. Comanda supervizoare va fi zero, valoarea funcției Lyapunov neatingând pragul de activate a acesteia.
Referință sinusoidală , Ts=0.01
x10=-pi/60; e= 1.4566e-004,V= 1.2482e-007
Algoritmul de ajustare a parametrilor se realizează cu pas constant. Pasul de căutare poate fi interpretat ca o rată de învățare, având în vedere structura similară cu a unei rețele neuronale a modelelor fuzzy. Algoritmul acționează asupra minimizării erorii de urmărire și nu a erorii de modelare. De fapt se învață semnalul de referință.
Controller fuzzy adaptiv direct cu primul tip de model fuzzy
pentru f cunosc marginea superioară, și consider bl=1, rezultând la o treaptă de pi/30:
e= -3.5162e-004; V= 2.6888e-011;
4.2 Aplicație pentru un sistem liniar
Se consideră sistemul dat prin funcția de transfer care conduce la ecuațiile de stare respectiv . Răspunsul sistemului la o treaptă unitate va fi:
Se va simula un sistemul închis în cazul unui controller fuzzy adaptiv direct construit cu primul tip de model fuzzy, respectiv cu cel de al doilea tip de model fuzzy, neconsiderându-se un domeniu în care să se găsească parametrii ajustabili.
Controller fuzzy adaptiv direct cu primul tip de model fuzzy
Pentru controllerul fuzzy se consideră domeniul pentru variabilele de intrare [-4 4], pe care se consideră 5 variabile lingvistice cu centrele uniform distribuite pe domeniul de intrare și dispersia funcțiilor de apartenență 1 parametrii inițiali ( centrele concluziilor legilor de apartenență se aleg aleatoriu în intervalul
[-5 5].
Se consideră aceeași parametrii pentru definirea dinamicii erorii de urmărire ca în exemplul anterior.
referință treaptă de amplitudine 3 , perioada de eșantionare Ts=0.1, pas de căutare gama=1
referință treaptă de amplitudine 10 care va plasa variabilele de intrare în afara domeniului de definiție, perioada de eșantionare Ts=0.1, pas de căutare gama=1
reconsider o eșantionare cu perioada de 0.5 .Păstrând același pas de căutare sau rată de învățare sistemul devine instabil, deoarece rețeaua nu reușește să se antreneze. Pentru aceasta reconsider un nou pas de căutare mai mic gama=0.2 având în vedere că eroarea de urmărire după care se realizează ajustarea evoluează mai repede. Va fi afectată dinamica sistemului având în vedere că procesul de învățare necesită cam același timp.
controller fuzzy adaptiv direct cu al doilea tip de model fuzzy
În acest caz singurele procesul este total necunoscut controllerului. Parametrii care trebuie precizați vor fi perioada de eșantionare Ts, pasul de căutare gama, numărul de reguli implicate în construirea modelului controllerului M și limita inferioară S pentru dispersia funcțiilor de apartenență.
referință treaptă unitate de amplitudine 3, Ts=0.1; gama=1;M=5;S=1;
Ca urmare a pasului de căutare rezultă în primul pas de ajustare valori negative pentru dispersiile funcțiilor radiale, valori care ca urmare a algoritmului de limitare se vor păstra neschimbate.
reconsider cazul unui semnal de referință triunghiular semnal prin care impunem sistemului să învețe 2 tipuri de semnale de referință.
Reconsider sistemul care este un sistem de fază neminimă și nu are o componentă integratoare în el. În aceleași condiții inițiale ca și primul sistem simulez controlul adaptiv fuzzy adaptiv direct. Sistemul nu va avea eroare staționară.
Reconsider procesul cu un coeficient de amplificare mai mare: . În aceleași condiții sistemul devine instabil fiind necesară schimbarea domeniilor de definiție pentru variabilele de intrare, lucru care nu e necesar în cazul folosirii controllerului cu cel de-al doilea tip de model fuzzy.
Anexe de Programe de simulare
function csi=radial(x,x0,sigmax); % construiește setul de funcții radiale
% function csi=radial(x,x0,sigmax)
% calculeaza setul de functii radiale de baza
% x=vector intrari nx1
% x0=vector centre de clasificare nxM unde M=numar de legi
% sigmax=varianta functii de apartenenta gaussiene nxM asociata x0
% csi=Mx1 setul de functii radiale de baza
% se considera ca valorile de intrare sunt identic acoperite cu functii de apartenenta
[n,M]=size(x0); [mi,i1]=min(x0'); [ma,i2]=max(x0');
for l=1:M
csi(l,1)=1;
for i=1:n,
if ( (x(i)<mi(i))&(l==i1(i)) )|( (x(i)>ma(i))&(l==i2(i)) )
vv=1;
else
vv=gaussmf(x(i),[sigmax(i,l) x0(i,l)]);
end;
csi(l,1)=csi(l,1)*vv;
end;
end;
aa=sum(csi);
if aa==0 aa=1;end;
csi=csi/aa;
function y=sim_f1(x,x0,sigma,teta); % simulează modelul fuzzy
% function y=sim_f1(x,x0,sigma,teta)
% simuleaza primul tip de model fuzzy
% x=vector intrari nx1
% x0=vector centre de multimi fuzzy premize nxM unde M=numar de legi
% sigma=varianta functii de apartenenta gaussiene nxM asociata x0
% teta=centre multimi fuzzy consecinte Mx1
% y=iesirea modelului
csi=radial(x,x0,sigma);
y=teta'*csi;
inada_u.m generează comanda adaptivă indirectă
function [uc,us,Ve]=inada_u(x,x0f,sigmaf,tetaf,x0g,sigmag,tetag,ymn,K,e,P,bc,V,fu,gu,gl);
Ve=e'*P*e/2;
uc=(-sim_f1(x,x0f,sigmaf,tetaf)+ymn+K'*e)/sim_f1(x,x0g,sigmag,tetag);
if Ve<=V us=0;
else us=sign(e'*P*bc)*(abs(sim_f1(x,x0f,sigmaf,tetaf))+feval(fu,x)+abs(sim_f1(x,x0g,sigmag,tetag)*uc)+abs(feval(gu,x)*uc))/feval(gl,x);
end;
ada_u.m generează comanda adaptivă directă
function [uc,us,Ve]=inada_u(x,x0f,sigmaf,tetaf,bl,ymn,K,e,P,bc,V,fu);
Ve=e'*P*e/2;
uc=sim_f1(x,x0f,sigmaf,tetaf);
if Ve<=V us=0;
else us=sign(e'*P*bc)*(abs(uc)+(feval(fu,x)+abs(ymn)+abs(K'*e))/bl);
end;
ada_teta.m ajustează parametrii
function tetaf=ada_teta(tetaf,co,cof1,cof2,Mf,gam1,csif,semn);
if ( modd(cof1)<Mf )|( (modd(cof1)>=Mf)&(cof2>=0) )
tetaf=tetaf+sign(semn)*gam1*co*csif;
elseif (modd(cof1)>=Mf)&(cof2<0)
tetaf=tetaf+sign(semn)*gam1*co*csif-sign(semn)*gam1*tetaf*cof2/modd(tetaf)^2;
end;
ii=find(abs(tetaf)>Mf);
if length(ii)>0
for rr=1:length(ii)
tetaf(ii(rr))=sign(tetaf(ii(rr)))*Mf;
end; end;
ada_lim.m limitează inferior parametrii
function tetag=ada_lim(tetag_ant,tetag,gam2,E,co,csiguc,semn);
ind=find(tetag<E);
if ind>0
for ii=1:length(ind)
cc=co*csiguc(ind(ii));
if cc<0
tetag(ind(ii))=tetag_ant(ind(ii))+sign(semn)*gam2*cc;
else
tetag(ind(ii))=tetag_ant(ind(ii));
end;
end;
end;
df_deta.m calculează derivata funcției ce descrie modelul fuzzy la parametrii care se ajustează
function [dfy,dfx,dfs]=df_dteta(x,x0,sigma,yl);
%function [dfy,dfx,dfs]=df_dteta(x,x0,sigma,yl)
%calculeaza derivata functionalei ce defineste modelul fuzzy functie
%de parametrii x0,sigma,teta in punctul x
%x=nx1 intrararile modelului fuzzy
%x0=nxM centrele premizelor celor M reguli
%sigma=nxM varianta
%yl=Mx1 centrele comsecintei celor M reguli
%dfy=Mx1 derivata dupa yl
%dfx=nxM derivata dupa x
%dfs=nxM derivata dupa sigma
M=length(yl);
n=length(x);
dfy=radial(x,x0,sigma);
ff=sim_f1(x,x0,sigma,yl);
for l=1:M
for i=1:n
dfx(i,l)=2*dfy(l)*(ff-yl(l))*(x(i)-x0(i,l))/sigma(i,l)^2;
dfs(i,l)=dfx(i,l)*(x(i)-x0(i,l))/sigma(i,l)^2;
end;
end;
modd.m calculează modulul vectorului
function mm=modd(x)
n=length(x);
%mm=modd(x)
%calculeaza modulul vectorului x
mm=sqrt(sum(x.^2));
%mm=(sum(abs(x).^n)).^(1/n);
sis_ref.m modelul de referință
function ym=sis_ref(k,Ts,y);
%ym=sis_ref(k,Ts,y)
%sistemul de referinta dupa care se antreneaza sistemul fuzzy adaptiv
%ym- (n+1)x1-contine y,dy,…,d^(n)y
%k*Ts=momentul de timp,y-vector esantion anterior
AA=pi/30;
%referinta triunghiulara
%ym=[y(1)+Ts*tan(2*AA/pi)*sign(cos(k*Ts));sign(cos(k*Ts))*tan(2*AA/pi);0];
%referinta sinusoidala
ym=[sin((k+1)*Ts);cos((k+1)*Ts);-sin((k+1)*Ts)]*AA;%+(rand(3,1)-0.5)*AA;
%referinta treapta
%ym=[AA;0;0];
pendul.m conține modelul pendulului invers
function yprim=pendul(t,y)
%functie ce descrie comportamentul pendulului invers
g=9.8;mc=1;m=0.1;l=0.5;
yprim(1)=y(2);
yprim(2)=(g*sin(y(1))-(m*l*y(2)^2*cos(y(1))*sin(y(1)))/(mc+m)+cos(y(1))/(mc+m)*y(3))/(l*(4/3-m*cos(y(1))^2/(mc+m)));
yprim(3)=0;
Funcții ce implementează restricțiile impuse asupra funcționalelor ce intră în componența modelului
pend_fu.m
function y=pend_fu(x);
y=15.78+0.0366*x(2)^2;
pend_gl.m
function y=pend_gl(x);
y=1.12;
pend_gu.m
function y=pend_gu(x);
y=1.46;
inada_f1.m simulator pentru control fuzzy adaptiv indirect cu primul tip de model fuzzy
%genereaza comanda u si adapteaza parametrii tetaf,tetag
%x=vector stare (faze) proces nx1 unde x(1) reprezinta iesirea din proces, x(2) derivata de
%ordin 2, ….
%ym=referinta nx1 ym(1) iesirea dorita, ym(2) derivata iesirii dorite,…
%x0f= nxMMf centre multimi fuzzy modelul functiei f(x) und MMf este numarula regulilor fuzzy
%sigmf=nxmf varianta functiilor de apartenenta multimilor fuzzy considerate pentru premizele
%regulilor care descriu modelul pentru f, unde mf este numarul partitiilor fuzzy
%tetaf=MMfx1 centre multimi fuzzy consecinte reguli ce descriu modelul fuzzy pentru f(x)
%x0g=nxMg, sigmag=nxmg, tetag=mgx1 idem pentru functia g
%P=matricea Lyapunov calculata aprioric, Q matrice nxn pozitiv definita utilizata in ecuatia Lyapunov
%|tetaf|<=Mf, |tetag|<=Mg limitari impuse parametrilor pe parcursul calculelor
%|tetag|>E a. i. modelul fuzzy pentru g sa fie pozitiv ca valori numerice calculate
%V=limitare impusa functiei Lyapunov asociate procesului; cand functia Lyapunov depaseste
%aceasta valoare apare o comanda supervizoare care o forteaza sa devina mai mica ca V
%k= nx1 asigura convergenta exponentiala spre zero a erorii
%gam1,gam2=pasi de ajustare a parametrilor tetaf, tetag
%ymn=derivata de ordin n a referintei
%fu,gl,gu=limitele functiilor f, g
clear
%date initiale
%numar intrari
nn=2;
%starea initiala
x=zeros(nn,1); x(1)=-pi/60;
%semnale comanda initiale
uc=[];us=[];
%limita domeniu valori intrare in proces
Mx=pi/6;
%definire parametrii functii radiale
mf=5; %numar variabile lingvistice pentru modelul f
sigmf=ones(1,mf)*pi/24; %definire variante pentru variabilel lingvistice
xcf=(-Mx:2*Mx/(mf-1):Mx)';% centre variabile lingvistice
MMf=mf*mf; %numar reguli implicate in descrierea modelului
x0f=[];sigmaf=[]; %premize reguli
for i=1:mf
for j=1:mf
x0f=[x0f [xcf(i);xcf(j)]];
sigmaf=[sigmaf [sigmf(i);sigmf(j)]];
end;
end;
Mf=16;%domeniu parametrii concluzii reguli
tetaf=3*(rand(MMf,1)-0.5)/0.5;%centre concluzii legi
mg=5; %numar variabile lingvistice pentru modelul g
sigmg=ones(1,mg)*pi/24; %definire variante pentru variabilel lingvistice
xcg=(-Mx:2*Mx/(mg-1):Mx)';% centre variabile lingvistice
MMg=mg*mg; %numar reguli implicate in descrierea modelului
x0g=[];sigmag=[]; %premize reguli
for i=1:mg
for j=1:mg
x0g=[x0g [xcg(i);xcg(j)]];
sigmag=[sigmag [sigmg(i);sigmg(j)]];
end;
end;
E=0.7;Mg=1.6;%domeniu parametrii concluzii reguli
tetag=0.15*(rand(MMg,1)-0.5)/0.5+1.15;%centre concluzii legi
%parametrii implicati in ecuatia Lyapunov
k2=1;%corespunde lui e
k1=2;%corespunde primei derivate a erorii
K=[k2;k1];
Q=eye(2)*10;
AA=pi/4;
P=inv([0 -k2 -k2 0;1 -k1 0 -k2;1 0 -k1 -k2;0 1 1 -2*k1])*(-1*Q(:));
P=[P(1) P(2);P(3) P(4)];
ll=min(eig(P));
V=ll*(2*AA*2)^2/2;
%pasii de cautare
gam1=5;gam2=0.1;
%marginirea functionalelor ce descriu procesul
fun='pendul';
fu='pend_fu';
gl='pend_gl';
gu='pend_gu';
%modelul de referinta
referinta ='sis_ref';
%perioada de esantionare
Ts=0.01;
%prima referinta
ym=feval(referinta,0,Ts,zeros(nn+1,1));
%eroarea initiala
e=x-ym(1:nn);
g=9.8;mc=1;m=0.1;l=0.5;
no=input('numar iteratii=');
bc=zeros(nn,1);bc(nn)=1;
for k=1:no
timp(k)=(k-1)*Ts;
[uc(k,1),us(k,1),Ve(k)]=inada_u(x(:,k),x0f,sigmaf,tetaf(:,k),x0g,sigmag,tetag(:,k),ym(nn+1,k),K,e(:,k),P,bc,V,fu,gu,gl);
u(k,1)=uc(k)+us(k);
[T,Y]=ode23(fun,(k-1)*Ts,k*Ts,[x(:,k);u(k)]);
[ny,my]=size(Y);
x(:,k+1)=Y(ny,1:my-1)';
xm(k)=sim_f1(x(:,k),x0f,sigmaf,tetaf(:,k))+sim_f1(x(:,k),x0g,sigmag,tetag(:,k))*u(k);
aa(k)=(g*sin(x(1,k))-(m*l*x(2,k)^2*cos(x(1,k))*sin(x(1,k)))/(mc+m)+cos(x(1,k))/(mc+m)*u(k))/(l*(4/3-m*cos(x(1,k))^2/(mc+m)));
em(k)=aa(k)-xm(k);
ym(:,k+1)=feval(referinta,k+1,Ts,ym(:,k));
e(:,k+1)=ym(1:nn,k+1)-x(:,k+1);
csif=radial(x(:,k+1),x0f,sigmaf);
csig=csif;
%ajustarea parametrilor
cof1=abs(tetaf(:,k));
co=e(:,k+1)'*P*bc;
cof2(k)=co*tetaf(:,k)'*csif;
tetaf(:,k+1)=ada_teta(tetaf(:,k),co,cof1,cof2(k),Mf,gam1,csif,-1);
cog1=abs(tetag(:,k));
cog2(k)=co*tetag(:,k)'*csig*uc(k);
tetag(:,k+1)=ada_teta(tetag(:,k),co,cog1,cog2(k),Mg,gam2,csig*uc(k),-1);
tetag(:,k+1)=ada_lim(tetag(:,k),tetag(:,k+1),gam2,E,co,csig*uc(k),-1);
clc
k,e(1,k),e(2,k),em(k),Ve(k)
end;
u=[0;u];
timp(k+1)=k*Ts;
subplot(211),plot(timp,ym(1,:),timp,x(1,:)),grid,title('iesire proces si referinta')
subplot(212),plot(timp,u),grid,title('comanda')
subplot(111)
inada_f2.m simulatorul pentru control fuzzy adaptiv indirect cu cel de al doilea tip de model fuzzy
%genereaza comanda u si adapteaza parametrii tetaf,tetag
%x=vector stare (faze) proces nx1 unde x(1) reprezinta iesirea din proces, x(2) derivata de
%ordin 2, ….
%ym=referinta nx1 ym(1) iesirea dorita, ym(2) derivata iesirii dorite,…
%x0f= nxMMf centre multimi fuzzy modelul functiei f(x) und MMf este numarula regulilor fuzzy
%sigmf=nxMMf varianta functiilor de apartenenta multimilor fuzzy considerate pentru premizele
%regulilor care descriu modelul pentru f
%tetaf=MMfx1 centre multimi fuzzy consecinte reguli ce descriu modelul fuzzy pentru f(x)
%x0g=nxMg, sigmag=nxmg, tetag=mgx1 idem pentru functia g
%P=matricea Lyapunov calculata aprioric, Q matrice nxn pozitiv definita utilizata in ecuatia Lyapunov
%|tetaf|<=Mf, |tetag|<=Mg limitari impuse parametrilor pe parcursul calculelor
%|tetag|>E a. i. modelul fuzzy pentru g sa fie pozitiv ca valori numerice calculate
%V=limitare impus-a functiei Lyapunov asociate procesului; cand functia Lyapunov depaseste
%aceasta valoare apare o comanda supervizoare care o forteaza sa devina mai mica ca V
%K= nx1 asigura convergenta exponentiala spre zero a erorii
%gam1,gam2=pasi de ajustare a parametrilor tetaf, tetag
%ymn=derivata de ordin n a referintei
%fu,gl,gu=limitele functiilor f, g
clear,clc
%date initiale
%numar intrari
nn=2;
%starea initiala
x=zeros(nn,1); x(1)=-pi/60;
%limita domeniu valori intrare in proces
Mx=pi/6;
%definire parametrii functii radiale pentru functia f
MMf=15;%numar reguli
Mf=16;%domeniu parametrii ajustabili
S=0.1;%limitare inferioara dispersie pentru a asigura acoperirea domeniului
x0f=Mx*(rand(nn,MMf)-0.5)/0.5;
sigmaf=(pi-S)*(rand(nn,MMf)-0.5)+(S+pi)/2;
yfl=3*(rand(MMf,1)-0.5)/0.5;
tetaf=[yfl x0f' sigmaf'];tetaf=tetaf(:);%parametrii ce se ajusteaza
%definire parametrii functii radiale pentru functia g
MMg=15;
E=0.7;
Mg=1.6;%domeniu parametrii ajustabili
x0g=Mx*(rand(nn,MMg)-0.5)/0.5;
sigmag=(pi-S)*(rand(nn,MMf)-0.5)+(S+pi)/2;
ygl=((Mg-E)/2)*(rand(MMg,1)-0.5)/0.5+(Mg+S)/2;
tetag=[ygl x0g' sigmag'];tetag=tetag(:);
%parametrii implicati in ecuatia Lyapunov
k2=1;%corespunde lui e
k1=2;%corespunde primei derivate a erorii
K=[k2;k1];
Q=eye(2)*10;
AA=pi/30;
P=inv([0 -k2 -k2 0;1 -k1 0 -k2;1 0 -k1 -k2;0 1 1 -2*k1])*(-1*Q(:));
P=[P(1) P(2);P(3) P(4)];
ll=min(eig(P));
V=ll*(2*AA*2)^2/2;
%pasii de cautare
gam1=50;gam2=1;
%marginirea functionalelor ce descriu procesul
fun='pendul';
fu='pend_fu';
gl='pend_gl';
gu='pend_gu';
%modelul de referinta
referinta ='sis_ref';
%perioada de esantionare
Ts=0.01;
%prima referinta
ym=feval(referinta,1,Ts,zeros(nn+1,1));
%eroarea initiala
e=x-ym(1:nn);
bc=zeros(max(size(P)),1);bc(length(bc))=1;
g=9.8;mc=1;m=0.1;l=0.5;
no=input('numar iteratii=');
for k=1:no
timp(k)=(k-1)*Ts;
[uc(k,1),us(k,1),Ve(k,1)]=inada_u(x(:,k),x0f,sigmaf,yfl,x0g,sigmag,ygl,ym(nn,k),K,e(:,k),P,bc,V,fu,gu,gl);
u(k,1)=uc(k)+us(k);
[T,Y]=ode23(fun,(k-1)*Ts,k*Ts,[x(:,k);u(k)]);
[ny,my]=size(Y);
x(:,k+1)=Y(ny,1:my-1)';
xm(k)=sim_f1(x(:,k),x0f,sigmaf,yfl)+sim_f1(x(:,k),x0g,sigmag,ygl)*u(k);
aa(k)=(g*sin(x(1,k))-(m*l*x(2,k)^2*cos(x(1,k))*sin(x(1,k)))/(mc+m)+cos(x(1,k))/(mc+m)*u(k))/(l*(4/3-m*cos(x(1,k))^2/(mc+m)));
em(k)=aa(k)-xm(k);
ym(:,k+1)=feval(referinta,k+1,Ts,ym(:,k));
e(:,k+1)=ym(1:nn,k+1)-x(:,k+1);
%calcul derivate
[dfy,dfx,dfs]=df_dteta(x(:,k+1),x0f,sigmaf,yfl);
df=[dfy dfx' dfs'];df=df(:);
[dgy,dgx,dgs]=df_dteta(x(:,k+1),x0g,sigmag,ygl);
dg=[dgy dgx' dgs'];dg=dg(:);
%ajustarea parametrilor
cof1=abs(tetaf(:,k));
co=e(:,k+1)'*P*bc;
cof2(k)=co*tetaf(:,k)'*df;
tetaf(:,k+1)=ada_teta(tetaf(:,k),co,cof1,cof2(k),Mf,gam1,df,-1);
dfs=dfs';
M=MMf;
tetaf(3*M+1:5*M,k+1)=ada_lim(tetaf(3*M+1:5*M,k),tetaf(3*M+1:5*M,k+1),gam1,S,co,dfs(:),-1);
yfl=tetaf(1:M,k+1);
x0f=[tetaf(M+1:2*M,k+1) tetaf(2*M+1:3*M,k+1)]';
sigmaf=[tetaf(3*M+1:4*M,k+1) tetaf(4*M+1:5*M,k+1)]';
cog1=abs(tetag(:,k));
cog2(k)=co*tetag(:,k)'*dg*uc(k);
M=MMg;
tetag(:,k+1)=ada_teta(tetag(:,k),co,cog1,cog2(k),Mg,gam2,dg*uc(k),-1);
tetag(1:M,k+1)=ada_lim(tetag(1:M,k),tetag(1:M,k+1),gam2,E,co,dgy*uc(k),-1);
dgs=dgs';
tetag(3*M+1:5*M,k+1)=ada_lim(tetag(3*M+1:5*M,k),tetag(3*M+1:5*M,k+1),gam2,S,co,dgs(:)*uc(k),-1);
ygl=tetag(1:M,k+1);
x0g=[tetag(M+1:2*M,k+1) tetag(2*M+1:3*M,k+1)]';
sigmag=[tetag(3*M+1:4*M,k+1) tetag(4*M+1:5*M,k+1)]';
clc
k,e(1,k),e(2,k),em(k),Ve(k)
end;
u=[0;u];
timp(k+1)=k*Ts;
subplot(211),plot(timp,ym(1,:),timp,x(1,:)),grid,title('iesire proces si referinta')
subplot(212),plot(timp,u),grid,title('comanda')
subplot(111)
linad_f1.m simulator pentru controller fuzzy adaptiv indirect obținut prin liniarizare
%function [u,tetaf,tetag]=inada_f1(x,ym,x0f,sigmaf,tetaf,x0g,sigmag,tetag,P,Q,Mf,Mg,E,V,k,gam1,gama2,ymn,fu,gl,gu)
%[u,tetaf,tetag]=inada_f1(x,ym,x0f,sigmaf,tetaf,x0g,sigmag,tetag,P,Mf,Mg,E,V)
%genereaza comanda u si adapteaza parametrii tetaf,tetag
%x=vector stare (faze) proces nx1 unde x(1) reprezinta iesirea din proces, x(2) derivata de
%ordin 2, ….
%ym=referinta nx1 ym(1) iesirea dorita, ym(2) derivata iesirii dorite,…
%x0f= nxMMf centre multimi fuzzy modelul functiei f(x) und MMf este numarula regulilor fuzzy
%sigmf=nxmf varianta functiilor de apartenenta multimilor fuzzy considerate pentru premizele
%regulilor care descriu modelul pentru f, unde mf este numarul partitiilor fuzzy
%tetaf=MMfx1 centre multimi fuzzy consecinte reguli ce descriu modelul fuzzy pentru f(x)
%x0g=nxMg, sigmag=nxmg, tetag=mgx1 idem pentru functia g
%P=matricea Lyapunov calculata aprioric, Q matrice nxn pozitiv definita utilizata in ecuatia Lyapunov
%|tetaf|<=Mf, |tetag|<=Mg limitari impuse parametrilor pe parcursul calculelor
%|tetag|>E a. i. modelul fuzzy pentru g sa fie pozitiv ca valori numerice calculate
%V=limitare impusa functiei Lyapunov asociate procesului; cand functia Lyapunov depaseste
%aceasta valoare apare o comanda supervizoare care o forteaza sa devina mai mica ca V
%k= nx1 asigura convergenta exponentiala spre zero a erorii
%gam1,gam2=pasi de ajustare a parametrilor tetaf, tetag
%ymn=derivata de ordin n a referintei
%fu,gl,gu=limitele functiilor f, g
clear
%date initiale
%numar intrari
nn=2;
%starea initiala
x=zeros(nn,1); x(1)=-pi/30;
%semnale comanda initiale
uc=[];us=[];
%limita domeniu valori intrare in proces
Mx=pi/6;
%definire parametrii functii radiale
mf=5; %numar variabile lingvistice pentru modelul f
sigmf=ones(1,mf)*pi/24; %definire variante pentru variabilel lingvistice
xcf=(-Mx:2*Mx/(mf-1):Mx)';% centre variabile lingvistice
MMf=mf*mf; %numar reguli implicate in descrierea modelului
x0f=[];sigmaf=[]; %premize reguli
for i=1:mf
for j=1:mf
x0f=[x0f [xcf(i);xcf(j)]];
sigmaf=[sigmaf [sigmf(i);sigmf(j)]];
end;
end;
Mf=16;%domeniu parametrii concluzii reguli
tetaf=3*(rand(MMf,1)-0.5)/0.5;%centre concluzii legi
mg=5; %numar variabile lingvistice pentru modelul g
sigmg=ones(1,mg)*pi/24; %definire variante pentru variabilel lingvistice
xcg=(-Mx:2*Mx/(mg-1):Mx)';% centre variabile lingvistice
MMg=mg*mg; %numar reguli implicate in descrierea modelului
x0g=[];sigmag=[]; %premize reguli
for i=1:mg
for j=1:mg
x0g=[x0g [xcg(i);xcg(j)]];
sigmag=[sigmag [sigmg(i);sigmg(j)]];
end;
end;
E=0.7;Mg=1.6;%domeniu parametrii concluzii reguli
tetag=0.15*(rand(MMg,1)-0.5)/0.5+1.15;%centre concluzii legi
%parametrii implicati in ecuatia Lyapunov
k2=1;%corespunde lui e
k1=2;%corespunde primei derivate a erorii
K=[k2;k1];
Q=eye(2)*10;
AA=pi/30;
P=inv([0 -k2 -k2 0;1 -k1 0 -k2;1 0 -k1 -k2;0 1 1 -2*k1])*(-1*Q(:));
P=[P(1) P(2);P(3) P(4)];
ll=min(eig(P));
V=ll*(2*AA*2)^2/2;
%pasii de cautare
gam1=50;gam2=1;
%marginirea functionalelor ce descriu procesul
fun='pendul';
fu='pend_fu';
gl='pend_gl';
gu='pend_gu';
%modelul de referinta
referinta ='sis_ref';
%perioada de esantionare
Ts=0.01;
%prima referinta
ym=feval(referinta,0,Ts,zeros(nn+1,1));
%eroarea initiala
e=x-ym(1:nn);
g=9.8;mc=1;m=0.1;l=0.5;
bc=zeros(nn,1);bc(nn)=1;
no=input('numar iteratii=');
for k=1:no
timp(k)=(k-1)*Ts;
uc(k,1)=(-sim_f1(x(:,k),x0f,sigmaf,tetaf(:,k))+ym(nn,k)+K'*e(:,k))/sim_f1(x(:,k),x0g,sigmag,tetag(:,k));
Ve(k)=e(:,k)'*P*e(:,k);
[T,Y]=ode23(fun,(k-1)*Ts,k*Ts,[x(:,k);uc(k)]);
[ny,my]=size(Y);
x(:,k+1)=Y(ny,1:my-1)';
xm(k)=sim_f1(x(:,k),x0f,sigmaf,tetaf(:,k))+sim_f1(x(:,k),x0g,sigmag,tetag(:,k))*uc(k);
aa(k)=(g*sin(x(1,k))-(m*l*x(2,k)^2*cos(x(1,k))*sin(x(1,k)))/(mc+m)+cos(x(1,k))/(mc+m)*uc(k))/(l*(4/3-m*cos(x(1,k))^2/(mc+m)));
em(k)=aa(k)-xm(k);
ym(:,k+1)=feval(referinta,k+1,Ts,ym(:,k));
e(:,k+1)=ym(1:nn,k+1)-x(:,k+1);
csif=radial(x(:,k+1),x0f,sigmaf);
csig=csif;
%ajustarea parametrilor
co=e(:,k+1)'*P*bc;
tetaf(:,k+1)=tetaf(:,k)-gam1*co*csif;
tetag(:,k+1)=tetag(:,k)-gam2*co*csig*uc(k);
clc
k,e(1,k),e(2,k),em(k),Ve(k)
end;
uc=[0;uc];
timp(k+1)=k*Ts;
subplot(211),plot(timp,ym(1,:),timp,x(1,:)),grid,title('iesire proces si referinta')
subplot(212),plot(timp,uc),grid,title('comanda')
subplot(111)
ada_f1.m controller fuzzy adaptiv direct cu primul tip de model fuzzy
%function [u,tetaf,tetag]=ada_f1(x,ym,x0f,sigmaf,tetaf,bl,P,Q,Mf,Mg,E,V,k,gam1,gama2,ymn,fu,gl,gu)
%[u,tetaf]=inada_f1(x,ym,x0f,sigmaf,tetaf,bl,P,Mf,Mg,E,V)
%genereaza comanda u si adapteaza parametrii tetaf,tetag
%x=vector stare (faze) proces nx1 unde x(1) reprezinta iesirea din proces, x(2) derivata de
%ordin 2, ….
%ym=referinta nx1 ym(1) iesirea dorita, ym(2) derivata iesirii dorite,…
%x0f= nxMMf centre multimi fuzzy modelul functiei f(x) und MMf este numarula regulilor fuzzy
%sigmf=nxmf varianta functiilor de apartenenta multimilor fuzzy considerate pentru premizele
%regulilor care descriu modelul pentru f, unde mf este numarul partitiilor fuzzy
%tetaf=MMfx1 centre multimi fuzzy consecinte reguli ce descriu modelul fuzzy pentru f(x)
%P=matricea Lyapunov calculata aprioric, Q matrice nxn pozitiv definita utilizata in ecuatia Lyapunov
%|tetaf|<=Mf, |tetag|<=Mg limitari impuse parametrilor pe parcursul calculelor
%V=limitare impusa functiei Lyapunov asociate procesului; cand functia Lyapunov depaseste
%aceasta valoare apare o comanda supervizoare care o forteaza sa devina mai mica ca V
%k= nx1 asigura convergenta exponentiala spre zero a erorii
%gam1,gam2=pasi de ajustare a parametrilor tetaf, tetag
%ymn=derivata de ordin n a referintei
%fu=limita functiei f
clear
g=9.8;mc=1;m=0.1;l=0.5;
no=input('numar iteratii=');
Ts=input('perioada de esantionare=');
gam1=input('gama1=');
nn=2; %dimensiune intrare
fu='oscil_fu';
fun='oscil';
k2=1;%corespunde lui e
k1=2;%corespunde primei derivate a erorii
K=[k2;k1];
Q=eye(2)*10;
P=inv([0 -k2 -k2 0;1 -k1 0 -k2;1 0 -k1 -k2;0 1 1 -2*k1])*(-1*Q(:));
P=[P(1) P(2);P(3) P(4)];
[mp,np]=size(P);
ll=min(eig(P));
AA=1;
V=ll*(2*AA*2)^2/2;
Mf=30;Mx=10;
bl=1;
bc=zeros(max(size(P)),1);bc(length(bc))=1;
mf=5; %partitiile fuzzy implicate in acoperirea domeniului
sigmf=ones(1,mf)*pi/24; %numai pentru o componenta a lui x
xcf=(-Mx:2*Mx/(mf-1):Mx)';
%construiesc premizele a mf*mf reguli pentru descrierea lui f, adica toate combinatiile
%multimilor fuzzy ce acopera domeniul lui x
MMf=mf*mf;
x0f=[];sigmaf=[];
for i=1:mf
for j=1:mf
x0f=[x0f [xcf(i);xcf(j)]];
sigmaf=[sigmaf [sigmf(i);sigmf(j)]];
end;
end;
%parametrii initiali
tetaf=Mx*(rand(MMf,1)-0.5)/0.5;
x=zeros(nn,1)*2;
%ym=[Ts;tan(2*AA/pi)];ymn=0;
ym(:,1)=[sin(Ts);cos(Ts)]*AA;
ymn=-ym(1);
%ym=[AA;0];ymn=0;
e(:,1)=ym(:,1)-x(:,1);
csi=radial(x,x0f,sigmaf);
for k=1:no
timp(k)=(k-1)*Ts;
[uc(k,1),us(k,1),Ve(k)]=ada_u(x(:,k),x0f,sigmaf,tetaf(:,k),bl,ymn,K,e(:,k),P,bc,V,fu);
u(k,1)=uc(k)+us(k);
[T,Y]=ode23(fun,(k-1)*Ts,k*Ts,[x(:,k);u(k)]);
[ny,my]=size(Y);
x(:,k+1)=Y(ny,1:my-1)';
xm(k)=sim_f1(x(:,k),x0f,sigmaf,tetaf(:,k))+bl*u(k);
aa(k)=0.1*x(2,k)-x(1,k)^3+12*cos((k)*Ts)+u(k);
em(k)=aa(k)-xm(k);
%ym(:,k+1)=[ym(1,k)+Ts*tan(2*AA/pi)*sign(cos(k*Ts));sign(cos(k*Ts))*tan(2*AA/pi)];
ym(:,k+1)=[sin((k+1)*Ts);cos((k+1)*Ts)]*AA;
ymn=-ym(1,k+1);
%ym(:,k+1)=[AA;0];
e(:,k+1)=ym(:,k+1)-x(:,k+1);
csif=radial(x(:,k+1),x0f,sigmaf);
csig=csif;
%ajustarea parametrilor
cof1=abs(tetaf(:,k));
co=e(:,k+1)'*P(:,np);
cof2(k)=co*tetaf(:,k)'*csif;
tetaf(:,k+1)=ada_teta(tetaf(:,k),co,cof1,cof2(k),Mf,gam1,csif,1);
clc
k,e(1,k),e(2,k),em(k),Ve(k)
end;
u=[0;u];
timp(k+1)=k*Ts;
subplot(211),plot(timp,ym(1,:),timp,x(1,:)),grid,title('iesire proces si referinta')
subplot(212),plot(timp,u),grid,title('comanda')
subplot(111)
ada_f2.m controller fuzzy adaptiv direct cu cel de-al doilea tip de model fuzzy
%function [u,tetaf]=ada_f2(x,ym,x0f,sigmaf,tetaf,bl,P,Q,Mf,Mg,S,V,k,gam1,ymn,fu)
%[u,tetaf,tetag]=inada_f2(x,ym,x0f,sigmaf,tetaf,x0g,sigmag,tetag,P,Mf,Mg,E,V)
%genereaza comanda u si adapteaza parametrii tetaf,tetag
%x=vector stare (faze) proces nx1 unde x(1) reprezinta iesirea din proces, x(2) derivata de
%ordin 2, ….
%ym=referinta nx1 ym(1) iesirea dorita, ym(2) derivata iesirii dorite,…
%x0f= nxMMf centre multimi fuzzy modelul functiei f(x) und MMf este numarula regulilor fuzzy
%sigmf=nxMMf varianta functiilor de apartenenta multimilor fuzzy considerate pentru premizele
%regulilor care descriu modelul pentru f
%tetaf=MMfx1 centre multimi fuzzy consecinte reguli ce descriu modelul fuzzy pentru f(x)
%P=matricea Lyapunov calculata aprioric, Q matrice nxn pozitiv definita utilizata in ecuatia Lyapunov
%|tetaf|<=Mf, |tetag|<=Mg limitari impuse parametrilor pe parcursul calculelor
%|tetag|>E a. i. modelul fuzzy pentru g sa fie pozitiv ca valori numerice calculate
%V=limitare impus-a functiei Lyapunov asociate procesului; cand functia Lyapunov depaseste
%aceasta valoare apare o comanda supervizoare care o forteaza sa devina mai mica ca V
%K= nx1 asigura convergenta exponentiala spre zero a erorii
%gam1=pasi de ajustare a parametrilor tetaf, tetag
%ymn=derivata de ordin n a referintei
%fu,=limitele functiei f
clear
no=input('numar iteratii=');
Ts=input('perioada de esantionare=');
gam1=input('gama1=');
nn=2; %dimensiune intrare
fu='pend_fu';
fun='pendul';
k2=1;%corespunde lui e
k1=2;%corespunde primei derivate a erorii
K=[k2;k1];
Q=eye(2)*10;
P=inv([0 -k2 -k2 0;1 -k1 0 -k2;1 0 -k1 -k2;0 1 1 -2*k1])*(-1*Q(:));
P=[P(1) P(2);P(3) P(4)];
[mp,np]=size(P);
ll=min(eig(P));
AA=pi/30;
V=ll*(4*AA)^2/2;
Mf=16;Mx=pi/6;
S=0.1;
bl=1;
%gam1=10;gam2=1;
bc=zeros(max(size(P)),1);bc(length(bc))=1;
%numarul regulilor fuzzy implicate
MMf=25;
sigmaf=(pi-S)*(rand(nn,MMf)-0.5)+(S+pi)/2;
x0f=Mx*(rand(nn,MMf)-0.5)/0.5;
yfl=Mf/10*(rand(MMf,1)-0.5)/0.5;
tetaf=[yfl x0f' sigmaf'];tetaf=tetaf(:);
x=zeros(nn,1);x(1)=-pi/60;
ym(:,1)=[sin(Ts);cos(Ts)]*AA;
ymn=-ym(1);
%ym=[AA;0];ymn=0;
e(:,1)=ym(:,1)-x(:,1);
for k=1:no
timp(k)=(k-1)*Ts;
[uc(k,1),us(k,1),Ve(k,1)]=ada_u(x(:,k),x0f,sigmaf,yfl,bl,ymn,K,e(:,k),P,bc,V,fu);
u(k,1)=uc(k)+us(k);
[T,Y]=ode23(fun,(k-1)*Ts,k*Ts,[x(:,k);u(k)]);
[ny,my]=size(Y);
x(:,k+1)=Y(ny,1:my-1)';
xm(k)=sim_f1(x(:,k),x0f,sigmaf,yfl)+bl*u(k);
em(k)=xm(k)-x(1,k+1);
ym(:,k+1)=[sin((k+1)*Ts);cos((k+1)*Ts)]*AA;
ymn=-ym(1,k+1);
%ym(:,k+1)=[AA;0];
e(:,k+1)=ym(:,k+1)-x(:,k+1);
[dfy,dfx,dfs]=df_dteta(x(:,k+1),x0f,sigmaf,yfl);
df=[dfy dfx' dfs'];df=df(:);
%ajustarea parametrilor
cof1=abs(tetaf(:,k));
co=e(:,k+1)'*P(:,np);
cof2(k)=co*tetaf(:,k)'*df;
tetaf(:,k+1)=ada_teta(tetaf(:,k),co,cof1,cof2(k),Mf,gam1,df,1);
dfs=dfs';
M=MMf;
tetaf(3*M+1:5*M,k+1)=ada_lim(tetaf(3*M+1:5*M,k),tetaf(3*M+1:5*M,k+1),gam1,S,co,dfs(:),1);
yfl=tetaf(1:M,k+1);
x0f=[tetaf(M+1:2*M,k+1) tetaf(2*M+1:3*M,k+1)]';
sigmaf=[tetaf(3*M+1:4*M,k+1) tetaf(4*M+1:5*M,k+1)]';
clc
k,e(1,k),e(2,k),Ve(k)
end;
u=[0;u];
timp(k+1)=k*Ts;
subplot(211),plot(timp,ym(1,:),timp,x(1,:)),grid,title('iesire proces si referinta')
subplot(212),plot(timp,u),grid,title('comanda')
subplot(111)
liada_f1.m controller fuzzy adapriv direct cu primul tip de model fuzzy folosit pentru sistemele liniare
%genereaza comanda u si adapteaza parametrii tetaf,tetag
%x=vector stare (faze) proces nx1 unde x(1) reprezinta iesirea din proces, x(2) derivata de
%ordin 2, ….
%ym=referinta nx1 ym(1) iesirea dorita, ym(2) derivata iesirii dorite,…
%x0f= nxMMf centre multimi fuzzy modelul functiei f(x) und MMf este numarula regulilor fuzzy
%sigmf=nxmf varianta functiilor de apartenenta multimilor fuzzy considerate pentru premizele
%regulilor care descriu modelul pentru f, unde mf este numarul partitiilor fuzzy
%tetaf=MMfx1 centre multimi fuzzy consecinte reguli ce descriu modelul fuzzy pentru f(x)
%P=matricea Lyapunov calculata aprioric, Q matrice nxn pozitiv definita utilizata in ecuatia Lyapunov
%|tetaf|<=Mf, |tetag|<=Mg limitari impuse parametrilor pe parcursul calculelor
%V=limitare impusa functiei Lyapunov asociate procesului; cand functia Lyapunov depaseste
%aceasta valoare apare o comanda supervizoare care o forteaza sa devina mai mica ca V
%k= nx1 asigura convergenta exponentiala spre zero a erorii
%gam1,gam2=pasi de ajustare a parametrilor tetaf, tetag
%ymn=derivata de ordin n a referintei
%fu=limita functiei f
clear
no=input('numar iteratii=');
Ts=input('perioada de esantionare=');
gam1=input('gama1=');
nn=2; %dimensiune intrare
fun='oscil';
referinta='sis_ref';
k2=1;%corespunde lui e
k1=2;%corespunde primei derivate a erorii
K=[k2;k1];
Q=eye(2)*10;
P=inv([0 -k2 -k2 0;1 -k1 0 -k2;1 0 -k1 -k2;0 1 1 -2*k1])*(-1*Q(:));
P=[P(1) P(2);P(3) P(4)];
[mp,np]=size(P);
ll=min(eig(P));
AA=3;
Mf=5;Mx=4;
bl=1/0.3;
mf=5; %partitiile fuzzy implicate in acoperirea domeniului
sigmf=ones(1,mf); %numai pentru o componenta a lui x
xcf=(-Mx:2*Mx/(mf-1):Mx)';
%construiesc premizele a mf*mf reguli pentru descrierea lui f, adica toate combinatiile
%multimilor fuzzy ce acopera domeniul lui x
MMf=mf*mf;
x0f=[];sigmaf=[];
for i=1:mf
for j=1:mf
x0f=[x0f [xcf(i);xcf(j)]];
sigmaf=[sigmaf [sigmf(i);sigmf(j)]];
end;
end;
%parametrii initiali
tetaf=Mx*(rand(MMf,1)-0.5)/0.5;
x=zeros(nn,1)*2;
ym=feval(referinta,0,Ts,zeros(nn+1,1),AA,1);
e(:,1)=ym(1:nn,1)-x(:,1);
bc=zeros(nn,1);bc(nn)=bl;
for k=1:no
Ve(k,1)=e(:,k)'*P*e(:,k);
timp(k)=(k-1)*Ts;
u(k,1)=sim_f1(x(:,k),x0f,sigmaf,tetaf(:,k));
[T,Y]=ode23(fun,(k-1)*Ts,k*Ts,[x(:,k);u(k)]);
[ny,my]=size(Y);
x(:,k+1)=Y(ny,1:my-1)';
xm(k)=sim_f1(x(:,k),x0f,sigmaf,tetaf(:,k))+bl*u(k);
em(k)=xm(k)-(1/0.3*(-x(2,k)+u(k)));
ym(:,k+1)=feval(referinta,k+1,Ts,ym(:,k),AA,1);
e(:,k+1)=ym(1:nn,k+1)-x(:,k+1);
csif=radial(x(:,k+1),x0f,sigmaf);
%ajustarea parametrilor
cof1=abs(tetaf(:,k));
co=e(:,k+1)'*P(:,np);
tetaf(:,k+1)=tetaf(:,k)+gam1*co*csif;
clc
k,e(1,k),e(2,k),em(k),Ve(k)
end;
u=[0;u];
timp(k+1)=k*Ts;
subplot(211),plot(timp,ym(1,:),timp,x(1,:)),grid,title('iesire proces si referinta')
subplot(212),plot(timp,u),grid,title('comanda')
subplot(111)
liada_f2.m controller fuzzy adaptiv direct cu cel de-al doilea tip de model fuzzy folosit pentru sistemele liniare
%[u,tetaf,tetag]=inada_f2(x,ym,x0f,sigmaf,tetaf,x0g,sigmag,tetag,P,Mf,Mg,E,V)
%genereaza comanda u si adapteaza parametrii tetaf,tetag
%x=vector stare (faze) proces nx1 unde x(1) reprezinta iesirea din proces, x(2) derivata de
%ordin 2, ….
%ym=referinta nx1 ym(1) iesirea dorita, ym(2) derivata iesirii dorite,…
%x0f= nxMMf centre multimi fuzzy modelul functiei f(x) und MMf este numarula regulilor fuzzy
%sigmf=nxMMf varianta functiilor de apartenenta multimilor fuzzy considerate pentru premizele
%regulilor care descriu modelul pentru f
%tetaf=MMfx1 centre multimi fuzzy consecinte reguli ce descriu modelul fuzzy pentru f(x)
%P=matricea Lyapunov calculata aprioric, Q matrice nxn pozitiv definita utilizata in ecuatia Lyapunov
%|tetaf|<=Mf, |tetag|<=Mg limitari impuse parametrilor pe parcursul calculelor
%|tetag|>E a. i. modelul fuzzy pentru g sa fie pozitiv ca valori numerice calculate
%V=limitare impus-a functiei Lyapunov asociate procesului; cand functia Lyapunov depaseste
%aceasta valoare apare o comanda supervizoare care o forteaza sa devina mai mica ca V
%K= nx1 asigura convergenta exponentiala spre zero a erorii
%gam1=pasi de ajustare a parametrilor tetaf, tetag
%ymn=derivata de ordin n a referintei
clear
no=input('numar iteratii=');
Ts=input('perioada de esantionare=');
gam1=input('gama1=');
nn=2; %dimensiune intrare
fun='oscil';
referinta='sis_ref';
Mf=10;Mx=4;
S=1;
bl=1/0.3;
%numarul regulilor fuzzy implicate
MMf=5;
k2=1;%corespunde lui e
k1=2;%corespunde primei derivate a erorii
K=[k2;k1];
Q=eye(2)*10;
P=inv([0 -k2 -k2 0;1 -k1 0 -k2;1 0 -k1 -k2;0 1 1 -2*k1])*(-1*Q(:));
P=[P(1) P(2);P(3) P(4)];
[mp,np]=size(P);
AA=10;
sigmaf=(3-S)/2*(rand(nn,MMf)-0.5)+(S+3)/2;
x0f=Mx*(rand(nn,MMf)-0.5)/0.5;
yfl=Mf*(rand(MMf,1)-0.5)/0.5;
tetaf=[yfl x0f' sigmaf'];tetaf=tetaf(:);
x=zeros(nn,1);
ym=feval(referinta,0,Ts,zeros(nn+1,1),AA,0.5);
e(:,1)=ym(1:nn,1)-x(:,1);
for k=1:no
Ve(k,1)=e(:,k)'*P*e(:,k);
timp(k)=(k-1)*Ts;
u(k,1)=sim_f1(x(:,k),x0f,sigmaf,yfl);
[T,Y]=ode23(fun,(k-1)*Ts,k*Ts,[x(:,k);u(k)]);
[ny,my]=size(Y);
x(:,k+1)=Y(ny,1:my-1)';
xm(k)=sim_f1(x(:,k),x0f,sigmaf,yfl)+bl*u(k);
em(k)=xm(k)-(1/0.3*(-x(2,k)+u(k)));
ym(:,k+1)=feval(referinta,k+1,Ts,ym(:,k),AA,0.5);
e(:,k+1)=ym(1:nn,k+1)-x(:,k+1);
[dfy,dfx,dfs]=df_dteta(x(:,k+1),x0f,sigmaf,yfl);
df=[dfy dfx' dfs'];df=df(:);
%ajustarea parametrilor
cof1=abs(tetaf(:,k));
co=e(:,k+1)'*P(:,np);
tetaf(:,k+1)=tetaf(:,k)+gam1*co*df;
dfs=dfs';
M=MMf;
tetaf(3*M+1:5*M,k+1)=ada_lim(tetaf(3*M+1:5*M,k),tetaf(3*M+1:5*M,k+1),gam1,S,co,dfs(:),1);
yfl=tetaf(1:M,k+1);
x0f=[tetaf(M+1:2*M,k+1) tetaf(2*M+1:3*M,k+1)]';
sigmaf=[tetaf(3*M+1:4*M,k+1) tetaf(4*M+1:5*M,k+1)]';
clc
k,e(1,k),e(2,k),em(k),Ve(k)
end;
u=[0;u];
timp(k+1)=k*Ts;
subplot(211),plot(timp,ym(1,:),timp,x(1,:)),grid,title('iesire proces si referinta')
subplot(212),plot(timp,u),grid,title('comanda')
subplot(111)
oscil.m modele procese liniare
function yprim=oscil(t,y)
%yprim(1)=y(2);
%yprim(2)=y(3);
%yprim(3)=1/0.3*(-y(3)+0.3*y(2)-y(3)+y(4));
%yprim(4)=0;
yprim(1)=y(2);
yprim(2)=1/0.3*(-0.7*y(2)+y(1)+10*y(3));
%yprim(1)=y(2);
%yprim(2)=1/0.3*(-y(2)+y(3));
%functie ce descrie un oscilator care se comporta haotic in absenta comenzii
%yprim(1)=y(2);
%yprim(2)=-0.1*y(2)-y(1)^3+12*cos(t)+y(3);
yprim(3)=0;
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Retele Neuronale Si Logica Fuzzy In Automatizari (ID: 149325)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
