[Automazione] codice matlab predator-prey

mary98scc
Sto provando ad implementare un algoritmo matlab per sviluppare un sistemo non lineare a tempo discreto ,che controlli la popolazione predatori e prede.
il mio sistema di partenza è:



Nella Task1 della traccia mi chiede di : "Implement the discrete-time dynamics in Matlab. Explore the behavior of the system by giving constant inputs."

Io ho iniziato scrivendo il codice in questo modo , ma non sono sicura e volevo avere un suggerimento.. e poi volevo chiedere se il sistema devo linealizzarlo da subito o basta faro dopo ,perchè nella task2 successiva mi chiede questo : "Suppose to have constant set-point populations xp,⋆, xs,⋆ (can be freely chosen). Design
an infinite horizon linear quadratic regulator to track those populations (with cost weights can be freely chosen). Notice that you need to linearize the system dynamics about the reference set-point. Simulate the evolution of the controlled system for different initial conditions."


function TASK1
%parametri 
N1= 3;%identifica la dimensione del vettore colonna di ingresso
 
ukp=rand(N1,1)*4;%vettore colonna di crescita prede con intervallo 0,4
uks= rand(N1,1)*1;%vettore colonna di decrescita predatori con intervallo 0,1
rs= 5e-6;%fattore crescita predatori numero reale
rp= 1;%fattore decrescita prede numero reale
 
%numero di stati
Kmax=3;
 
%iniziallizzare
xkp=rand(1,N1)*1;%vettori di stati delle prede e poi predatori in un intervallo tra 0,1
xks=rand(1,N1)*1;
%xkp(1)=0;
%xks(1)=0;
%formula
for k=1:(Kmax-1)
 xkp(k+1)=(ukp(k)-uks(k))*xkp(k)*(1-xkp(k));
 xks(k+1)=rs*xks(k)*(1-xks(k))*(1-uks(k));
end
%plot
Xvals=1:Kmax;
plot(Xvals,xkp,'b',Xvals,xks,'r') 
end

Risposte
mary98scc
cosa intendi per leggi di variazione lenta?

ingres
Intuitivamente significa che le variazioni tra k e k+1 di xp* e xs* sono abbastanza piccole da non provocare bruschi cambiamenti dei parametri delle matrici linearizzate e del regolatore.

mary98scc
Diciamo che al fatto di avere variazioni piccole ci ero arrivata. Ma non ho capito come scrivere la legge...

Supponiamo che io scelga come condizioni iniziali:
$x_0^p= 0.6 $ $x_0^s =0.8$

Da qui come arrivo a scrivermi la legge e a trovarmi i valori $x^(p\ast) $e $x^(s\ast)$..

Potrebbe essere una cosa del genere:
$x_(k+1)^(p)=x_0^(p)+ x_k^(p)$

mary98scc
Ragionandoci meglio ,la soluzione che ho scritto prima non va bene perchè non tiene conto dell'ingresso

ingres
Le condizioni iniziali e i set point sono due scelte scollegate tra loro.
Scelte le condizioni iniziali a tuo piacimento, puoi ad esempio prendere come orizzonte k=30 e scrivere

xp* = 0.45 + k*0.012
xs* = 0.15 + k*0.004

che corrisponde ad aumentare la popolazione delle prede mantenendo un rapporto costante con i predatori o qualunque altra legge che tu voglia provare. Prima di applicarla verifica nei casi estremi che a questi set corrispondano dei valori di up* e us* compatibili con i range ed eventualmente ritocca "r" perché sia così.

A questo punto sei in grado di partire.
Poni k=0 calcola xp*(0), xs*(0) up*(0) e us*(0), le matrici linearizzate e il controllore e applicalo al sistema ovvero calcola l'azione di controllo MPC up(0) e us(0) dovuta all'errore tra xp*(0), xs*(0) e i valori di xp(0) e xs(0) di condizione iniziale (Nota: ovviamente tale azione non sarà uguale a up*(0) e us*(0), ma variando k ci si aspetta che up(k) e us(k) si avvicinino a up*(k) e us*(k))
In base tali uscite di controllo potrai calcolare dal modello i valori di xp(1) e xs(1).
Poni quindi k=1 calcola xp*(1), xs*(1) up*(1) e us*(1), le matrici linearizzate ... e ripeti quanto sopra :D

mary98scc
Questi valori che hai messo pari a 0.0012 e 0.004 a cosa corrispondono? 0.45 e 0.15 corrispondono alle condizioni iniziali?
"ingres":

xp* = 0.45 + k*0.012
xs* = 0.15 + k*0.004



mary98scc
Per trovarmi le $U^(\ast p )$ e $U^(\ast p)$ dovrei rifarmi il calcolo fatto per i valori di set-point, quindi ponendo k = k+1 ?

ingres
"mari.98":
Questi valori che hai messo pari a 0.0012 e 0.004 a cosa corrispondono? 0.45 e 0.15 corrispondono alle condizioni iniziali?

Le condizioni iniziali e i set point sono grandezze scollegate.
Puoi benissimo scegliere per le condizioni iniziali 0.45 e 0.12 come 0.6 e 0.8 e per i set point le leggi che ho scritto o qualunque altra a tuo piacimento.
Per intenderci prendiamo il riscaldamento di casa. Se hai la casa fredda a 16°C questa è una condizione iniziale mentre il valore al termostato di 20°C è un set point. Se poi inserisci una legge di variazione che preveda 18°C di notte e 22°C di giorno, questa è una legge di setpoint variabile che è il caso che stiamo esaminando.

"mari.98":
Per trovarmi le U∗p e U∗p dovrei rifarmi il calcolo fatto per i valori di set-point, quindi ponendo k = k+1 ?

Si, ad ogni passo hai una variazione dei valori di setpoint. Quindi calcolati xp*(k+1) e xs*(k+1), bisogna calcolare up*(k+1) e us*(k+1) per ricalcolare le matrici linearizzate e il controllore MPC.

mary98scc
Grazie, ora ho provo a scrivere il codice su matlab

mary98scc
Mi è sorto un altro dubbio: se le leggi che tu hai definito sono le leggi riferite al set point, allora i valori 0.012 e 0.004 che hai scelto cosa sono? Sono i valori della popolazione all'istante k ?

ingres
Sono parametri della legge di variazione a rampa del set point. In pratica il set point si incrementa linearmente ad ogni passo di una piccola quantità.
Ma la scelta di un set a rampa e dei parametri dello stesso è del tutto arbitraria.
Altrettanto valida poteva essere la scelta di un andamento sinusoidale del tipo:

$xp^**(k) = 0.5 +0.15 sin(pi*k/15)$
$xs^**(k) = 0.2 +0.05 cos(pi*k/15)$

o qualunque altro andamento comunque limitato dai range di ammissibilità.

mary98scc
grazie!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.