2018-12-10, 21:09
  #1
Medlem
Tom.Of.Finlands avatar
Jag beskriver nu ett dynamiskt system.

Vi säger att jag har en vektor X(k) = {x1, x2, x3, x4, ... , xn} som beskriver alla tillstånd i ett system över tid.
Jag har en liknande vektor som heter U(k) = {u1, u2, u3, u4, ... , un} som beskriver alla insignaler till ett system över tid.
Där efter har vi referensvektorn R(k) = {r1, r2, r3, f4, ... , rn} som beskriver alla mål som X ska uppnå för att vi ska få våran önskade resultat hos vårat dynamiska system.

Om vi ska minimera detta igenom kvadratisk programmering så kan vi skriva U och X på formen:

Citat:
J = Summa((R(k)-X(k))'*(R(k)-X(k)) + U(k)'*U(k))

Orsaken varför vi säger R-X är för att om X är lika mycket som R så är det noll och då har vi uppnått våran referensvärde som vi eftersträrvar. Orsaken varför vi säger Vektor ' * Vektor har med att det blir ett enda tal. Testa själv i Octave/MATLAB:

Citat:
A = linspace(0, 10)';
A'*A

Dessutom blir t.ex. U'*U alltid positivt. Minus gånger minus är positivt som ni vet.
Formeln ovan beskriver alltså hur optimalt systemet är. Om U är jätte stort men X är lika med noll. Så kommer J vara stor. Om U är jätte stor och R =X så kommer J vara något lägre. Om U är litet och R=X så kommer J vara mycket lågt.

Jag har har glömt bort var denna J-formel kallas. Men den är mycket logiskt om ni tänker att U är bränsle till en motor och X är rotationshastigheten på motorn och R är vårat önskade krav på rotationshastigheten på motorn. Om vi tillför lite bränsle U till motorn och R=X så betyder det att våran motor är effektiv då J är mycket liten. Om vi tillför mycket bränsle U till våran motor, men R är mycket större än X, då är motor effektiv och dålig, därmed J mycket hög.

Det jag vill diskutera är att om jag vet X och U. R är vad jag själv sätter vad R ska vara. Då kan jag köra en lite for-loop i mitt Octave/MATLAB och få ut mitt J. Men vi säger att jag vill räkna ut vilka U jag ska ha för att R och X ska ha samma värde. Vad måste jag veta då?

Det jag inte kan är att sätta J = 0 för alla k, och sedan räkna ut U(k). J kan inte vara noll för att U kan inte vara negativ och X fungera endast om U får "bränsle".

Jag har en strategi. Som vi vet så vet jag U(k) och X(k) och därmed kan räkna ut mitt J. Det skulle vara intressant och räkna ut J från U(k) och X(k) och vad J kunde vara om U(k) hade sett annorlunda ut. Men detta är svårt och därför ber jag er om er hjälp vad jag måste veta.

Måste jag veta sambandet mellan X(k) och U(k)? Vi säger att jag har endast tillgång till mätdata. Hur kan jag göra då?
Citera
2018-12-10, 21:30
  #2
Medlem
Citat:
Ursprungligen postat av Tom.Of.Finland
Måste jag veta sambandet mellan X(k) och U(k)? Vi säger att jag har endast tillgång till mätdata. Hur kan jag göra då?

Systemidentifiering. Du måste ha någon uppfattning om hur systemet beter sig för att kunna designa en regulator.
Citera
2018-12-10, 21:41
  #3
Medlem
Tom.Of.Finlands avatar
Citat:
Ursprungligen postat av mulpac
Systemidentifiering. Du måste ha någon uppfattning om hur systemet beter sig för att kunna designa en regulator.

Okej. Då vet jag det. I den tidigare tråden så löste jag mitt problem Gjorde en sådan thresold least square eller vad det kallas. Man anger några kandidatfunktioner och algoritmen räknar lite enkelt om man ska ta hänsyn till vissa funktioner eller om man ska utesluta dessa.

Hur som helst. Vi säger att jag har, av U(k) och X(k), hittat min modell. Det blir dock lite svårt att kombinera min modell i just denna J-formel.

