Salta ai contenuti

Lyapunov a intuizione: energia che scende

Una funzione di Lyapunov è un’energia generalizzata che il sistema deve far scendere. Questo capitolo la usa al contrario rispetto al solito: non per verificare se un sistema è stabile, ma come stampo su cui progettare un controllore che garantisce la stabilità per costruzione.


Il PID, il controllore del capitolo precedente, funziona — governa la maggior parte degli anelli di controllo costruiti dall’uomo — ma di lui non si dimostra niente. Lo si tara: si girano i tre guadagni, si guarda come risponde il sistema, si itera. Se va bene, va bene. Se domani il plant cambia, o se il sistema è troppo non lineare per essere catturato da tre numeri, la taratura empirica non offre garanzie e non sa nemmeno dirti quanto sei vicino al disastro. Per un bruciatore industriale questo si tollera. Per un controllore di volo, per un robot che maneggia un carico pesante vicino a una persona, per un anello di controllo software che governa risorse costose, “ho provato e sembra andare” non basta.

Serve un controllore di cui si possa dimostrare che l’anello chiuso è stabile, prima ancora di accenderlo. E serve uno strumento che funzioni anche quando il sistema è marcatamente non lineare, dove la linearizzazione e l’analisi degli autovalori — il primo metodo, raccontato in Equilibrio, stabilità, attrattori — dicono qualcosa solo in un intorno minuscolo dell’equilibrio.

Quello strumento esiste, e ha più di un secolo. È il metodo diretto di Aleksandr Lyapunov: per stabilire che un sistema è stabile, trova una “energia generalizzata” e dimostra che lungo le traiettorie quell’energia non può che scendere. Il capitolo della Parte IX lo ha già presentato come strumento di analisi: dato un sistema, lo si esamina e si scopre se è stabile. Qui lo si gira. Il metodo di Lyapunov diventa uno strumento di progetto: si parte dall’energia che si vuole far scendere e si costruisce il controllore proprio in modo che la faccia scendere. La stabilità non si verifica dopo: si fabbrica dentro il controllore, e la funzione di Lyapunov è insieme la guida del progetto e il certificato del risultato.

Per chi costruisce sistemi questo conta su due piani. Il primo è diretto: è il modo in cui si progetta il controllo dei sistemi non lineari con una garanzia formale, ed è il fondamento su cui poggiano i capitoli successivi della Parte. Il secondo è più ampio. L’idea di scegliere ogni azione perché faccia scendere una quantità — un potenziale, un costo, un rischio — è una ricetta di progetto che ricompare ben oltre il controllo industriale: nel safe reinforcement learning, nei loop di feedback fatti di software, e — questa con cautela, lo vedremo — come lente per leggere la loss che scende durante l’addestramento di una rete. “Trova una quantità che decresce” è uno degli schemi di ragionamento più produttivi che si possano avere in tasca.

Questo capitolo presuppone due cose e ne aggiunge una terza.

Presuppone il vocabolario di Controllare un sistema: plant, controller, sensore, attuatore: plant è il sistema da controllare, l’ingresso di controllo è la manopola su cui si agisce, l’anello chiuso è il sistema completo controllore-più-plant. E presuppone la teoria della stabilità di Equilibrio, stabilità, attrattori: cos’è un equilibrio, cosa significa che è stabile o asintoticamente stabile, cos’è una funzione di Lyapunov e perché il metodo diretto funziona. Quel capitolo della Parte IX ha fatto il lavoro pesante sull’analisi. Qui se ne ricapitola lo stretto necessario perché il capitolo sia leggibile da solo, e si rimanda lì per il resto.

La terza cosa, quella nuova, è il rovesciamento. La stabilità di Lyapunov nasce nel 1892 come teoria descrittiva: Aleksandr Lyapunov (matematico russo, 1857-1918), nella tesi di dottorato discussa a Mosca The General Problem of the Stability of Motion — in russo, tradotta in francese solo nel 1907 e in inglese nel 1992 per il centenario — definisce con precisione cosa significhi stabile, instabile, asintoticamente stabile, e dà due metodi per accertarlo. Il secondo, il metodo diretto, è quello che ci interessa: stabilire la stabilità senza risolvere le equazioni del moto, esibendo una funzione che decresce.

Per decenni il lavoro di Lyapunov resta poco letto in Occidente. Lo riscopre la teoria del controllo del dopoguerra: negli anni Cinquanta e Sessanta, quando — accanto al controllo classico in frequenza di Nyquist e Bode — nasce il controllo moderno basato sulla rappresentazione in spazio di stato, servono strumenti per i sistemi non lineari e multivariabili che i criteri in frequenza non coprono. Lyapunov diventa il fondamento dell’analisi di stabilità non lineare.

Il passo che fa di questo un capitolo a sé arriva ancora dopo. Negli anni Ottanta Zvi Artstein (matematico israeliano) ed Eduardo Sontag (matematico e teorico del controllo argentino-statunitense) trasformano il metodo da analisi in sintesi. Artstein nel 1983 dimostra che un sistema controllato è stabilizzabile se e solo se ammette una particolare funzione di Lyapunov — la Control Lyapunov Function; Sontag nel 1989 mostra come, da quella funzione, scrivere direttamente la formula del controllore. Nei primi anni Novanta Petar Kokotović e collaboratori sistematizzano il backstepping, una procedura che costruisce la funzione di Lyapunov e il controllore insieme, pezzo per pezzo. L’idea di Lyapunov ha un secolo abbondante; il suo uso come strumento di progetto poco più di trenta anni.

Vale la pena soffermarsi sul ritardo con cui il lavoro di Lyapunov è entrato nel controllo, perché non è un dettaglio aneddotico ma dice qualcosa sul metodo. La tesi del 1892 è un capolavoro di matematica pura: definisce, dimostra, ma non offre — non era il suo scopo — nessuna ricetta per costruire la funzione VV in casi concreti. Per la fisica e l’ingegneria del primo Novecento, abituate a risolvere le equazioni del moto e a ragionare in frequenza, un metodo che chiede di “indovinare una funzione con due proprietà” sembrava più un’eleganza astratta che uno strumento. Solo quando il controllo, dagli anni Cinquanta, si trova davanti sistemi non lineari e multivariabili che le equazioni esplicite e i diagrammi di frequenza non sanno domare, il difetto apparente del metodo — non risolvere le equazioni — si rivela la sua forza. Lyapunov non era arrivato troppo presto perché sbagliato; era arrivato prima che esistesse il problema per cui era la risposta giusta.

Una precisazione sul nome, perché ricorrerà. Quello che in questo capitolo chiamiamo “metodo diretto” è il secondo metodo di Lyapunov; il primo è la linearizzazione e l’analisi degli autovalori della Jacobiana, lo strumento di Equilibrio, stabilità, attrattori. “Diretto” significa che stabilisce la stabilità direttamente, senza passare attraverso la soluzione delle equazioni né attraverso un’approssimazione lineare: guarda solo il segno di una derivata. È questa la proprietà che lo rende uno strumento di progetto, e non solo di analisi.

Tre angoli, prima di qualunque formula. Il primo dice cos’è una funzione di Lyapunov, riprendendo l’immagine canonica. Il secondo è il rovesciamento che fa di questo capitolo qualcosa di diverso dalla Parte IX: da verifica a progetto. Il terzo è la ricetta operativa, il modo in cui il progetto si fa davvero.

Primo angolo: l’energia generalizzata, una ciotola e qualcosa che ci scivola dentro

Sezione intitolata “Primo angolo: l’energia generalizzata, una ciotola e qualcosa che ci scivola dentro”

Parti da un fatto fisico semplice. Un pendolo che oscilla nell’aria, una massa appesa a una molla con un ammortizzatore: sistemi meccanici con attrito. La loro energia meccanica totale — cinetica più potenziale — non può che diminuire, perché l’attrito la dissipa in calore e niente la rimette dentro. E l’energia ha il suo valore minimo nello stato di quiete, il pendolo fermo in basso, la massa ferma a riposo.

Da questi due fatti — l’energia scende, e il suo minimo è la quiete — segue una conclusione che non richiede di risolvere nessuna equazione del moto: il sistema è obbligato a scivolare verso lo stato di minima energia. La sua “quota energetica” può solo calare, e calando lo porta in fondo. Sai dove finisce senza aver calcolato la traiettoria.

Lyapunov prende questo ragionamento e lo libera dalla fisica. Definisce una funzione di Lyapunov V(x)V(x): una funzione che a ogni stato xx del sistema associa un solo numero, con due proprietà.

La prima: VV è definita positiva attorno all’equilibrio. Vale zero esattamente nell’equilibrio e un valore strettamente positivo in ogni altro stato vicino. Geometricamente, VV è una ciotola — una conca il cui fondo, il punto più basso, sta esattamente sull’equilibrio.

La seconda: VV non cresce mai lungo le traiettorie del sistema. Se segui il sistema mentre evolve e misuri VV a ogni istante, quel numero non aumenta mai. Detto con la derivata: la derivata di VV rispetto al tempo, calcolata lungo la dinamica del sistema, è minore o uguale a zero.

Se esiste una funzione con queste due proprietà, l’equilibrio è stabile; e se VV scende davvero — derivata strettamente negativa fuori dall’equilibrio, non solo “non sale” — l’equilibrio è asintoticamente stabile, il sistema ci ritorna. La logica è quella della pallina nella ciotola: se sei dentro una conca e la tua quota può solo calare, sei intrappolato; e se cala sul serio, finisci sul fondo.

Il punto che conta per tutto il resto del capitolo: VV non deve essere l’energia fisica vera. Per un pendolo lo è, comodamente. Ma per un sistema che un’energia fisica non ce l’ha — un algoritmo, un loop di feedback astratto, un sistema fatto di software — VV è una funzione qualsiasi che tu costruisci, purché sia definita positiva e decresca lungo la dinamica. Per questo si parla di energia generalizzata: VV misura “quanto sei lontano dallo stato voluto”, in un’unità di misura che scegli tu. La scelta di gran lunga più comune, e quasi sempre il primo tentativo, è una qualche forma di distanza al quadrato dall’obiettivo.