Vi säger att jag har mitt effektivindex
Citat:
J = Summa((R(k)-X(k))'*(R(k)-X(k)) + U(k)'*U(k))

Jag där kopplar jag U(k) till min modell dX(k) = f(X(k), U(k)) Då måste jag på något sätt få en modell som liknar U(k) = f(X(k), dX(k)) eller hur?

Om jag har min, tillståndsmodell, så lär det inte vara så svårt att bara flytta på några mätdata? Problemet är att jag kan inte direkt skapa en tillståndsmodell på formen:

Citat:
dX = Ax + Bx

Då det är olinjära system jag håller på med.
Citera
2018-12-10, 21:57
  #4
Medlem
Citat:
Ursprungligen postat av Tom.Of.Finland

Jag där kopplar jag U(k) till min modell dX(k) = f(X(k), U(k)) Då måste jag på något sätt få en modell som liknar U(k) = f(X(k), dX(k)) eller hur?

Om jag har min, tillståndsmodell, så lär det inte vara så svårt att bara flytta på några mätdata? Problemet är att jag kan inte direkt skapa en tillståndsmodell på formen:



Då det är olinjära system jag håller på med.

Nja, alltså att reglera med en inverterad processmodell kan givetvis ge väldigt exakt reglering, men brukar inte vara särskilt robust om processmodellen inte är helt rätt.

Ickelinjära system behöver inte vara så elaka. Gain scheduling kan ge bra resultat om det är ett stabilt olinjärt system, medan LQR kan ge bra resultat på svajiga system. Finns lite olika metoder beroende på hur systemet beter sig.
Citera
2018-12-10, 22:10
  #5
Medlem
Tom.Of.Finlands avatar
Citat:
Ursprungligen postat av mulpac
Nja, alltså att reglera med en inverterad processmodell kan givetvis ge väldigt exakt reglering, men brukar inte vara särskilt robust om processmodellen inte är helt rätt.

Ickelinjära system behöver inte vara så elaka. Gain scheduling kan ge bra resultat om det är ett stabilt olinjärt system, medan LQR kan ge bra resultat på svajiga system. Finns lite olika metoder beroende på hur systemet beter sig.

I detta fall tänkte jag försöka med SINDYc, med tanke på att den är utformad efter att klara allt från HIV simulering till flygplan.

Gain scheduling har jag testat med. Den fungerar, men den är inte bra för system som är känsliga för svängningar. LQR är också ett enkelt sätt att reglera flervariabligt system. Men inte lika intressant. Gain scheduling är dessutom anpassat för icke-tröga system.
Citera
2018-12-10, 22:42
  #6
Medlem
Tom.Of.Finlands avatar
Citat:
Ursprungligen postat av mulpac
Nja, alltså att reglera med en inverterad processmodell kan givetvis ge väldigt exakt reglering, men brukar inte vara särskilt robust om processmodellen inte är helt rätt.

Ickelinjära system behöver inte vara så elaka. Gain scheduling kan ge bra resultat om det är ett stabilt olinjärt system, medan LQR kan ge bra resultat på svajiga system. Finns lite olika metoder beroende på hur systemet beter sig.

En fråga. Vi säger att jag får tag på min modell. Kan jag då inte försöka göra många olika simuleringar med modellen och sedan testa i min J-formel?

Vi säger att jag har modellen dX = f(X, U) och sedan simulerar jag modellen med U = 0.1 och hittar mitt X. Sedan testar jag U = 0.1 och X i J-formeln. Ok, jag testar med U = 1 och gör samma procedur igen. Där efter U = 2, U= 3, U=... osv.

Där efter väljer jag mitt bästa J och jämfört med med mitt U då. Då borde jag hitta det bästa U:et?
Citera
2018-12-11, 05:46
  #7
Medlem
Citat:
Ursprungligen postat av Tom.Of.Finland
En fråga. Vi säger att jag får tag på min modell. Kan jag då inte försöka göra många olika simuleringar med modellen och sedan testa i min J-formel?

Vi säger att jag har modellen dX = f(X, U) och sedan simulerar jag modellen med U = 0.1 och hittar mitt X. Sedan testar jag U = 0.1 och X i J-formeln. Ok, jag testar med U = 1 och gör samma procedur igen. Där efter U = 2, U= 3, U=... osv.