C’è un secondo modo di vedere la stessa scena, che tornerà utile quando parleremo di regione di attrazione. Invece della ciotola in tre dimensioni, guarda il piano degli stati dall’alto e disegna le curve di livello di VV: gli stati dove VV vale la stessa quota, che formano anelli annidati attorno all’equilibrio, come le linee di livello di una carta topografica attorno alla cima di una collina — qui, attorno al fondo di una valle. La condizione ”VV scende lungo le traiettorie” ha allora una lettura geometrica netta: la traiettoria del sistema attraversa gli anelli sempre nello stesso verso, da quelli esterni — quota alta — verso quelli interni — quota bassa — senza mai tornare indietro verso l’esterno. Una traiettoria intrappolata dentro un anello non può più uscirne, perché uscire vorrebbe dire risalire a una quota di VV più alta, e VV non risale. Tieni a mente questa immagine: è la base della stima del bacino.

Fin qui niente di nuovo rispetto alla Parte IX. Il salto è adesso, e sta in una sola differenza: chi sceglie cosa.

Nel metodo diretto come strumento di analisi, la dinamica del sistema è data e fissa. Si scrive x˙=f(x)\dot{x} = f(x) — lo stato cambia secondo una regola ff fissata una volta per tutte — e il tuo lavoro è trovare una VV e poi guardare il segno della sua derivata lungo quella dinamica. Il sistema, di suo, o è stabile o non lo è. Tu lo scopri. Sei uno spettatore con una buona lente.

Nel controllo la dinamica non è tutta fissa: ha una manopola. Si scrive

x˙=f(x,u)\dot{x} = f(x, u)

dove x˙\dot{x} è la velocità con cui lo stato cambia, ff è la regola, e uu è l’ingresso di controllo — il valore che tu decidi, istante per istante, attraverso l’attuatore. Lo stato xx è in generale un vettore, una lista di numeri, perché un sistema ha di solito più componenti di stato. Il controllo uu è la quantità che il controllore impone.

Ora rifai il conto della derivata di VV. Lungo questa dinamica, VV cambia nel tempo con un ritmo

V˙=V(x)f(x,u)\dot{V} = \nabla V(x) \cdot f(x, u)

dove V(x)\nabla V(x), il gradiente di VV, è il vettore che punta nella direzione di massima salita della ciotola, e il puntino è il prodotto scalare, la proiezione di una direzione sull’altra. In parole povere: V˙\dot{V} è quanto il sistema sta andando “in salita” o “in discesa” sulla ciotola VV, e si ottiene confrontando la direzione in cui VV cresce con la direzione in cui il sistema effettivamente si muove.

Guarda quella formula. V˙\dot{V} dipende da uu. E qui cambia tutto. Nell’analisi dovevi sperare che V˙\dot{V} venisse negativa. Nel controllo puoi sceglierla: a ogni stato xx, scegli il valore di uu che rende V˙\dot{V} negativa. Non aspetti la stabilità: la imponi, mossa dopo mossa, spingendo sempre il sistema in discesa sulla ciotola.

Questo è l’oggetto centrale del capitolo. Una funzione di Lyapunov di controlloControl Lyapunov Function, CLF — è una funzione VV definita positiva tale che, per ogni stato xx diverso dall’equilibrio, esiste almeno un valore di controllo uu che rende V˙\dot{V} strettamente negativa. A parole spoglie: per ogni stato in cui il sistema può trovarsi, esiste una mossa che fa scendere l’energia generalizzata. Se una CLF esiste, il sistema è asintoticamente stabilizzabile — c’è una legge di controllo che lo porta all’equilibrio e ce lo tiene.

L’inversione è completa. Nell’analisi: ho un sistema, cerco una VV che certifichi la stabilità che il sistema già ha (o non ha). Nel progetto: scelgo una VV che voglio far scendere, e costruisco il controllore perché la faccia scendere. La VV smette di essere una lente con cui guardare e diventa uno stampo su cui fabbricare.

Terzo angolo: la ricetta, e perché il passo difficile è uno solo

Sezione intitolata “Terzo angolo: la ricetta, e perché il passo difficile è uno solo”

Visto dall’alto, il progetto di un controllore via Lyapunov è una procedura di quattro passi.

Primo: scegli una funzione candidata V(x)V(x), definita positiva, con il minimo esattamente sullo stato che vuoi raggiungere. La candidata di default, quella che si prova per prima, è la distanza al quadrato dall’obiettivo.

Secondo: calcola V˙\dot{V} lungo la dinamica controllata V˙=Vf(x,u)\dot{V} = \nabla V \cdot f(x, u), lasciando uu come incognita. Ottieni un’espressione in cui compaiono sia lo stato xx sia il controllo uu.

Terzo: scegli la legge di controllo u=k(x)u = k(x) — una regola che a ogni stato associa un controllo — in modo che, sostituita dentro V˙\dot{V}, la renda definita negativa: strettamente negativa per ogni stato fuori dall’equilibrio.

Quarto: se ci sei riuscito, hai finito, e hai due cose in mano invece di una. Hai il controllore k(x)k(x). E hai la prova che l’anello chiuso — il sistema con quel controllore inserito — è asintoticamente stabile, perché la stessa VV che hai usato per progettare è ora una funzione di Lyapunov valida del sistema controllato. VV è il certificato: l’oggetto matematico che attesta la stabilità.

Quattro passi, ma il peso non è distribuito uniforme. Il secondo è meccanico, è derivare. Il quarto è gratis, viene dato dai primi tre. Il primo e il terzo sono dove sta il mestiere, e tra i due il terzo è quello che può non riuscire. Scegliere uu che renda V˙\dot{V} negativa a volte è immediato — lo vedremo nell’esempio scalare — e a volte è tutt’altro che ovvio. La buona notizia è che per VV già scelta esiste una formula chiusa che dà un uu funzionante, la formula di Sontag, e la vedremo nella prossima sezione. La cattiva notizia è che scegliere bene VV, al primo passo, resta un’arte: non c’è una ricetta universale che la produca, e una VV scelta male può rendere il terzo passo impossibile anche quando un’altra VV lo renderebbe facile. È il limite strutturale del metodo, e gli dedicheremo spazio.

Conviene insistere su quest’ultimo punto, perché è ciò che distingue il metodo di Lyapunov da una procedura puramente meccanica e perché spiega perché, dopo un secolo, si fa ancora ricerca su come trovare VV. Pensa a cosa significa, geometricamente, scegliere male la ciotola. La VV definisce quale nozione di “lontananza dall’obiettivo” stai usando. Una VV ben scelta è una ciotola le cui pareti seguono il modo naturale in cui la dinamica del sistema porta verso l’equilibrio: lungo quelle pareti, esiste sempre un controllo che fa scivolare il sistema in giù. Una VV scelta male è una ciotola disallineata rispetto alla dinamica: ci sono stati in cui, per quanto giri la manopola, ogni mossa disponibile fa salire quella particolare VV — non perché il sistema sia instabile, ma perché quella VV misura la distanza nella direzione sbagliata. Il sistema potrebbe essere perfettamente stabilizzabile, e una VV diversa lo mostrerebbe subito; la VV sbagliata semplicemente non lo vede. Trovare VV, allora, non è un dettaglio tecnico: è scegliere la geometria giusta in cui leggere il problema, ed è per questo che resta un’arte.

Adesso il formalismo, un pezzo alla volta, tenendo la ciotola come traduzione costante. La sezione segue questo percorso: prima il tipo di sistema su cui si lavora, poi la condizione che definisce una Control Lyapunov Function letta da vicino, poi i due risultati che la rendono utile — il teorema di Artstein e la formula di Sontag — e infine i tre modi di trasformare una CLF in un controllore concreto: la formula chiusa, il risolutore pointwise, e le procedure costruttive per i casi lineare e a catena. Si chiude con i gradi di garanzia, la stima del bacino e il cenno a LaSalle. Nessuno di questi passi richiede di risolvere le equazioni del sistema: è la promessa del metodo diretto, e conviene tenerla a mente come filo conduttore.

Quasi tutto il controllo via Lyapunov si fa su una classe di sistemi un po’ più ristretta del generico x˙=f(x,u)\dot{x} = f(x, u): i sistemi control-affine, dove il controllo entra in modo lineare. La dinamica si scrive

x˙=f(x)+g(x)u\dot{x} = f(x) + g(x)\, u

In parole: la velocità dello stato è la somma di due pezzi. Il primo, f(x)f(x), è la dinamica propria — come il sistema si muove da solo, a controllo spento, u=0u = 0. Il secondo, g(x)ug(x)\, u, è l’effetto del controllo: g(x)g(x) dice in quale direzione e con quanta efficacia la manopola uu riesce a spingere il sistema, a partire dallo stato xx. La forma è meno restrittiva di quanto sembri: moltissimi sistemi fisici — meccanici, elettrici — sono naturalmente control-affine, perché forze e tensioni entrano linearmente nelle equazioni del moto.

L’equilibrio xx^* che vogliamo è uno stato dove, con un controllo opportuno, il sistema può stare fermo. Per comodità lo si porta sempre nell’origine, x=0x^* = 0, con un cambio di coordinate: “stato” diventa allora “scostamento dall’obiettivo”, e stabilizzare l’origine significa portare lo scostamento a zero. È la stessa convenzione del setpoint del PID: si lavora sull’errore, non sulla grandezza assoluta.

Riprendiamo la definizione di Control Lyapunov Function e guardiamola in simboli. V(x)V(x) è definita positiva: V(0)=0V(0) = 0 e V(x)>0V(x) > 0 per ogni x0x \ne 0 vicino all’origine. La sua derivata lungo la dinamica control-affine si spezza in due termini, perché la dinamica è la somma di due pezzi:

V˙(x,u)=V(x)f(x)LfV(x)  +  V(x)g(x)LgV(x)  u\dot{V}(x, u) = \underbrace{\nabla V(x) \cdot f(x)}_{L_f V(x)} \; + \; \underbrace{\nabla V(x) \cdot g(x)}_{L_g V(x)} \; u

I due termini hanno un nome — si chiamano derivate di Lie, dal matematico norvegese Sophus Lie — e basta leggerli per quello che dicono. LfV(x)=V(x)f(x)L_f V(x) = \nabla V(x) \cdot f(x) è quanto VV cambierebbe a controllo spento: il sistema lasciato a sé, sta salendo o scendendo sulla ciotola? LgV(x)=V(x)g(x)L_g V(x) = \nabla V(x) \cdot g(x) è quanta presa ha il controllo su VV: dice di quanto V˙\dot{V} si sposta per ogni unità di uu che applichi.

Con questa scomposizione la condizione CLF diventa leggibilissima. VV è una Control Lyapunov Function se, per ogni x0x \ne 0, esiste un uu tale che

LfV(x)+LgV(x)u<0L_f V(x) + L_g V(x)\, u < 0

Distingui due situazioni. Se LgV(x)0L_g V(x) \ne 0 — il controllo ha presa su VV in quello stato — allora puoi sempre scegliere un uu abbastanza grande, e del segno giusto, da rendere il termine LgV(x)uL_g V(x)\,u tanto negativo da vincere qualunque valore di LfV(x)L_f V(x). La discesa è garantita. Il caso scomodo è LgV(x)=0L_g V(x) = 0: lì il controllo non ha presa, il termine con uu sparisce, e ti resta solo LfV(x)L_f V(x). Perché VV sia una CLF, in quegli stati la dinamica propria deve già fare il lavoro da sola: deve valere LfV(x)<0L_f V(x) < 0. La condizione CLF, scritta per esteso, è esattamente questo: dove il controllo ha presa, può sempre far scendere VV; dove non ce l’ha, VV scende comunque per conto suo.

Il teorema di Artstein: CLF e stabilizzabilità sono la stessa cosa

Sezione intitolata “Il teorema di Artstein: CLF e stabilizzabilità sono la stessa cosa”

Perché vale la pena cercare una CLF, e non un’altra costruzione qualsiasi? Per un risultato che chiude il cerchio. Il teorema di Artstein (1983) dice: un sistema control-affine è asintoticamente stabilizzabile con un feedback se e solo se ammette una Control Lyapunov Function.

Il “se e solo se” è la parte preziosa. Una direzione è intuitiva — se hai una CLF, scegliendo uu che fa scendere VV stabilizzi il sistema. L’altra è più forte e meno ovvia: se il sistema è stabilizzabile in qualche modo, allora una CLF esiste per forza. Non stai inseguendo un oggetto che potrebbe non esserci: cercare una CLF e cercare un controllore stabilizzante sono la stessa caccia. Trovare la CLF resta difficile — il teorema garantisce l’esistenza, non ti regala la funzione — ma sai che non stai sprecando il tempo dietro a un fantasma.

La formula di Sontag: dalla CLF al controllore, esplicitamente

Sezione intitolata “La formula di Sontag: dalla CLF al controllore, esplicitamente”

Supponi di avere una CLF, VV. Il terzo passo della ricetta — scegliere u=k(x)u = k(x) che faccia scendere VV — non lo devi più fare a mano: c’è una formula chiusa che lo fa per te. È la formula universale di Sontag (1989). Per un sistema control-affine a un solo ingresso, una sua forma di base è