Där efter väljer jag mitt bästa J och jämfört med med mitt U då. Då borde jag hitta det bästa U:et?

MPC alltså, fast med en ovanligt ineffektiv optimeringsmetod.
Citera
2018-12-11, 13:18
  #8
Medlem
Tom.Of.Finlands avatar
Citat:
Ursprungligen postat av mulpac
MPC alltså, fast med en ovanligt ineffektiv optimeringsmetod.

Varför?

Vi säger att vi har ett insignalvärde med 8 bits upplösning. Mellan 0 till 255.

Vi har en prediktion i 10 stycken samplinsintervall. Då börjar jag att applicera u = 0 i 10 samplingar. Där efter får jag mitt X och då kan jag räkna ut mitt J.

Jag gör u från 0 till 255 och försöker räkna ut mitt bästa J.

När jag hittar min bästa signal u så använder jag den. Upprepar processen.

Borde detta inte vara det bästa och praktiska MPC som är så enkel att använda? Inge drygt och krångliga beräkningar eller kvadratisk programmering. Istället använder jag enkla for-loopar och lite mera sökalgoritmer.
Citera
2018-12-11, 13:28
  #9
Medlem
Citat:
Ursprungligen postat av Tom.Of.Finland
Varför?

Syftade bara på strategin att utvärdera alla möjligheter, kontra strategier där man försöker hitta optimum med ett förhållandevis litet antal utvärderingar. Men har man inte så många olika möjligheter, så finns det givetvis färre utvärderingar att spara.
Citera
2018-12-11, 14:35
  #10
Medlem
Tom.Of.Finlands avatar
Citat:
Ursprungligen postat av mulpac
Syftade bara på strategin att utvärdera alla möjligheter, kontra strategier där man försöker hitta optimum med ett förhållandevis litet antal utvärderingar. Men har man inte så många olika möjligheter, så finns det givetvis färre utvärderingar att spara.

I mitt fall har jag en signal som kan vara mellan 0 och 255. Och det är heltal mellan också. Dvs 256 olika värden.

Då borde min enkla teori fungera?
Citera
2018-12-11, 18:44
  #11
Medlem
Citat:
Ursprungligen postat av Tom.Of.Finland
I mitt fall har jag en signal som kan vara mellan 0 och 255. Och det är heltal mellan också. Dvs 256 olika värden.

Då borde min enkla teori fungera?

Det är möjligt. Beror väl på hur processen ser ut. I generella fallet kan man vilja lägga upp insignaler som varierar i tiden för att hamna i ett bra tillstånd vid en senare tidpunkt (men ändå bara lägga ut de första signalerna och sedan göra en ny optimering). Kan även vara önskvärt att regulatorn reducerar effekten av störningar och modellfel.
Citera
2018-12-11, 20:09
  #12
Medlem
Tom.Of.Finlands avatar
Citat:
Ursprungligen postat av mulpac
Det är möjligt. Beror väl på hur processen ser ut. I generella fallet kan man vilja lägga upp insignaler som varierar i tiden för att hamna i ett bra tillstånd vid en senare tidpunkt (men ändå bara lägga ut de första signalerna och sedan göra en ny optimering). Kan även vara önskvärt att regulatorn reducerar effekten av störningar och modellfel.

Jag tror också det är möjligt. Jag tycker det är rätt svårt och dyrt att implementera en MPC på "det riktiga akademiska sättet".

Istället väljer jag bara kontinuerlig systemidentifiering av olinjära dx = f (x,u) igenom Moore-Penrose pseudoinvers, vilket är minstakvadratmetoden. Jag använder också den där speciella metoden som räknar ut hur relevant det är med vissa vektorer osv. Jag antar att du vet vilken minsta kvadratmetoden jag menar?

Där efter när jag har min modell så simulerar jag den bara i t.ex 10 steg med konstanta värden mellan 0 och 255. När jag har simulerat 10 steg med alla värden från 0 till 255 så kan jag hitta mitt bästa J

När du menar "reducerar störningar och modellfel". Borde inte en keramisk kondensator lösa det problenet då? Det blir liksom en analog filtrering.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in