k(x)={LfV+(LfV)2+(LgV)4LgVse LgV00se LgV=0k(x) = \begin{cases} -\dfrac{L_f V + \sqrt{(L_f V)^2 + (L_g V)^4}}{L_g V} & \text{se } L_g V \ne 0 \\[2ex] 0 & \text{se } L_g V = 0 \end{cases}

La formula intimidisce, ma dice una cosa semplice, e la si legge pezzo per pezzo. Quando LfVL_f V è già negativo — il sistema, lasciato a sé, sta scendendo sulla ciotola — il numeratore è piccolo: la formula applica poco controllo, non c’è molto da correggere. Quando LfVL_f V è positivo — il sistema da solo salirebbe — il numeratore è grande e del segno giusto: la formula applica abbastanza controllo da invertire la salita in discesa. La radice quadrata serve solo a rendere la legge di controllo liscia, senza scatti bruschi, mentre si passa da uno stato all’altro. E la divisione per LgVL_g V tiene conto della presa del controllo: dove la presa è debole serve più uu per ottenere lo stesso effetto.

Non occorre memorizzare i dettagli. Il punto da portare via è di principio: una volta che hai una CLF, il controllore non è più un problema aperto — esiste una procedura meccanica che lo produce. Tutta la difficoltà del progetto si concentra nel passo che la formula non fa: trovare VV.

Il controllore pointwise: scegli la mossa di sforzo minimo che fa scendere V

Sezione intitolata “Il controllore pointwise: scegli la mossa di sforzo minimo che fa scendere V”

C’è un modo di usare la CLF ancora più vicino all’intuizione del progetto, e oggi più diffuso della formula chiusa perché si estende bene ai sistemi con più ingressi e con vincoli. Invece di una formula, a ogni istante risolvi un piccolo problema di ottimizzazione.

L’idea: tra tutti i controlli uu che fanno scendere VV “abbastanza in fretta”, scegli quello che costa meno sforzo. In formule, a ogni stato xx risolvi

minu  u2soggetto aLfV(x)+LgV(x)u    α(V(x))\min_{u} \; \|u\|^2 \qquad \text{soggetto a} \qquad L_f V(x) + L_g V(x)\, u \;\le\; -\alpha\big(V(x)\big)

Si legge così. La cosa da minimizzare, u2\|u\|^2, è lo sforzo di controllo: a parità di tutto, meglio una manopola girata poco. Il vincolo è la condizione di Lyapunov, ma in versione quantitativa: non chiediamo solo V˙<0\dot{V} < 0, chiediamo V˙α(V)\dot{V} \le -\alpha(V), dove α\alpha è una funzione che cresce con VV. Tradotto: più sei in alto sulla ciotola — più VV è grande — più in fretta devi scendere. Questo trasforma “il sistema torna all’equilibrio” in “il sistema torna all’equilibrio a un ritmo garantito”.

Questo problema è un quadratic program (QP): minimizzare una funzione quadratica con un vincolo lineare in uu. È minuscolo, si risolve in microsecondi, e si può rifare a ogni passo del loop di controllo, migliaia di volte al secondo. Il controllore è questo piccolo risolutore: a ogni istante guarda lo stato, e trova la mossa di sforzo minimo che garantisce la discesa di VV al ritmo voluto. È la traduzione più letterale dell’intuizione “scegli l’azione che fa scendere l’energia”.

Il caso lineare: dove la funzione di Lyapunov si costruisce da sola

Sezione intitolata “Il caso lineare: dove la funzione di Lyapunov si costruisce da sola”

C’è una classe di sistemi per cui il passo difficile — trovare VV — smette di essere un’arte e diventa un calcolo meccanico: i sistemi lineari. Vale la pena vederla, perché è il punto di appoggio sicuro da cui si parte e perché chiarisce, per contrasto, quanto il caso non lineare sia diverso.

Un sistema lineare ha dinamica x˙=Ax\dot{x} = A\,x, con AA una matrice fissa: la velocità dello stato è una trasformazione lineare dello stato stesso. Per un sistema così, la candidata VV è sempre una forma quadratica, V(x)=xPxV(x) = x^\top P x, dove PP è una matrice simmetrica definita positiva — la traduzione algebrica della ciotola. La domanda è: quale PP?

La risposta è un’equazione, non una ricerca. Si fissa una matrice QQ simmetrica definita positiva a piacere — il modo in cui si vuole che VV scenda — e si risolve, rispetto a PP, l’equazione di Lyapunov:

AP+PA=QA^\top P + P A = -Q

È un’equazione lineare nelle entrate di PP: si risolve con l’algebra lineare ordinaria, senza indovinare niente. Il risultato che la rende utile: se la matrice AA è stabile — tutti i suoi autovalori hanno parte reale negativa — allora questa equazione ha una e una sola soluzione PP, ed è definita positiva. Quella PP dà la funzione di Lyapunov V(x)=xPxV(x) = x^\top P x, e il conto mostra che lungo la dinamica V˙=xQx<0\dot{V} = -x^\top Q x < 0: VV scende, certificato di stabilità in mano.

Per il progetto del controllo, lo stesso meccanismo si combina con la scelta del controllore. Se la dinamica controllata è lineare, x˙=Ax+Bu\dot{x} = A\,x + B\,u, e si cerca un controllore anch’esso lineare, u=Kxu = -K\,x, l’anello chiuso ha matrice ABKA - B K; progettare significa scegliere KK in modo che ABKA - B K sia stabile, e l’equazione di Lyapunov fornisce sia il certificato sia, attraverso strumenti imparentati, il modo di calcolare un buon KK. Questo è il ponte verso il controllo ottimo lineare, ripreso in controllo-ottimo (in preparazione).

Il messaggio da portare via è duplice. Per i sistemi lineari, la funzione di Lyapunov non si cerca: si calcola, risolvendo un’equazione. Per i sistemi non lineari nessuna equazione del genere esiste in generale — ed è esattamente la ragione per cui, fuori dal mondo lineare, trovare VV torna a essere un’arte, e per cui le tecniche di ricerca automatica della prossima generazione, comprese le Neural Lyapunov functions, sono un’area di ricerca attiva.

Il backstepping: costruire V e controllore un pezzo alla volta

Sezione intitolata “Il backstepping: costruire V e controllore un pezzo alla volta”

Per i sistemi non lineari il caso lineare non aiuta, ma c’è una classe ampia per cui la costruzione di VV ha comunque una procedura sistematica: i sistemi con struttura a catena, dove lo stato di un sottosistema fa da ingresso al successivo. Il metodo si chiama backstepping ed è dovuto a Petar Kokotović e collaboratori, primi anni Novanta. Vale la pena vederne l’idea, perché è l’incarnazione più pura del progetto via Lyapunov: VV e controllore nascono insieme, passo dopo passo.

L’immagine è questa. Supponi che il sistema sia fatto di due stadi in serie: uno stato x1x_1 la cui evoluzione è guidata da un secondo stato x2x_2, e x2x_2 a sua volta guidato dal vero controllo uu. Non puoi agire direttamente su x1x_1 — il controllo non lo tocca — ma puoi agire su x2x_2, e x2x_2 tocca x1x_1.

Il backstepping procede così. Primo passo: fai finta che x2x_2 sia un controllo, un “controllo virtuale”, e progetta — con la ricetta di Lyapunov vista sopra — il valore che x2x_2 dovrebbe avere per stabilizzare x1x_1. Chiama quel valore desiderato x2desx_2^{\text{des}}, e costruisci una prima funzione di Lyapunov V1V_1 per lo stadio x1x_1. Secondo passo: x2x_2 non sarà esattamente x2desx_2^{\text{des}}, quindi guarda l’errore x2x2desx_2 - x_2^{\text{des}} e aggiungi a V1V_1 un termine che penalizza quell’errore — ottieni una V2V_2 più grande, che copre entrambi gli stadi. Terzo passo: ora progetta il vero controllo uu in modo che V˙2\dot{V}_2 sia negativa, cioè in modo che x2x_2 insegua il suo valore desiderato mentre x1x_1 converge.

Alla fine hai, di nuovo, due cose insieme: la legge di controllo u=k(x)u = k(x) e la funzione V2V_2 che certifica la stabilità dell’intero sistema. “Backstepping” — passo all’indietro — è il nome del movimento: parti dall’obiettivo sullo stato più lontano dal controllo e retrocedi verso il controllo vero, costruendo la funzione di Lyapunov un termine per stadio. Per sistemi con più di due stadi la procedura si ripete, sommando un termine a ogni livello. È il caso in cui il primo passo della ricetta — trovare VV — non è più indovinare: è seguire una costruzione.

Tre gradi di garanzia: stabile, asintotico, esponenziale

Sezione intitolata “Tre gradi di garanzia: stabile, asintotico, esponenziale”

Vale la pena fissare che cosa, esattamente, il progetto via Lyapunov ti garantisce, perché ci sono tre livelli e non vanno confusi. Dipende da quanto in basso riesci a spingere V˙\dot{V}.

Se ottieni V˙0\dot{V} \le 0VV non sale mai, ma può ristagnare — hai la stabilità semplice: le perturbazioni piccole restano piccole, ma il sistema può non tornare mai esattamente all’equilibrio. È il pendolo ideale senza attrito che, spinto, oscilla per sempre con la nuova ampiezza.

Se ottieni V˙<0\dot{V} < 0 per ogni stato fuori dall’equilibrio — VV scende davvero — hai la stabilità asintotica: il sistema torna all’equilibrio. Ma senza una promessa su quanto ci mette: potrebbe avvicinarsi sempre più lentamente.

Se ottieni V˙cV\dot{V} \le -c\, V per una costante c>0c > 0VV scende a un ritmo proporzionale a quanto vale — hai la stabilità esponenziale, la più forte. Da quella disuguaglianza segue che VV decade almeno come un esponenziale ecte^{-ct}: hai una garanzia quantitativa sulla velocità di convergenza, e quindi un tempo di assestamento. È la forma che si cerca nel progetto serio, perché un controllore di cui sai solo “prima o poi converge” è meno utile di uno di cui sai “converge entro tre secondi”.

Un’ultima cosa che la funzione di Lyapunov dà gratis, e che nessun’altra analisi dà altrettanto a buon mercato: una stima di quanto il controllore è robusto.

La teoria di Lyapunov è locale. Garantisce che il sistema torna all’equilibrio se parte abbastanza vicino, ma “abbastanza vicino” va quantificato: l’insieme degli stati di partenza da cui il sistema converge è la regione di attrazione (region of attraction). Sapere quanto è grande significa sapere quanto grande può essere un disturbo prima che il controllore non riesca più a recuperare.

La stessa VV la stima. Prendi gli insiemi di livello di VV — gli insiemi della forma {x:V(x)c}\{x : V(x) \le c\}, che geometricamente sono “ciotole annidate”, una dentro l’altra al crescere di cc. Trova il più grande di questi insiemi che sta tutto dentro la regione dove hai dimostrato V˙<0\dot{V} < 0. Quell’insieme di livello è una stima della regione di attrazione, e una stima garantita per difetto: ogni traiettoria che parte là dentro non può uscirne, perché VV scende e una traiettoria che scende non può saltare a un insieme di livello più esterno, che corrisponde a un valore di VV più alto. È una stima conservativa — il vero bacino può essere più grande — ma è una garanzia solida, non una speranza.

C’è un caso in cui il bacino è tutto: se VV è radialmente illimitata — cresce senza limite man mano che ci si allontana dall’origine in qualunque direzione — e V˙<0\dot{V} < 0 ovunque, allora il sistema converge all’equilibrio da qualsiasi stato iniziale. È la stabilità asintotica globale, e il risultato che la garantisce è il teorema di Barbashin-Krasovskii. La condizione “radialmente illimitata” non è un dettaglio: senza, VV potrebbe avere creste lontane da cui una traiettoria sfugge anche scendendo.

Un cenno a LaSalle: quando V ristagna ma il sistema converge comunque

Sezione intitolata “Un cenno a LaSalle: quando V ristagna ma il sistema converge comunque”

Resta un buco nella ricetta, ed è frequente. Per la stabilità asintotica abbiamo chiesto V˙<0\dot{V} < 0 strettamente, fuori dall’equilibrio. Ma capita spesso di riuscire a costruire solo una VV con V˙0\dot{V} \le 0, dove la derivata si annulla anche in stati lontani dall’equilibrio — pensa a un sistema meccanico dove V˙\dot{V} misura la dissipazione, che è zero ogni volta che la velocità è zero, e la velocità è zero a ogni inversione di un’oscillazione, non solo a riposo. Con la sola regola classica concluderesti stabilità semplice, e ti perderesti la stabilità asintotica che il sistema in realtà ha.

Il principio di invarianza di LaSalle (Joseph LaSalle, matematico statunitense, formalizzato intorno al 1960) ripara il buco. Dice, in sostanza: anche con solo V˙0\dot{V} \le 0, il sistema non si limita a restare vicino — converge al più grande insieme invariante contenuto nella regione dove V˙=0\dot{V} = 0. Un insieme invariante è un insieme di stati da cui il sistema, una volta entrato, non esce più. Allora il ragionamento è questo: se in quella regione dove V˙=0\dot{V} = 0 l’unico insieme invariante è l’equilibrio stesso — se cioè il sistema non può “vivere” stabilmente da nessun’altra parte dove VV ristagna — allora il sistema deve finire all’equilibrio, e hai la stabilità asintotica pur avendo dimostrato solo V˙0\dot{V} \le 0. LaSalle allarga la portata del metodo diretto a tutti i casi in cui costruire una VV a derivata strettamente negativa sarebbe troppo difficile o impossibile. Il vocabolario di insieme invariante e attrattore è sviluppato in Equilibrio, stabilità, attrattori; qui basta sapere che esiste questo ponte e a cosa serve.

Lyapunov e PID: due filosofie di progetto a confronto

Sezione intitolata “Lyapunov e PID: due filosofie di progetto a confronto”

Conviene chiudere la meccanica con un confronto diretto, perché il PID del capitolo precedente e il progetto via Lyapunov sono due risposte alla stessa domanda — quale controllo applicare — costruite da direzioni opposte.

Il PID parte dalla struttura del controllore. Fissa in anticipo la forma: tre termini, proporzionale, integrale, derivativo. Restano da scegliere tre numeri, i guadagni, e li si sceglie per prove ed errori, o con regole empiriche, guardando come l’anello risponde. La stabilità è un esito che si osserva a posteriori: se la risposta non oscilla e si assesta, bene. Non c’è, nel PID classico, un certificato.

Il progetto via Lyapunov parte dall’obiettivo di stabilità. Fissa in anticipo la funzione VV che vuole far scendere, e da quella deduce la legge di controllo, qualunque forma essa abbia. La stabilità non è un esito osservato: è un’ipotesi di partenza imposta per costruzione, e VV ne è la prova. Il prezzo è che serve un modello della dinamica del plant — il PID, notoriamente, si tara anche senza.

Le due filosofie non sono in competizione, sono per problemi diversi. Per un anello scalare ben posto, dove un modello accurato costerebbe più di quanto vale, il PID resta la scelta giusta: semplice, robusto, tarabile sul campo. Per un sistema non lineare, multivariabile, o dove serve una garanzia formale prima dell’accensione, il progetto via Lyapunov è l’unico dei due che la può dare. E c’è un punto di contatto istruttivo: un controllore PID è, di fatto, una particolare legge di controllo, e per casi semplici si può perfino costruire una funzione di Lyapunov che ne certifica l’anello chiuso — cioè dimostrare a posteriori, con Lyapunov, la stabilità di un PID tarato. Il metodo di Lyapunov non sostituisce il PID: gli può fare da giudice.

Sei esempi, scelti per coprire angoli diversi. I primi due lavorano sul caso più piccolo possibile — un sistema scalare — uno con carta e penna e uno con il codice, perché la meccanica del progetto via Lyapunov si afferra solo vedendola girare su un caso che si tiene tutto in testa. Il terzo e il quarto salgono a sistemi reali e non lineari — un pendolo, un robot — dove il metodo dà ciò che la linearizzazione non sa dare. Il quinto porta il metodo nel territorio dell’AI, con lo scudo di sicurezza su una policy appresa. Il sesto non è un sistema da progettare ma un’analogia da disinnescare con cura, perché è la confusione che questo capitolo rischia di indurre più di ogni altra.

Esempio 1 — numerico: progettare un controllore per un sistema instabile

Sezione intitolata “Esempio 1 — numerico: progettare un controllore per un sistema instabile”

Il caso più piccolo che mostra il rovesciamento dall’analisi al progetto. Un sistema scalare — una sola variabile di stato xx, lo scostamento dall’obiettivo — con dinamica

x˙=x+u\dot{x} = x + u

A controllo spento, u=0u = 0, la dinamica è x˙=x\dot{x} = x: lo stato cresce in proporzione a se stesso, esplode esponenzialmente. Il sistema, da solo, è instabile — l’equilibrio x=0x = 0 è una cima da cui ogni scostamento scappa via.

Scegli come funzione candidata la ciotola più semplice, la distanza al quadrato (a meno di un mezzo, che semplifica i conti):

V(x)=12x2V(x) = \tfrac{1}{2}x^2

È definita positiva: vale zero in x=0x = 0 e positiva ovunque altrove. Calcola la sua derivata lungo la dinamica controllata. Per la regola della catena V˙=xx˙\dot{V} = x \cdot \dot{x}, e sostituendo la dinamica:

V˙=xx˙=x(x+u)=x2+xu\dot{V} = x\,\dot{x} = x\,(x + u) = x^2 + x\,u

Leggi questa espressione come fa il progettista. A controllo spento, u=0u = 0, resta V˙=x2\dot{V} = x^2, che è positiva per ogni x0x \ne 0: la funzione VV sale, conferma dell’instabilità. Ma V˙\dot{V} contiene uu, ed è lì che intervieni. Devi scegliere una legge u=k(x)u = k(x) che renda V˙\dot{V} negativa. Prova la più semplice, una proporzionale allo stato: u=kxu = -k\,x con kk una costante positiva da scegliere. Sostituisci:

V˙=x2+x(kx)=x2kx2=(1k)x2\dot{V} = x^2 + x\,(-k\,x) = x^2 - k\,x^2 = (1 - k)\,x^2

Adesso il segno di V˙\dot{V} è in mano tua, attraverso kk. Se scegli k>1k > 1, il fattore (1k)(1 - k) è negativo, e V˙=(1k)x2<0\dot{V} = (1-k)\,x^2 < 0 per ogni x0x \ne 0. La ciotola scende: l’equilibrio dell’anello chiuso è asintoticamente stabile. Scegli per concretezza k=2k = 2: il controllore è u=2xu = -2x, e si ottiene V˙=x2=2V\dot{V} = -x^2 = -2V. Quel V˙=2V\dot{V} = -2V è la forma esponenziale: VV decade come e2te^{-2t}, convergenza garantita a ritmo noto.

Nota il rovesciamento, che è tutto il punto dell’esempio. La stessa funzione V=12x2V = \frac{1}{2}x^2, valutata sul sistema a controllo spento, certificava l’instabilità (V˙=x2>0\dot{V} = x^2 > 0). Valutata sul sistema con il controllore u=2xu = -2x inserito, certifica la stabilità asintotica (V˙=x2<0\dot{V} = -x^2 < 0). Non è cambiato il sistema fisico né la funzione: è cambiato che hai usato VV per scegliere uu. La VV è stata lo stampo del progetto e ne è ora il certificato.

Vale la pena verificare che V=12x2V = \frac{1}{2}x^2 è davvero una Control Lyapunov Function per questo sistema, applicando la definizione. Le derivate di Lie qui sono LfV=xx=x2L_f V = x \cdot x = x^2 — la dinamica propria f(x)=xf(x) = x — e LgV=x1=xL_g V = x \cdot 1 = x — l’effetto del controllo g(x)=1g(x) = 1. La condizione CLF chiede: per ogni x0x \ne 0, esiste un uu con LfV+LgVu<0L_f V + L_g V \, u < 0, cioè x2+xu<0x^2 + x\,u < 0. Per x0x \ne 0 il termine LgV=xL_g V = x è diverso da zero — il controllo ha sempre presa — quindi basta scegliere uu abbastanza negativo (per x>0x > 0) o positivo (per x<0x < 0) da rendere xux\,u più negativo di x2x^2. Esiste sempre. VV è una CLF, e il teorema di Artstein conferma quel che già sappiamo: il sistema è stabilizzabile. La scelta u=2xu = -2x è solo una delle infinite leggi che soddisfano la condizione; il controllore pointwise sceglierebbe, a ogni xx, quella di sforzo minimo.

Una variante del ragionamento vale per i sistemi a tempo discreto, quelli che avanzano a passi xt+1=g(xt,ut)x_{t+1} = g(x_t, u_t) — la forma rilevante quando il controllo è un loop software che gira a cicli. Lì non si guarda una derivata V˙\dot{V} ma la differenza V(xt+1)V(xt)V(x_{t+1}) - V(x_t), e la condizione di progetto diventa: scegli utu_t in modo che a ogni passo VV cali, V(xt+1)<V(xt)V(x_{t+1}) < V(x_t). La logica è identica — una ciotola, una quantità che a ogni passo scende di un pezzo — ma l’oggetto da rendere negativo è una differenza tra due valori, non una velocità istantanea. È la versione che si incontra più spesso fuori dal controllo fisico: un anello di feedback software, un passo di un algoritmo iterativo, sono dinamiche a passi, e progettarne la stabilità significa garantire che una VV scelta scenda a ogni ciclo.

Esempio 2 — codice: il controllore pointwise come piccolo risolutore

Sezione intitolata “Esempio 2 — codice: il controllore pointwise come piccolo risolutore”

Il controllore pointwise della sezione meccanica — “a ogni passo, trova la mossa di sforzo minimo che fa scendere VV abbastanza” — è letteralmente un pezzo di software che gira nel loop di controllo. In pseudocodice:

def controllo_clf(x, V, grad_V, f, g, alpha):
"""Sceglie u risolvendo un mini-problema a ogni passo.
x : stato corrente
V : funzione di Lyapunov, V(x) -> numero
grad_V : gradiente di V, grad_V(x) -> vettore
f, g : dinamica control-affine, x_dot = f(x) + g(x)*u
alpha : funzione di confronto, alpha(v) > 0 per v > 0
"""
Lf_V = dot(grad_V(x), f(x)) # variazione di V a controllo spento
Lg_V = dot(grad_V(x), g(x)) # presa del controllo su V
# vincolo da imporre: Lf_V + Lg_V * u <= -alpha(V(x))
rhs = -alpha(V(x)) - Lf_V
if norm(Lg_V) == 0:
# il controllo non ha presa: la dinamica propria deve bastare
assert rhs >= 0, "V non e una CLF in questo stato"
return 0
# tra gli u che soddisfano il vincolo, quello di norma minima:
# e la proiezione di 0 sul semispazio Lg_V . u <= rhs
if Lf_V <= -alpha(V(x)):
return 0 # V scende abbastanza, non agire
return (rhs / dot(Lg_V, Lg_V)) * Lg_V

Le righe vanno lette per quello che dicono, non come codice da eseguire. Le prime due calcolano le derivate di Lie: quanto VV varierebbe da sola, e quanta presa ha il controllo. Il vincolo rhs traduce la condizione di Lyapunov quantitativa V˙α(V)\dot{V} \le -\alpha(V). Il ramo norm(Lg_V) == 0 è il caso scomodo già visto: se il controllo non ha presa, la dinamica propria deve già fare scendere VV — e se non lo fa, la VV scelta non era una CLF, l’assert lo segnala. L’ultimo blocco è il cuore: se VV sta già scendendo abbastanza (LfVα(V)L_f V \le -\alpha(V)), non agire, sforzo zero; altrimenti applica il controllo minimo che porta V˙\dot{V} esattamente sul vincolo. Quel return finale è la soluzione in forma chiusa del quadratic program a un ingresso — la proiezione dello zero sul semispazio dei controlli ammissibili.

Segui un’esecuzione, sul sistema scalare dell’Esempio 1 — f(x)=xf(x) = x, g(x)=1g(x) = 1, V(x)=12x2V(x) = \frac{1}{2}x^2 — con α(v)=v\alpha(v) = v. Lo stato è x=3x = 3. Il codice calcola LfV=x2=9L_f V = x^2 = 9 e LgV=x=3L_g V = x = 3. Il vincolo: rhs =α(V)LfV=12(9)9=13,5= -\alpha(V) - L_f V = -\frac{1}{2}(9) - 9 = -13{,}5. Controlla se VV scende già da sola: LfV=9L_f V = 9 non è α(V)=4,5\le -\alpha(V) = -4{,}5, quindi bisogna agire. La formula finale dà u=rhs/(LgV)2LgV=(13,5/9)3=4,5u = \text{rhs} / (L_g V)^2 \cdot L_g V = (-13{,}5 / 9) \cdot 3 = -4{,}5. Il controllore applica u=4,5u = -4{,}5: una spinta negativa, robusta, che da x=3x = 3 porta V˙\dot{V} esattamente sul vincolo. Al passo successivo xx è più piccolo, il conto si rifà, e lo sforzo richiesto cala. Il controllore, passo dopo passo, sceglie la mossa minima che mantiene la promessa di discesa.

Il punto che il codice rende concreto: il controllore non è una formula fissa calcolata una volta, è un risolutore che a ogni passo del loop, dato lo stato, sceglie l’azione. È la stessa idea del PID — un calcolo ripetuto a ogni ciclo — ma con una proprietà che il PID non ha: ogni azione scelta soddisfa, per costruzione, una disuguaglianza che garantisce la discesa di VV. Il controllore non spera di stabilizzare: a ogni passo verifica la condizione di stabilità prima di muovere la manopola.

Esempio 3 — numerico: il pendolo da stabilizzare in alto, con l’energia come guida

Sezione intitolata “Esempio 3 — numerico: il pendolo da stabilizzare in alto, con l’energia come guida”

Un caso che mostra come la funzione di Lyapunov possa essere, letteralmente, l’energia del sistema, e come la si usi per progettare. Considera un pendolo che si vuole portare e tenere nella posizione in alto — capovolto, in equilibrio precario sopra il perno. Lo stato è la coppia (angolo rispetto alla verticale alta, velocità angolare); il controllo uu è una coppia che si applica al perno.

L’equilibrio in alto è instabile: lasciato a sé, il pendolo cade. Il primo metodo lo conferma — la Jacobiana ha un autovalore reale positivo, una direzione di fuga — ma non suggerisce come progettare il controllo. Il metodo di Lyapunov sì.

Misura VV come l’energia che il pendolo deve perdere per arrivare a riposo in alto: l’energia cinetica più lo scarto di energia potenziale rispetto alla configurazione capovolta a velocità nulla. Questa VV è definita positiva attorno all’obiettivo: vale zero solo quando il pendolo è fermo in alto, ed è positiva per ogni altra coppia (angolo, velocità) vicina. La ciotola, di nuovo, con il fondo sull’obiettivo.

Calcola V˙\dot{V} lungo la dinamica controllata. Il conto — che qui non sviluppiamo nei dettagli, ma il cui esito è quello che conta — dà una V˙\dot{V} proporzionale al prodotto tra la velocità angolare e la coppia di controllo uu. La lettura è immediata: V˙\dot{V} ha il segno che gli imponi tu, attraverso uu. Scegli uu proporzionale e di segno opposto alla velocità angolare — una coppia che frena sempre il moto — e ottieni V˙0\dot{V} \le 0: l’energia non può che calare. Il controllo “ruba energia” al pendolo a ogni istante.

C’è una sottigliezza istruttiva. Con questa scelta V˙\dot{V} si annulla ogni volta che la velocità angolare è zero — e la velocità è zero non solo a riposo in alto, ma a ogni inversione del moto, in cima a ogni oscillazione. La regola classica concluderebbe solo stabilità semplice. È qui che serve il principio di LaSalle della sezione meccanica: il sistema converge al più grande insieme invariante dove V˙=0\dot{V} = 0, e con un’analisi un po’ più fine si mostra che l’unica configurazione in cui il pendolo può restare con velocità nulla è proprio l’equilibrio in alto. LaSalle recupera così la stabilità asintotica che la regola stretta si era persa. L’esempio mostra due cose insieme: VV può essere energia fisica vera, e LaSalle non è un tecnicismo astratto ma lo strumento che chiude un progetto reale.

Una nota di onestà sul caso del pendolo invertito, perché illustra un limite generale. La strategia “ruba energia finché ne resta poca” porta il pendolo vicino alla verticale alta, ma da sola non lo blocca lì: avvicinandosi all’equilibrio precario, il controllo basato sull’energia diventa debole proprio dove servirebbe deciso. Nella pratica si combinano due controllori: quello basato su VV — energia — che fa il lavoro grosso di portare il pendolo nei pressi della verticale da qualunque posizione, e un controllore locale, tarato sulla linearizzazione, che lo cattura e lo tiene fermo nell’ultimo tratto. È un esempio concreto del fatto che il metodo di Lyapunov e la linearizzazione non sono rivali ma strumenti complementari: il primo per la regione ampia, il secondo per la presa fine attorno all’equilibrio.

Esempio 4 — scenario reale: stabilizzare un robot, dove la linearizzazione non basta

Sezione intitolata “Esempio 4 — scenario reale: stabilizzare un robot, dove la linearizzazione non basta”

Prendi un robot mobile su ruote che deve raggiungere e mantenere una posa — posizione e orientamento — assegnata. Lo stato è l’errore tra posa attuale e posa voluta; i controlli sono la velocità lineare e la velocità di rotazione. La dinamica è genuinamente non lineare: ruotare di novanta gradi e poi avanzare non equivale ad avanzare e poi ruotare, e questo “non commutare” entra nelle equazioni in modo che nessuna approssimazione lineare cattura.

Il primo metodo di stabilità — linearizza attorno all’equilibrio, guarda gli autovalori della Jacobiana, raccontato in Equilibrio, stabilità, attrattori — qui dice poco. Funziona solo in un intorno minuscolo della posa voluta, e per questo tipo di sistema la linearizzazione attorno all’equilibrio è spesso perfino degenere: non basta a progettare nulla che funzioni su una regione utile.

Il progetto via Lyapunov, invece, lavora direttamente sul sistema non lineare. Si sceglie una VV che combina l’errore di posizione e l’errore di orientamento in un’unica energia generalizzata — una distanza, opportunamente pesata, dalla posa voluta. Poi si scelgono le due velocità di controllo in modo che V˙\dot{V} risulti negativa. Per un sistema concatenato come questo — l’orientamento influenza come la posizione evolve — la scelta si fa con il backstepping: si stabilizza prima il sotto-obiettivo dell’orientamento, trattandolo come un “controllo virtuale” per la posizione, poi si aggiunge un termine alla VV per il pezzo restante, e si ricava il controllo vero. Alla fine si ha sia le leggi di controllo per le due velocità, sia la VV che certifica la convergenza alla posa.

E si ha la stima della regione di attrazione: l’insieme di livello di VV dentro cui la discesa è dimostrata dice da quali errori iniziali di posa il robot è garantito raggiungere il bersaglio. È un’informazione di progetto concreta — quanto fuori posa può partire il robot e ancora arrivare — che la taratura empirica di un controllore non saprebbe quantificare.

Il contrasto con un approccio in stile PID è istruttivo. Si potrebbe provare a governare il robot con tre anelli PID indipendenti — uno per la coordinata avanti, uno per la laterale, uno per l’orientamento — tarati separatamente. Per piccoli errori funziona; ma poiché gli assi sono accoppiati dalla non linearità della cinematica, su errori grandi i tre anelli si combattono, e nessuna terna di guadagni li riconcilia in modo dimostrabile. Il progetto via Lyapunov tratta il robot come un sistema con una energia generalizzata, e proprio perché la VV è scelta sull’intero stato accoppiato, il controllore che ne deriva non ha questo difetto. È il tipo di problema — accoppiato, non lineare, con bisogno di garanzia su una regione ampia — per cui il metodo di questo capitolo esiste.

Esempio 5 — scenario AI: lo scudo di Lyapunov sopra una policy appresa

Sezione intitolata “Esempio 5 — scenario AI: lo scudo di Lyapunov sopra una policy appresa”

Una policy di controllo addestrata con reinforcement learning ottimizza una ricompensa, e di solito lo fa bene. Ma non offre nessuna garanzia di stabilità: durante l’addestramento esplora azioni a caso, e anche da addestrata può, su uno stato che non ha mai visto, proporre un’azione che destabilizza il sistema controllato. Per un plant fisico — un robot, un drone, una rete elettrica — questo è inaccettabile: un’esplorazione sbagliata rompe l’hardware o peggio.

Una funzione di Lyapunov fornisce uno scudo. L’idea, sviluppata nella linea di ricerca del safe reinforcement learning — un riferimento è “A Lyapunov-based Approach to Safe Reinforcement Learning” (Chow, Nachum, Duéñez-Guzmán, Ghavamzadeh, NeurIPS 2018), che costruisce funzioni di Lyapunov per garantire la sicurezza durante il training tramite vincoli locali — è di interporre, tra la policy e l’attuatore, un filtro basato su CLF.

Il meccanismo: la policy appresa propone un’azione uRLu_{\text{RL}}. Lo scudo controlla se quell’azione soddisfa la condizione di Lyapunov, V˙α(V)\dot{V} \le -\alpha(V). Se sì, la lascia passare intatta — la policy ha campo libero per ottimizzare la ricompensa. Se no, lo scudo la proietta sull’insieme delle azioni che la condizione la soddisfano: prende l’azione ammissibile più vicina possibile a quella proposta dalla policy. È, di nuovo, un piccolo quadratic program risolto a ogni passo, come nell’Esempio 2, ma con il termine “stai vicino a uRLu_{\text{RL}}” al posto di “sforzo minimo”. Il risultato: la policy resta libera di imparare e di ottimizzare, ma il sistema controllato non può lasciare la regione certificata stabile, nemmeno mentre la policy è ancora goffa o di fronte a uno stato avversariale.

C’è un costo, e va dichiarato perché è il limite noto di questi metodi: lo scudo rende l’esplorazione conservativa. La policy, vincolata, può non scoprire strategie ad alta ricompensa che richiederebbero di avvicinarsi al bordo della regione sicura. Sicurezza e prestazione si comprano l’una con l’altra: lo scudo di Lyapunov garantisce la prima al prezzo di un po’ della seconda.

Lo scudo presuppone però di avere una funzione di Lyapunov per il sistema controllato — e per un sistema complesso, governato in parte da una rete neurale, costruirla a mano è proprio il passo difficile. Qui entra una linea di ricerca attiva, da presentare come tale e non come tecnologia matura: le Neural Lyapunov functions. L’idea è rappresentare la funzione di Lyapunov candidata con una rete neurale e cercarla per ottimizzazione, in un loop learner-verifier. Una rete, l’apprendista, propone una VV addestrandosi a soddisfare le condizioni di Lyapunov sui punti campionati; un verificatore — un risolutore SMT, un metodo formale — cerca un controesempio, uno stato dove le condizioni sono violate; se lo trova, il controesempio rientra come dato di addestramento e l’apprendista corregge VV; si itera finché il verificatore non trova più controesempi, e a quel punto VV è un certificato. Spesso policy di controllo e certificato neurale si apprendono insieme: non solo si impara un controllore, ma simultaneamente la prova che è stabile. Una rassegna di riferimento è “Safe Control With Learned Certificates” (Dawson, Gao, Fan, IEEE Transactions on Robotics, 2023). È promettente, ed è anche dove la disciplina sta ancora cercando la sua strada: la verifica per campionamento dello spazio degli stati scala male con la dimensione del sistema, e questo resta un problema aperto.

Esempio 6 — un’analogia da maneggiare con cura: la loss che scende

Sezione intitolata “Esempio 6 — un’analogia da maneggiare con cura: la loss che scende”

Qui l’esempio non è un sistema da progettare ma una somiglianza da disinnescare, perché è tentatrice e mezza sbagliata.

La funzione di Lyapunov scende, monotona, lungo le traiettorie del sistema. La loss, durante un buon addestramento di una rete neurale, scende anch’essa. Il disegno mentale è identico — una ciotola, qualcosa che ci scivola dentro — e viene spontaneo dire “la loss è la funzione di Lyapunov del training”. Va marcato con precisione che cosa di questa frase è vero e che cosa no, perché ci sono tre classi di affermazione sovrapposte.

Come analogia, la frase regge. “Una loss che decresce in modo monotono è una proprietà desiderabile, allo stesso modo in cui una funzione di Lyapunov che scende certifica che il sistema sta convergendo” è una somiglianza didattica legittima: aiuta a vedere il training come una discesa verso un fondo.

Come identità, non regge. L’addestramento di una rete non è un sistema di controllo. In un sistema di controllo c’è un ingresso uu che scegli per stabilizzare; nel training c’è un ottimizzatore che segue il gradiente di una funzione data, senza nessuna manopola da progettare. Il training è descritto bene, piuttosto, come una dinamica a tempo discreto — lo dice Equilibrio, stabilità, attrattori: la convergenza dell’addestramento è l’arrivo a un punto fisso dell’update dell’ottimizzatore. In quella lettura la loss è la funzione che la dinamica fa scendere, non una Control Lyapunov Function che si sceglie per progettare un controllo. Sono ruoli diversi.

E come teorema, non regge affatto, perché l’analogia si rompe in più punti precisi. Una funzione di Lyapunov, per definizione, non sale mai: la discesa stocastica del gradiente, per il rumore del minibatch, fa salire la loss in continuazione da un passo all’altro. La loss non è detta definita positiva attorno al minimo che vuoi: il paesaggio della loss ha minimi multipli, plateau, punti di sella. La loss empirica che misuri scende, ma la loss “vera” sulla distribuzione dei dati può divergere da quella — è l’overfitting. Nessuna di queste patologie tocca una funzione di Lyapunov costruita come si deve.

La conclusione operativa: la loss “è come” una funzione di Lyapunov solo nel senso debole e utile di “una quantità scelta che vogliamo far scendere e che ci dice se stiamo convergendo”. È un’analogia, e va usata come tale — mai spacciata per equivalenza, mai per teorema. Tenere ferma la distinzione tra le tre classi è esattamente il tipo di disciplina che separa un ragionamento solido da uno che sembra rigoroso e non lo è.

C’è però un terzo membro della famiglia che merita un cenno, perché chiarisce qual è il nucleo trasferibile. In informatica, per dimostrare che un ciclo termina, si esibisce una ranking function (o variant): una quantità a valori interi non negativi che cala di almeno uno a ogni iterazione del ciclo. Poiché un intero non negativo non può scendere all’infinito, il ciclo deve fermarsi. Lo schema è identico a quello della funzione di Lyapunov: una quantità limitata inferiormente che decresce lungo l’evoluzione del sistema, da cui si deduce dove l’evoluzione va a finire. La ranking function e la funzione di Lyapunov sono cugine concettuali — lo stesso schema di prova applicato a oggetti diversi, un ciclo software discreto da una parte, un sistema dinamico dall’altra. La precisazione di classe va fatta anche qui: questa è un’analogia strutturale tra metodi di dimostrazione, non una filiazione storica. Nessuna delle due tecniche discende dall’altra; condividono l’idea, non la genealogia. Riconoscere l’idea condivisa — “per dimostrare che qualcosa converge o termina, trova una quantità che decresce e non può farlo per sempre” — è ciò che rende il metodo di Lyapunov uno strumento mentale ben oltre il controllo.

Il metodo di Lyapunov come strumento di progetto compare in due forme. La prima è letterale: progettare il controllo di un sistema fisico, con una garanzia di stabilità allegata. La seconda è più diffusa di quanto si pensi e meno riconosciuta: l’idea di scegliere le azioni perché una quantità scenda, applicata fuori dal controllo industriale — al safe reinforcement learning, agli anelli di feedback software, al ragionamento sulla terminazione di un loop. Le applicazioni che seguono coprono entrambe.

Progettare controllori non lineari con garanzia formale. È l’uso diretto. Per un plant marcatamente non lineare — un braccio robotico, un velivolo a grandi angoli, un convertitore di potenza — dove il PID e i metodi in frequenza danno al più una taratura locale, il progetto via Lyapunov o via backstepping produce un controllore valido su una regione ampia, e insieme il certificato di stabilità dell’anello chiuso. Non “sembra funzionare”: funziona, con una dimostrazione e una stima del bacino allegate.

Mettere uno scudo di sicurezza su una policy appresa. Come nell’Esempio 5: un filtro basato su CLF tra la policy di reinforcement learning e l’attuatore garantisce che il sistema controllato non lasci mai la regione stabile, durante l’addestramento e in esercizio. È uno dei pochi modi rigorosi di combinare l’efficacia di una policy appresa con una garanzia hard di sicurezza, ed è centrale ovunque una policy controlli hardware fisico.

Verificare formalmente un controllore con le Neural Lyapunov functions. Il punto debole storico del metodo — trovare VV è un’arte — è oggi un’area di ricerca attiva, e va presentata come tale, non come tecnologia consolidata. L’idea: rappresentare la funzione di Lyapunov candidata con una rete neurale e cercarla per ottimizzazione, in un loop learner-verifier. Una rete (l’apprendista) propone una VV; un verificatore — spesso un risolutore SMT, un dimostratore automatico — cerca un controesempio, uno stato dove le condizioni di Lyapunov sono violate; se lo trova, il controesempio rientra come dato di addestramento e l’apprendista corregge VV; si itera finché il verificatore non trova più controesempi, e a quel punto VV è un certificato formale. Spesso si apprendono insieme la policy di controllo e il certificato neurale. Una rassegna di riferimento è “Safe Control With Learned Certificates” (Dawson, Gao, Fan, IEEE Transactions on Robotics, 2023); strumenti come Fossil 2.0 (Edwards, Peruffo, Abate, 2024) automatizzano la sintesi. Il limite dichiarato apertamente in letteratura: la verifica via campionamento dello spazio degli stati scala male con la dimensione del sistema — resta un problema aperto.

Quantificare quanto è robusto un anello di feedback. Anche per un anello di controllo fatto di software — un autoscaler, un controllo di budget, un rate limiter adattivo — costruire una funzione di Lyapunov, dove è possibile, dà la stima della regione di attrazione: quanto grande può essere un disturbo prima che il sistema esca dalla zona da cui sa recuperare da solo. È un numero di progetto, non una sensazione, e dice dove serve un intervento esterno di emergenza.

Progettare anelli di controllo software che non oscillano. Molti meccanismi adattivi nel software hanno, sotto la superficie, la forma di un anello a feedback: un autoscaler che aggiunge e toglie repliche per inseguire un carico, un controllore di concorrenza che alza e abbassa un limite di richieste in volo, un meccanismo che regola la dimensione di un batch per tenere una latenza obiettivo. Tutti questi possono oscillare — overshoot, correzione eccessiva, ping-pong tra due stati — esattamente come gli anelli fisici discussi in Overshoot, delay, oscillazioni, divergenza. Dove si riesce a modellare la dinamica dell’anello e a costruire una funzione di Lyapunov, il progetto via Lyapunov produce una regola di aggiornamento di cui si dimostra che converge senza oscillare, invece di una tarata a sensazione. Anche quando il modello è troppo grezzo per un progetto formale completo, ragionare in termini di “quale quantità deve scendere a ogni passo di correzione” è già una guida concreta che separa un anello stabile da uno che entra in risonanza con il proprio ritardo.

Ragionare sulla terminazione di un loop agentico. Un agente che esegue un ciclo percezione-azione per portare a termine un compito è una dinamica a passi, e la domanda “questo loop terminerà o girerà all’infinito?” è la domanda di stabilità di una dinamica discreta. Non sempre si riesce a costruire una funzione di Lyapunov rigorosa per un agente — lo spazio degli stati di un agente che usa un modello di linguaggio non è una dinamica liscia, e qui si è nel territorio dell’analogia, non del teorema. Ma l’abito mentale resta utile: chiedersi quale quantità misurabile dovrebbe calare a ogni iterazione — sottocompiti residui, distanza da una condizione di completamento, dimensione di un problema ancora aperto — e progettare il loop perché quella quantità cali, è il modo concreto di evitare che un agente entri in un ciclo che non finisce. È lo schema della ranking function di terminazione, applicato al progetto di un loop agentico.

Tenere in tasca lo schema “trova una quantità che decresce”. Al di là del controllo, il valore trasferibile è il pattern di ragionamento. Per dimostrare che un processo iterativo termina o converge, cerca una quantità non negativa che cala a ogni passo: è la funzione di Lyapunov nei sistemi dinamici, è la ranking function con cui si dimostra che un ciclo software termina, è la funzione potenziale con cui si prova la convergenza di molti algoritmi, è la distanza da un punto fisso che si contrae (l’operatore di Bellman, in Bellman e programmazione dinamica). Sono cugini concettuali — uno schema di prova condiviso, da marcare come analogia strutturale e non come filiazione storica: nessuna di queste tecniche discende direttamente dall’altra. Riconoscere lo schema fa vedere problemi diversi come istanze della stessa mossa.

Il progetto via Lyapunov è uno degli strumenti più solidi del controllo, ma ha confini netti e modi caratteristici di essere frainteso. Vale la pena passarli in rassegna: ogni voce corrisponde a un errore concreto che si vede commettere.

Trovare la funzione di Lyapunov resta un’arte, e il metodo non lo nasconde abbastanza. È il limite strutturale. Per un sistema lineare VV si costruisce sempre, in modo meccanico: risolvi l’equazione di Lyapunov AP+PA=QA^\top P + P A = -Q, scegliendo una matrice QQ definita positiva, e V(x)=xPxV(x) = x^\top P x funziona. Per un sistema non lineare non esiste una procedura universale che produca VV. Il backstepping aiuta quando il sistema ha la struttura concatenata giusta; fuori da quei casi, la candidata VV va indovinata. Una candidata scelta male può rendere impossibile il terzo passo della ricetta — trovare uu che faccia scendere VV — anche quando un’altra candidata lo renderebbe facile. Il teorema di Artstein garantisce che, se il sistema è stabilizzabile, una CLF esiste; non te la consegna.

Il metodo non dà mai una risposta negativa. Discende dal punto precedente, e va isolato perché è la trappola logica più frequente. Trovare una funzione di Lyapunov dimostra la stabilità. Non trovarla non dimostra l’instabilità: la funzione potrebbe esistere e averti solo eluso. È una condizione sufficiente, mai necessaria. Se cerchi una VV per un sistema e non la trovi, non hai imparato niente sul sistema — hai imparato qualcosa sulla tua capacità di indovinare la funzione. L’errore è concludere “non trovo VV, quindi il sistema è instabile”: è un passaggio invalido.

La garanzia è locale, e “stabile” senza un raggio non vuole dire molto. La stabilità asintotica che il progetto via Lyapunov ti dà vale, di norma, su una regione di attrazione, non su tutto lo spazio degli stati. Un disturbo abbastanza grande da portare il sistema fuori da quella regione non viene recuperato: il controllore “stabile” semplicemente non riprende quel sistema. La stabilità globale richiede l’ipotesi forte — VV radialmente illimitata e V˙<0\dot{V} < 0 ovunque — che spesso non si riesce a soddisfare. Quando un controllore è dichiarato “stabile”, la domanda da fare sempre è: stabile rispetto a perturbazioni quanto grandi? Senza un raggio, l’aggettivo è incompleto.

La garanzia vale quanto il modello del plant. Tutto il progetto via Lyapunov si fa su un modello matematico della dinamica, x˙=f(x)+g(x)u\dot{x} = f(x) + g(x)\,u. Se il modello è impreciso — e nella pratica lo è sempre, almeno un po’ — il certificato dimostra la stabilità del modello, non necessariamente del sistema reale. Un attrito non modellato, un ritardo trascurato, una non linearità approssimata possono spostare il vero comportamento abbastanza da invalidare la V˙<0\dot{V} < 0 dimostrata sulla carta. Il progetto via Lyapunov puro non tiene conto dell’incertezza del modello: lo fa il controllo robusto, che riprende le funzioni di Lyapunov e chiede che V˙\dot{V} resti negativa per ogni dinamica dentro un insieme di modelli plausibili — il tema di controllo-robusto (in preparazione). Un certificato di stabilità è un’affermazione condizionata: “stabile se il modello è corretto”.

Il controllo non sempre entra in modo affine, e i vincoli complicano tutto. La teoria pulita della CLF e la formula di Sontag presuppongono un sistema control-affine: il controllo uu entra linearmente. Molti sistemi reali non sono così, e per loro la condizione CLF e la sintesi del controllore diventano più delicate. Inoltre, nella pratica il controllo è quasi sempre limitato — un attuatore satura, un motore ha una coppia massima. Quando l’uu che farebbe scendere VV supera il limite fisico dell’attuatore, la garanzia salta proprio dove servirebbe di più: lontano dall’equilibrio, dove lo sforzo richiesto è grande. La regione di attrazione effettiva si restringe a quella in cui il controllo necessario sta dentro i limiti, e stimarla correttamente richiede di mettere la saturazione dentro il progetto fin dall’inizio, non di scoprirla dopo.

Lo scudo di sicurezza paga in prestazione. Il filtro basato su CLF dell’Esempio 5 garantisce che la policy appresa non destabilizzi il sistema, ma il prezzo è un’esplorazione conservativa: la policy vincolata può non scoprire strategie ad alta ricompensa che vivono vicino al bordo della regione sicura. Sicurezza e ottimalità sono in tensione. E c’è un secondo rischio: lo scudo è valido solo quanto la VV su cui è costruito. Una VV che certifica una regione di sicurezza sbagliata — perché il modello del plant usato per costruirla era impreciso — dà uno scudo che sembra garantire e non garantisce. La garanzia è condizionata alla correttezza del modello.

Le Neural Lyapunov functions sono ricerca, non un prodotto. Vanno presentate per quello che sono. Il loop learner-verifier è promettente e attivamente studiato, ma la verifica formale per campionamento dello spazio degli stati scala male con la dimensione del sistema, e i sistemi ibridi — con modi discreti che si alternano — restano difficili: anche se ogni modo è stabile, il sistema complessivo può non esserlo. Trattare un certificato neurale come una garanzia equivalente a una funzione di Lyapunov dimostrata a mano, allo stato, è prematuro. Il certificato vale quanto la copertura del verificatore.

L’analogia con la loss è la confusione più seducente. Ripreso dall’Esempio 6, perché è il fraintendimento che questo capitolo, vivendo in una wiki sull’AI, rischia di indurre più di ogni altro. “La loss è la funzione di Lyapunov del training” è vero come analogia — una quantità che scende e segnala convergenza — e falso come identità e come teorema. Il training non è un sistema di controllo: non c’è un ingresso scelto per stabilizzare. La discesa stocastica del gradiente fa salire la loss da un passo all’altro, mentre una funzione di Lyapunov non sale mai. La loss non è detta definita positiva attorno al minimo voluto. Usare la stessa parola — “energia che scende” — per i due casi è comodo, ma chi scrive e chi legge deve sapere, ogni volta, se sta maneggiando un teorema o una metafora. Scambiare l’analogia per il teorema è il modo più rapido di costruire un’argomentazione che sembra rigorosa e non lo è.

  • Equilibrio, stabilità, attrattori — la teoria di stabilità di Lyapunov come analisi: definizione di stabile e asintoticamente stabile, i due metodi, ritratto di fase, contrazioni, insiemi invarianti. Questo capitolo la presuppone e la rovescia in sintesi: da verificare la stabilità a progettarla.
  • Controllare un sistema: plant, controller, sensore, attuatore — fissa il vocabolario di plant, ingresso di controllo, anello chiuso su cui poggia tutto il progetto via Lyapunov.
  • PID senza formalismo pesante — il PID è il controllore pragmatico senza garanzie, tarato per prove ed errori; il progetto via Lyapunov dà la garanzia formale e la stima del bacino che il PID non offre.
  • Overshoot, delay, oscillazioni, divergenza — i modi tipici in cui un anello di feedback fallisce; il progetto via Lyapunov mira a escluderli per costruzione, imponendo V˙<0\dot{V} < 0.
  • Bellman e programmazione dinamica e Iterazione del valore e della policy — l’operatore di Bellman è una contrazione, e la sua convergenza si dimostra con lo schema “una quantità che decresce”, lo stesso schema della funzione di Lyapunov.
  • Policy gradient e REINFORCE e PPO, TRPO, vincoli di trust region — il safe reinforcement learning usa un certificato di Lyapunov come vincolo sull’aggiornamento della policy o come scudo sulle azioni.
  • SGD, momentum, Adam — la loss che scende durante il training: l’analogia con la funzione di Lyapunov, da maneggiare come analogia e non come identità.
  • Autovalori e autovettori a intuizione — il primo metodo di stabilità, via autovalori della Jacobiana; il metodo diretto di questo capitolo è l’alternativa che funziona dove la linearizzazione non basta.
  • Iterazione del valore e della policy — la convergenza dell’iterazione del valore è la stabilità di una dinamica a tempo discreto verso il suo punto fisso: lo stesso schema “una quantità che decresce” letto in ambito reinforcement learning.
  • Controllare un sistema — il capitolo introduttivo della Parte definisce plant, anello chiuso e setpoint, e inquadra il controllo classico rispetto al controllo moderno in cui vive il metodo di Lyapunov.
  • controllo-robusto, controllo-ottimo, model-predictive-control, controllo-vs-rl (in preparazione) — i capitoli successivi della Parte XI; il controllo robusto in particolare riprende le funzioni di Lyapunov per garantire la stabilità sotto incertezza e disturbi, il controllo ottimo collega l’equazione di Lyapunov al progetto di controllori lineari ottimi.
  • A. M. Lyapunov, The General Problem of the Stability of Motion (1892). Tradotto in inglese da A. T. Fuller, International Journal of Control, vol. 55 (1992, edizione del centenario). La fonte originale: la definizione di stabilità e il metodo diretto, dalla penna di chi li ha inventati.
  • E. D. Sontag, “A ‘universal’ construction of Artstein’s theorem on nonlinear stabilization”, Systems & Control Letters, vol. 13 (1989). Il paper che ricava la formula del controllore da una Control Lyapunov Function: il cuore del passaggio da analisi a sintesi.
  • H. K. Khalil, Nonlinear Systems (3a ed., Prentice Hall, 2002). Il manuale di riferimento del controllo non lineare: metodo diretto, CLF, backstepping, principio di LaSalle, stima della regione di attrazione, con dimostrazioni complete e una buona attenzione all’intuizione.
  • M. Krstić, I. Kanellakopoulos, P. Kokotović, Nonlinear and Adaptive Control Design (Wiley, 1995). Il testo che sistematizza il backstepping: come costruire funzione di Lyapunov e controllore insieme, ricorsivamente.
  • C. Dawson, S. Gao, C. Fan, “Safe Control With Learned Certificates: A Survey of Neural Lyapunov, Barrier, and Contraction Methods for Robotics and Control”, IEEE Transactions on Robotics, vol. 39 (2023). La rassegna di riferimento sul ponte verso l’AI: reti neurali che apprendono certificati di stabilità e sicurezza.