From 8c985a102247ef3c1e537923238ab70461e7ebf4 Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Sat, 10 Aug 2019 11:19:46 -0700 Subject: [PATCH 1/9] Initial commit of implementation of Laplace averaging based Koopman eigenfunction generation for prediction and control of inverted pendulum. Core functionality implemented but predicition still not working reliably. --- scripts/Koopman-ID/.DS_Store | Bin 0 -> 6148 bytes scripts/Koopman-ID/DMD/CompanionMatrix_DMD.m | 54 + scripts/Koopman-ID/DMD/Exact_DMD.m | 71 + scripts/Koopman-ID/DMD/Hankel_DMD.m | 65 + scripts/Koopman-ID/DMD/HarmonicAverage.m | 22 + scripts/Koopman-ID/DMD/SVDenhanced_DMD.m | 74 ++ scripts/Koopman-ID/Resources/.DS_Store | Bin 0 -> 6148 bytes .../interfaces/matlab/qpOASES.mexmaci64 | Bin 315512 -> 398620 bytes .../matlab/qpOASES_sequence.mexmaci64 | Bin 324192 -> 403220 bytes scripts/Koopman-ID/XY_DDMD_R4.m | 1171 +++++++++++------ scripts/Koopman-ID/construct_eigfuncs.m | 107 ++ scripts/Koopman-ID/koopman_eigen_id_laplace.m | 140 ++ scripts/Koopman-ID/main_comparison_pendulum.m | 37 +- scripts/Koopman-ID/normalize_data.m | 11 + scripts/Koopman-ID/obsvk.m | 6 + scripts/Koopman-ID/phifun_mat.m | 7 + scripts/Koopman-ID/rbf_grad.m | 53 + .../Koopman-ID/test_eigfunction_generation.m | 244 ++++ scripts/Koopman-ID/utils/collect_data.m | 8 +- .../utils/evaluate_model_performance.m | 27 +- scripts/Koopman-ID/utils/extendedDMD.m | 22 +- scripts/Koopman-ID/utils/koopman_eigen_id.m | 109 +- scripts/Koopman-ID/utils/learn_B_koop.m | 101 +- .../Koopman-ID/utils/sim_closed_loop_mpc.m | 23 +- scripts/Koopman-ID/utils/sim_prediction.m | 17 +- 25 files changed, 1854 insertions(+), 515 deletions(-) create mode 100644 scripts/Koopman-ID/.DS_Store create mode 100755 scripts/Koopman-ID/DMD/CompanionMatrix_DMD.m create mode 100755 scripts/Koopman-ID/DMD/Exact_DMD.m create mode 100755 scripts/Koopman-ID/DMD/Hankel_DMD.m create mode 100755 scripts/Koopman-ID/DMD/HarmonicAverage.m create mode 100755 scripts/Koopman-ID/DMD/SVDenhanced_DMD.m create mode 100644 scripts/Koopman-ID/Resources/.DS_Store mode change 100644 => 100755 scripts/Koopman-ID/Resources/qpOASES-3.1.0/interfaces/matlab/qpOASES.mexmaci64 mode change 100644 => 100755 scripts/Koopman-ID/Resources/qpOASES-3.1.0/interfaces/matlab/qpOASES_sequence.mexmaci64 create mode 100644 scripts/Koopman-ID/construct_eigfuncs.m create mode 100644 scripts/Koopman-ID/koopman_eigen_id_laplace.m create mode 100644 scripts/Koopman-ID/normalize_data.m create mode 100755 scripts/Koopman-ID/obsvk.m create mode 100644 scripts/Koopman-ID/phifun_mat.m create mode 100644 scripts/Koopman-ID/rbf_grad.m create mode 100644 scripts/Koopman-ID/test_eigfunction_generation.m diff --git a/scripts/Koopman-ID/.DS_Store b/scripts/Koopman-ID/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..da67d24bc6df9f8baf526f268c3f11900c0e9e51 GIT binary patch literal 6148 zcmeHK%}(1u5Z=uXT?Zj@Kos?~m)?Su03x{{nGg=WRdUrHC<-=?5=)LZiXE&r4f1=G zm*LC<@H(CSNt6&MryxKx((E@oJG1NkZ0&joA+$O2YlM^uAq-Sv&VuFgUABxgKp zfK<&9ducrILg6jNqT_WkAm3e)j7UNP5|a7%cjpblAWo{)dz#A^ifbPjE3wi>>D=jw z)JfcA6gS=Bne2Ualb&bnZ$gAK+x5N&owQxvIuTLg22p3Ik^{d3AwPcvkuTDw7)5@p z=5h1@V-~a8({AY6gS943@ zBUG|!a0)kI%xyC4)|^YxA54cANBg4HGM_NBwkuhBd3*dY!ha@W(EHyCSI#gBMbw2^ zr%ychC}<)B$N)01dIrql!`4^76s~{_AOmlV0eL=fP>Hs|OrttFpiw0NU;*4pz?QXy z%;5%YgPBGc0iik-P^VH;Vo;q9es1DygPBI1PN*q9s9Bks3WciGVScW{3AHt1iwqzG ziwxv-w=D1f)2HkI#U$(@1IWO;Vt^J}POAx9GI#6J=Hy+=K`%h1$hb`7ECmd86+^7N dig!SjfS*eP&^DN91P=)Q2q+q`K?Yuwfq$w+Y)$|G literal 0 HcmV?d00001 diff --git a/scripts/Koopman-ID/DMD/CompanionMatrix_DMD.m b/scripts/Koopman-ID/DMD/CompanionMatrix_DMD.m new file mode 100755 index 0000000..9de28e4 --- /dev/null +++ b/scripts/Koopman-ID/DMD/CompanionMatrix_DMD.m @@ -0,0 +1,54 @@ +function [ KModes,KEv,Norms ] = CompanionMatrix_DMD( Data ) +% Dynamic Mode Decomposition as presented by +% "Spectral analysis of nonlinear flows" by Rowley et al., Journal of FLuid +% Mechanics, 2009 + + +% inputs : +% Data - the data matrix: each column is a a set of measurements done at +% each instant - the sampling frequency is assumed to be constant + +% outputs: +% 1 - KModes- Koopman or Dynamic Modes: structures that scale exponentially +% with time - the exponent is given by Koopman or Dynamic Eigenvalues and +% could be imaginary as well + +% 2- KEv - Koopman or Dynamic Eigenvalues: the exponents and frequencies +% that make up the time-varaiation of data in time + +% 3- Norms - Euclidean (vector) norm of each mode, used to sort the data + + + + +X=Data(:,1:end-1); + +c = pinv(X)*Data(:,end); + +m = size(Data,2)-1; +C = spdiags(ones(m,1),-1,m,m); +C(:,end)=c; %% companion matrix + +[P,D]=eig(full(C)); %% Ritz evalue and evectors + +KEunsrtd = diag(D); %% Koopman Evalues +KMunsrtd = X*P; %% Koopman Modes + +Cnorm = sqrt(sum(abs(KMunsrtd).^2,1)); %% Euclidean norm of Koopman Modes +[Norms, ind]=sort(Cnorm,'descend'); %% sorting based on the norm + +KEv= KEunsrtd(ind); %% Koopman Eigenvalues + +KModes = KMunsrtd(:,ind); %% Koopman Modes + + + +end + + +%=========================================================================% +% Hassan Arbabi - 08-17-2015 +% Mezic research group +% UC Santa Barbara +% arbabiha@gmail.com +%=========================================================================% \ No newline at end of file diff --git a/scripts/Koopman-ID/DMD/Exact_DMD.m b/scripts/Koopman-ID/DMD/Exact_DMD.m new file mode 100755 index 0000000..3c5c7c4 --- /dev/null +++ b/scripts/Koopman-ID/DMD/Exact_DMD.m @@ -0,0 +1,71 @@ +function [ ProjectedModes,DEv,ExactModes,Norm ] = Exact_DMD( X,Y,varargin ) +% Dynamic Mode Decomposition as presented by +% "On Dynamic Mode Decomposition: theory and applications" by Tu et al., +% arXiv, 2013 + + + +% inputs : +% Data Sets X and Y- should have the same size +% each column of X is a set of measurements done at an instant +% each column of Y is the image of the corresponding columns from X + +% or + +% ( X,Y,Tol ) - with Tol (optional) being the threshold for filtering thru SVD - the +% default value is 1e-10 + + + +% outputs: +% 1 - Projected Dynamic Modes +% 2 - Exact Dynamic Modes +% 3 - Dynamic Eigenvalues +% 4 - Norms - Euclidean (vector) norm of each mode, used to sort the data + +% setting SVD hard threshold +if isempty(varargin) + Tol=1e-10; +else + Tol=varargin{1}; +end + + +disp(['Tolerance used for filtering in DMD:',num2str(Tol)]) + +[U,S,V]=svd(X,'econ'); + +k = find(diag(S)>Tol,1,'last'); +disp(['DMD subspace dimension:',num2str(k)]) + +U = U(:,1:k); V=V(:,1:k); S=S(1:k,1:k); + +Atilde = ((U'*Y) *V )* diag((1./diag(S))); + + +[W,DEv]=eig(Atilde); +DEv = diag(DEv); + +ProjectedModes = U*W; + +ExactModes = bsxfun(@times,1./DEv.',((Y*V)*S^(-1))*W); + + + +if nargout>3 + b = pinv(ProjectedModes)*X(:,end); % terminal coordinates in the Koopman subspace + [Norm,Index]=sort(abs(b),'descend'); + DEv = DEv(Index); + ProjectedModes = ProjectedModes(:,Index); + disp('modes sorted based on energy contribution to the last snapshot') +end +NORM=Norm +end + + +%=========================================================================% +% Hassan Arbabi - 08-17-2015 +% Mezic research group +% UC Santa Barbara +% arbabiha@gmail.com +%=========================================================================% \ No newline at end of file diff --git a/scripts/Koopman-ID/DMD/Hankel_DMD.m b/scripts/Koopman-ID/DMD/Hankel_DMD.m new file mode 100755 index 0000000..710f54e --- /dev/null +++ b/scripts/Koopman-ID/DMD/Hankel_DMD.m @@ -0,0 +1,65 @@ +function [ HModes, HEvalues, Norms ] = Hankel_DMD( Data,n,m,varargin ) +%HANKEL-Dynamic Mode Decompsition as presented in +% "Ergodic theory, dynamic mode decomposition and computation of Koopman +% spectral properties" by H. Arbabi and I. Mezic, arXiv:1611.06664 + +% inputs : +% Data - the data matrix: each row is a time series data on an observable +% m,n: number of columns and rows, respectively, in the data Hankel +% matrices: size(Data,2)>m+n and preferably m>>n + +% or + +% ( Data,n,m,tol )- with Tol (optional) being the threshold for filtering thru SVD - the +% default value is 1e-10 + + + + +% outputs: +% 1 - HModes- Dynamic modes which approximate the Koopman eigenfunctions + +% 2- HEvalues - Koopman or Dynamic Eigenvalues: the exponents and frequencies +% that make up the time-varaiation of data in time + +% 3- Norms - The L2-norm of Koopman eigenfunction contribution to the +% observable + + +% setting the SVD hard threshold for DMD +if isempty(varargin) + Tol=1e-10; +else + Tol=varargin{1}; +end + +index1 = 1:n; +index2 = n:n+m-1; + +X = []; Y=[]; + +for ir = 1:size(Data,1) + + % Hankel blocks () + c = Data(ir,index1).'; r = Data(ir,index2); + H = hankel(c,r).'; + c = Data(ir,index1+1).'; r = Data(ir,index2+1); + UH= hankel(c,r).'; + + % scaling of Hankel blocks + if ir>1 + alpha = norm(H(:,1))/norm(X(:,1)); + H = alpha*H; + UH= alpha* UH; + end + + % the data matrices fed to exact DMD + X=[X,H]; Y=[Y,UH]; + +end + % the DMD + [HModes,HEvalues,~,Norms ] = DMD.Exact_DMD( X,Y,Tol ); + + +end + diff --git a/scripts/Koopman-ID/DMD/HarmonicAverage.m b/scripts/Koopman-ID/DMD/HarmonicAverage.m new file mode 100755 index 0000000..5c059d9 --- /dev/null +++ b/scripts/Koopman-ID/DMD/HarmonicAverage.m @@ -0,0 +1,22 @@ +function [ Average ] = HarmonicAverage( Data,w,t,Filter) +% computes the harmonic average using the Filter + +HarmonicWeight = 2*exp(-1i*w'*t); + +% using the specified filter +if exist('Filter','var') + switch Filter + case 'Hamming' + HarmonicWeight=bsxfun(@times,HarmonicWeight,hamming(length(t))'); + case 'Hann' + HarmonicWeight=bsxfun(@times,HarmonicWeight,hann(length(t))'); + case 'exponential' % the exponential weighting defined by Das & Yorke 2015 + HarmonicWeight=bsxfun(@times,HarmonicWeight,ExpWeight(length(t))*length(t)); + otherwise + disp('filter not defined ... no filter used') + end +end + +Average = HarmonicWeight*Data'./length(t); + +end \ No newline at end of file diff --git a/scripts/Koopman-ID/DMD/SVDenhanced_DMD.m b/scripts/Koopman-ID/DMD/SVDenhanced_DMD.m new file mode 100755 index 0000000..13ac713 --- /dev/null +++ b/scripts/Koopman-ID/DMD/SVDenhanced_DMD.m @@ -0,0 +1,74 @@ +function [ DModes,DEv,Norm ] = SVDenhanced_DMD( Data,varargin ) +% Dynamic Mode Decomposition as presented by +% "Dynamic Mode Decomposition of numerical and experimental data" by Peter +% J. Schmid, Journal of Fluid Mechanics, 2010 + +% inputs : +% Data - the data matrix: each column is a a set of measurements done at +% each instant - the sampling frequency is assumed to be constant + +% or + +% ( Data,Tol ) - with Tol (optional) being the threshold for filtering thru SVD - the +% default value is 1e-10 + +% outputs: +% 1 - DModes- Koopman or Dynamic Modes: structures that scale exponentially +% with time - the exponent is given by Koopman or Dynamic Eigenvalues and +% could be imaginary as well + +% 2- DEv - Koopman or Dynamic Eigenvalues: the exponents and frequencies +% that make up the time-varaiation of data in time + +% 3- Norm - The norm here is set to the energy contribution of each mode to +% the last snapshot of data and then used to sort the modes + + + + +tic +if isempty(varargin) + Tol=1e-10; +else + Tol=varargin{1}; +end + +disp(['Tolerance used for filtering in DMD:',num2str(Tol)]) + +X=Data(:,1:end-1); +Y=Data(:,2:end); + + +[U,S,V]=svd(X,0); +r = find(diag(S)>Tol,1,'last'); +disp(['DMD subspace dimension:',num2str(r)]) + +U = U(:,1:r); +S = S(1:r,1:r); +V = V(:,1:r); + +Atilde = (U'*(Y*V)) / S; + +[w,lambda]=eig(Atilde); + +DModes = U*w; +DEv = diag(lambda); + +if nargout>2 + b = pinv(DModes)*Data(:,end); % terminal coordinates in the Koopman subspace + [Norm,Index]=sort(abs(b),'descend'); + DEv = DEv(Index); + DModes = DModes(:,Index); + disp('modes sorted based on energy contribution to the last snapshot') +end + +disp(['time to compute DMD:',num2str(toc)]) + +end + +%=========================================================================% +% Hassan Arbabi - 08-17-2015 +% Mezic research group +% UC Santa Barbara +% arbabiha@gmail.com +%=========================================================================% diff --git a/scripts/Koopman-ID/Resources/.DS_Store b/scripts/Koopman-ID/Resources/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..22ca61209c049a30e639b745054c4b2aca92acf9 GIT binary patch literal 6148 zcmeHK%}N6?5T4NrD_(jMk9hzueS=umC+G`ETTo$_EokXAuhuv7`!b`rxFC3tDl?FL zlgvzhzGah)i0E>^U5Ly@q(LDnl?h?@r0L9^XF#oEymXI?)n@2-6T_Tl7uS9vdwG>- z>11mCpRE1Rw(D+KBc{2$zAcB%@opU758H1%c29qdq0{_sv8rGo7zhS}fuA#gJDbv6 z8Acrp1Ovgq2Ln7G5(+Up7Q=dUpsFbVkk9BU(3wjxCOKxuVh9UFEfi>>>M4d=IQoYdA0-0+o=cf`MOP F;0=LYC_VrH literal 0 HcmV?d00001 diff --git a/scripts/Koopman-ID/Resources/qpOASES-3.1.0/interfaces/matlab/qpOASES.mexmaci64 b/scripts/Koopman-ID/Resources/qpOASES-3.1.0/interfaces/matlab/qpOASES.mexmaci64 old mode 100644 new mode 100755 index 5deca20f3000b0f3643378023a17660561afd112..15e50b5321214b5581332fc8730ca56ad9c1bc96 GIT binary patch literal 398620 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 +udQc|$;PPqPpRK|Ru5GWXp*VlL1;thu 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 HGx6U5b-|va literal 315512 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

-PHlV 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

2n>xgQ+|E zHCB-WNrBA@Pqj$pWPX6Zr1e+mOp4MVT1O_xA%91*l^`p*GgGkj=z{ZX7SyG7Bx9!J z8o`CVcg`G|3}F2gwa~J<`1o@6xHd;~QdXFbtJ;o6V)*Lx*QF+jwTL>NUSOL$#xUdg zukgErA-*iddVk!z1JB0Zzn~xKeMKQYPT9#+{B zRu>&)BGFs|9TH_sa3G%01`ug#MFU?G%px7jEtO!foap0W-D!sv14<6ZNdA^I{9^pxQ_3CbV886|YN zyz<6YWI)nNW%+iWrJiFowF(M@|yWSVHzF)8QWGYsXt zO+ty!Uru*0*PlGk20D`?2uM^k-2CoJ4&&F^1=lYzBdG=VGBkF?(ZhL?Tp1estE(7J zG5H-ffshER^-zS5MMq_QGE-a(t6s`Xh45?AG#jpAi0P59SnLRFi*L4d3syImS3pBo z`!YOBL*0Bdb#WxzfRUgQF6$abuvGI$_&dBK%ypRp=Kjp=@o&gnJxdhSLDhA4(m0e` zB~YAmnFESX+dyaXWC8+3iTT}?JdR&_{{n+>g)dunCcp51iw#g@n9js7$L^btn&U^v zwL%5hAm(2QP~NwY*y_}EmZ|G@TbJI0EmI72t-9%`y8Nn3$NUE6Q!dn**GitCx-7 zi}#80ryd9w=ShD*OyGnS&-!jlf!94+s9cTF?Ul(@YnzS^YGKZ z65RBbqO_3-!~QoBIp^V@_-R)+693;k4?prtfk)@zy9AkzQ(dH8LlYR5be|AZTS1YOQ~xNou< z^IRg2IuFOMu!H&UorhC3N1cZ&Y}3wpxWzVo5|KG)(vLfh{=@U|Zm3=I-?I(;v-9u` zp zM|KsOVB}V*9J$q*$V6w9IdZGH5Op{N`sKw?xN%@XgMkUS=k6K0?f)I=i(<`mX^dS6Y ziF+o<-@rBOh8(KlN#&SkfFMi{0IeV_^rdC@1DQz86N}W_h4kX^B-7i6i7;s^lpz&{ z=sO~;kg~d?-y(+W8*KK;%AQ@esVkI-=t>W`c---f&Q`HkxE?I6Gvb8{W_&reDpGTv zt?DdW)q}RGlZdR^6njO6t4_Y0o$G8)Qt2Uej)fmHDq#O=kavc$q$3<_e%lg*R5#4! zvH~-vbr^=Cqn(l_;PKAZ{xp#$eT6cm7La&Mc`J8ZxVT3+{x$CN7w5>;esAPzq0ye$ zns~w2sm(oS5%84df#^m7Hc_w)RTH+AAc;Bv?$b!FzRVzLY3eERAifNLUM{FH=md8R z{7<)i)hU(=zHKWwo=BU)=$>nb51>qVb%{s39kvNv%+sWU;%5mnY zjSubo&p~-Jz9C%z_=KUKw)OswNFcoCniOIp=E)T1m|&Hw5*PmX5>|Gwnn7TI-b^8R zbP&omaE)!i8z1^LH87M0LQepZ)CPKB-=)a{L(BICV?*9-1v!nJuSRx_k{CY8VRm(n zHc>|h-Ri@JRB!T&WZ>Bgycq)&kV>^8DgIK?�R>`48rCp3w~ze}VX+P6GQCs_RMmOl|NF4TEp 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 VabZuJENdst6lL9NR^Czhe*sHh@|yqv literal 324192 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

4-m&97aFKY^G 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 b-}e)*HL^03T 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


NVTJ(5W3`e1JM5QySwP!{A72%pXzu`(Ty4H_C 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 JyJbqD{|^wB@v;B_ diff --git a/scripts/Koopman-ID/XY_DDMD_R4.m b/scripts/Koopman-ID/XY_DDMD_R4.m index 986c3a2..b397ca8 100644 --- a/scripts/Koopman-ID/XY_DDMD_R4.m +++ b/scripts/Koopman-ID/XY_DDMD_R4.m @@ -1,391 +1,780 @@ -function [ Z, Lambda, rez, RQ_ref, RSI, Z_ref, rez_ref, U, AxU_k ] = ... - XY_DDMD_R4( X, Y, to_scale, to_center, k_mode, tol, nobal, ... - n_ref, ref_select, target, overwrite, file_save ) -% -% Refined Rayleigh-Ritz procedure for Data Driven Dynamic Mode Decomposition -% with data driven Residual bounds(DD-DMD-RRRR). -% This is a sample code that provides algorthmic details of the method -% described in -% [1] Z. Drmac, I. Mezic, R. Mohr: Data driven modal decompositions: analysis -% and enhancements, SIAM Journal on Scientific Computing. -% (arXiv preprint, https://arxiv.org/abs/1708.02685v1) -% The code is prepared as a suplement to [1], only to facilitate easier -% understanding of algorithmic details and experimenting. -% Released under the 3-Clause BSD License, see below. -% =====......................................................................... -% Input -% ===== -% -% X (real/complex 2D-array) :: Data matrix. Assumed with more rows than columns. -% -% Y (real/complex 2D-array) :: Data matrix, Y = A*X for some otherwise -% inaccessible matrix A. Both X and Y should -% be tall matrices -% Separate code (another function, more memory -% efficient) is used if Y is just shifted X -% -% to_scale (string) :: Specifies whether snapshot normalization is -% needed. Equilibrating the snapshots in ell_2 -% is a good idea in this setting. It does not -% apply if a forgetting factor is incorporated. -% --> If to_scale == 'Scale' -% then X = X*D, Y = Y*D where D is diagonal -% matrix such that the new X has unit columns. -% -% to_center (string) :: Optional data centering. For experiments only! -% --> If to_center == 'Center' -% then X = X-(1/m)*X*ones(m,1)*ones(1,m) and -% Y = Y-(1/m)*Y*ones(m,1)*ones(1,m). Note that -% after centering, again, Y = A*X. -% --> Set to_center = 'Ignore', except for R&D -% experimenting. -% -% k_mode (integer) :: Truncation mode for setting numerical rank k of -% X, based on the singular values sigma(i). -% --> If k_mode == -1, k is selected as -% k = max( i : sigma(i) >= sigma(1)*tol. ) -% --> If k_mode == -2, k is selected as -% k = max( i>1 : sigma(i) > sigma(i-1)*tol -% --> If k > 0 and k <= min(m,n) -% the value of k_mode is then understood -% as the caller's request to use k=k_mode -% dominant left singular vectors of X. -% -% tol (real, >0 ) :: Tolerance threshold for truncating the -% singular values in defining numerical -% rank of scaled data. (Only for the values -% k_mode = -1, k_mode = -2.) -% [!] the recommended value is tol=n*eps, -% where eps is the round-off unit. -% -% nobal (string) :: Specifies whether to switch of the balancing -% in the function eig() that is used to -% compute the eigenvalues and eigenvectors -% of the Rayleigh quotient. -% --> If nobal == 'NoBalance', the balancing is -% not used. -% --> Set nobal = 'Ignore' if not sure what is -% this about. -% -% n_ref (integer) :: Specifies how many of the Ritz pairs will be -% refined. If n_ref exceds k, then n_ref is -% set to k (=the total number of Ritz pairs). -% [!!] In case of large dimensions, refining -% too many Ritz pairs is time consuming. -% -% ref_select (integer) :: Specifies how to select n_ref Ritz pairs -% that will be refined. -% --> If ref_select == 1, -% refine n_ref pairs with smallest residuals -% --> If ref_select == 2, -% refine n_ref pairs closest to a given target -% (see the input parameter target) -% --> If ref_select == 3, -% refine n_ref pairs closest to the imaginary axis -% --> If ref_select == 4, -% refine n_ref pairs closest to the unit -% circle -% --> If ref_select == 5, -% refine n_ref pairs closest to the real axis -% -% target (real/complex) :: Specifies a point of interest when selecting -% which Ritz pairs to refine (see ref_select) -% Only the Ritz values closest to target will -% be refined (and their Ritz vectors). -% -% overwrite (string) :: Specifes whether the refined Ritz vectors will -% overwrite the original ones, or returned in a -% separate array -% --> If overwrite == 'OverWrite' then the selected -% and improved Ritz vectors overwite the -% original ones. Otherwise, they are returned -% in a separate array. -% -% file_save (string) :: Specifies whether the selected variables -% shold be saved in a file. -% --> If file_save == 'NoSave', then no data is saved. -% --> Otherwise, selected variables are saved in -% the file file_save (given on input). -% ======........................................................................ -% Output -% ======........................................................................ -% Z (real/complex 2D-array) :: Ritz vectors, normalized so that -% ||Z(:,i)||_2 = 1. If the refinement is -% requested with overwrite option, then some -% of the columns of Z are refined Ritz -% vectors. Their indices are then listed in -% the integer array RSI. -% -% Lambda (real/complex 1D-array) :: Ritz values -% -% rez (real 1D-array) :: 2-norms of the reziduals -% rez(i) = ||A*Z(:,i)-Lambda(:,i)*Z(:,i)||_2 -% -% --> The following four arrays are void if the refiement is not requested. -% When calling this function, use tildas if they are not needed. -% -% RQ_ref (real/complex 1D-array) :: Rayleigh quotients with refined Ritz -% vectors. -% -% RSI (integer array) :: If n_ref > 0, RSI contains the indices -% of those Ritz pairs that have been refined. -% -% Z_ref (real/complex 2D-array) :: Refined Ritz vectors, in the case when -% they do not overwrite the orginal ones. -% -% rez_ref (real 1D-array) :: The residuals of the refined Ritz pairs. -% -% --> The following two array arguments are returned for post-procesing such as -% e.g. refinement. Use tildas if they are not needed. -% -% U (real/complex 2-D array) :: The left singular vectors of the matrix X. -% -% AxU_k (real/complex 2-D array) :: The underlying operator A applied to the -% k leading left singular vectors of X. -%............................................................................... -%............................................................................... -% AIMdyn Inc. -% Coded by Zlatko Drmac, Department of Mathematics, University of Zagreb. -% drmac@math.hr -% Version 1.0 , January 3, 2017. -% Version 1.1 , November 11, 2017. -%............................................................................... -%............................................................................... -% -% The data matrix is n-by-m and it is assumed that the number of its rows -% is much larger than the number of its columns. -% -[ n, m ] = size( X ) ; -if m > n - warning('XY_DMD_R4 :(o -> the number of snapshots exceeds space dimension'); -end -% Optionally, the data can be centered. This is a delicate issue. Only for R&D. -if ( strcmp(to_center,'Center') ) - X = X - ((1/m)*(X*ones(m,1))) * ones(1,m) ; - Y = Y - ((1/m)*(Y*ones(m,1))) * ones(1,m) ; -end -% The intermediate and the final results can be saved for post festum analysis. -save_to_file = ~strcmp(file_save,'NoSave') ; -% -if ( strcmp(to_scale,'Scale') ) - % Column norms of the X-data matrix - D = ones(m,1) ; - for i = 1 : m - D(i) = norm(X(:,i)) ; - end - % Remove zero columns (unlikely event, but ..) - JX = find( D > 0 ) ; - if ( length(JX) < m ) - X = X(:,JX) ; D = D(JX) ; Y = Y(:,JX) ; - m = size(X,2) ; - end - % - % The data samples are scaled to the unit ell_2 sphere and then the SVD is - % computed. The numerical rank is determined for the scaled data (uness the - % caller has hardcoded the number of left singular vectors). - % One has to be careful here, e.g. if SNR is small. Aditional scaling may - % be necessary with carefully chosen weights. If weighting is an issue, - % use the weighted version of DMD, see [1]. - % - [ U, Sigma, V ] = svd( X*diag(1./D), 'econ' ) ; S = diag(Sigma) ; -else - [ U, Sigma, V ] = svd( X, 'econ' ) ; S = diag(Sigma) ; -end -% -% Determine the numerical rank k of X, based on the k_mode and tol -if ( k_mode == -1 ) - % classics - if ( tol < eps ) - warning('XY_DMD_R4 :( -> parameter is too small') - end - k = find( S/S(1) > tol, 1, 'last' ) ; -elseif ( k_mode == -2 ) - % more conservative, useful for R&D purposes - if ( tol <= eps ) - warning('XY_DMD_R4 :( -> parameter is too small') - end - %k = find( S(2:m)./S(1:m-1) < tol, 1, 'first' ) ;must be changed, for now use - k = find( S(2:m)./S(1:m-1) > tol, 1, 'last' ) ; -elseif ( (k_mode > 0) && (k_mode <= min(m,n)) ) - % the caller inputs k as the required number of the left singular - % vectors of X - k = k_mode ; -else - error('XY_DMD_R4 :( -> parameter had an illegal value') -end -% -% The image of U(:,1:k) under the action of A -if ( strcmp(to_scale,'Scale') ) - AxU_k = Y*(diag(1./D)*( (V(:,1:k).*(ones(m,1)*(1./S(1:k))')))) ; -else - AxU_k = Y*(((V(:,1:k).*(ones(m,1)*(1./S(1:k))')))) ; -end -% -% -if ( n_ref > 0 ) - % refinement of Ritz pairs requested - % QR factorization of the matrix [ U(:,1:k), A*U(:,1:k)] - % - [ ~, R ] = qr( [ U(:,1:k), AxU_k ], 0 ) ; - % - % The Rayleigh quotient Sk = U_k' * A * U_k, expressed without using A - % Sk = (((U(:,1:k)' * Y)*diag(1./D))*V(:,1:k) ).*(ones(k,1)*(1./S(1:k))') ; - % - Sk = R(1:k,k+1:2*k) ; % Recall that Sk = U(:,1:k)'*A*U(:,1:k) ; - % - % Caveat: Here we assume that the QR is computed so that even for complex - % matrices the diagonal of R is real, as is the Matlab's function qr(). - % Otherwise, use linear algebra to determine proper scaling (easy). - for i = 1 : k - if ( R(i,i) < 0 ) - Sk(i,:) = -Sk(i,:) ; - end - end - if ( n_ref > k ) - warning('XY_DMD_R4 :( -> exceeds the total number of pairs.') - n_ref = k ; - end -else - % .. no refinement - % The Rayleigh quotient Sk = U_k' * A * U_k, expressed without using A - % Sk=(((U(:,1:k)' * Y)*diag(1./D))*V(:,1:k)).*(ones(k,1)*(1./S(1:k))') - Sk = U(:,1:k)'*AxU_k ; -end -% -%............................................................................... -% -% Ritz values -% -if ( strcmp(nobal,'NoBalance')) - [W, Lambda] = eig( Sk, 'vector', 'nobalance' ) ; -else - [W, Lambda] = eig( Sk, 'vector' ) ; -end -% -% -Z = U(:,1:k) * W ; % Ritz vectors, normalized in l_2 norm. -AxZ = AxU_k * W ; -% Next, for each Ritz pair compute its residual. -rez = zeros(k,1) ; -for i = 1 : k - rez(i) = norm( AxZ(:,i) - Lambda(i)*Z(:,i) ) ; -end -% -if save_to_file - save( file_save, 'U','Sigma','V','k','AxU_k','Sk','Z','Lambda','rez' ) ; -end -%............................................................................... -% -if ( n_ref > 0 ) - % refinement requested ; select the specified pairs - switch ref_select - case 1, - % nref pairs with smallest residuals - [~, idummy] = sort(rez,'ascend') ; - RSI = idummy(1:n_ref) ; - case 2, - % nref pairs closest to target (provided on input) - [~,idummy] = sort(abs(Lambda-target) ,'ascend') ; - RSI = idummy(1:n_ref) ; - case 3, - % nref pairs closest to the imaginary axis - [~,idummy] = sort(abs(real(Lambda)) ,'ascend') ; - RSI = idummy(1:n_ref) ; - case 4, - % nref pairs closest to the unit circle - [~,idummy] = sort(abs(abs(Lambda)-1) ,'ascend') ; - RSI = idummy(1:n_ref) ; - case 5, - % nref pairs closest to the real axis - [~,idummy] = sort(abs(imag(Lambda)) ,'ascend') ; - RSI = idummy(1:n_ref) ; - % more cases: define property and write a selection procedure - % that extracts the corresponding indicies - otherwise - error('XY_DMD_R4 :( -> parameter had an illegal value') - end -%... -% -VR = zeros(k,n_ref) ; RQ_ref = zeros(n_ref,1) ; rez_ref = zeros(n_ref,1) ; -% -% refinement of the selected pairs -for ii = 1 : n_ref - i = RSI(ii) ; - RL = [ R(1:k,k+1:2*k) - Lambda(i)*R(1:k,1:k) ; ... - R(k+1:2*k,k+1:2*k) ] ; - [~,~,VL] = svd( RL, 'econ') ; -% The singular vector of the smallest singular value is the representation -% of the refined eigenvector in the basis of U(:,1:k). - VR(:,ii) = VL(:,k) ; -% - rez_ref(ii) = norm(RL*VL(:,k)) ; % = k-th (smallest) singular value of RL -% More direct way is to use rez_ref(ii) = SL(k,k) with -% [~,SL,VL] = svd( RL, 'econ') instead of [~,~,VL] = svd( RL, 'econ') above; -% This formula is intended for the case of using less accurate SVD method, -% when the smallest singular value may be computed inaccurately, but the -% corresponding singular vector is computed reasonably accurately. In an -% optimal implemenation (not considered here) a specially tailored method -% would comput just VL(:,k), without computig the whole SVD of RL. -% -% Use the refined Ritz vectors to compute Rayleigh quotients as better -% eigenvalue approximations, with smaller residuals than with Lambda(1:k). -% In most cases, the improvement is mild, but it is an improvement. - RQ_ref(ii) = VL(:,k)' * Sk * VL(:,k) ; -end -% -% The matrix of the refined Ritz vectors -if ( strcmp(overwrite,'OverWrite') ) - Z(:,RSI) = U(:,1:k)*VR ; Z_ref = [] ; - Lambda(RSI) = RQ_ref ; - rez(RSI) = rez_ref ; -else - Z_ref = U(:,1:k)*VR ; -end -% -else - RSI = [] ; RQ_ref = [] ; rez_ref = [] ; Z_ref = [] ; -end -U = U(:,1:k) ; -end -% -%=============================================================================== -% Copyright (c) 2016-2017 AIMdyn Inc. -% All right reserved. -% -% 3-Clause BSD License -% -% Additional copyrights may follow. -% -% -% Redistribution and use in source and binary forms, with or without -% modification, are permitted provided that the following conditions are met: -% -% 1. Redistributions of source code must retain the above copyright notice, -% this list of conditions and the following disclaimer. -% 2. Redistributions in binary form must reproduce the above copyright notice, -% this list of conditions and the following disclaimer in the documentation -% and/or other materials provided with the distribution. -% 3. Neither the name of the copyright holder nor the names of its contributors -% may be used to endorse or promote products derived from this software -% without specific prior written permission. -% -% The copyright holder provides no reassurances that the source code -% provided does not infringe any patent, copyright, or any other -% intellectual property rights of third parties. The copyright holder -% disclaims any liability to any recipient for claims brought against -% recipient by any third party for infringement of that parties -% intellectual property rights. -% -% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND -% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -% DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -% FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -% DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -% SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -% OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -% OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -% -%=============================================================================== - +function [ Z, Lambda, rez, RQ_ref, RSI, Z_ref, rez_ref, U, AxU_k ] = ... + XY_DDMD_R4( X, Y, to_scale, to_center, k_mode, tol, nobal, ... + n_ref, ref_select, target, overwrite, file_save) + +% + +% Refined Rayleigh-Ritz procedure for Data Driven Dynamic Mode Decomposition + +% with data driven Residual bounds(DD-DMD-RRRR). + +% This is a sample code that provides algorthmic details of the method + +% described in + +% [1] Z. Drmac, I. Mezic, R. Mohr: Data driven modal decompositions: analysis + +% and enhancements, SIAM Journal on Scientific Computing. + +% (arXiv preprint, https://arxiv.org/abs/1708.02685v1) + +% The code is prepared as a suplement to [1], only to facilitate easier + +% understanding of algorithmic details and experimenting. + +% Released under the 3-Clause BSD License, see below. + +% =====......................................................................... + +% Input + +% ===== + +% + +% X (real/complex 2D-array) :: Data matrix. Assumed with more rows than columns. + +% + +% Y (real/complex 2D-array) :: Data matrix, Y = A*X for some otherwise + +% inaccessible matrix A. Both X and Y should + +% be tall matrices + +% Separate code (another function, more memory + +% efficient) is used if Y is just shifted X + +% + +% to_scale (string) :: Specifies whether snapshot normalization is + +% needed. Equilibrating the snapshots in ell_2 + +% is a good idea in this setting. It does not + +% apply if a forgetting factor is incorporated. + +% --> If to_scale == 'Scale' + +% then X = X*D, Y = Y*D where D is diagonal + +% matrix such that the new X has unit columns. + +% + +% to_center (string) :: Optional data centering. For experiments only! + +% --> If to_center == 'Center' + +% then X = X-(1/m)*X*ones(m,1)*ones(1,m) and + +% Y = Y-(1/m)*Y*ones(m,1)*ones(1,m). Note that + +% after centering, again, Y = A*X. + +% --> Set to_center = 'Ignore', except for R&D + +% experimenting. + +% + +% k_mode (integer) :: Truncation mode for setting numerical rank k of + +% X, based on the singular values sigma(i). + +% --> If k_mode == -1, k is selected as + +% k = max( i : sigma(i) >= sigma(1)*tol. ) + +% --> If k_mode == -2, k is selected as + +% k = max( i>1 : sigma(i) > sigma(i-1)*tol + +% --> If k > 0 and k <= min(m,n) + +% the value of k_mode is then understood + +% as the caller's request to use k=k_mode + +% dominant left singular vectors of X. + +% + +% tol (real, >0 ) :: Tolerance threshold for truncating the + +% singular values in defining numerical + +% rank of scaled data. (Only for the values + +% k_mode = -1, k_mode = -2.) + +% [!] the recommended value is tol=n*eps, + +% where eps is the round-off unit. + +% + +% nobal (string) :: Specifies whether to switch of the balancing + +% in the function eig() that is used to + +% compute the eigenvalues and eigenvectors + +% of the Rayleigh quotient. + +% --> If nobal == 'NoBalance', the balancing is + +% not used. + +% --> Set nobal = 'Ignore' if not sure what is + +% this about. + +% + +% n_ref (integer) :: Specifies how many of the Ritz pairs will be + +% refined. If n_ref exceds k, then n_ref is + +% set to k (=the total number of Ritz pairs). + +% [!!] In case of large dimensions, refining + +% too many Ritz pairs is time consuming. + +% + +% ref_select (integer) :: Specifies how to select n_ref Ritz pairs + +% that will be refined. + +% --> If ref_select == 1, + +% refine n_ref pairs with smallest residuals + +% --> If ref_select == 2, + +% refine n_ref pairs closest to a given target + +% (see the input parameter target) + +% --> If ref_select == 3, + +% refine n_ref pairs closest to the imaginary axis + +% --> If ref_select == 4, + +% refine n_ref pairs closest to the unit + +% circle + +% --> If ref_select == 5, + +% refine n_ref pairs closest to the real axis + +% + +% target (real/complex) :: Specifies a point of interest when selecting + +% which Ritz pairs to refine (see ref_select) + +% Only the Ritz values closest to target will + +% be refined (and their Ritz vectors). + +% + +% overwrite (string) :: Specifes whether the refined Ritz vectors will + +% overwrite the original ones, or returned in a + +% separate array + +% --> If overwrite == 'OverWrite' then the selected + +% and improved Ritz vectors overwite the + +% original ones. Otherwise, they are returned + +% in a separate array. + +% + +% file_save (string) :: Specifies whether the selected variables + +% shold be saved in a file. + +% --> If file_save == 'NoSave', then no data is saved. + +% --> Otherwise, selected variables are saved in + +% the file file_save (given on input). + +% ======........................................................................ + +% Output + +% ======........................................................................ + +% Z (real/complex 2D-array) :: Ritz vectors, normalized so that + +% ||Z(:,i)||_2 = 1. If the refinement is + +% requested with overwrite option, then some + +% of the columns of Z are refined Ritz + +% vectors. Their indices are then listed in + +% the integer array RSI. + +% + +% Lambda (real/complex 1D-array) :: Ritz values + +% + +% rez (real 1D-array) :: 2-norms of the reziduals + +% rez(i) = ||A*Z(:,i)-Lambda(:,i)*Z(:,i)||_2 + +% + +% --> The following four arrays are void if the refiement is not requested. + +% When calling this function, use tildas if they are not needed. + +% + +% RQ_ref (real/complex 1D-array) :: Rayleigh quotients with refined Ritz + +% vectors. + +% + +% RSI (integer array) :: If n_ref > 0, RSI contains the indices + +% of those Ritz pairs that have been refined. + +% + +% Z_ref (real/complex 2D-array) :: Refined Ritz vectors, in the case when + +% they do not overwrite the orginal ones. + +% + +% rez_ref (real 1D-array) :: The residuals of the refined Ritz pairs. + +% + +% --> The following two array arguments are returned for post-procesing such as + +% e.g. refinement. Use tildas if they are not needed. + +% + +% U (real/complex 2-D array) :: The left singular vectors of the matrix X. + +% + +% AxU_k (real/complex 2-D array) :: The underlying operator A applied to the + +% k leading left singular vectors of X. + +%............................................................................... + +%............................................................................... + +% AIMdyn Inc. + +% Coded by Zlatko Drmac, Department of Mathematics, University of Zagreb. + +% drmac@math.hr + +% Version 1.0 , January 3, 2017. + +% Version 1.1 , November 11, 2017. + +%............................................................................... + +%............................................................................... + +% + +% The data matrix is n-by-m and it is assumed that the number of its rows + +% is much larger than the number of its columns. + +% + +[ n, m ] = size( X ) ; + +if m > n + + warning('XY_DMD_R4 :(o -> the number of snapshots exceeds space dimension'); + +end + +% Optionally, the data can be centered. This is a delicate issue. Only for R&D. + +if ( strcmp(to_center,'Center') ) + + X = X - ((1/m)*(X*ones(m,1))) * ones(1,m) ; + + Y = Y - ((1/m)*(Y*ones(m,1))) * ones(1,m) ; + +end + +% The intermediate and the final results can be saved for post festum analysis. + +save_to_file = ~strcmp(file_save,'NoSave') ; + +% + +if ( strcmp(to_scale,'Scale') ) + + % Column norms of the X-data matrix + + D = ones(m,1) ; + + for i = 1 : m + + D(i) = norm(X(:,i)) ; + + end + + % Remove zero columns (unlikely event, but ..) + + JX = find( D > 0 ) ; + + if ( length(JX) < m ) + + X = X(:,JX) ; D = D(JX) ; Y = Y(:,JX) ; + + m = size(X,2) ; + + end + + % + + % The data samples are scaled to the unit ell_2 sphere and then the SVD is + + % computed. The numerical rank is determined for the scaled data (uness the + + % caller has hardcoded the number of left singular vectors). + + % One has to be careful here, e.g. if SNR is small. Aditional scaling may + + % be necessary with carefully chosen weights. If weighting is an issue, + + % use the weighted version of DMD, see [1]. + + % + + [ U, Sigma, V ] = svd( X*diag(1./D), 'econ' ) ; S = diag(Sigma) ; + +else + + [ U, Sigma, V ] = svd( X, 'econ' ) ; S = diag(Sigma) ; + +end + +% + +% Determine the numerical rank k of X, based on the k_mode and tol + +if ( k_mode == -1 ) + + % classics + + if ( tol < eps ) + + warning('XY_DMD_R4 :( -> parameter is too small') + + end + + k = find( S/S(1) > tol, 1, 'last' ) ; + +elseif ( k_mode == -2 ) + + % more conservative, useful for R&D purposes + + if ( tol <= eps ) + + warning('XY_DMD_R4 :( -> parameter is too small') + + end + + %k = find( S(2:m)./S(1:m-1) < tol, 1, 'first' ) ;must be changed, for now use + + k = find( S(2:m)./S(1:m-1) > tol, 1, 'last' ) ; + +elseif ( (k_mode > 0) && (k_mode <= min(m,n)) ) + + % the caller inputs k as the required number of the left singular + + % vectors of X + + k = k_mode ; + +else + + error('XY_DMD_R4 :( -> parameter had an illegal value') + +end + +% + +% The image of U(:,1:k) under the action of A + +if ( strcmp(to_scale,'Scale') ) + + AxU_k = Y*(diag(1./D)*( (V(:,1:k).*(ones(m,1)*(1./S(1:k))')))) ; + +else + + AxU_k = Y*(((V(:,1:k).*(ones(m,1)*(1./S(1:k))')))) ; + +end + +% + +% + +if ( n_ref > 0 ) + + % refinement of Ritz pairs requested + + % QR factorization of the matrix [ U(:,1:k), A*U(:,1:k)] + + % + + [ ~, R ] = qr( [ U(:,1:k), AxU_k ], 0 ) ; + + % + + % The Rayleigh quotient Sk = U_k' * A * U_k, expressed without using A + + % Sk = (((U(:,1:k)' * Y)*diag(1./D))*V(:,1:k) ).*(ones(k,1)*(1./S(1:k))') ; + + % + + Sk = R(1:k,k+1:2*k) ; % Recall that Sk = U(:,1:k)'*A*U(:,1:k) ; + + % + + % Caveat: Here we assume that the QR is computed so that even for complex + + % matrices the diagonal of R is real, as is the Matlab's function qr(). + + % Otherwise, use linear algebra to determine proper scaling (easy). + + for i = 1 : k + + if ( R(i,i) < 0 ) + + Sk(i,:) = -Sk(i,:) ; + + end + + end + + if ( n_ref > k ) + + warning('XY_DMD_R4 :( -> exceeds the total number of pairs.') + + n_ref = k ; + + end + +else + + % .. no refinement + + % The Rayleigh quotient Sk = U_k' * A * U_k, expressed without using A + + % Sk=(((U(:,1:k)' * Y)*diag(1./D))*V(:,1:k)).*(ones(k,1)*(1./S(1:k))') + + Sk = U(:,1:k)'*AxU_k ; + +end + +% + +%............................................................................... + +% + +% Ritz values + +% + +if ( strcmp(nobal,'NoBalance')) + + [W, Lambda] = eig( Sk, 'vector', 'nobalance' ) ; + +else + + [W, Lambda] = eig( Sk, 'vector' ) ; + +end + +% + +% + +Z = U(:,1:k) * W ; % Ritz vectors, normalized in l_2 norm. + +AxZ = AxU_k * W ; + +% Next, for each Ritz pair compute its residual. + +rez = zeros(k,1) ; + +for i = 1 : k + + rez(i) = norm( AxZ(:,i) - Lambda(i)*Z(:,i) ) ; + +end + +% + +if save_to_file + + save( file_save, 'U','Sigma','V','k','AxU_k','Sk','Z','Lambda','rez' ) ; + +end + +%............................................................................... + +% + +if ( n_ref > 0 ) + + % refinement requested ; select the specified pairs + + switch ref_select + + case 1, + + % nref pairs with smallest residuals + + [~, idummy] = sort(rez,'ascend') ; + + RSI = idummy(1:n_ref) ; + + case 2, + + % nref pairs closest to target (provided on input) + + [~,idummy] = sort(abs(Lambda-target) ,'ascend') ; + + RSI = idummy(1:n_ref) ; + + case 3, + + % nref pairs closest to the imaginary axis + + [~,idummy] = sort(abs(real(Lambda)) ,'ascend') ; + + RSI = idummy(1:n_ref) ; + + case 4, + + % nref pairs closest to the unit circle + + [~,idummy] = sort(abs(abs(Lambda)-1) ,'ascend') ; + + RSI = idummy(1:n_ref) ; + + case 5, + + % nref pairs closest to the real axis + + [~,idummy] = sort(abs(imag(Lambda)) ,'ascend') ; + + RSI = idummy(1:n_ref) ; + + % more cases: define property and write a selection procedure + + % that extracts the corresponding indicies + + otherwise + + error('XY_DMD_R4 :( -> parameter had an illegal value') + + end + +%... + +% + +VR = zeros(k,n_ref) ; RQ_ref = zeros(n_ref,1) ; rez_ref = zeros(n_ref,1) ; + +% + +% refinement of the selected pairs + +for ii = 1 : n_ref + + i = RSI(ii) ; + + RL = [ R(1:k,k+1:2*k) - Lambda(i)*R(1:k,1:k) ; ... + + R(k+1:2*k,k+1:2*k) ] ; + + [~,~,VL] = svd( RL, 'econ') ; + +% The singular vector of the smallest singular value is the representation + +% of the refined eigenvector in the basis of U(:,1:k). + + VR(:,ii) = VL(:,k) ; + +% + + rez_ref(ii) = norm(RL*VL(:,k)) ; % = k-th (smallest) singular value of RL + +% More direct way is to use rez_ref(ii) = SL(k,k) with + +% [~,SL,VL] = svd( RL, 'econ') instead of [~,~,VL] = svd( RL, 'econ') above; + +% This formula is intended for the case of using less accurate SVD method, + +% when the smallest singular value may be computed inaccurately, but the + +% corresponding singular vector is computed reasonably accurately. In an + +% optimal implemenation (not considered here) a specially tailored method + +% would comput just VL(:,k), without computig the whole SVD of RL. + +% + +% Use the refined Ritz vectors to compute Rayleigh quotients as better + +% eigenvalue approximations, with smaller residuals than with Lambda(1:k). + +% In most cases, the improvement is mild, but it is an improvement. + + RQ_ref(ii) = VL(:,k)' * Sk * VL(:,k) ; + +end + +% + +% The matrix of the refined Ritz vectors + +if ( strcmp(overwrite,'OverWrite') ) + + Z(:,RSI) = U(:,1:k)*VR ; Z_ref = [] ; + + Lambda(RSI) = RQ_ref ; + + rez(RSI) = rez_ref ; + +else + + Z_ref = U(:,1:k)*VR ; + +end + +% + +else + + RSI = [] ; RQ_ref = [] ; rez_ref = [] ; Z_ref = [] ; + +end + +U = U(:,1:k) ; + +end + +% + +%=============================================================================== + +% Copyright (c) 2016-2017 AIMdyn Inc. + +% All right reserved. + +% + +% 3-Clause BSD License + +% + +% Additional copyrights may follow. + +% + +% + +% Redistribution and use in source and binary forms, with or without + +% modification, are permitted provided that the following conditions are met: + +% + +% 1. Redistributions of source code must retain the above copyright notice, + +% this list of conditions and the following disclaimer. + +% 2. Redistributions in binary form must reproduce the above copyright notice, + +% this list of conditions and the following disclaimer in the documentation + +% and/or other materials provided with the distribution. + +% 3. Neither the name of the copyright holder nor the names of its contributors + +% may be used to endorse or promote products derived from this software + +% without specific prior written permission. + +% + +% The copyright holder provides no reassurances that the source code + +% provided does not infringe any patent, copyright, or any other + +% intellectual property rights of third parties. The copyright holder + +% disclaims any liability to any recipient for claims brought against + +% recipient by any third party for infringement of that parties + +% intellectual property rights. + +% + +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND + +% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + +% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + +% DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + +% FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + +% DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + +% SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + +% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + +% OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + +% OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +% + +%=============================================================================== + + + diff --git a/scripts/Koopman-ID/construct_eigfuncs.m b/scripts/Koopman-ID/construct_eigfuncs.m new file mode 100644 index 0000000..0901348 --- /dev/null +++ b/scripts/Koopman-ID/construct_eigfuncs.m @@ -0,0 +1,107 @@ +function [A_koop, z_eigfun] = construct_eigfuncs(n, Ntraj, Ntime, ... + N_basis, A_nom, B_nom, K_nom, Xstr, deltaT) + + %Identify lifted state space model using approximate Koopman invariant + %subspace + + %Inputs: + % n - Number of states + % m - Number of control inputs + % N_lambda - Number of eigenvalue candidates to use + % N_basis - Number of boundary functions to use + % basis_function - Type of basis functions (only rbfs implemented) + % rbf-type - Type of rbf function + % center_type - What centers to use for rbfs ('data'/'random') + % eps - Width of rbf if rbf type has width parameter + % plot_basis - (true/false) determines to plot basis functions + % xlim - Plot limits x-axis + % ylim - Plot limits y-axis + % A_edmd - Passive dynamics matrix from EDMD + % A_nom - Nominal state space model passive dynamics + % B_nom - Nominal state space model actuated dynamics + % K_nom - Nominal linear feedback control law gains + % Xacc - Trajectory data + % Yacc - Trajectory data at next time step + % Uacc - Control input for trajectory data + % Xacc_c - Trajectory data, perturbed control + % Yacc_c - Trajectory data at next time step, perturbed control + % Uacc_c - Control input for trajectory data, perturbed control + + %Outputs: + % A_edmd - Passive dynamics matrix in lifted space + % B_edmd - Actuation matrix in lifted space + % C_edmd - Projection matrix from lifted space to output + + + % Generate eigenfunctions and learn autonomous dynamics: + + disp('Starting autonomous dynamics learning...'); tic + + A_c = A_nom + B_nom*K_nom; + A_c_d = expm(A_c*deltaT); %Discrete time dynamics matrix + cent = rand(n,N_basis)*2*pi - pi; + rbf_type = 'gauss'; + eps_rbf = 1; + + % Set up nonlinear transformations and their gradients + zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; + zfun_grad = @(xx) [eye(2); rbf_grad(xx',cent,rbf_type,eps_rbf)]; + + % Prepare data matrices + Y = []; + Z_mplus1 = []; + Z_m = []; + for i = 1 : Ntraj + X_mplus1 = reshape(Xstr(:,i,2:end),n,Ntime); + X_m = reshape(Xstr(:,i,1:end-1),n,Ntime); + + % Set up Y matrix (targets), Y(:,i) = x_(i+1) - A_nom*x_i + Y = [Y X_mplus1-A_c_d*X_m]; + + % Set up Z_mplus1 matrix (inputs), phi(x_(i+1)) + Z_mplus1 = [Z_mplus1 zfun(X_mplus1')]; + + % Set up Z_m matrix (inputs), phi(x_i) + Z_m = [Z_m zfun(X_m')]; + end + + %Set up constraint matrix + con1 = zfun_grad([0 0]); + + disp('Solving optimization problem...') + N = size(Z_m,1); + cvx_begin + variable C(n,N); + minimize (norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro') + 0.01*norm(C,'fro')) + subject to + {C*con1 == zeros(n)}; + cvx_end + fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro'),immse(Y, A_c_d*C*Z_m - C*Z_mplus1)) + %fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) + + yfun = @(xx) xx + C*zfun(xx'); % Full learned diffeomorphism + + % Calculate eigenfunctions for linearized system + [~,D] = eig(A_c_d); + [V_a,~] = eig(A_c_d'); + + %Define powers (only implemented for n=2): + max_power = 5; + a = 0 : max_power; + [P,Q] = meshgrid(a,a); + c=cat(2,P',Q'); + powers=reshape(c,[],2); + + linfunc = @(xx) (xx'*V_a)'; + phifun = @(xx) (prod(linfunc(xx).^(powers')))'; + lambd = prod(diag(D).^(powers'))'; + + % Construct scaling function + gfun = @(xx) xx./pi; %Scale state space into unit cube + + % Construct eigenfunctions for nonlinear system + z_eigfun = @(xx) phifun_mat(phifun, gfun(yfun(xx))); + A_koop = diag(lambd); +end + + diff --git a/scripts/Koopman-ID/koopman_eigen_id_laplace.m b/scripts/Koopman-ID/koopman_eigen_id_laplace.m new file mode 100644 index 0000000..b81538c --- /dev/null +++ b/scripts/Koopman-ID/koopman_eigen_id_laplace.m @@ -0,0 +1,140 @@ +function [A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id_laplace(n,m, Ntraj, Ntime, ... + N_basis,basis_function, rbf_type, center_type, eps_rbf, N_lambda, ... + lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Yacc, Xstr, Xacc_c,... + Yacc_c, Uacc_c, Xstr_c, Ustr_c, timestr, deltaT, learn_type) + + %Identify lifted state space model using approximate Koopman invariant + %subspace + + %Inputs: + % n - Number of states + % m - Number of control inputs + % N_lambda - Number of eigenvalue candidates to use + % N_basis - Number of boundary functions to use + % basis_function - Type of basis functions (only rbfs implemented) + % rbf-type - Type of rbf function + % center_type - What centers to use for rbfs ('data'/'random') + % eps - Width of rbf if rbf type has width parameter + % plot_basis - (true/false) determines to plot basis functions + % xlim - Plot limits x-axis + % ylim - Plot limits y-axis + % A_edmd - Passive dynamics matrix from EDMD + % A_nom - Nominal state space model passive dynamics + % B_nom - Nominal state space model actuated dynamics + % K_nom - Nominal linear feedback control law gains + % Xacc - Trajectory data + % Yacc - Trajectory data at next time step + % Uacc - Control input for trajectory data + % Xacc_c - Trajectory data, perturbed control + % Yacc_c - Trajectory data at next time step, perturbed control + % Uacc_c - Control input for trajectory data, perturbed control + + %Outputs: + % A_edmd - Passive dynamics matrix in lifted space + % B_edmd - Actuation matrix in lifted space + % C_edmd - Projection matrix from lifted space to output + + + % Generate eigenfunctions and learn autonomous dynamics: + + disp('Starting autonomous dynamics learning...'); tic + + A_c = A_nom + B_nom*K_nom; + A_c_d = expm(A_c*deltaT); %Discrete time dynamics matrix + cent = rand(n,50)*2*pi - pi; + rbf_type = 'gauss'; + eps_rbf = 1; + + % Set up nonlinear transformations and their gradients + zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; + zfun_grad = @(xx) [eye(2); rbf_grad(xx',cent,rbf_type,eps_rbf)]; + + % Prepare data matrices + Y = []; + Z_mplus1 = []; + Z_m = []; + for i = 1 : Ntraj + X_mplus1 = reshape(Xstr(:,i,2:end),n,Ntime); + X_m = reshape(Xstr(:,i,1:end-1),n,Ntime); + + % Set up Y matrix (targets), Y(:,i) = x_(i+1) - A_nom*x_i + Y = [Y X_mplus1-A_c_d*X_m]; + + % Set up Z_mplus1 matrix (inputs), phi(x_(i+1)) + Z_mplus1 = [Z_mplus1 zfun(X_mplus1')]; + + % Set up Z_m matrix (inputs), phi(x_i) + Z_m = [Z_m zfun(X_m')]; + end + + %Set up constraint matrix + con1 = zfun_grad([0 0]); + + disp('Solving optimization problem...') + N = size(Z_m,1); + cvx_begin + variable C(n,N); + minimize (norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro') + 1*norm(C,'fro')) + subject to + {C*con1 == zeros(n)}; + cvx_end + fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro'),immse(Y, A_c_d*C*Z_m - C*Z_mplus1)) + %fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) + + yfun = @(xx) xx + C*zfun(xx'); % Full learned diffeomorphism + + % Calculate eigenfunctions for linearized system + [~,D] = eig(A_c_d); + [V_a,~] = eig(A_c_d'); + + %Define powers (only implemented for n=2): + max_power = 5; + a = 0 : max_power; + [P,Q] = meshgrid(a,a); + c=cat(2,P',Q'); + powers=reshape(c,[],2); + + linfunc = @(xx) (xx'*V_a)'; + phifun = @(xx) (prod(linfunc(xx).^(powers')))'; + lambd = prod(diag(D).^(powers'))'; + + % Construct scaling function + gfun = @(xx) xx./pi; %Scale state space into unit cube + + % Construct eigenfunctions for nonlinear system + z_eigfun = @(xx) [xx; phifun_mat(phifun, gfun(yfun(xx)))]; + %z_eigfun = @(xx) phifun_mat(phifun, gfun(yfun(xx))); + + %A_koop = diag(lambd); + Z_x = z_eigfun(Xacc); + Z_y = z_eigfun(Yacc); + k=1; + A_koop = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(Z_x,1)-n)]; + %A_koop = [A_koop; (Z_x'\Z_y(n/2+1:n,:)')']; + A_state = lasso(Z_x',Z_y(n/2+1:n,:)','Lambda',1e-5)'; + A_koop = [A_koop; A_state]; + A_koop = [A_koop; [zeros(length(lambd),n) diag(lambd)]]; + + % Calculate projection of states onto eigenfunctions + %C_koop = (Zacc'\Xacc')'; + C_koop = zeros(n,size(A_koop,1)); + C_koop(:,1:n) = eye(n); + fprintf('Learning autonomous dynamics done, training error %.2f, execution time: %1.2f s \n', immse(Yacc,C_koop*A_koop*Z_x), toc); + + % Learn actuated dynamics: + disp('Starting actuated dynamics learning...'); tic + [B_koop, phi_fun_v] = learn_B_koop(n, m, Ntraj, Ntime, z_eigfun, A_koop,... + C_koop, Xstr_c, Ustr_c, Xacc_c, Yacc_c, Uacc_c, deltaT, learn_type); + fprintf('Learning actuated dynamics done, execution time: %1.2f s \n', toc); + + % Subtract effect of nominal controller from A_koop: + A_koop(:,1:n) = A_koop(:,1:n)-B_koop*K_nom; + + % Evaluate training error: +% Ypred = zeros(size(Yacc_c)); +% +% C_koop*(A_koop*phi_fun_v(Xacc_c)+B_koop*Uacc_c); +% disp(immse(Ypred,Yacc_c)); +end + + diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index a65692b..8309a6b 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -14,7 +14,7 @@ %implementation. clear all; close all; clc; -addpath('./Resources'); addpath('./utils') +addpath('./Resources'); addpath('./utils'); addpath('Resources/qpOASES-3.1.0/interfaces/matlab/'); rng(2141444) %% **************** Model and simulation parameters *********************** @@ -22,20 +22,19 @@ m = 1; g = 9.81; l = 1; f_u = @(t,x,u) [x(2,:); g/l*sin(x(1,:))+ u]; n = 2; m = 1; %Number of states and control inputs -Q = eye(2); R = 1; %LQR penalty matrices for states and control inputs +Q = eye(2); R = 0.1; %LQR penalty matrices for states and control inputs %Simulation parameters: Ntime = 200; %Length of each trajectory (# of time steps) Ntraj = 20; %Number of trajectories deltaT = 0.01; %Time step length of simulation -X0_A = 2*rand(n,Ntraj)-1; %Sample initial points for each trajectory for learning A -X0_A = 0.95*pi*X0_A./vecnorm(X0_A,2,1); %Normalize so initial points lie on unit circle +X0_A = (2*pi*rand(n,Ntraj)-pi); Xf_A = zeros(n,Ntraj); %Terminal points for each trajectory for learning A -X0_B = 0.6*(2*pi*rand(n,Ntraj)-pi); %Sample initial points for each trajectory for learning B +X0_B = (2*pi*rand(n,Ntraj)-pi); %Sample initial points for each trajectory for learning B Xf_B = 0.6*(2*pi*rand(n,Ntraj)-pi); %Terminal points for each trajectory for learning B %E-DMD parameters: -N_basis_edmd = 20; %Number of basis functions +N_basis_edmd = 36; %Number of basis functions basis_function_edmd = 'rbf'; %Type of basis function rbf_type_edmd = 'thinplate'; %RBF type center_type_edmd = 'data'; %Centers of rbf ('data' - pick random points from data set, 'random' pick points uniformly at random @@ -53,11 +52,11 @@ plot_basis_koop = false; %Plots the basis functions if true xlim = [-1, 1]; %Plot limits ylim = [-1, 1]; %Plot limits -learn_type = 'single-step'; %Learn B-matrix with single step or multi-step prediction horizon +learn_type = 'multi-step'; %Learn B-matrix with single step or multi-step prediction horizon %Test simulation parameters: Nsim = 5; -Tsim = 1; +Tsim = 2; plot_results = true; X0_sim = 2*rand(n,Nsim)-1; @@ -70,39 +69,37 @@ % Collect data to learn autonomous dynamics: autonomous_learning = true; -U_perturb = 0.5*randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller +U_perturb = randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller [Xstr, Xacc, Yacc, Ustr, Uacc, timestr] = collect_data(n,m,Ntraj,... Ntime,deltaT,X0_A, Xf_A ,K_nom,f_u,U_perturb, autonomous_learning); % Collect data to learn controlled dynamics: autonomous_learning = false; -U_perturb_c = 0.5*randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller +U_perturb_c = 4*rand(Ntime,Ntraj)-2; %Add normally distributed noise to nominal controller [Xstr_c, Xacc_c, Yacc_c, Ustr_c, Uacc_c, timestr_c] = collect_data(n,m,Ntraj,... Ntime,deltaT,X0_B,Xf_B,K_nom,f_u,U_perturb_c, autonomous_learning); fprintf('Data collection done, execution time: %1.2f s \n', toc); %% *********************** Model Identification *************************** - % Identify model using E-DMD to get eigenvalues and model to use for % comparison: disp('Starting EDMD...'); tic -[A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m,N_basis_edmd,basis_function_edmd,... +[A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_edmd,... rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... - ylim, Xacc, Yacc, Uacc); + ylim, Xacc, Yacc, Uacc, Xstr, A_nom, B_nom, K_nom, deltaT); fprintf('EDMD done, execution time: %1.2f s \n', toc); -%Identify model using Koopman eigenfunctions: - -[A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id(n, m, Ntraj, Ntime, N_basis_koop,... +[A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id_laplace(n, m, Ntraj, Ntime, N_basis_koop,... basis_function_koop, rbf_type_koop, center_type_koop, eps_rbf_koop, ... - N_lambda, lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Xstr, Xacc_c,... + N_lambda, lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Yacc, Xstr, Xacc_c,... Yacc_c, Uacc_c, Xstr_c, Ustr_c, timestr, deltaT, learn_type); %% ************************ Analysis of Results *************************** [mse_edmd_avg, mse_koop_avg, mse_edmd_std, mse_koop_std,... - mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop] = ... + mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop,... + cost_nom, cost_edmd, cost_koop] = ... evaluate_model_performance(K_nom, A_edmd, B_edmd, C_edmd, A_koop, B_koop, ... C_koop, Nsim, X0_sim, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); @@ -110,6 +107,6 @@ fprintf('Predicition performance: \nAverage MSE: \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nStandard Deviation MSE: \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... mse_edmd_avg, mse_koop_avg, mse_edmd_std, mse_koop_std); fprintf('-----------------------------------------------------------------\n'); - fprintf('Closed loop performance (MPC): \nAverage MSE: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nEnergy consumption proxy: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... - mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop); + fprintf('Closed loop performance (MPC): \nAverage MSE: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nEnergy consumption proxy: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f, \nAccumulated MPC cost: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... + mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop, cost_nom, cost_edmd, cost_koop); fprintf('-----------------------------------------------------------------\n'); \ No newline at end of file diff --git a/scripts/Koopman-ID/normalize_data.m b/scripts/Koopman-ID/normalize_data.m new file mode 100644 index 0000000..3ef4e0b --- /dev/null +++ b/scripts/Koopman-ID/normalize_data.m @@ -0,0 +1,11 @@ +function [X_norm, X_mean, X_std] = normalize_data(X) + + %Make sure each row corresponds to a time step: + if size(X,1)>size(X,2) + X = X'; + end + + X_mean = mean(X,2); + X_std = std(X,0,2); + X_norm = (X-X_mean)./X_std; +end \ No newline at end of file diff --git a/scripts/Koopman-ID/obsvk.m b/scripts/Koopman-ID/obsvk.m new file mode 100755 index 0000000..66191ee --- /dev/null +++ b/scripts/Koopman-ID/obsvk.m @@ -0,0 +1,6 @@ +function [ O ] = obsvk( A, C, k ) +O = []; +for i = 1:k + O = [O;C*A^(i-1)]; % Inefficient +end + diff --git a/scripts/Koopman-ID/phifun_mat.m b/scripts/Koopman-ID/phifun_mat.m new file mode 100644 index 0000000..5c0c83a --- /dev/null +++ b/scripts/Koopman-ID/phifun_mat.m @@ -0,0 +1,7 @@ +function res = phifun_mat(phifun,X) + [n,m] = size(X); + res = []; + for i = 1 : m + res = [res phifun(X(:,i))]; + end +end \ No newline at end of file diff --git a/scripts/Koopman-ID/rbf_grad.m b/scripts/Koopman-ID/rbf_grad.m new file mode 100644 index 0000000..85fbf1b --- /dev/null +++ b/scripts/Koopman-ID/rbf_grad.m @@ -0,0 +1,53 @@ +% X: nxN +% C: rbf center(s) - nx1 or nxK, if C is n x K, then the result is STACKED +% over the centers K, i.e., of dimension K x N +% eps: kernel width for Gaussian type rbfs (optional) +% k: polyharmonic coefficient for polyharmonic rbfs (optional) +% Note that all RBFs are symmetrical so evaluation of of a single point on +% multiple centers can by done as evaluation of multiple points (the +% centers in this case) on a single point (the center) + +function Y = rbf_grad( X,C, type, eps, k ) + type = lower(type); + if(~exist('eps','var') || isempty(eps)) + eps = 1; + end + if(~exist('k','var') || isempty(k)) + k = 1; + end + + N = size(X,2); %number of points + n = size(X,1); + Cbig = C; + Y = zeros(size(C,2),n); + for i = 1:size(Cbig,2) + C = Cbig(:,i); + C = repmat( C,1, N ); + if (n>1) + r_squared = sum( (X - C).^2 ); + else + r_squared = abs( (X - C).^2 ); + end + switch type + case 'thinplate' + error('Gradient of RBF type not implemented') + %y = r_squared.*log(sqrt(r_squared)); % + 0.5*sqrt(r_squared); % makes nonnegative, try to impose nonnegativity of K + %y(isnan(y)) = 0; + case 'gauss' + y = -2*eps^2.*(X-C)'.*exp(-eps^2*r_squared); + %y = exp(-eps^2*r_squared); + case 'invquad' + error('Gradient of RBF type not implemented') + %y = 1 ./ (1+eps^2*r_squared); + case 'invmultquad' + error('Gradient of RBF type not implemented') + %y = 1 ./ sqrt((1+eps^2*r_squared)); + case 'polyharmonic' + error('Gradient of RBF type not implemented') + %y = r_squared.^(k/2).*log(sqrt(r_squared)); + %y(isnan(y)) = 0; + otherwise + error('RBF type not recognize') + end + Y(i,:) = y; + end diff --git a/scripts/Koopman-ID/test_eigfunction_generation.m b/scripts/Koopman-ID/test_eigfunction_generation.m new file mode 100644 index 0000000..4c1676a --- /dev/null +++ b/scripts/Koopman-ID/test_eigfunction_generation.m @@ -0,0 +1,244 @@ +clear all; close all; clc; +addpath('./Resources'); addpath('./utils') +rng(2141444) + +%% **************** Model and simulation parameters *********************** +%Dynamics: +m = 1; g = 9.81; l = 1; +f_u = @(t,x,u) [x(2,:); g/l*sin(x(1,:))+ u]; +n = 2; m = 1; %Number of states and control inputs +Q = eye(2); R = 1; %LQR penalty matrices for states and control inputs + +%Simulation parameters: +Ntime = 200; %Length of each trajectory (# of time steps) +Ntraj = 10; %Number of trajectories +deltaT = 0.01; %Time step length of simulation +X0_A = 2*rand(n,Ntraj)-1; %Sample initial points for each trajectory for learning A +X0_A = 0.95*pi*X0_A./vecnorm(X0_A,2,1); %Normalize so initial points lie on unit circle +Xf_A = zeros(n,Ntraj); %Terminal points for each trajectory for learning A +X0_B = 0.6*(2*pi*rand(n,Ntraj)-pi); %Sample initial points for each trajectory for learning B +Xf_B = 0.6*(2*pi*rand(n,Ntraj)-pi); %Terminal points for each trajectory for learning B + +%% ************************** Data Collection ***************************** +disp('Starting data collection...'); tic + +% Calculate nominal model with Jacobian and find nominal control gains: + +[A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R); + +% Collect data to learn autonomous dynamics: +autonomous_learning = true; +U_perturb = 0.0*randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller +[Xstr, Xacc, Yacc, Ustr, Uacc, timestr] = collect_data(n,m,Ntraj,... + Ntime,deltaT,X0_A, Xf_A ,K_nom,f_u,U_perturb, autonomous_learning); + +fprintf('Data collection done, execution time: %1.2f s \n', toc); + +%% ************** Prepare data and learn diffeomorphism h ***************** +A_c = A_nom + B_nom*K_nom; +A_c_d = expm(A_c*deltaT); %Discrete time dynamics matrix +N_basis = 100; +cent = rand(n,N_basis)*2*pi - pi; +rbf_type = 'gauss'; +eps_rbf = 1; +zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; +zfun_grad = @(xx) [eye(2); rbf_grad(xx',cent,rbf_type,eps_rbf)]; +% x = sym('x',[1,n]); +% zfun_grad = zfun(x); +Y = []; +Z_mplus1 = []; +Z_m = []; +for i = 1 : Ntraj + X_mplus1 = reshape(Xstr(:,i,2:end),n,Ntime); + X_m = reshape(Xstr(:,i,1:end-1),n,Ntime); + + % Set up Y matrix (targets), Y(:,i) = x_(i+1) - A_nom*x_i + Y = [Y X_mplus1-A_c_d*X_m]; + + % Set up Z_mplus1 matrix (inputs), phi(x_(i+1)) + Z_mplus1 = [Z_mplus1 zfun(X_mplus1')]; + + % Set up Z_m matrix (inputs), phi(x_i) + Z_m = [Z_m zfun(X_m')]; +end + +%Set up constraint matrix +con1 = zfun_grad([0 0]); + +disp('Solving optimization problem...') +N = size(Z_m,1); +cvx_begin + variable C(n,N); + minimize (norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro') + 0.01*norm(C,'fro')) + subject to + {C*con1 == zeros(n)}; +cvx_end +fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro'),immse(Y, A_c_d*C*Z_m - C*Z_mplus1)) +fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) + +yfun = @(xx) xx + C*zfun(xx'); % Full learned diffeomorphism +%% Calculate eigenfunctions for linearized system +[V,D] = eig(A_c_d); +[V_a,D_a] = eig(A_c_d'); + +%Define powers (only implemented for n=2): +max_power = 3; +a = 0 : max_power; +[P,Q] = meshgrid(a,a); +c=cat(2,P',Q'); +powers=reshape(c,[],2); + +linfunc = @(xx) (xx'*V_a)'; +phifun = @(xx) (prod(linfunc(xx).^(powers')))'; +lambd = prod(diag(D).^(powers'))'; + +%% Construct scaling function +gfun = @(xx) xx./pi; %Scale state space into unit cube + +%% Construct eigenfunctions for nonlinear system +phi_nonlin = @(xx) phifun(gfun(yfun(xx))); +A_eig = diag(lambd); + +%% Check how well the evolution of the eigenfunctions are described by the eigenvalues on linearized system: +X_test = zeros(n,Ntime+1); +X_test(:,1) = Xstr(:,1,1); +for i = 2 : Ntime+1 + X_test(:,i) = A_c_d*X_test(:,i-1); +end + +N = size(lambd,1); +Z_test = zeros(N,Ntime+1); +Z_eig = zeros(N,Ntime+1); +Z_test(:,1) = phifun(X_test(:,1)); +Z_eig(:,1) = phifun(X_test(:,1)); +for j = 2 : Ntime+1 + Z_eig(:,j) = A_eig*Z_eig(:,j-1); + Z_test(:,j) = phifun(X_test(:,j)); +end + +afigure +t = 0 : deltaT : Ntime*deltaT; +for i = 1 : N + subplot(4,4,i) + plot(t,Z_eig(i,:),t,Z_test(i,:)) + xlabel('Time (sec)'); + ylabel('Observable value') + if i == N + legend('Eigval evolution', 'True') + end +end + + +%% Check how well the evolution of the eigenfunctions are described by the eigenvalues: +X_test = reshape(Xstr(:,1,:),n,Ntime+1); +N = size(lambd,1); +Z_test = zeros(N,Ntime+1); +Z_eig = zeros(N,Ntime+1); +Z_test(:,1) = phi_nonlin(X_test(:,1)); +Z_eig(:,1) = phi_nonlin(X_test(:,1)); +for j = 2 : Ntime+1 + Z_eig(:,j) = A_eig*Z_eig(:,j-1); + Z_test(:,j) = phi_nonlin(X_test(:,j)); +end + +afigure +t = 0 : deltaT : Ntime*deltaT; +for i = 1 : N + subplot(4,4,i) + plot(t,Z_eig(i,:),t,Z_test(i,:)) + xlabel('Time (sec)'); + ylabel('Observable value') + if i == N + legend('Eigval evolution', 'True') + end +end + +%% Predict evolution of nonlinear system + + + +%% Old code: (Delete when verified not needed) +% lin_pred_acc = zeros(size(Xacc,1),Ntime*Ntraj); +% Y_res_acc = zeros(size(Xacc,1),Ntime*Ntraj); +% t = deltaT:deltaT:Ntime*deltaT; +% +% afigure +% for i = 1 : Ntraj +% +% lin_pred = A_nom*reshape(Xstr(:,i,1:end-1),size(Xacc,1),Ntime); +% lin_pred_acc(:,(i-1)*Ntime+1:i*Ntime) = lin_pred; +% Y_res = reshape(Xstr(:,i,2:end),size(Xacc,1),Ntime)-lin_pred; +% Y_res_acc(:,(i-1)*Ntime+1:i*Ntime) = Y_res; +% +% % subplot(2,Ntraj/2,i) +% % plot(t, lin_pred(1,:), t, reshape(Xstr(1,i,2:end),1,Ntime),... +% % t, lin_pred(2,:), t, reshape(Xstr(2,i,2:end),1,Ntime)); +% % xlabel('Time (sec)') +% % ylabel('State value') +% % fprintf('Error %i: %.4f\n', i, norm(lin_pred-reshape(Xstr(:,i,2:end),size(Xacc,1),Ntime))); +% end +% +% %% Test eigenfunction generation +% +% center_type = 'random'; +% N = Ntraj*Ntime; +% N_basis = 40; +% +% switch center_type +% case 'random' +% cent = rand(n,N_basis)*2*pi - pi; +% case 'data' +% cent = datasample(Xacc',N_basis)'+0.05*(rand(n,N_basis)*2-1); +% end +% +% rbf_type = 'gauss'; +% eps_rbf = 1; +% zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; +% X = zfun(Xacc'); +% Y = zfun(Yacc'); +% D_norm = diag(vecnorm(X')); +% X = D_norm*X; +% Y = D_norm*Y; +% +% to_scale = 'Scale'; +% to_center = 'Ignore'; +% k_mode = -1; +% tol = N_basis*eps; +% nobal = 'Ignore'; +% n_ref = 0; +% ref_select = 1; +% target = [0 0]'; %Not used because ref_select not equal ot 2 +% overwrite = 'OverWrite'; +% file_save = 'NoSave'; +% +% % [Z, Lambda, rez, RQ_ref, RSI, Z_ref, rez_ref, U, AxU_k] = ... +% % XY_DDMD_R4( X, Y, to_scale, to_center, k_mode, tol, nobal, n_ref,... +% % ref_select, target, overwrite, file_save); +% +% A = Y/X; +% error = norm(A*X-Y) +% [V,D] = eig(A'); +% rel_inds = find(diag(abs(D)) > 0.1); +% V_red = V(:,rel_inds); +% D_red = D(rel_inds,rel_inds); +% +% z_eigfun = @(xx) (zfun(xx)'*V_red)'; +% A_koop = D_red; %Discrete time autonomous dynamics; +% Zacc = z_eigfun(Yacc'); +% +% %Compare z with its linear evolution +% z = z_eigfun(Xacc(:,1)'); +% for i = 1 : Ntime +% z = [z A_koop*z(:,end)]; +% end +% +% %% +% t = deltaT : deltaT : Ntime*deltaT; +% n_plot = 15; +% afigure +% for i = 1 : n_plot +% subplot(n_plot,1,i) +% plot(t,Zacc(i,1:end),t,z(i,2:end)) +% legend('True', 'Linear evolution') +% end +% \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/collect_data.m b/scripts/Koopman-ID/utils/collect_data.m index d2aa418..e142df1 100644 --- a/scripts/Koopman-ID/utils/collect_data.m +++ b/scripts/Koopman-ID/utils/collect_data.m @@ -1,5 +1,5 @@ function [Xstr, Xacc, Yacc, Ustr, Uacc, time_str] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0,Xf_A,K_nom,f_u,U_perturb, autonomous_learning) + Ntime,deltaT,X0,Xf,K_nom,f_u,U_perturb, autonomous_learning) %Collect data from the "true" system with nominal controller plus %perturbation %Inputs: @@ -28,7 +28,7 @@ Xcurrent = X0; Xstr(:,:,1) = X0; for i = 1:Ntime - Ucurrent = K_nom*(Xcurrent-Xf_A)+U_perturb(i,:); + Ucurrent = K_nom*(Xcurrent-Xf)+U_perturb(i,:); Xnext = sim_timestep(deltaT, f_u, 0, Xcurrent, Ucurrent); Xstr(:,:,i+1) = Xnext; Xacc(:,Ntraj*(i-1)+1:Ntraj*(i)) = Xcurrent; @@ -40,8 +40,8 @@ Ustr(:,:,i) = Ucurrent; Uacc(:,Ntraj*(i-1)+1:Ntraj*i) = Ucurrent; else - Ustr(:,:,i) = Ucurrent - K_nom*Xcurrent; - Uacc(:,Ntraj*(i-1)+1:Ntraj*i) = Ucurrent - K_nom*Xcurrent; + Ustr(:,:,i) = Ucurrent - K_nom*(Xcurrent-Xf); + Uacc(:,Ntraj*(i-1)+1:Ntraj*i) = Ucurrent - K_nom*(Xcurrent-Xf); end end end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/evaluate_model_performance.m b/scripts/Koopman-ID/utils/evaluate_model_performance.m index b8e3e64..1461aad 100644 --- a/scripts/Koopman-ID/utils/evaluate_model_performance.m +++ b/scripts/Koopman-ID/utils/evaluate_model_performance.m @@ -1,5 +1,6 @@ function [mse_edmd_avg, mse_koop_avg, mse_edmd_std, mse_koop_std,... - mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop] = ... + mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop,... + cost_nom, cost_edmd, cost_koop] = ... evaluate_model_performance(K_nom, A_edmd, B_edmd, C_edmd, A_koop, B_koop, ... C_koop, Nsim, X0, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results) @@ -8,19 +9,19 @@ n_edmd = size(A_edmd,1); n_koop = size(A_koop,1); Ntime = Tsim/deltaT; - A_koop_d = expm(A_koop*deltaT); %Discretize A_koop %Prediction task: [x,x_edmd,x_koop,mse_edmd_avg,mse_koop_avg,mse_edmd_std,mse_koop_std]... = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,f_u,liftFun,... - phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop_d,B_koop,C_koop); + phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop); %Closed loop task: [x_track,x_edmd_track,x_koop_track,mse_nom_track, mse_edmd_track,... - mse_koop_track,t_plot,traj_d, E_nom, E_edmd, E_koop] = ... + mse_koop_track,t_plot,traj_d, E_nom, E_edmd, E_koop,... + cost_nom, cost_edmd, cost_koop] = ... sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,... - C_edmd,A_koop_d,B_koop,C_koop); + C_edmd,A_koop,B_koop,C_koop); %Plot results if plot_results @@ -34,10 +35,10 @@ plot([0:Ntime]*deltaT,reshape(x_edmd(1,i,:),Ntime+1,1), '--r','linewidth',lw) plot([0:Ntime]*deltaT,reshape(x_koop(1,i,:),Ntime+1,1), '--g','linewidth',lw-1) end - axis([0 Tsim min(x_edmd(1,1,:))-0.15 max(x_edmd(1,1,:))+0.15]) - title('Predictor comparison, 1st trajectory - $x_1$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); + axis([0 Tsim min(x(1,1,:))-0.2 max(x(1,1,:))+0.2]) + title('Prediction comparison, 1st trajectory - $x_1$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); set(gca,'fontsize',20) - LEG = legend('True','EDMD','Koopman e-func','location','southwest'); + LEG = legend('True','EDMD','Koopman e-func','location','best'); set(LEG,'interpreter','latex') h1.Position = h1.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot @@ -48,8 +49,8 @@ plot([0:Ntime]*deltaT,reshape(x_edmd(2,i,:),Ntime+1,1), '--r','linewidth',lw) plot([0:Ntime]*deltaT,reshape(x_koop(2,i,:),Ntime+1,1), '--g','linewidth',lw-1) end - axis([0 Tsim min(x_edmd(2,1,:))-0.15 max(x_edmd(2,1,:))+0.15]) - title('Predictor comparison, 1st trajectory - $x_2$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); + axis([0 Tsim min(x(2,1,:))-0.2 max(x(2,1,:))+0.2]) + title('Prediction comparison, 1st trajectory - $x_2$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); set(gca,'fontsize',20) %LEG = legend('True','EDMD','Koopman e-func','location','southwest'); set(LEG,'interpreter','latex') @@ -60,12 +61,12 @@ hold on for i=1:Ntraj scatter(Xstr(1,i,1),Xstr(2,i,1),'+') - p(i) = plot(squeeze(Xstr(1,i,:)),squeeze(Xstr(2,i,:)),'Color',[0.2,0.2,0.2],'linewidth',1); + p(i) = plot(squeeze(Xstr(1,i,:)),squeeze(Xstr(2,i,:)),':k','linewidth',1); %alpha(p(i),0.2) end for i = 1 : Nsim - plot(reshape(x(1,i,:),Ntime+1,1),reshape(x(2,i,:),Ntime+1,1),'-r') - plot(reshape(x_edmd(1,i,:),Ntime+1,1),reshape(x_edmd(2,i,:),Ntime+1,1),'-b') + plot(reshape(x(1,i,:),Ntime+1,1),reshape(x(2,i,:),Ntime+1,1),'-k') + plot(reshape(x_edmd(1,i,:),Ntime+1,1),reshape(x_edmd(2,i,:),Ntime+1,1),'-r') plot(reshape(x_koop(1,i,:),Ntime+1,1),reshape(x_koop(2,i,:),Ntime+1,1),'-g') end %scatter(cent(1,:),cent(2,:),'o') diff --git a/scripts/Koopman-ID/utils/extendedDMD.m b/scripts/Koopman-ID/utils/extendedDMD.m index f91d7ae..ef2d376 100644 --- a/scripts/Koopman-ID/utils/extendedDMD.m +++ b/scripts/Koopman-ID/utils/extendedDMD.m @@ -1,8 +1,8 @@ -function [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m,N_basis,basis_function,... - rbf_type, center_type, eps, plot_basis, xlim, ylim, Xacc, Yacc, Uacc) +function [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m,Ntraj, Ntime, N_basis,basis_function,... + rbf_type, center_type, eps, plot_basis, xlim, ylim, Xacc, Yacc, Uacc, Xstr, A_nom, B_nom, K_nom, deltaT) %Identify lifted state space model using Extended Dynamic Mode - %Decomposition + %Inputs: % n - Number of states % m - Number of control inputs @@ -53,8 +53,15 @@ % ******************************* Lift *********************************** %disp('Starting LIFT GENERATION') - liftFun = @(xx)( [xx;rbf(xx,cent,rbf_type,eps)] ); - Nlift = N_basis + n; + switch basis_function + case 'rbf' + liftFun = @(xx)( [xx;rbf(xx,cent,rbf_type,eps)] ); + case 'koopman_efunc' + [~, liftFun] = construct_eigfuncs(n, Ntraj, Ntime, N_basis, ... + A_nom, B_nom, K_nom, Xstr, deltaT); + liftFun = @(xx) [xx; liftFun(xx)]; + end + Nlift = length(liftFun(zeros(n,1))); Xlift = liftFun(Xacc); Ylift = liftFun(Yacc); %fprintf('Lifting DONE, time = %1.2f s \n', toc); @@ -71,6 +78,11 @@ A_edmd= M(1:Nlift,1:Nlift); B_edmd = M(1:Nlift,Nlift+1:end); C_edmd = M(Nlift+1:end,1:Nlift); + + % Add known structure (overwrite parts of the learned matrices): + A_edmd(n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; + C_edmd = zeros(size(C_edmd)); + C_edmd(:,1:n) = eye(n); %fprintf('Regression done, time = %1.2f s \n', toc); diff --git a/scripts/Koopman-ID/utils/koopman_eigen_id.m b/scripts/Koopman-ID/utils/koopman_eigen_id.m index 1c328ed..504a9fa 100644 --- a/scripts/Koopman-ID/utils/koopman_eigen_id.m +++ b/scripts/Koopman-ID/utils/koopman_eigen_id.m @@ -1,12 +1,11 @@ function [A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id(n,m, Ntraj, Ntime, ... N_basis,basis_function, rbf_type, center_type, eps_rbf, N_lambda, ... - lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Xstr, Xacc_c,... + lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Yacc, Xstr, Xacc_c,... Yacc_c, Uacc_c, Xstr_c, Ustr_c, timestr, deltaT, learn_type) %Identify lifted state space model using approximate Koopman invariant %subspace - %Decomposition %Inputs: % n - Number of states % m - Number of control inputs @@ -42,44 +41,86 @@ %N_g0 = N_basis+n; %N_gen = N_lambda*N_g0; - cent_g0 = datasample(Xacc',N_basis)'+0.05*(rand(n,N_basis)*2-1); - gfun = @(xx) [xx'; rbf(xx',cent_g0,rbf_type,eps_rbf)]; +% cent_g0 = datasample(Xacc',N_basis)'+0.05*(rand(n,N_basis)*2-1); +% gfun = @(xx) [xx'; rbf(xx',cent_g0,rbf_type,eps_rbf)]; - switch lambda_type +% switch lambda_type +% case 'random' +% lambda = 2*(rand(N_lambda,1)*2-1) + 2i*(rand(N_lambda,1)*2-1); +% case 'DMDmixing' +% lambda_dmd = dmd(Xstr,deltaT); +% lambda = zeros(N_lambda,1); +% lambda(1:length(lambda_dmd)) = lambda_dmd; % start the first lambda to dmd ones +% dlambda = N_lambda - length(lambda_dmd); % how many more to add +% nlambda = length(lambda_dmd); % starting lambda number +% +% vlambda = [0,1 +% 1,0 +% 2,0 +% 0,2 +% 2,1 +% 1,2 +% 3,1 +% 1,3 +% 3,2 +% 2,3]; +% +% while nlambda < N_lambda % stop when we have enough lambda +% nlambda = nlambda+1; +% for k =1:length(lambda_dmd) % combination of dmd lambdas +% lambda(nlambda) = lambda(nlambda) + lambda_dmd(k)*vlambda(nlambda,k); +% end +% end +% case 'eDMD' +% lambda = log(eig(A_edmd))/deltaT; +% end + center_type = 'random'; + N = Ntraj*Ntime; + N_basis = 2*N; + + switch center_type case 'random' - lambda = 2*(rand(N_lambda,1)*2-1) + 2i*(rand(N_lambda,1)*2-1); - case 'DMDmixing' - lambda_dmd = dmd(Xstr,deltaT); - lambda = zeros(N_lambda,1); - lambda(1:length(lambda_dmd)) = lambda_dmd; % start the first lambda to dmd ones - dlambda = N_lambda - length(lambda_dmd); % how many more to add - nlambda = length(lambda_dmd); % starting lambda number - - vlambda = [0,1 - 1,0 - 2,0 - 0,2 - 2,1 - 1,2 - 3,1 - 1,3 - 3,2 - 2,3]; - - while nlambda < N_lambda % stop when we have enough lambda - nlambda = nlambda+1; - for k =1:length(lambda_dmd) % combination of dmd lambdas - lambda(nlambda) = lambda(nlambda) + lambda_dmd(k)*vlambda(nlambda,k); - end - end - case 'eDMD' - lambda = log(eig(A_edmd))/deltaT; + cent = rand(n,N_basis)*2*pi - pi; + case 'data' + cent = datasample(Xacc',N_basis)'+0.05*(rand(n,N_basis)*2-1); end %N_lambda = length(lambda); - y_reg = @(x) [x(1),x(2)]; +% y_reg = @(x) [x(1),x(2)]; +% +% [phi_fun, A_koop, C_koop, phi_grid] = get_phi_A(Xstr, timestr, lambda, gfun,y_reg); + + zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; + X = zfun(Xacc'); + Y = zfun(Yacc'); + + to_scale = 'Scale'; + to_center = 'Ignore'; + k_mode = -1; + tol = N_basis*eps; + nobal = 'Ignore'; + n_ref = 0; + ref_select = 1; + target = [0 0]'; %Not used because ref_select not equal ot 2 + overwrite = 'OverWrite'; + file_save = 'NoSave'; + + [Z, Lambda, rez, RQ_ref, RSI, Z_ref, rez_ref, U, AxU_k] = ... + XY_DDMD_R4( X, Y, to_scale, to_center, k_mode, tol, nobal, n_ref,... + ref_select, target, overwrite, file_save ); + + z_eigfun = @(xx) Z'*zfun(xx); + A_koop = diag(Lambda); %Discrete time autonomous dynamics; + Zacc = z_eigfun(Xacc'); + + %Compare z with its linear evolution + z = z_eigfun(Xacc(:,1)'); + for i = 1 : 1000 + z = [z A_koop*z(:,end)]; + end + - [phi_fun, A_koop, C_koop, phi_grid] = get_phi_A(Xstr, timestr, lambda, gfun,y_reg); + C_koop = (Zacc/Xacc)'; fprintf('Learning autonomous dynamics done, execution time: %1.2f s \n', toc); diff --git a/scripts/Koopman-ID/utils/learn_B_koop.m b/scripts/Koopman-ID/utils/learn_B_koop.m index cf17c2d..0ec27c2 100644 --- a/scripts/Koopman-ID/utils/learn_B_koop.m +++ b/scripts/Koopman-ID/utils/learn_B_koop.m @@ -1,4 +1,4 @@ -function [B_koop, phi_fun_v] = learn_B_koop(n, m, Ntraj, Ntime, phi_fun, A_koop,... +function [B_koop, phi_fun_v] = learn_B_koop(n, m, Ntraj, Ntime, phi_fun_v, A_koop,... C_koop, Xstr_c, Ustr_c, Xacc_c, Yacc_c, Uacc_c, deltaT, learn_type) % Setup regression problem min ||Q * vec(Blift) - b||_2^2 corresponding to @@ -12,45 +12,88 @@ %Outputs: - A_koop_d = expm(A_koop*deltaT); %Discretize A_koop - phi_fun_v = @(x) phiFunction(phi_fun,x); + %phi_fun_v = @(x) phiFunction(phi_fun,x); switch learn_type case 'multi-step' - Obs = obsv(A_koop_d,C_koop); % Not an efficient implementation +% Obs = obsv(A_koop_d,C_koop); % Not an efficient implementation +% nc = size(C_koop,1); +% b = zeros(Ntime*nc,Ntraj); +% Q = zeros(Ntraj*Ntime*nc,size(A_koop_d,1)*m); +% X0 = Xstr_c(:,:,1); +% +% Obsx0 = Obs*phi_fun_v(X0); +% for j = 1:Ntime +% b(nc*(j-1)+1:nc*j,:) = Obsx0( j*nc + 1 : (j+1)*nc, : ) - Xstr_c(:,:,j+1); +% tmp = 0; +% for k = 0 : j-1 +% kprime = j - k -1; +% tmp = tmp + kron(Ustr_c(:,:,k+1)',Obs(kprime*nc + 1 : (kprime+1)*nc,:)); +% end +% Q(Ntraj*nc*(j-1)+1:Ntraj*nc*(j),:) = tmp; +% end +% b = reshape(-b,Ntraj*Ntime*nc,1); +% +% B_koop = pinv(Q)*b; % = vec(Blift) %Add regularization +% B_koop = reshape(B_koop,size(A_koop_d,1),m); % Unvectorize + + % Regression for B (Milan Korda implementation) + % Setup regression problem min ||Q * vec(Blift) - b||_2^2 corresponding to + % min_{Blift} \sum_{j=1}^{Nsim} ||xpred - xtrue||^2 where + % xpred = C*Alift^j*x0_lift + sum_{k=0}^{j-1} kron(u_k',C*Alift^{j-k-1})*vec(BLift) + % (And this sum over all trajectories) + Obs = obsvk(sparse(A_koop),C_koop,Ntime+1); % Not an efficient implementation + b = []; nc = size(C_koop,1); - b = zeros(Ntime*nc,Ntraj); - Q = zeros(Ntraj*Ntime*nc,size(A_koop_d,1)*m); - X0 = Xstr_c(:,:,1); - - Obsx0 = Obs*phi_fun_v(X0); - for j = 1:Ntime - b(nc*(j-1)+1:nc*j,:) = Obsx0( j*nc + 1 : (j+1)*nc, : ) - Xstr_c(:,:,j+1); - tmp = 0; - for k = 0 : j-1 - kprime = j - k -1; - tmp = tmp + kron(Ustr_c(:,:,k+1)',Obs(kprime*nc + 1 : (kprime+1)*nc,:)); - end - Q(Ntraj*nc*(j-1)+1:Ntraj*nc*(j),:) = tmp; + Q = zeros(Ntraj*Ntime*nc,size(A_koop,1)*m); + for q = 1 : Ntraj + fprintf('Building regression matrices for B: %f percent complete \n', 100*q / Ntraj) + x0 = reshape(Xstr_c(:,q,1),n,1); + Obsx0 = Obs*phi_fun_v(x0); + for j = 1:Ntime + b = [b ; Obsx0( j*nc + 1 : (j+1)*nc, : ) - reshape(Xstr_c(:,q,j+1),n,1)] ; + tmp = 0; + for k = 0 : j-1 + kprime = j - k - 1; + tmp = tmp + kron(reshape(Ustr_c(:,q,k+1),m,1)',Obs(kprime*nc + 1 : (kprime+1)*nc,:)); + end + Q((q-1)*Ntime*nc + (j-1)*nc + 1 : (q-1)*Ntime*nc + j*nc,:) = tmp; + end end - b = reshape(-b,Ntraj*Ntime*nc,1); + b = -b; + + k = 10; + %B_koop = Q\b; % = vec(Blift) + B_koop = (Q'*Q + k*eye(size(Q,2)))\(Q'*b); %Regularize B-learning + B_koop = reshape(B_koop,size(A_koop,1),m); % Unvectorize - B_koop = pinv(Q)*b; % = vec(Blift) %Add regularization - B_koop = reshape(B_koop,size(A_koop_d,1),m); % Unvectorize case 'single-step' %Calculate residual after autonomous dynamics are subtracted Z_x = phi_fun_v(Xacc_c); Z_y = phi_fun_v(Yacc_c); - unusable_data_x = find(sum(isnan(Z_x),1) > 0); - unusable_data_y = find(sum(isnan(Z_y),1) > 0); - unusable_data = unique([unusable_data_x unusable_data_y]); - Z_x(:,unusable_data) = []; %Delete unsable elements - Z_y(:,unusable_data) = []; %Delete unsable elements - Uacc_c(:,unusable_data) = []; %Delete unsable elements - - Racc = Z_y - A_koop_d*Z_x; %Calculate residual when subtracting autonomous dynamics - %Racc = phi_fun_v(Yacc_c) - A_koop*phi_fun_v(Xacc_c); + Racc = Z_y-A_koop*Z_x; %Calculate residual when subtracting autonomous dynamics + + k = 10; + %B_koop = (Uacc_c'\Racc')'; + B_koop = ((Uacc_c*Uacc_c' + k*eye(size(Uacc_c,1)))\(Uacc_c*Racc'))'; + if sum(sum(isnan(B_koop))) > 0 + disp('Warning: NAN-values in B-matrix, terminating.') + return + end + case 'multi-step_mod' + %Calculate residual after autonomous dynamics are subtracted + Racc = []; + Z_evol = zeros(length(phi_fun_v(zeros(n,1))),Ntime+1); + for i = 1 : Ntraj + Z_evol(:,1) = phi_fun_v(reshape(Xstr_c(:,i,1),n,1)); + Z_y = phi_fun_v(reshape(Xstr_c(:,i,2:end),n,Ntime)); + for j = 2 : Ntime+1 + Z_evol(:,j) = A_koop*Z_evol(:,j-1); + end + Racc = [Racc Z_evol(:,2:end)-Z_y]; + end + B_koop = (Uacc_c'\Racc')'; if sum(sum(isnan(B_koop))) > 0 disp('Warning: NAN-values in B-matrix, terminating.') diff --git a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m index bca6c13..59954bb 100644 --- a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m +++ b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m @@ -1,6 +1,7 @@ -function [x_nom,x_edmd,x_koop,mse_nom,mse_edmd,mse_koop, t_plot, traj_d, E_nom, E_edmd, E_koop]... +function [x_nom,x_edmd,x_koop,mse_nom,mse_edmd,mse_koop, t_plot, traj_d, E_nom, E_edmd, E_koop,... + cost_nom, cost_edmd, cost_koop]... = sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,Tsim,... - f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop_d,... + f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,... B_koop,C_koop) %Set up trajectory to track: @@ -35,7 +36,7 @@ z_koop(:,1) = phi_fun_v(traj_d(:,1)); % Define Koopman controller - Q = eye(2); % Weight matrices + Q = 1000*eye(2); % Weight matrices R = 0.01; Tpred = 0.1; % Prediction horizon Np = round(Tpred / deltaT); @@ -45,7 +46,7 @@ % Build Koopman MPC controller MPC_edmd = getMPC(A_edmd,B_edmd,C_edmd,0,Q,R,Q,Np,-100, 100, xlift_min, xlift_max,'qpoases'); - MPC_koop = getMPC(A_koop_d,B_koop,C_koop,0,Q,R,Q,Np,-100, 100, xlift_min, xlift_max,'qpoases'); + MPC_koop = getMPC(A_koop,B_koop,C_koop,0,Q,R,Q,Np,-100, 100, xlift_min, xlift_max,'qpoases'); % Get Jacobian of the true dynamics (for local linearization MPC) x = sym('x',[2 1]); syms u; @@ -70,7 +71,7 @@ % Local linearization MPC Aloc = double(subs(Jx,[x;u],[x_nom(:,i);u_nom(:,i)])); % Get local linearization Bloc = double(subs(Ju,[x;u],[x_nom(:,i);u_nom(:,i)])); - Cloc = double(subs(f_ud_sym,[x;u],[x_nom(:,i);u_nom(:,i)])) - Aloc*x_nom(:,i) - Bloc*u_nom(:,i); + %Cloc = double(subs(f_ud_sym,[x;u],[x_nom(:,i);u_nom(:,i)])) - Aloc*x_nom(:,i) - Bloc*u_nom(:,i); [U_nom,~,optval] = solveMPCprob(Aloc,Bloc,eye(2),[],Q,R,Q,Np,-100, 100,[],[],x_nom(:,i),yr); % Get control input u_nom(:,i) = U_nom(1:m,1); if(optval == Inf) % Detect infeasibility @@ -85,12 +86,11 @@ x_edmd(:,i+1) = sim_timestep(deltaT, f_u, 0, x_edmd(:,i), u_edmd(:,i)); % Koopman e-func MPC -% z_koop(:,i) = phi_fun_v(x_koop(:,i)); % Lift -% disp(sum(sum(isnan(z_koop(:,i))))); -% u_koop(:,i) = MPC_koop(z_koop(:,i),yr) + K_nom*x_koop(:,i); % Get control input -% x_koop(:,i+1) = sim_timestep(deltaT, f_u, 0, x_koop(:,i), u_koop(:,i)); + z_koop(:,i) = phi_fun_v(x_koop(:,i)); % Lift + u_koop(:,i) = MPC_koop(z_koop(:,i),yr);% + K_nom*x_koop(:,i); % Get control input + x_koop(:,i+1) = sim_timestep(deltaT, f_u, 0, x_koop(:,i), u_koop(:,i)); - disp([u_nom(:,i), u_edmd(:,i) u_koop(:,i)]) + %disp([u_nom(:,i), u_edmd(:,i) u_koop(:,i)]) end if(isempty(ind_inf)) @@ -105,4 +105,7 @@ E_nom = norm(u_nom); E_edmd = norm(u_edmd); E_koop = norm(u_koop); + cost_nom = sum(diag(x_nom(:,2:end)'*Q*x_nom(:,2:end))) + sum(diag(u_nom'*R*u_nom)); + cost_edmd = sum(diag(x_edmd(:,2:end)'*Q*x_edmd(:,2:end))) + sum(diag(u_edmd'*R*u_edmd)); + cost_koop = sum(diag(x_koop(:,2:end)'*Q*x_koop(:,2:end))) + sum(diag(u_koop'*R*u_koop)); end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/sim_prediction.m b/scripts/Koopman-ID/utils/sim_prediction.m index 63d0e78..7f59afa 100644 --- a/scripts/Koopman-ID/utils/sim_prediction.m +++ b/scripts/Koopman-ID/utils/sim_prediction.m @@ -1,8 +1,8 @@ function [x,x_edmd,x_koop,mse_edmd_avg,mse_koop_avg,mse_edmd_std,mse_koop_std]... = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,f_u,liftFun,... - phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop_d,B_koop,C_koop) + phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop) - u = 5*rand(m,Nsim,Ntime)-2.5; + u = zeros(m,Nsim,Ntime); x = zeros(n,Nsim,Ntime+1); z_edmd = zeros(n_edmd,Nsim,Ntime+1); @@ -11,20 +11,19 @@ z_edmd(:,:,1) = liftFun(X0); z_koop(:,:,1) = phi_fun_v(X0); - - % Simulate all systems and initial points - K_mod = K_nom + randn(size(K_nom)); for i = 1:Ntime + %Controller: + u(:,:,i) = K_nom*x(:,:,i) + 2*rand()-1; + %True dynamics: - x(:,:,i+1) = sim_timestep(deltaT,f_u,0,x(:,:,i), K_mod*x(:,:,i)+u(:,:,i)); + x(:,:,i+1) = sim_timestep(deltaT,f_u,0,x(:,:,i), u(:,:,i)); %EDMD predictor: - z_edmd(:,:,i+1) = A_edmd*z_edmd(:,:,i) + B_edmd*(K_mod*C_edmd*z_edmd(:,:,i) + u(:,:,i)); + z_edmd(:,:,i+1) = A_edmd*z_edmd(:,:,i) + B_edmd*u(:,:,i); %Koopman eigenfunction predictor: - z_koop(:,:,i+1) = A_koop_d*z_koop(:,:,i) + ... - B_koop*(K_mod*C_koop*z_koop(:,:,i)+u(:,:,i)-K_nom*C_koop*z_koop(:,:,i)); + z_koop(:,:,i+1) = A_koop*z_koop(:,:,i) + B_koop*u(:,:,i); end % Calculate corresponding predictions and MSE From b2af0bdd7c87af1f42c2a10b67abcb21b640d6ac Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Sun, 11 Aug 2019 11:09:03 -0700 Subject: [PATCH 2/9] Added EDMD option, transient-case still has issues that (potentially) must be resolved --- scripts/Koopman-ID/construct_eigfuncs.m | 12 +++--- scripts/Koopman-ID/koopman_eigen_id_laplace.m | 20 ++++++---- scripts/Koopman-ID/main_comparison_pendulum.m | 11 ++++-- scripts/Koopman-ID/utils/extendedDMD.m | 38 +++++++++++++++++-- scripts/Koopman-ID/utils/learn_B_koop.m | 31 ++++++++++----- 5 files changed, 83 insertions(+), 29 deletions(-) diff --git a/scripts/Koopman-ID/construct_eigfuncs.m b/scripts/Koopman-ID/construct_eigfuncs.m index 0901348..417d3a2 100644 --- a/scripts/Koopman-ID/construct_eigfuncs.m +++ b/scripts/Koopman-ID/construct_eigfuncs.m @@ -1,5 +1,5 @@ function [A_koop, z_eigfun] = construct_eigfuncs(n, Ntraj, Ntime, ... - N_basis, A_nom, B_nom, K_nom, Xstr, deltaT) + N_basis, A_nom, B_nom, K_nom, Xstr, Xf, deltaT) %Identify lifted state space model using approximate Koopman invariant %subspace @@ -39,7 +39,7 @@ A_c = A_nom + B_nom*K_nom; A_c_d = expm(A_c*deltaT); %Discrete time dynamics matrix - cent = rand(n,N_basis)*2*pi - pi; + cent = rand(n,50)*2*pi - pi; rbf_type = 'gauss'; eps_rbf = 1; @@ -51,9 +51,11 @@ Y = []; Z_mplus1 = []; Z_m = []; + Xstr_shift = zeros(size(Xstr)); for i = 1 : Ntraj - X_mplus1 = reshape(Xstr(:,i,2:end),n,Ntime); - X_m = reshape(Xstr(:,i,1:end-1),n,Ntime); + Xstr_shift(:,i,:) = Xstr(:,i,:) - Xf(:,i); + X_mplus1 = reshape(Xstr_shift(:,i,2:end),n,Ntime); + X_m = reshape(Xstr_shift(:,i,1:end-1),n,Ntime); % Set up Y matrix (targets), Y(:,i) = x_(i+1) - A_nom*x_i Y = [Y X_mplus1-A_c_d*X_m]; @@ -72,7 +74,7 @@ N = size(Z_m,1); cvx_begin variable C(n,N); - minimize (norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro') + 0.01*norm(C,'fro')) + minimize (norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro') + 1*norm(C,'fro')) subject to {C*con1 == zeros(n)}; cvx_end diff --git a/scripts/Koopman-ID/koopman_eigen_id_laplace.m b/scripts/Koopman-ID/koopman_eigen_id_laplace.m index b81538c..c0aad29 100644 --- a/scripts/Koopman-ID/koopman_eigen_id_laplace.m +++ b/scripts/Koopman-ID/koopman_eigen_id_laplace.m @@ -110,9 +110,9 @@ Z_y = z_eigfun(Yacc); k=1; A_koop = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(Z_x,1)-n)]; - %A_koop = [A_koop; (Z_x'\Z_y(n/2+1:n,:)')']; - A_state = lasso(Z_x',Z_y(n/2+1:n,:)','Lambda',1e-5)'; - A_koop = [A_koop; A_state]; + A_koop = [A_koop; (Z_x'\Z_y(n/2+1:n,:)')']; + %A_state = lasso(Z_x',Z_y(n/2+1:n,:)','Lambda',1e-4, 'Alpha', 0.8)'; + %A_koop = [A_koop; A_state]; A_koop = [A_koop; [zeros(length(lambd),n) diag(lambd)]]; % Calculate projection of states onto eigenfunctions @@ -131,10 +131,16 @@ A_koop(:,1:n) = A_koop(:,1:n)-B_koop*K_nom; % Evaluate training error: -% Ypred = zeros(size(Yacc_c)); -% -% C_koop*(A_koop*phi_fun_v(Xacc_c)+B_koop*Uacc_c); -% disp(immse(Ypred,Yacc_c)); +% Ypred_c = zeros(size(Xstr_c(:,:,2:end))); +% Zpred = phi_fun_v(Xstr_c(:,:,1)); +% err = 0; +% for i = 1:Ntime +% Zpred = A_koop*Zpred+B_koop*Ustr_c(:,:,i); +% Ypred_c(:,:,i) = C_koop*Zpred; +% err = err + sum(sum((Ypred_c(:,:,i) - Xstr_c(:,:,i+1)).^2)); +% end +% err = err/(Ntime*Ntraj); +% disp(err); end diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index 8309a6b..1acf49a 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -52,7 +52,7 @@ plot_basis_koop = false; %Plots the basis functions if true xlim = [-1, 1]; %Plot limits ylim = [-1, 1]; %Plot limits -learn_type = 'multi-step'; %Learn B-matrix with single step or multi-step prediction horizon +learn_type = 'multi-step_mod'; %Learn B-matrix with single step or multi-step prediction horizon %Test simulation parameters: Nsim = 5; @@ -71,7 +71,7 @@ autonomous_learning = true; U_perturb = randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller [Xstr, Xacc, Yacc, Ustr, Uacc, timestr] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0_A, Xf_A ,K_nom,f_u,U_perturb, autonomous_learning); + Ntime,deltaT,X0_B, Xf_B ,K_nom,f_u,U_perturb, autonomous_learning); % Collect data to learn controlled dynamics: autonomous_learning = false; @@ -87,9 +87,14 @@ disp('Starting EDMD...'); tic [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_edmd,... rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... - ylim, Xacc, Yacc, Uacc, Xstr, A_nom, B_nom, K_nom, deltaT); + ylim, Xacc, Yacc, Uacc, Xstr, Xf_B, A_nom, B_nom, K_nom, deltaT); fprintf('EDMD done, execution time: %1.2f s \n', toc); +% basis_function_koop = 'koopman_efunc'; +% [A_koop, B_koop, C_koop, phi_fun_v] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_koop,... +% rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... +% ylim, Xacc, Yacc, Uacc, Xstr, Xf_B, A_nom, B_nom, K_nom, deltaT); + [A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id_laplace(n, m, Ntraj, Ntime, N_basis_koop,... basis_function_koop, rbf_type_koop, center_type_koop, eps_rbf_koop, ... N_lambda, lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Yacc, Xstr, Xacc_c,... diff --git a/scripts/Koopman-ID/utils/extendedDMD.m b/scripts/Koopman-ID/utils/extendedDMD.m index ef2d376..89c78f6 100644 --- a/scripts/Koopman-ID/utils/extendedDMD.m +++ b/scripts/Koopman-ID/utils/extendedDMD.m @@ -1,5 +1,5 @@ function [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m,Ntraj, Ntime, N_basis,basis_function,... - rbf_type, center_type, eps, plot_basis, xlim, ylim, Xacc, Yacc, Uacc, Xstr, A_nom, B_nom, K_nom, deltaT) + rbf_type, center_type, eps, plot_basis, xlim, ylim, Xacc, Yacc, Uacc, Xstr, Xf, A_nom, B_nom, K_nom, deltaT) %Identify lifted state space model using Extended Dynamic Mode %Decomposition @@ -57,8 +57,8 @@ case 'rbf' liftFun = @(xx)( [xx;rbf(xx,cent,rbf_type,eps)] ); case 'koopman_efunc' - [~, liftFun] = construct_eigfuncs(n, Ntraj, Ntime, N_basis, ... - A_nom, B_nom, K_nom, Xstr, deltaT); + [A_koop, liftFun] = construct_eigfuncs(n, Ntraj, Ntime, N_basis, ... + A_nom, B_nom, K_nom, Xstr, Xf, deltaT); liftFun = @(xx) [xx; liftFun(xx)]; end Nlift = length(liftFun(zeros(n,1))); @@ -80,7 +80,7 @@ C_edmd = M(Nlift+1:end,1:Nlift); % Add known structure (overwrite parts of the learned matrices): - A_edmd(n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; + A_edmd(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; C_edmd = zeros(size(C_edmd)); C_edmd(:,1:n) = eye(n); @@ -93,4 +93,34 @@ % plot(eig(Alift),'*') % cplot(1,0,0) % axis equal + + % *************** Force known terms of A-matrix *********************** + if strcmp(basis_function, 'koopman_efunc') + %Set up regression for A and B: + N = length(liftFun(ones(n,1))); + X = [Xlift; Uacc]; + Y = Yacc(n/2+1:n,:); + %X_mean = mean(X,2); + %X_std = std(X,0,2); + %X_std(find(X_std<1e-6)) = 1; + %X = (X-X_mean)./X_std; + %A_state = X'\Y'; + %A_state = A_state.*X_std; + A_state = lasso(X',Y','Lambda',1e-6, 'Alpha', 0.8); + + A_edmd = zeros(N); + A_edmd(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; + A_edmd(n/2+1:n,:) = A_state(1:N,:)'; + A_edmd(n+1:end,n+1:end) = A_koop; + + Y_kin = Yacc(1:n/2,:) - A_edmd(1:n/2,:)*Xlift; + B_kin = Uacc'\Y_kin'; + Ylift_mod= Ylift(n+1:end,:) - A_koop*Xlift(n+1:end,:); + B_mod = Uacc'\Ylift_mod'; + B_edmd = [B_kin'; A_state(N+1:end,:); B_mod']; + + %Subtract effect of nominal controller from eigenfunctions: + A_edmd(n+1:end,1:n) = A_edmd(n+1:end,1:n)-B_mod'*K_nom; + + end end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/learn_B_koop.m b/scripts/Koopman-ID/utils/learn_B_koop.m index 0ec27c2..d2174e6 100644 --- a/scripts/Koopman-ID/utils/learn_B_koop.m +++ b/scripts/Koopman-ID/utils/learn_B_koop.m @@ -62,9 +62,10 @@ end b = -b; - k = 10; - %B_koop = Q\b; % = vec(Blift) - B_koop = (Q'*Q + k*eye(size(Q,2)))\(Q'*b); %Regularize B-learning + k = 1e-3; + B_koop = Q\b; % = vec(Blift) + %B_koop = (Q'*Q + k*eye(size(Q,2)))\(Q'*b); %Regularize B-learning + %B_koop = lasso(Q,b,'Lambda',1e-2); B_koop = reshape(B_koop,size(A_koop,1),m); % Unvectorize case 'single-step' @@ -83,21 +84,31 @@ end case 'multi-step_mod' %Calculate residual after autonomous dynamics are subtracted +% Racc = []; +% Z_evol = zeros(length(phi_fun_v(zeros(n,1))),Ntime+1); +% for i = 1 : Ntraj +% Z_evol(:,1) = phi_fun_v(reshape(Xstr_c(:,i,1),n,1)); +% Z_y = phi_fun_v(reshape(Xstr_c(:,i,2:end),n,Ntime)); +% for j = 2 : Ntime+1 +% Z_evol(:,j) = A_koop*Z_evol(:,j-1); +% end +% Racc = [Racc Z_evol(:,2:end)-Z_y]; +% end +% +% B_koop = (Uacc_c'\Racc')'; Racc = []; + U_r_acc = []; Z_evol = zeros(length(phi_fun_v(zeros(n,1))),Ntime+1); for i = 1 : Ntraj Z_evol(:,1) = phi_fun_v(reshape(Xstr_c(:,i,1),n,1)); - Z_y = phi_fun_v(reshape(Xstr_c(:,i,2:end),n,Ntime)); for j = 2 : Ntime+1 Z_evol(:,j) = A_koop*Z_evol(:,j-1); end - Racc = [Racc Z_evol(:,2:end)-Z_y]; + Yres = C_koop*Z_evol(:,2:end)-reshape(Xstr_c(:,i,2:end),n,Ntime) ; + Racc = [Racc phi_fun_v(Yres)]; + U_r_acc = [U_r_acc reshape(Ustr_c(:,i,:),m,Ntime)]; end - B_koop = (Uacc_c'\Racc')'; - if sum(sum(isnan(B_koop))) > 0 - disp('Warning: NAN-values in B-matrix, terminating.') - return - end + B_koop = -(U_r_acc'\Racc')'; end end \ No newline at end of file From a6e767424e3258ccf8de2b3a9ba92087b63de486 Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Sun, 11 Aug 2019 12:04:19 -0700 Subject: [PATCH 3/9] Minor fixes --- scripts/Koopman-ID/main_comparison_pendulum.m | 18 +++++++++--------- scripts/Koopman-ID/utils/extendedDMD.m | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index 1acf49a..e6d02b5 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -90,15 +90,15 @@ ylim, Xacc, Yacc, Uacc, Xstr, Xf_B, A_nom, B_nom, K_nom, deltaT); fprintf('EDMD done, execution time: %1.2f s \n', toc); -% basis_function_koop = 'koopman_efunc'; -% [A_koop, B_koop, C_koop, phi_fun_v] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_koop,... -% rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... -% ylim, Xacc, Yacc, Uacc, Xstr, Xf_B, A_nom, B_nom, K_nom, deltaT); - -[A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id_laplace(n, m, Ntraj, Ntime, N_basis_koop,... - basis_function_koop, rbf_type_koop, center_type_koop, eps_rbf_koop, ... - N_lambda, lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Yacc, Xstr, Xacc_c,... - Yacc_c, Uacc_c, Xstr_c, Ustr_c, timestr, deltaT, learn_type); +basis_function_koop = 'koopman_efunc'; +[A_koop, B_koop, C_koop, phi_fun_v] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_koop,... + rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... + ylim, Xacc, Yacc, Uacc, Xstr, Xf_B, A_nom, B_nom, K_nom, deltaT); + +% [A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id_laplace(n, m, Ntraj, Ntime, N_basis_koop,... +% basis_function_koop, rbf_type_koop, center_type_koop, eps_rbf_koop, ... +% N_lambda, lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Yacc, Xstr, Xacc_c,... +% Yacc_c, Uacc_c, Xstr_c, Ustr_c, timestr, deltaT, learn_type); %% ************************ Analysis of Results *************************** diff --git a/scripts/Koopman-ID/utils/extendedDMD.m b/scripts/Koopman-ID/utils/extendedDMD.m index 89c78f6..db23618 100644 --- a/scripts/Koopman-ID/utils/extendedDMD.m +++ b/scripts/Koopman-ID/utils/extendedDMD.m @@ -120,7 +120,7 @@ B_edmd = [B_kin'; A_state(N+1:end,:); B_mod']; %Subtract effect of nominal controller from eigenfunctions: - A_edmd(n+1:end,1:n) = A_edmd(n+1:end,1:n)-B_mod'*K_nom; + %A_edmd(n+1:end,1:n) = A_edmd(n+1:end,1:n)-B_mod'*K_nom; end end \ No newline at end of file From 61240f8041c19200b7a655f14d3d6c42c41fe0dd Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Mon, 12 Aug 2019 15:53:47 -0700 Subject: [PATCH 4/9] Minor fixes and refactoring of code to improve performance and readability of KEEDMD implementation --- scripts/Koopman-ID/KEEDMD.m | 60 +++++++++++++++++ scripts/Koopman-ID/construct_eigfuncs.m | 7 +- scripts/Koopman-ID/main_comparison_pendulum.m | 65 ++++++++----------- .../utils/evaluate_model_performance.m | 29 +++++---- scripts/Koopman-ID/utils/extendedDMD.m | 51 ++------------- .../utils/find_nominal_model_ctrl.m | 6 +- .../Koopman-ID/utils/sim_closed_loop_mpc.m | 16 ++--- scripts/Koopman-ID/utils/sim_prediction.m | 21 +++++- 8 files changed, 138 insertions(+), 117 deletions(-) create mode 100644 scripts/Koopman-ID/KEEDMD.m diff --git a/scripts/Koopman-ID/KEEDMD.m b/scripts/Koopman-ID/KEEDMD.m new file mode 100644 index 0000000..d10d561 --- /dev/null +++ b/scripts/Koopman-ID/KEEDMD.m @@ -0,0 +1,60 @@ +function [A_koop, B_koop, C_koop, liftFun] = KEEDMD(n,m,Ntraj, Ntime, N_basis,... + pow_eig_pairs, Xacc, Yacc, Uacc, Xstr, Xf, A_nom, B_nom, K_nom, deltaT) + %Identify lifted state space model using Extended Dynamic Mode + %Decomposition + + %Inputs: + % n - Number of states + % m - Number of control inputs + % N_basis - Number of basis functions to use + % basis_function - Type of basis functions (only rbfs implemented) + % rbf-type - Type of rbf function + % center_type - What centers to use for rbfs ('data'/'random') + % eps - Width of rbf if rbf type has width parameter + % plot_basis - (true/false) determines to plot basis functions + % xlim - Plot limits x-axis + % ylim - Plot limits y-axis + % Xacc - Trajectory data + % Yacc - Trajectory data at next time step + % Uacc - Control input for trajectory data + + %Outputs: + % A_edmd - Passive dynamics matrix in lifted space + % B_edmd - Actuation matrix in lifted space + % C_edmd - Projection matrix from lifted space to outputs + + + [A_eigfuncs, liftFun] = construct_eigfuncs(n, Ntraj, Ntime, N_basis, ... + pow_eig_pairs, A_nom, B_nom, K_nom, Xstr, Xf, deltaT); + liftFun = @(xx) [xx; liftFun(xx)]; + + Nlift = length(liftFun(zeros(n,1))); + Xlift = liftFun(Xacc); + Ylift = liftFun(Yacc); + %fprintf('Lifting DONE, time = %1.2f s \n', toc); + + % ********************** Build predictor ********************************* + + %Set up regression for A and B: + X = [Xlift; Uacc]; + Y = Yacc(n/2+1:n,:); + A_state = lasso(X',Y','Lambda',1e-4, 'Alpha', 0.8); + + %Perform regression and enforce known structure: + A_koop = zeros(Nlift); + A_koop(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_koop,2)-n)]; + A_koop(n/2+1:n,:) = A_state(1:Nlift,:)'; + A_koop(n+1:end,n+1:end) = A_eigfuncs; + + Y_kin = Yacc(1:n/2,:) - A_koop(1:n/2,:)*Xlift; + B_kin = Uacc'\Y_kin'; + Ylift_mod= Ylift(n+1:end,:) - A_eigfuncs*Xlift(n+1:end,:); + B_mod = (Uacc-K_nom*Xacc)'\Ylift_mod'; + B_koop = [B_kin'; A_state(Nlift+1:end,:); B_mod']; + + C_koop = zeros(n,size(A_koop,1)); + C_koop(1:n,1:n) = eye(n); + + %Subtract effect of nominal controller from A: + A_koop(n+1:end,1:n) = A_koop(n+1:end,1:n)-B_mod'*K_nom; +end \ No newline at end of file diff --git a/scripts/Koopman-ID/construct_eigfuncs.m b/scripts/Koopman-ID/construct_eigfuncs.m index 417d3a2..ba71c83 100644 --- a/scripts/Koopman-ID/construct_eigfuncs.m +++ b/scripts/Koopman-ID/construct_eigfuncs.m @@ -1,5 +1,5 @@ function [A_koop, z_eigfun] = construct_eigfuncs(n, Ntraj, Ntime, ... - N_basis, A_nom, B_nom, K_nom, Xstr, Xf, deltaT) + N_basis, pow_eig_pairs, A_nom, B_nom, K_nom, Xstr, Xf, deltaT) %Identify lifted state space model using approximate Koopman invariant %subspace @@ -39,7 +39,7 @@ A_c = A_nom + B_nom*K_nom; A_c_d = expm(A_c*deltaT); %Discrete time dynamics matrix - cent = rand(n,50)*2*pi - pi; + cent = rand(n,N_basis)*2*pi - pi; rbf_type = 'gauss'; eps_rbf = 1; @@ -88,8 +88,7 @@ [V_a,~] = eig(A_c_d'); %Define powers (only implemented for n=2): - max_power = 5; - a = 0 : max_power; + a = 0 : pow_eig_pairs; [P,Q] = meshgrid(a,a); c=cat(2,P',Q'); powers=reshape(c,[],2); diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index e6d02b5..13a740c 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -28,10 +28,13 @@ Ntime = 200; %Length of each trajectory (# of time steps) Ntraj = 20; %Number of trajectories deltaT = 0.01; %Time step length of simulation -X0_A = (2*pi*rand(n,Ntraj)-pi); -Xf_A = zeros(n,Ntraj); %Terminal points for each trajectory for learning A -X0_B = (2*pi*rand(n,Ntraj)-pi); %Sample initial points for each trajectory for learning B -Xf_B = 0.6*(2*pi*rand(n,Ntraj)-pi); %Terminal points for each trajectory for learning B +rng('shuffle'); %Set seed of random number generator +%X0 = 0.8*(2*pi*rand(n,Ntraj)-pi); +%Xf = 0.2*(2*pi*rand(n,Ntraj)-pi); %Terminal points for each trajectory for learning A +X0 = (2*rand(n,Ntraj)-1); +X0 = pi*X0./vecnorm(X0); +Xf = zeros(n,Ntraj); %Terminal points for each trajectory for learning A + %E-DMD parameters: N_basis_edmd = 36; %Number of basis functions @@ -42,44 +45,33 @@ plot_basis_edmd = false; %Plots the basis functions if true %Koopman eigenfunction parameters: -N_basis_koop = 20; %Number of basis functions -basis_function_koop = 'rbf'; %Type of basis function -rbf_type_koop = 'thinplate'; %RBF type -center_type_koop = 'data'; %Centers of rbf ('data' - pick random points from data set, 'random' pick points uniformly at random -eps_rbf_koop = 1; %RBF width -lambda_type = 'eDMD'; %Specifies how to choose candidate lambdas -N_lambda = 10; %Number of candidate eigenvalues (when random lambdas are used) +N_basis_diff = 50; %Number of RBFs to use for lifting when learning the diffeomorphism +pow_eig_pairs = 5; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system plot_basis_koop = false; %Plots the basis functions if true xlim = [-1, 1]; %Plot limits ylim = [-1, 1]; %Plot limits -learn_type = 'multi-step_mod'; %Learn B-matrix with single step or multi-step prediction horizon %Test simulation parameters: Nsim = 5; -Tsim = 2; +Tsim = 1; plot_results = true; -X0_sim = 2*rand(n,Nsim)-1; +X0_sim = 0.8*(2*pi*rand(n,Nsim)-pi); +Xf_sim = 0.2*(2*pi*rand(n,Nsim)-pi); %% ************************** Data Collection ***************************** disp('Starting data collection...'); tic % Calculate nominal model with Jacobian and find nominal control gains: -[A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R); +[A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R,[0; 0]); %Linearization around 0. % Collect data to learn autonomous dynamics: -autonomous_learning = true; -U_perturb = randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller +U_perturb = 2*randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller [Xstr, Xacc, Yacc, Ustr, Uacc, timestr] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0_B, Xf_B ,K_nom,f_u,U_perturb, autonomous_learning); - -% Collect data to learn controlled dynamics: -autonomous_learning = false; -U_perturb_c = 4*rand(Ntime,Ntraj)-2; %Add normally distributed noise to nominal controller -[Xstr_c, Xacc_c, Yacc_c, Ustr_c, Uacc_c, timestr_c] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0_B,Xf_B,K_nom,f_u,U_perturb_c, autonomous_learning); + Ntime,deltaT,X0, Xf ,K_nom,f_u,U_perturb, true); fprintf('Data collection done, execution time: %1.2f s \n', toc); + %% *********************** Model Identification *************************** % Identify model using E-DMD to get eigenvalues and model to use for @@ -87,31 +79,26 @@ disp('Starting EDMD...'); tic [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_edmd,... rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... - ylim, Xacc, Yacc, Uacc, Xstr, Xf_B, A_nom, B_nom, K_nom, deltaT); + ylim, Xacc, Yacc, Uacc); fprintf('EDMD done, execution time: %1.2f s \n', toc); -basis_function_koop = 'koopman_efunc'; -[A_koop, B_koop, C_koop, phi_fun_v] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_koop,... - rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... - ylim, Xacc, Yacc, Uacc, Xstr, Xf_B, A_nom, B_nom, K_nom, deltaT); - -% [A_koop, B_koop, C_koop, phi_fun_v] = koopman_eigen_id_laplace(n, m, Ntraj, Ntime, N_basis_koop,... -% basis_function_koop, rbf_type_koop, center_type_koop, eps_rbf_koop, ... -% N_lambda, lambda_type, A_edmd, A_nom, B_nom, K_nom, Xacc, Yacc, Xstr, Xacc_c,... -% Yacc_c, Uacc_c, Xstr_c, Ustr_c, timestr, deltaT, learn_type); +disp('Starting KEEDMD...'); tic +[A_koop, B_koop, C_koop, phi_fun_v] = KEEDMD(n,m,Ntraj, Ntime, N_basis_diff,... + pow_eig_pairs, Xacc, Yacc, Uacc, Xstr, Xf, A_nom, B_nom, K_nom, deltaT); +fprintf('KEEDMD done, execution time: %1.2f s \n', toc); %% ************************ Analysis of Results *************************** -[mse_edmd_avg, mse_koop_avg, mse_edmd_std, mse_koop_std,... +[mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop,... cost_nom, cost_edmd, cost_koop] = ... evaluate_model_performance(K_nom, A_edmd, B_edmd, C_edmd, A_koop, B_koop, ... - C_koop, Nsim, X0_sim, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); + C_koop, Nsim, X0_sim, Xf_sim, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); fprintf('-----------------------------------------------------------------\n'); - fprintf('Predicition performance: \nAverage MSE: \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nStandard Deviation MSE: \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... - mse_edmd_avg, mse_koop_avg, mse_edmd_std, mse_koop_std); + fprintf('Predicition performance: \nAverage MSE: \n -Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nStandard Deviation MSE: \n - Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... + mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std); fprintf('-----------------------------------------------------------------\n'); - fprintf('Closed loop performance (MPC): \nAverage MSE: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nEnergy consumption proxy: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f, \nAccumulated MPC cost: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... + fprintf('Closed loop performance (MPC): \nAverage MSE: \n - Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nEnergy consumption proxy: \n - Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f, \nAccumulated MPC cost: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop, cost_nom, cost_edmd, cost_koop); fprintf('-----------------------------------------------------------------\n'); \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/evaluate_model_performance.m b/scripts/Koopman-ID/utils/evaluate_model_performance.m index 1461aad..ee7e8f1 100644 --- a/scripts/Koopman-ID/utils/evaluate_model_performance.m +++ b/scripts/Koopman-ID/utils/evaluate_model_performance.m @@ -1,8 +1,8 @@ -function [mse_edmd_avg, mse_koop_avg, mse_edmd_std, mse_koop_std,... +function [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop,... cost_nom, cost_edmd, cost_koop] = ... evaluate_model_performance(K_nom, A_edmd, B_edmd, C_edmd, A_koop, B_koop, ... - C_koop, Nsim, X0, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results) + C_koop, Nsim, X0, Xf, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results) n = size(C_koop,1); m = size(B_koop,2); @@ -11,8 +11,9 @@ Ntime = Tsim/deltaT; %Prediction task: - [x,x_edmd,x_koop,mse_edmd_avg,mse_koop_avg,mse_edmd_std,mse_koop_std]... - = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,f_u,liftFun,... + [x,x_origin, x_edmd,x_koop, mse_origin_avg, mse_edmd_avg,mse_koop_avg,... + mse_origin_std, mse_edmd_std,mse_koop_std]... + = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,Xf,f_u,liftFun,... phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop); %Closed loop task: @@ -25,29 +26,31 @@ %Plot results if plot_results - lw=4; + lw=2; afigure(1) h1 = subplot(2,2,1); hold on for i = 1 %Only plot first trajectory - plot([0:Ntime]*deltaT,reshape(x(1,i,:),Ntime+1,1),'linewidth',lw); hold on - plot([0:Ntime]*deltaT,reshape(x_edmd(1,i,:),Ntime+1,1), '--r','linewidth',lw) - plot([0:Ntime]*deltaT,reshape(x_koop(1,i,:),Ntime+1,1), '--g','linewidth',lw-1) + plot([0:Ntime]*deltaT,reshape(x(1,i,:),Ntime+1,1),':b','linewidth',lw); hold on + plot([0:Ntime]*deltaT,reshape(x_origin(1,i,:),Ntime+1,1), 'k','linewidth',lw) + plot([0:Ntime]*deltaT,reshape(x_edmd(1,i,:),Ntime+1,1), 'r','linewidth',lw) + plot([0:Ntime]*deltaT,reshape(x_koop(1,i,:),Ntime+1,1), 'g','linewidth',lw) end axis([0 Tsim min(x(1,1,:))-0.2 max(x(1,1,:))+0.2]) title('Prediction comparison, 1st trajectory - $x_1$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); set(gca,'fontsize',20) - LEG = legend('True','EDMD','Koopman e-func','location','best'); + LEG = legend('True','Linearization at 0', 'EDMD','Koopman e-func','location','best'); set(LEG,'interpreter','latex') h1.Position = h1.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot h2 = subplot(2,2,2); hold on for i = 1 %Only plot first trajectory - plot([0:Ntime]*deltaT,reshape(x(2,i,:),Ntime+1,1),'linewidth',lw); hold on - plot([0:Ntime]*deltaT,reshape(x_edmd(2,i,:),Ntime+1,1), '--r','linewidth',lw) - plot([0:Ntime]*deltaT,reshape(x_koop(2,i,:),Ntime+1,1), '--g','linewidth',lw-1) + plot([0:Ntime]*deltaT,reshape(x(2,i,:),Ntime+1,1),':b','linewidth',lw); hold on + plot([0:Ntime]*deltaT,reshape(x_origin(2,i,:),Ntime+1,1), 'k','linewidth',lw) + plot([0:Ntime]*deltaT,reshape(x_edmd(2,i,:),Ntime+1,1), 'r','linewidth',lw) + plot([0:Ntime]*deltaT,reshape(x_koop(2,i,:),Ntime+1,1), 'g','linewidth',lw) end axis([0 Tsim min(x(2,1,:))-0.2 max(x(2,1,:))+0.2]) title('Prediction comparison, 1st trajectory - $x_2$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); @@ -89,7 +92,7 @@ %axis([0 Tsim min(x_edmd(1,1,:))-0.15 max(x_edmd(1,1,:))+0.15]) title('Closed loop trajectory tracking - $x_1$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); set(gca,'fontsize',20) - LEG = legend('Reference', 'Nominal controller','EDMD','Koopman e-func','location','southeast'); + LEG = legend('Reference', 'Linearization at 0','EDMD','Koopman e-func','location','southeast'); set(LEG,'interpreter','latex') h4.Position = h4.Position + [0 0 0 0.125]; %Modify size of 4th subplot end diff --git a/scripts/Koopman-ID/utils/extendedDMD.m b/scripts/Koopman-ID/utils/extendedDMD.m index db23618..33b59d6 100644 --- a/scripts/Koopman-ID/utils/extendedDMD.m +++ b/scripts/Koopman-ID/utils/extendedDMD.m @@ -1,5 +1,5 @@ function [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m,Ntraj, Ntime, N_basis,basis_function,... - rbf_type, center_type, eps, plot_basis, xlim, ylim, Xacc, Yacc, Uacc, Xstr, Xf, A_nom, B_nom, K_nom, deltaT) + rbf_type, center_type, eps, plot_basis, xlim, ylim, Xacc, Yacc, Uacc) %Identify lifted state space model using Extended Dynamic Mode %Decomposition @@ -56,11 +56,8 @@ switch basis_function case 'rbf' liftFun = @(xx)( [xx;rbf(xx,cent,rbf_type,eps)] ); - case 'koopman_efunc' - [A_koop, liftFun] = construct_eigfuncs(n, Ntraj, Ntime, N_basis, ... - A_nom, B_nom, K_nom, Xstr, Xf, deltaT); - liftFun = @(xx) [xx; liftFun(xx)]; end + Nlift = length(liftFun(zeros(n,1))); Xlift = liftFun(Xacc); Ylift = liftFun(Yacc); @@ -80,47 +77,9 @@ C_edmd = M(Nlift+1:end,1:Nlift); % Add known structure (overwrite parts of the learned matrices): - A_edmd(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; - C_edmd = zeros(size(C_edmd)); - C_edmd(:,1:n) = eye(n); + %A_edmd(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; + %C_edmd = zeros(size(C_edmd)); + %C_edmd(:,1:n) = eye(n); %fprintf('Regression done, time = %1.2f s \n', toc); - - % Plot the eigenvalues - % cplot = @(r,x0,y0) plot(x0 + r*cos(linspace(0,2*pi,200)),y0 + r*sin(linspace(0,2*pi,200)),'-'); - % afigure - % hold on - % plot(eig(Alift),'*') - % cplot(1,0,0) - % axis equal - - % *************** Force known terms of A-matrix *********************** - if strcmp(basis_function, 'koopman_efunc') - %Set up regression for A and B: - N = length(liftFun(ones(n,1))); - X = [Xlift; Uacc]; - Y = Yacc(n/2+1:n,:); - %X_mean = mean(X,2); - %X_std = std(X,0,2); - %X_std(find(X_std<1e-6)) = 1; - %X = (X-X_mean)./X_std; - %A_state = X'\Y'; - %A_state = A_state.*X_std; - A_state = lasso(X',Y','Lambda',1e-6, 'Alpha', 0.8); - - A_edmd = zeros(N); - A_edmd(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; - A_edmd(n/2+1:n,:) = A_state(1:N,:)'; - A_edmd(n+1:end,n+1:end) = A_koop; - - Y_kin = Yacc(1:n/2,:) - A_edmd(1:n/2,:)*Xlift; - B_kin = Uacc'\Y_kin'; - Ylift_mod= Ylift(n+1:end,:) - A_koop*Xlift(n+1:end,:); - B_mod = Uacc'\Ylift_mod'; - B_edmd = [B_kin'; A_state(N+1:end,:); B_mod']; - - %Subtract effect of nominal controller from eigenfunctions: - %A_edmd(n+1:end,1:n) = A_edmd(n+1:end,1:n)-B_mod'*K_nom; - - end end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m b/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m index 295dc5d..d7a397b 100644 --- a/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m +++ b/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m @@ -1,4 +1,4 @@ -function [A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n, m, f_u, Q, R) +function [A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n, m, f_u, Q, R, x0) %Linearize around origin and design linear feedback control law using LQR %Inputs: @@ -13,8 +13,8 @@ x = sym('x',[n;1]); u = sym('u',[m;1]); - A_nom = double(subs(jacobian(f_u(0,x,u),x),[x;u],[0;0;0])); - B_nom = double(subs(jacobian(f_u(0,x,u),u),[x;u],[0;0;0])); + A_nom = double(subs(jacobian(f_u(0,x,u),x),[x;u],[x0;0])); + B_nom = double(subs(jacobian(f_u(0,x,u),u),[x;u],[x0;0])); K_nom = -lqr(A_nom,B_nom,Q,R); end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m index 59954bb..9e1104a 100644 --- a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m +++ b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m @@ -36,9 +36,9 @@ z_koop(:,1) = phi_fun_v(traj_d(:,1)); % Define Koopman controller - Q = 1000*eye(2); % Weight matrices + Q = 5*eye(2); % Weight matrices R = 0.01; - Tpred = 0.1; % Prediction horizon + Tpred = Tsim/2;%0.1; % Prediction horizon Np = round(Tpred / deltaT); traj_d = [traj_d traj_d(:,end).*ones(n,Np)]; %Add extra points to trajectory to allow prediction horizon xlift_min = [];%[ymin ; nan(Nlift-1,1)]; % Constraints @@ -86,11 +86,9 @@ x_edmd(:,i+1) = sim_timestep(deltaT, f_u, 0, x_edmd(:,i), u_edmd(:,i)); % Koopman e-func MPC - z_koop(:,i) = phi_fun_v(x_koop(:,i)); % Lift - u_koop(:,i) = MPC_koop(z_koop(:,i),yr);% + K_nom*x_koop(:,i); % Get control input + z_koop(:,i) = phi_fun_v(x_koop(:,i)); %Lift + u_koop(:,i) = MPC_koop(z_koop(:,i),yr);% Get control input x_koop(:,i+1) = sim_timestep(deltaT, f_u, 0, x_koop(:,i), u_koop(:,i)); - - %disp([u_nom(:,i), u_edmd(:,i) u_koop(:,i)]) end if(isempty(ind_inf)) @@ -105,7 +103,7 @@ E_nom = norm(u_nom); E_edmd = norm(u_edmd); E_koop = norm(u_koop); - cost_nom = sum(diag(x_nom(:,2:end)'*Q*x_nom(:,2:end))) + sum(diag(u_nom'*R*u_nom)); - cost_edmd = sum(diag(x_edmd(:,2:end)'*Q*x_edmd(:,2:end))) + sum(diag(u_edmd'*R*u_edmd)); - cost_koop = sum(diag(x_koop(:,2:end)'*Q*x_koop(:,2:end))) + sum(diag(u_koop'*R*u_koop)); + cost_nom = sum(diag((x_nom(:,2:end)-traj_d(:,2:end))'*Q*(x_nom(:,2:end)-traj_d(:,2:end)))) + sum(diag(u_nom'*R*u_nom)); + cost_edmd = sum(diag((x_edmd(:,2:end)-traj_d(:,2:end))'*Q*(x_edmd(:,2:end)-traj_d(:,2:end)))) + sum(diag(u_edmd'*R*u_edmd)); + cost_koop = sum(diag((x_koop(:,2:end)-traj_d(:,2:end))'*Q*(x_koop(:,2:end)-traj_d(:,2:end)))) + sum(diag(u_koop'*R*u_koop)); end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/sim_prediction.m b/scripts/Koopman-ID/utils/sim_prediction.m index 7f59afa..a462854 100644 --- a/scripts/Koopman-ID/utils/sim_prediction.m +++ b/scripts/Koopman-ID/utils/sim_prediction.m @@ -1,24 +1,35 @@ -function [x,x_edmd,x_koop,mse_edmd_avg,mse_koop_avg,mse_edmd_std,mse_koop_std]... - = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,f_u,liftFun,... +function [x,x_origin, x_edmd,x_koop, mse_origin_avg, mse_edmd_avg,mse_koop_avg,... + mse_origin_std, mse_edmd_std,mse_koop_std]... + = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,Xf,f_u,liftFun,... phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop) u = zeros(m,Nsim,Ntime); + % Find linearized model at the origin: + [A_origin, B_origin, ~] = find_nominal_model_ctrl(n,m,f_u,eye(n),eye(m),[0; 0]); + f_origin = @(t,x,u) A_origin*x + B_origin*u; + x = zeros(n,Nsim,Ntime+1); + x_origin = zeros(n,Nsim,Ntime+1); z_edmd = zeros(n_edmd,Nsim,Ntime+1); z_koop = zeros(n_koop,Nsim,Ntime+1); + x(:,:,1) = X0; + x_origin(:,:,1) = X0; z_edmd(:,:,1) = liftFun(X0); z_koop(:,:,1) = phi_fun_v(X0); % Simulate all systems and initial points for i = 1:Ntime %Controller: - u(:,:,i) = K_nom*x(:,:,i) + 2*rand()-1; + u(:,:,i) = K_nom*(x(:,:,i)-Xf) + 2*rand()-1; %True dynamics: x(:,:,i+1) = sim_timestep(deltaT,f_u,0,x(:,:,i), u(:,:,i)); + %Linearization at origin: + x_origin(:,:,i+1) = sim_timestep(deltaT,f_origin,0,x_origin(:,:,i), u(:,:,i)); + %EDMD predictor: z_edmd(:,:,i+1) = A_edmd*z_edmd(:,:,i) + B_edmd*u(:,:,i); @@ -29,17 +40,21 @@ % Calculate corresponding predictions and MSE x_edmd = zeros(n,Nsim,Ntime+1); x_koop = zeros(n,Nsim,Ntime+1); + mse_origin = zeros(Nsim,1); mse_edmd = zeros(Nsim,1); mse_koop = zeros(Nsim,1); for i = 1 : Nsim x_edmd(:,i,:) = C_edmd * reshape(z_edmd(:,i,:),n_edmd,Ntime+1); %EDMD predictions x_koop(:,i,:) = C_koop * reshape(z_koop(:,i,:),n_koop,Ntime+1); %Koopman eigenfunction predictions + mse_origin(i) = immse(reshape(x(:,i,:),n,Ntime+1), reshape(x_origin(:,i,:),n,Ntime+1)); mse_edmd(i) = immse(reshape(x(:,i,:),n,Ntime+1), reshape(x_edmd(:,i,:),n,Ntime+1)); mse_koop(i) = immse(reshape(x(:,i,:),n,Ntime+1), reshape(x_koop(:,i,:),n,Ntime+1)); end + mse_origin_avg = mean(mse_origin); mse_edmd_avg = mean(mse_edmd); mse_koop_avg = mean(mse_koop); + mse_origin_std = std(mse_origin); mse_edmd_std = std(mse_edmd); mse_koop_std = std(mse_koop); end \ No newline at end of file From 108a4ff0edbead3bdb05a5a2b61cf83f88e6cedb Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Thu, 15 Aug 2019 20:31:36 -0700 Subject: [PATCH 5/9] Modified model evaluation and improved plotting and error reporting --- .../utils/evaluate_model_performance.m | 147 ++++++++++++------ .../Koopman-ID/utils/sim_closed_loop_mpc.m | 10 +- 2 files changed, 104 insertions(+), 53 deletions(-) diff --git a/scripts/Koopman-ID/utils/evaluate_model_performance.m b/scripts/Koopman-ID/utils/evaluate_model_performance.m index ee7e8f1..83f0a54 100644 --- a/scripts/Koopman-ID/utils/evaluate_model_performance.m +++ b/scripts/Koopman-ID/utils/evaluate_model_performance.m @@ -17,19 +17,28 @@ phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop); %Closed loop task: - [x_track,x_edmd_track,x_koop_track,mse_nom_track, mse_edmd_track,... - mse_koop_track,t_plot,traj_d, E_nom, E_edmd, E_koop,... - cost_nom, cost_edmd, cost_koop] = ... - sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... - Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,... - C_edmd,A_koop,B_koop,C_koop); + q = [1 5 50]; + r = [0.01 0.01 0.01]; + for i = 1 : length(q) + Q = q(i)*eye(n); + R = r(i)*eye(m); + [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... + mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... + cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... + sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... + Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,... + C_edmd,A_koop,B_koop,C_koop,Q,R); + end %Plot results if plot_results lw=2; + font_size = 16; + set(gcf,'units','pixel') + close all; %TODO: Remove after figure design afigure(1) - h1 = subplot(2,2,1); + subplot(3,2,1); hold on for i = 1 %Only plot first trajectory plot([0:Ntime]*deltaT,reshape(x(1,i,:),Ntime+1,1),':b','linewidth',lw); hold on @@ -38,13 +47,16 @@ plot([0:Ntime]*deltaT,reshape(x_koop(1,i,:),Ntime+1,1), 'g','linewidth',lw) end axis([0 Tsim min(x(1,1,:))-0.2 max(x(1,1,:))+0.2]) - title('Prediction comparison, 1st trajectory - $x_1$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); - set(gca,'fontsize',20) - LEG = legend('True','Linearization at 0', 'EDMD','Koopman e-func','location','best'); + title('\textbf{Prediction Performance}','interpreter','latex'); + xlabel('Time [s]','interpreter','latex'); + ylabel('$x_1$','interpreter','latex'); + set(gca,'fontsize',font_size) + LEG = legend({'True','Lin at 0', 'EDMD','KEEDMD'},'location','best', 'NumColumns',2); set(LEG,'interpreter','latex') - h1.Position = h1.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot + %h1.Position = h1.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot - h2 = subplot(2,2,2); + %h2 = subplot(2,2,2); + h2 = subplot(3,2,3) hold on for i = 1 %Only plot first trajectory plot([0:Ntime]*deltaT,reshape(x(2,i,:),Ntime+1,1),':b','linewidth',lw); hold on @@ -53,47 +65,86 @@ plot([0:Ntime]*deltaT,reshape(x_koop(2,i,:),Ntime+1,1), 'g','linewidth',lw) end axis([0 Tsim min(x(2,1,:))-0.2 max(x(2,1,:))+0.2]) - title('Prediction comparison, 1st trajectory - $x_2$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); - set(gca,'fontsize',20) + %title('Prediction comparison, 1st trajectory - $x_2$','interpreter','latex'); + xlabel('Time [s]','interpreter','latex'); + ylabel('$x_2$','interpreter','latex'); + set(gca,'fontsize',font_size) %LEG = legend('True','EDMD','Koopman e-func','location','southwest'); set(LEG,'interpreter','latex') - h2.Position = h2.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot + %h2.Position = h2.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot % Plot trajectories Learning - h3 = subplot(2,2,3); - hold on - for i=1:Ntraj - scatter(Xstr(1,i,1),Xstr(2,i,1),'+') - p(i) = plot(squeeze(Xstr(1,i,:)),squeeze(Xstr(2,i,:)),':k','linewidth',1); - %alpha(p(i),0.2) - end - for i = 1 : Nsim - plot(reshape(x(1,i,:),Ntime+1,1),reshape(x(2,i,:),Ntime+1,1),'-k') - plot(reshape(x_edmd(1,i,:),Ntime+1,1),reshape(x_edmd(2,i,:),Ntime+1,1),'-r') - plot(reshape(x_koop(1,i,:),Ntime+1,1),reshape(x_koop(2,i,:),Ntime+1,1),'-g') - end - %scatter(cent(1,:),cent(2,:),'o') - %axis equal - xaxis([-5 5]) - yaxis([-5 5]) - xlabel('x') - xlabel('y') - %legend('True','EDMD','Koopman e-func') - title('Training and simulated trajectories','interpreter','latex'); - h3.Position = h3.Position + [0 0 0 0.125]; %Modify size of 3rd subplot - set(gcf, 'Position', [0, 0, 1670, 980]) %Modify size of figure window +% h3 = subplot(2,2,3); +% hold on +% for i=1:Ntraj +% scatter(Xstr(1,i,1),Xstr(2,i,1),'+') +% p(i) = plot(squeeze(Xstr(1,i,:)),squeeze(Xstr(2,i,:)),':k','linewidth',1); +% %alpha(p(i),0.2) +% end +% for i = 1 : Nsim +% plot(reshape(x(1,i,:),Ntime+1,1),reshape(x(2,i,:),Ntime+1,1),'-k') +% plot(reshape(x_edmd(1,i,:),Ntime+1,1),reshape(x_edmd(2,i,:),Ntime+1,1),'-r') +% plot(reshape(x_koop(1,i,:),Ntime+1,1),reshape(x_koop(2,i,:),Ntime+1,1),'-g') +% end +% %scatter(cent(1,:),cent(2,:),'o') +% %axis equal +% xaxis([-5 5]) +% yaxis([-5 5]) +% xlabel('x') +% xlabel('y') +% %legend('True','EDMD','Koopman e-func') +% title('Training and simulated trajectories','interpreter','latex'); +% h3.Position = h3.Position + [0 0 0 0.125]; %Modify size of 3rd subplot + %Closed loop plot: - h4 = subplot(2,2,4); - plot(t_plot,traj_d(1,:),':b','linewidth',lw); hold on - plot(t_plot,x_track(1,:),'k','linewidth',lw); hold on - plot(t_plot,x_edmd_track(1,:),'--r','linewidth',lw); hold on - plot(t_plot,x_koop_track(1,:),'--g','linewidth',lw); hold on - %axis([0 Tsim min(x_edmd(1,1,:))-0.15 max(x_edmd(1,1,:))+0.15]) - title('Closed loop trajectory tracking - $x_1$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); - set(gca,'fontsize',20) - LEG = legend('Reference', 'Linearization at 0','EDMD','Koopman e-func','location','southeast'); - set(LEG,'interpreter','latex') - h4.Position = h4.Position + [0 0 0 0.125]; %Modify size of 4th subplot + h4 = subplot(3,2,[2, 4]); + plot(t_plot,traj_d(1,:),'-b','linewidth',lw); hold on + lin_typ = {'-', '--', '-.'}; + for i = 1 : length(q) + plot(t_plot,x_track{i}(1,:),strcat(lin_typ{i},'k'),'linewidth',lw); hold on + plot(t_plot,x_edmd_track{i}(1,:),strcat(lin_typ{i},'r'),'linewidth',lw); hold on + plot(t_plot,x_koop_track{i}(1,:),strcat(lin_typ{i},'g'),'linewidth',lw); hold on + end + %axis([0 Tsim min(x_edmd(1,1,:))-0.15 max(x_edmd(1,1,:))+0.15]) + title('\textbf{Closed Loop Tracking Performance}','interpreter','latex'); + xlabel('Time [s]','interpreter','latex'); + ylabel('$x_1$','interpreter','latex'); + set(gca,'fontsize',font_size) + LEG = legend({'Reference', ... + strcat('Lin at 0$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('EDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),... + strcat('Lin at 0$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('EDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),... + strcat('Lin at 0$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('EDMD$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(3)/r(3)),'}$')},... + 'location','southeast','NumColumns',2); + set(LEG,'Interpreter','latex') + %h4.Position = h4.Position + [0 0 0 0.125]; %Modify size of 4th subplot + set(gcf, 'Position', [0, 0, 1200, 600]) %Modify size of figure window + + %Prediction table: + set(h2,'Units','pixels'); + cnames = {'Mean MSE', 'Std MSE'}; + rnames = {'Linearization at 0', 'EDMD', 'KEEDMD'}; + data = [mse_origin_avg mse_edmd_avg mse_koop_avg;... + mse_origin_std mse_edmd_std mse_koop_std]'; + height = 75; + pos = [h2.Position(1) h2.Position(2)-height-70 h2.Position(3) height]; + col_width = {107 107}; + pos_title = [pos(1) pos(2)+pos(4) pos(3) 20]; + uitable('Data', data, 'ColumnName', cnames, 'RowName', rnames,'Position', pos, 'ColumnWidth', col_width,'FontSize',12); + txt_title = uicontrol('Style', 'text','Position', pos_title, 'String', 'Prediction performance over 5 trajectories','FontSize',14); + + %Closed loop table: + set(h4,'Units','pixels'); + cnames = {strcat('q/r=',num2str(q(1)/r(1))) strcat('q/r=',num2str(q(2)/r(2))) strcat('q/r=',num2str(q(3)/r(3)))}; + rnames = {'Linearization at 0', 'EDMD', 'KEEDMD'}; + data = [cost_nom{1} cost_edmd{1} cost_koop{1};... + cost_nom{2} cost_edmd{2} cost_koop{2};... + cost_nom{3} cost_edmd{3} cost_koop{3}]'; + height = 75; + pos = [h4.Position(1) h4.Position(2)-height-70 h4.Position(3) height]; + col_width = {71 71}; + pos_title = [pos(1) pos(2)+pos(4) pos(3) 20]; + uitable('Data', data, 'ColumnName', cnames, 'RowName', rnames,'Position', pos, 'ColumnWidth', col_width,'FontSize',12); + txt_title = uicontrol('Style', 'text','Position', pos_title, 'String', 'Closed loop trajectory tracking performance (MPC Cost)','FontSize',14); end end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m index 9e1104a..3380cc4 100644 --- a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m +++ b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m @@ -2,7 +2,7 @@ cost_nom, cost_edmd, cost_koop]... = sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,Tsim,... f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,... - B_koop,C_koop) + B_koop,C_koop,Q,R) %Set up trajectory to track: t = 0 : deltaT : Tsim; @@ -36,8 +36,6 @@ z_koop(:,1) = phi_fun_v(traj_d(:,1)); % Define Koopman controller - Q = 5*eye(2); % Weight matrices - R = 0.01; Tpred = Tsim/2;%0.1; % Prediction horizon Np = round(Tpred / deltaT); traj_d = [traj_d traj_d(:,end).*ones(n,Np)]; %Add extra points to trajectory to allow prediction horizon @@ -69,8 +67,10 @@ yr = traj_d(:,i:i+Np-1); % Local linearization MPC - Aloc = double(subs(Jx,[x;u],[x_nom(:,i);u_nom(:,i)])); % Get local linearization - Bloc = double(subs(Ju,[x;u],[x_nom(:,i);u_nom(:,i)])); + %Aloc = double(subs(Jx,[x;u],[x_nom(:,i);u_nom(:,i)])); % Get local linearization + %Bloc = double(subs(Ju,[x;u],[x_nom(:,i);u_nom(:,i)])); + Aloc = double(subs(Jx,[x;u],[[0 0]';0])); % Get local linearization + Bloc = double(subs(Ju,[x;u],[[0 0]';0])); %Cloc = double(subs(f_ud_sym,[x;u],[x_nom(:,i);u_nom(:,i)])) - Aloc*x_nom(:,i) - Bloc*u_nom(:,i); [U_nom,~,optval] = solveMPCprob(Aloc,Bloc,eye(2),[],Q,R,Q,Np,-100, 100,[],[],x_nom(:,i),yr); % Get control input u_nom(:,i) = U_nom(1:m,1); From 291923fc8d80201350b9b087b7f17e7cf47f9735 Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Sat, 17 Aug 2019 19:59:52 -0700 Subject: [PATCH 6/9] First commit continuous implementation. Not yet working, must refine methodology --- scripts/Koopman-ID/KEEDMD.m | 60 +++-- scripts/Koopman-ID/construct_eigfuncs.m | 59 ++--- scripts/Koopman-ID/main_comparison_pendulum.m | 29 +-- scripts/Koopman-ID/movingslope.m | 219 ++++++++++++++++++ scripts/Koopman-ID/num_diff.m | 7 + scripts/Koopman-ID/rbf_dot.m | 53 +++++ scripts/Koopman-ID/rbf_grad.m | 4 +- .../Koopman-ID/test_eigfunction_generation.m | 162 ++++++------- scripts/Koopman-ID/utils/collect_data.m | 14 +- .../utils/evaluate_model_performance.m | 27 ++- scripts/Koopman-ID/utils/sim_prediction.m | 9 +- 11 files changed, 461 insertions(+), 182 deletions(-) create mode 100644 scripts/Koopman-ID/movingslope.m create mode 100644 scripts/Koopman-ID/num_diff.m create mode 100644 scripts/Koopman-ID/rbf_dot.m diff --git a/scripts/Koopman-ID/KEEDMD.m b/scripts/Koopman-ID/KEEDMD.m index d10d561..a06456e 100644 --- a/scripts/Koopman-ID/KEEDMD.m +++ b/scripts/Koopman-ID/KEEDMD.m @@ -1,5 +1,5 @@ function [A_koop, B_koop, C_koop, liftFun] = KEEDMD(n,m,Ntraj, Ntime, N_basis,... - pow_eig_pairs, Xacc, Yacc, Uacc, Xstr, Xf, A_nom, B_nom, K_nom, deltaT) + pow_eig_pairs, Xstr, Ustr, Xf, A_nom, B_nom, K_nom, deltaT) %Identify lifted state space model using Extended Dynamic Mode %Decomposition @@ -23,38 +23,62 @@ % B_edmd - Actuation matrix in lifted space % C_edmd - Projection matrix from lifted space to outputs - - [A_eigfuncs, liftFun] = construct_eigfuncs(n, Ntraj, Ntime, N_basis, ... - pow_eig_pairs, A_nom, B_nom, K_nom, Xstr, Xf, deltaT); + % ************************** Prepare data ***************************** + Xstr_shift = zeros(size(Xstr)); %Shift dynamics such that origin is fixed point + X = []; + X_dot = []; + U = []; + for i = 1 : Ntraj + Xstr_shift(:,i,:) = Xstr(:,i,:) - Xf(:,i); + X = [X reshape(Xstr_shift(:,i,:),n,Ntime+1)]; + X_dot = [X_dot num_diff(reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3)),deltaT)]; + U = [U reshape(Ustr(:,i,:),m,Ntime+1)]; + end + + % ******************** Construct eigenfunctions *********************** + + [A_eigfuncs, liftFun] = construct_eigfuncs(n, N_basis,pow_eig_pairs, ... + A_nom, B_nom, K_nom, X, X_dot); + + %Perform lifting liftFun = @(xx) [xx; liftFun(xx)]; - Nlift = length(liftFun(zeros(n,1))); - Xlift = liftFun(Xacc); - Ylift = liftFun(Yacc); + Xlift = []; + Xlift_dot = []; + for i = 1 : Ntraj + Xlift_temp = liftFun(reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3))); + Xlift = [Xlift Xlift_temp]; + Xlift_dot = [Xlift_dot num_diff(Xlift_temp,deltaT)]; + end + %fprintf('Lifting DONE, time = %1.2f s \n', toc); % ********************** Build predictor ********************************* %Set up regression for A and B: - X = [Xlift; Uacc]; - Y = Yacc(n/2+1:n,:); - A_state = lasso(X',Y','Lambda',1e-4, 'Alpha', 0.8); + X_vel = [Xlift; U]; + Y_vel = Xlift_dot(n/2+1:n,:); + A_vel = lasso(X_vel',Y_vel','Lambda',1e-1, 'Alpha', 0.8); %Perform regression and enforce known structure: A_koop = zeros(Nlift); - A_koop(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_koop,2)-n)]; - A_koop(n/2+1:n,:) = A_state(1:Nlift,:)'; + A_koop(1:n/2,:) = [zeros(n/2) eye(n/2) zeros(n/2,size(A_koop,2)-n)]; + A_koop(n/2+1:n,:) = A_vel(1:Nlift,:)'; A_koop(n+1:end,n+1:end) = A_eigfuncs; - Y_kin = Yacc(1:n/2,:) - A_koop(1:n/2,:)*Xlift; - B_kin = Uacc'\Y_kin'; - Ylift_mod= Ylift(n+1:end,:) - A_eigfuncs*Xlift(n+1:end,:); - B_mod = (Uacc-K_nom*Xacc)'\Ylift_mod'; - B_koop = [B_kin'; A_state(Nlift+1:end,:); B_mod']; + Y_kin = X_dot(1:n/2,:) - A_koop(1:n/2,:)*Xlift; + X_kin = U; + B_kin = X_kin'\Y_kin'; + + Y_eig = Xlift_dot(n+1:end,:) - A_eigfuncs*Xlift(n+1:end,:); + X_eig = U-K_nom*X; + B_eig = X_eig'\Y_eig'; + + B_koop = [B_kin'; A_vel(Nlift+1:end,:); B_eig']; C_koop = zeros(n,size(A_koop,1)); C_koop(1:n,1:n) = eye(n); %Subtract effect of nominal controller from A: - A_koop(n+1:end,1:n) = A_koop(n+1:end,1:n)-B_mod'*K_nom; + A_koop(n+1:end,1:n) = A_koop(n+1:end,1:n)-B_eig'*K_nom; end \ No newline at end of file diff --git a/scripts/Koopman-ID/construct_eigfuncs.m b/scripts/Koopman-ID/construct_eigfuncs.m index ba71c83..48928f7 100644 --- a/scripts/Koopman-ID/construct_eigfuncs.m +++ b/scripts/Koopman-ID/construct_eigfuncs.m @@ -1,5 +1,5 @@ -function [A_koop, z_eigfun] = construct_eigfuncs(n, Ntraj, Ntime, ... - N_basis, pow_eig_pairs, A_nom, B_nom, K_nom, Xstr, Xf, deltaT) +function [A_koop, z_eigfun] = construct_eigfuncs(n, N_basis, pow_eig_pairs,... + A_nom, B_nom, K_nom, X, X_dot) %Identify lifted state space model using approximate Koopman invariant %subspace @@ -37,55 +37,39 @@ disp('Starting autonomous dynamics learning...'); tic - A_c = A_nom + B_nom*K_nom; - A_c_d = expm(A_c*deltaT); %Discrete time dynamics matrix - cent = rand(n,N_basis)*2*pi - pi; + A_cl = A_nom + B_nom*K_nom; + cent = 2*pi*rand(n,N_basis) - pi; rbf_type = 'gauss'; - eps_rbf = 1; - + eps_rbf = 2; + % Set up nonlinear transformations and their gradients - zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; - zfun_grad = @(xx) [eye(2); rbf_grad(xx',cent,rbf_type,eps_rbf)]; + zfun = @(xx) [xx; rbf(xx,cent,rbf_type,eps_rbf)]; + zfun_grad = @(xx) [eye(2); rbf_grad(xx,cent,rbf_type,eps_rbf)]; + zfun_dot = @(xx, xx_dot) [xx_dot; rbf_dot(xx,xx_dot,cent,rbf_type,eps_rbf)]; - % Prepare data matrices - Y = []; - Z_mplus1 = []; - Z_m = []; - Xstr_shift = zeros(size(Xstr)); - for i = 1 : Ntraj - Xstr_shift(:,i,:) = Xstr(:,i,:) - Xf(:,i); - X_mplus1 = reshape(Xstr_shift(:,i,2:end),n,Ntime); - X_m = reshape(Xstr_shift(:,i,1:end-1),n,Ntime); - - % Set up Y matrix (targets), Y(:,i) = x_(i+1) - A_nom*x_i - Y = [Y X_mplus1-A_c_d*X_m]; - - % Set up Z_mplus1 matrix (inputs), phi(x_(i+1)) - Z_mplus1 = [Z_mplus1 zfun(X_mplus1')]; - - % Set up Z_m matrix (inputs), phi(x_i) - Z_m = [Z_m zfun(X_m')]; - end + % Set up Z and Z_dot matrices: + Z = zfun(X); + Z_dot = zfun_dot(X,X_dot); %Set up constraint matrix - con1 = zfun_grad([0 0]); - + con1 = zfun_grad([0; 0]); + disp('Solving optimization problem...') - N = size(Z_m,1); - cvx_begin + N = size(Z,1); + cvx_begin variable C(n,N); - minimize (norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro') + 1*norm(C,'fro')) + minimize (norm(X_dot + C*Z_dot - A_cl*(X+C*Z),'fro') + 1*norm(C,'fro')) subject to {C*con1 == zeros(n)}; cvx_end - fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro'),immse(Y, A_c_d*C*Z_m - C*Z_mplus1)) + fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(X_dot + C*Z_dot - A_cl*(X+C*Z),'fro'),immse(X_dot+C*Z_dot, A_cl*(X+C*Z))) %fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) - yfun = @(xx) xx + C*zfun(xx'); % Full learned diffeomorphism + yfun = @(xx) xx + C*zfun(xx); % Full learned diffeomorphism % Calculate eigenfunctions for linearized system - [~,D] = eig(A_c_d); - [V_a,~] = eig(A_c_d'); + [~,D] = eig(A_cl); + [V_a,~] = eig(A_cl'); %Define powers (only implemented for n=2): a = 0 : pow_eig_pairs; @@ -102,6 +86,7 @@ % Construct eigenfunctions for nonlinear system z_eigfun = @(xx) phifun_mat(phifun, gfun(yfun(xx))); + %z_eigfun = @(xx) phifun(gfun(yfun(xx))); A_koop = diag(lambd); end diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index 13a740c..2c860dd 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -45,8 +45,8 @@ plot_basis_edmd = false; %Plots the basis functions if true %Koopman eigenfunction parameters: -N_basis_diff = 50; %Number of RBFs to use for lifting when learning the diffeomorphism -pow_eig_pairs = 5; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system +N_basis_diff = 100; %Number of RBFs to use for lifting when learning the diffeomorphism +pow_eig_pairs = 2; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system plot_basis_koop = false; %Plots the basis functions if true xlim = [-1, 1]; %Plot limits ylim = [-1, 1]; %Plot limits @@ -66,9 +66,9 @@ [A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R,[0; 0]); %Linearization around 0. % Collect data to learn autonomous dynamics: -U_perturb = 2*randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller +U_perturb = 0.5*randn(Ntime+1,Ntraj); %Add normally distributed noise to nominal controller [Xstr, Xacc, Yacc, Ustr, Uacc, timestr] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0, Xf ,K_nom,f_u,U_perturb, true); + Ntime,deltaT,X0, Xf ,K_nom,f_u,U_perturb); fprintf('Data collection done, execution time: %1.2f s \n', toc); @@ -84,21 +84,14 @@ disp('Starting KEEDMD...'); tic [A_koop, B_koop, C_koop, phi_fun_v] = KEEDMD(n,m,Ntraj, Ntime, N_basis_diff,... - pow_eig_pairs, Xacc, Yacc, Uacc, Xstr, Xf, A_nom, B_nom, K_nom, deltaT); + pow_eig_pairs, Xstr, Ustr, Xf, A_nom, B_nom, K_nom, deltaT); fprintf('KEEDMD done, execution time: %1.2f s \n', toc); %% ************************ Analysis of Results *************************** - +disp('Starting analysis of results...'); tic [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... - mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop,... - cost_nom, cost_edmd, cost_koop] = ... - evaluate_model_performance(K_nom, A_edmd, B_edmd, C_edmd, A_koop, B_koop, ... - C_koop, Nsim, X0_sim, Xf_sim, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); - - fprintf('-----------------------------------------------------------------\n'); - fprintf('Predicition performance: \nAverage MSE: \n -Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nStandard Deviation MSE: \n - Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... - mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std); - fprintf('-----------------------------------------------------------------\n'); - fprintf('Closed loop performance (MPC): \nAverage MSE: \n - Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \nEnergy consumption proxy: \n - Linearization at origin: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f, \nAccumulated MPC cost: \n - Nominal: %1.5f \n - EDMD: %1.5f \n - Koopman eigenfunctions: %1.5f \n', ... - mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop, cost_nom, cost_edmd, cost_koop); - fprintf('-----------------------------------------------------------------\n'); \ No newline at end of file + cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(K_nom, ... + A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, X0_sim, Xf_sim, ... + Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); +fprintf('Analysis done, execution time: %1.2f s \n', toc); + \ No newline at end of file diff --git a/scripts/Koopman-ID/movingslope.m b/scripts/Koopman-ID/movingslope.m new file mode 100644 index 0000000..6c8b2e8 --- /dev/null +++ b/scripts/Koopman-ID/movingslope.m @@ -0,0 +1,219 @@ +function Dvec = movingslope(vec,supportlength,modelorder,dt) +% movingslope: estimate local slope for a sequence of points, using a sliding window +% usage: Dvec = movingslope(vec) +% usage: Dvec = movingslope(vec,supportlength) +% usage: Dvec = movingslope(vec,supportlength,modelorder) +% usage: Dvec = movingslope(vec,supportlength,modelorder,dt) +% +% +% movingslope uses filter to determine the slope of a curve stored +% as an equally (unit) spaced sequence of points. A patch is applied +% at each end where filter will have problems. A non-unit spacing +% can be supplied. +% +% Note that with a 3 point window and equally spaced data sequence, +% this code should be similar to gradient. However, with wider +% windows this tool will be more robust to noisy data sequences. +% +% +% arguments: (input) +% vec - row of column vector, to be differentiated. vec must be of +% length at least 2. +% +% supportlength - (OPTIONAL) scalar integer - defines the number of +% points used for the moving window. supportlength may be no +% more than the length of vec. +% +% supportlength must be at least 2, but no more than length(vec) +% +% If supportlength is an odd number, then the sliding window +% will be central. If it is an even number, then the window +% will be slid backwards by one element. Thus a 2 point window +% will result in a backwards differences used, except at the +% very first point, where a forward difference will be used. +% +% DEFAULT: supportlength = 3 +% +% modelorder - (OPTIONAL) - scalar - Defines the order of the windowed +% model used to estimate the slope. When model order is 1, the +% model is a linear one. If modelorder is less than supportlength-1. +% then the sliding window will be a regression one. If modelorder +% is equal to supportlength-1, then the window will result in a +% sliding Lagrange interpolant. +% +% modelorder must be at least 1, but not exceeding +% min(10,supportlength-1) +% +% DEFAULT: modelorder = 1 +% +% dt - (OPTIONAL) - scalar - spacing for sequences which do not have +% a unit spacing. +% +% DEFAULT: dt = 1 +% +% arguments: (output) +% Dvec = vector of derivative estimates, Dvec will be of the same size +% and shape as is vec. +% +% +% Example: +% Estimate the first derivative using a 7 point window with first through +% fourth order models in the sliding window. Note that the higher order +% approximations provide better accuracy on this curve with no noise. +% +% t = 0:.1:1; +% vec = exp(t); +% +% Dvec = movingslope(vec,7,1,.1) +% Dvec = +% Columns 1 through 7 +% 1.3657 1.3657 1.3657 1.3657 1.5093 1.668 1.8435 +% Columns 8 through 11 +% 2.0373 2.0373 2.0373 2.0373 +% +% Dvec = movingslope(vec,7,2,.1) +% Dvec = +% Columns 1 through 7 +% 0.95747 1.0935 1.2296 1.3657 1.5093 1.668 1.8435 +% Columns 8 through 11 +% 2.0373 2.2403 2.4433 2.6463 +% +% Dvec = movingslope(vec,7,3,.1) +% Dvec = +% Columns 1 through 7 +% 1.0027 1.1049 1.2206 1.3498 1.4918 1.6487 1.8221 +% Columns 8 through 11 +% 2.0137 2.2268 2.4602 2.7138 +% +% Dvec = movingslope(vec,7,4,.1) +% Dvec = +% Columns 1 through 7 +% 0.99988 1.1052 1.2214 1.3498 1.4918 1.6487 1.8221 +% Columns 8 through 11 +% 2.0137 2.2255 2.4597 2.7181 +% +% +% Example: +% Estimate the slope of a noisy curve, using a locally quadratic +% approximation. In this case, use a straight line so that we know +% the true slope should be 1. Use a wide window, since we have +% noisy data. +% +% t = 0:100; +% vec = t + randn(size(t)); +% Dvec = movingslope(vec,10,2,1) +% mean(Dvec) +% ans = +% 1.0013 +% std(Dvec) +% ans = +% 0.10598 +% +% By way of comparison, gradient gives a much noisier estimate +% of the slope of this curve. +% +% std(gradient(vec)) +% ans = +% 0.69847 +% +% +% Example: +% As a time test, generate random data vector of length 500000. +% Compute the slopes using a window of width 10. +% +% vec = rand(1,500000); +% tic +% Dvec = movingslope(vec,10,2); +% toc +% +% Elapsed time is 0.626021 seconds. +% +% +% See also: gradient +% +% +% Author: John D'Errico +% e-mail: woodchips@rochester.rr.com +% Release: 1.0 +% Release date: 10/19/07 + +% how long is vec? is it a vector? +if (nargin==0) + help movingslope + return +end +if ~isvector(vec) + error('vec must be a row or column vector') +end +n = length(vec); + +% supply defaults +if (nargin<4) || isempty(dt) + dt = 1; +end +if (nargin<3) || isempty(modelorder) + modelorder = 1; +end +if (nargin<2) || isempty(supportlength) + supportlength = 3; +end + +% check the parameters for problems +if (length(supportlength)~=1) || (supportlength<=1) || (supportlength>n) || (supportlength~=floor(supportlength)) + error('supportlength must be a scalar integer, >= 2, and no more than length(vec)') +end +if (length(modelorder)~=1) || (modelorder<1) || (modelorder>min(10,supportlength-1)) || (modelorder~=floor(modelorder)) + error('modelorder must be a scalar integer, >= 1, and no more than min(10,supportlength-1)') +end +if (length(dt)~=1) || (dt<0) + error('dt must be a positive scalar numeric variable') +end + +% now build the filter coefficients to estimate the slope +if mod(supportlength,2) == 1 + parity = 1; % odd parity +else + parity = 0; +end +s = (supportlength-parity)/2; +t = ((-s+1-parity):s)'; +coef = getcoef(t,supportlength,modelorder); + +% Apply the filter to the entire vector +f = filter(-coef,1,vec); +Dvec = zeros(size(vec)); +Dvec(s+(1:(n-supportlength+1))) = f(supportlength:end); + +% patch each end +vec = vec(:); +for i = 1:s + % patch the first few points + t = (1:supportlength)' - i; + coef = getcoef(t,supportlength,modelorder); + + Dvec(i) = coef*vec(1:supportlength); + + % patch the end points + if i<(s + parity) + t = (1:supportlength)' - supportlength + i - 1; + coef = getcoef(t,supportlength,modelorder); + Dvec(n - i + 1) = coef*vec(n + (0:(supportlength-1)) + 1 - supportlength); + end +end + +% scale by the supplied spacing +Dvec = Dvec/dt; +% all done + +end % mainline end + +% ========================================================= +% subfunction, used to compute the filter coefficients +function coef = getcoef(t,supportlength,modelorder) +% Note: bsxfun would have worked here as well, but some people +% might not yet have that release of matlab. +A = repmat(t,1,modelorder+1).^repmat(0:modelorder,supportlength,1); +pinvA = pinv(A); +% we only need the linear term +coef = pinvA(2,:); +end % nested function end diff --git a/scripts/Koopman-ID/num_diff.m b/scripts/Koopman-ID/num_diff.m new file mode 100644 index 0000000..22acd14 --- /dev/null +++ b/scripts/Koopman-ID/num_diff.m @@ -0,0 +1,7 @@ +function diff = num_diff(X, deltaT) + + diff = zeros(size(X)); + for k = 1 : size(X,1) + diff(k,:) = movingslope(X(k,:),4,2,deltaT); + end +end \ No newline at end of file diff --git a/scripts/Koopman-ID/rbf_dot.m b/scripts/Koopman-ID/rbf_dot.m new file mode 100644 index 0000000..d8ef5c0 --- /dev/null +++ b/scripts/Koopman-ID/rbf_dot.m @@ -0,0 +1,53 @@ +% X: nxN +% C: rbf center(s) - nx1 or nxK, if C is n x K, then the result is STACKED +% over the centers K, i.e., of dimension K x N +% eps: kernel width for Gaussian type rbfs (optional) +% k: polyharmonic coefficient for polyharmonic rbfs (optional) +% Note that all RBFs are symmetrical so evaluation of of a single point on +% multiple centers can by done as evaluation of multiple points (the +% centers in this case) on a single point (the center) + +function Y = rbf_dot(X,X_dot,C, type, eps, k ) + type = lower(type); + if(~exist('eps','var') || isempty(eps)) + eps = 1; + end + if(~exist('k','var') || isempty(k)) + k = 1; + end + + N = size(X,2); %number of points + n = size(X,1); + Cbig = C; + Y = zeros(size(C,2),N); + for i = 1:size(Cbig,2) + C = Cbig(:,i); + C = repmat( C,1, N ); + if (n>1) + r_squared = sum( (X - C).^2 ); + else + r_squared = abs( (X - C).^2 ); + end + switch type + case 'thinplate' + error('Gradient of RBF type not implemented') + %y = r_squared.*log(sqrt(r_squared)); % + 0.5*sqrt(r_squared); % makes nonnegative, try to impose nonnegativity of K + %y(isnan(y)) = 0; + case 'gauss' + y = -2*eps^2.*(X-C).*exp(-eps^2*r_squared); + %y = exp(-eps^2*r_squared); + case 'invquad' + error('Gradient of RBF type not implemented') + %y = 1 ./ (1+eps^2*r_squared); + case 'invmultquad' + error('Gradient of RBF type not implemented') + %y = 1 ./ sqrt((1+eps^2*r_squared)); + case 'polyharmonic' + error('Gradient of RBF type not implemented') + %y = r_squared.^(k/2).*log(sqrt(r_squared)); + %y(isnan(y)) = 0; + otherwise + error('RBF type not recognized') + end + Y(i,:) = sum(y.*X_dot,1); + end diff --git a/scripts/Koopman-ID/rbf_grad.m b/scripts/Koopman-ID/rbf_grad.m index 85fbf1b..37baa32 100644 --- a/scripts/Koopman-ID/rbf_grad.m +++ b/scripts/Koopman-ID/rbf_grad.m @@ -34,7 +34,7 @@ %y = r_squared.*log(sqrt(r_squared)); % + 0.5*sqrt(r_squared); % makes nonnegative, try to impose nonnegativity of K %y(isnan(y)) = 0; case 'gauss' - y = -2*eps^2.*(X-C)'.*exp(-eps^2*r_squared); + y = -2*eps^2.*(X-C).*exp(-eps^2*r_squared); %y = exp(-eps^2*r_squared); case 'invquad' error('Gradient of RBF type not implemented') @@ -49,5 +49,5 @@ otherwise error('RBF type not recognize') end - Y(i,:) = y; + Y(i,:) = y'; end diff --git a/scripts/Koopman-ID/test_eigfunction_generation.m b/scripts/Koopman-ID/test_eigfunction_generation.m index 4c1676a..76868c4 100644 --- a/scripts/Koopman-ID/test_eigfunction_generation.m +++ b/scripts/Koopman-ID/test_eigfunction_generation.m @@ -13,108 +13,100 @@ Ntime = 200; %Length of each trajectory (# of time steps) Ntraj = 10; %Number of trajectories deltaT = 0.01; %Time step length of simulation -X0_A = 2*rand(n,Ntraj)-1; %Sample initial points for each trajectory for learning A -X0_A = 0.95*pi*X0_A./vecnorm(X0_A,2,1); %Normalize so initial points lie on unit circle -Xf_A = zeros(n,Ntraj); %Terminal points for each trajectory for learning A -X0_B = 0.6*(2*pi*rand(n,Ntraj)-pi); %Sample initial points for each trajectory for learning B -Xf_B = 0.6*(2*pi*rand(n,Ntraj)-pi); %Terminal points for each trajectory for learning B +X0 = 2*rand(n,Ntraj)-1; %Sample initial points for each trajectory for learning A +X0 = 0.95*pi*X0./vecnorm(X0,2,1); %Normalize so initial points lie on unit circle +Xf = zeros(n,Ntraj); %Terminal points for each trajectory for learning A %% ************************** Data Collection ***************************** disp('Starting data collection...'); tic % Calculate nominal model with Jacobian and find nominal control gains: -[A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R); +[A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R,[0;0]); % Collect data to learn autonomous dynamics: autonomous_learning = true; -U_perturb = 0.0*randn(Ntime,Ntraj); %Add normally distributed noise to nominal controller -[Xstr, Xacc, Yacc, Ustr, Uacc, timestr] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0_A, Xf_A ,K_nom,f_u,U_perturb, autonomous_learning); +U_perturb = 0.0*randn(Ntime+1,Ntraj); %Add normally distributed noise to nominal controller +[Xstr, Xacc, Yacc, Ustr, U, timestr] = collect_data(n,m,Ntraj,... + Ntime,deltaT,X0, Xf ,K_nom,f_u,U_perturb); fprintf('Data collection done, execution time: %1.2f s \n', toc); %% ************** Prepare data and learn diffeomorphism h ***************** -A_c = A_nom + B_nom*K_nom; -A_c_d = expm(A_c*deltaT); %Discrete time dynamics matrix -N_basis = 100; -cent = rand(n,N_basis)*2*pi - pi; -rbf_type = 'gauss'; -eps_rbf = 1; -zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; -zfun_grad = @(xx) [eye(2); rbf_grad(xx',cent,rbf_type,eps_rbf)]; -% x = sym('x',[1,n]); -% zfun_grad = zfun(x); -Y = []; -Z_mplus1 = []; -Z_m = []; -for i = 1 : Ntraj - X_mplus1 = reshape(Xstr(:,i,2:end),n,Ntime); - X_m = reshape(Xstr(:,i,1:end-1),n,Ntime); - - % Set up Y matrix (targets), Y(:,i) = x_(i+1) - A_nom*x_i - Y = [Y X_mplus1-A_c_d*X_m]; - - % Set up Z_mplus1 matrix (inputs), phi(x_(i+1)) - Z_mplus1 = [Z_mplus1 zfun(X_mplus1')]; - - % Set up Z_m matrix (inputs), phi(x_i) - Z_m = [Z_m zfun(X_m')]; -end + Xstr_shift = zeros(size(Xstr)); %Shift dynamics such that origin is fixed point + X = []; + X_dot = []; + U = []; + for i = 1 : Ntraj + Xstr_shift(:,i,:) = Xstr(:,i,:) - Xf(:,i); + X = [X reshape(Xstr_shift(:,i,:),n,Ntime+1)]; + X_dot = [X_dot num_diff(reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3)),deltaT)]; + U = [U reshape(Ustr(:,i,:),m,Ntime+1)]; + end -%Set up constraint matrix -con1 = zfun_grad([0 0]); - -disp('Solving optimization problem...') -N = size(Z_m,1); -cvx_begin - variable C(n,N); - minimize (norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro') + 0.01*norm(C,'fro')) - subject to - {C*con1 == zeros(n)}; -cvx_end -fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(Y - (A_c_d*C*Z_m - C*Z_mplus1),'fro'),immse(Y, A_c_d*C*Z_m - C*Z_mplus1)) -fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) - -yfun = @(xx) xx + C*zfun(xx'); % Full learned diffeomorphism -%% Calculate eigenfunctions for linearized system -[V,D] = eig(A_c_d); -[V_a,D_a] = eig(A_c_d'); - -%Define powers (only implemented for n=2): -max_power = 3; -a = 0 : max_power; -[P,Q] = meshgrid(a,a); -c=cat(2,P',Q'); -powers=reshape(c,[],2); - -linfunc = @(xx) (xx'*V_a)'; -phifun = @(xx) (prod(linfunc(xx).^(powers')))'; -lambd = prod(diag(D).^(powers'))'; - -%% Construct scaling function -gfun = @(xx) xx./pi; %Scale state space into unit cube - -%% Construct eigenfunctions for nonlinear system -phi_nonlin = @(xx) phifun(gfun(yfun(xx))); -A_eig = diag(lambd); + N_basis = 100; + A_cl = A_nom + B_nom*K_nom; + cent = 2*pi*rand(n,N_basis) - pi; + rbf_type = 'gauss'; + eps_rbf = 2; + + % Set up nonlinear transformations and their gradients + zfun = @(xx) [xx; rbf(xx,cent,rbf_type,eps_rbf)]; + zfun_grad = @(xx) [eye(2); rbf_grad(xx,cent,rbf_type,eps_rbf)]; + zfun_dot = @(xx, xx_dot) [xx_dot; rbf_dot(xx,xx_dot,cent,rbf_type,eps_rbf)]; + + % Set up Z and Z_dot matrices: + Z = zfun(X); + Z_dot = zfun_dot(X,X_dot); + %Set up constraint matrix + con1 = zfun_grad([0; 0]); + + disp('Solving optimization problem...') + N = size(Z,1); + cvx_begin + variable C(n,N); + minimize (norm(X_dot + C*Z_dot - A_cl*(X+C*Z),'fro') + 1*norm(C,'fro')) + subject to + {C*con1 == zeros(n)}; + cvx_end + fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(X_dot + C*Z_dot - A_cl*(X+C*Z),'fro'),immse(X_dot+C*Z_dot, A_cl*(X+C*Z))) + %fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) + + yfun = @(xx) xx + C*zfun(xx); % Full learned diffeomorphism + + % Calculate eigenfunctions for linearized system + [~,D] = eig(A_cl); + [V_a,~] = eig(A_cl'); + + %Define powers (only implemented for n=2): + pow_eig_pairs = 3; + a = 0 : pow_eig_pairs; + [P,Q] = meshgrid(a,a); + c=cat(2,P',Q'); + powers=reshape(c,[],2); + + linfunc = @(xx) (xx'*V_a)'; + phifun = @(xx) (prod(linfunc(xx).^(powers')))'; + lambd = prod(diag(D).^(powers'))'; + + % Construct scaling function + gfun = @(xx) xx./pi; %Scale state space into unit cube + + % Construct eigenfunctions for nonlinear system + z_eigfun = @(xx) phifun_mat(phifun, gfun(yfun(xx))); + %z_eigfun = @(xx) phifun(gfun(yfun(xx))); + A_koop = diag(lambd); %% Check how well the evolution of the eigenfunctions are described by the eigenvalues on linearized system: -X_test = zeros(n,Ntime+1); -X_test(:,1) = Xstr(:,1,1); -for i = 2 : Ntime+1 - X_test(:,i) = A_c_d*X_test(:,i-1); -end +f_cl = @(t,x) A_cl*x; +[t_test, X_test] = ode45(f_cl,0:deltaT:2,Xstr(:,1,1)); +X_test = X_test'; N = size(lambd,1); -Z_test = zeros(N,Ntime+1); -Z_eig = zeros(N,Ntime+1); -Z_test(:,1) = phifun(X_test(:,1)); -Z_eig(:,1) = phifun(X_test(:,1)); -for j = 2 : Ntime+1 - Z_eig(:,j) = A_eig*Z_eig(:,j-1); - Z_test(:,j) = phifun(X_test(:,j)); -end +Z_test = z_eigfun(X_test); +f_eig = @(t,x) A_koop*x; +[~,Z_eig] = ode45(f_eig,0:deltaT:2,Z_test(:,1)); +Z_eig = Z_eig'; afigure t = 0 : deltaT : Ntime*deltaT; @@ -137,7 +129,7 @@ Z_test(:,1) = phi_nonlin(X_test(:,1)); Z_eig(:,1) = phi_nonlin(X_test(:,1)); for j = 2 : Ntime+1 - Z_eig(:,j) = A_eig*Z_eig(:,j-1); + Z_eig(:,j) = A_koop*Z_eig(:,j-1); Z_test(:,j) = phi_nonlin(X_test(:,j)); end diff --git a/scripts/Koopman-ID/utils/collect_data.m b/scripts/Koopman-ID/utils/collect_data.m index e142df1..58df8f9 100644 --- a/scripts/Koopman-ID/utils/collect_data.m +++ b/scripts/Koopman-ID/utils/collect_data.m @@ -1,5 +1,5 @@ function [Xstr, Xacc, Yacc, Ustr, Uacc, time_str] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0,Xf,K_nom,f_u,U_perturb, autonomous_learning) + Ntime,deltaT,X0,Xf,K_nom,f_u,U_perturb) %Collect data from the "true" system with nominal controller plus %perturbation %Inputs: @@ -35,13 +35,9 @@ Yacc(:,Ntraj*(i-1)+1:Ntraj*(i)) = Xnext; Xcurrent = Xnext; time_str(:,i+1) = i*deltaT*ones(Ntraj,1); - - if autonomous_learning - Ustr(:,:,i) = Ucurrent; - Uacc(:,Ntraj*(i-1)+1:Ntraj*i) = Ucurrent; - else - Ustr(:,:,i) = Ucurrent - K_nom*(Xcurrent-Xf); - Uacc(:,Ntraj*(i-1)+1:Ntraj*i) = Ucurrent - K_nom*(Xcurrent-Xf); - end + Ustr(:,:,i) = Ucurrent; + Uacc(:,Ntraj*(i-1)+1:Ntraj*i) = Ucurrent; end + Ucurrent = K_nom*(Xcurrent-Xf)+U_perturb(i+1,:); + Ustr(:,:,i+1) = Ucurrent; end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/evaluate_model_performance.m b/scripts/Koopman-ID/utils/evaluate_model_performance.m index 83f0a54..f575f7e 100644 --- a/scripts/Koopman-ID/utils/evaluate_model_performance.m +++ b/scripts/Koopman-ID/utils/evaluate_model_performance.m @@ -1,8 +1,7 @@ function [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... - mse_nom_track, mse_edmd_track, mse_koop_track, E_nom, E_edmd, E_koop,... - cost_nom, cost_edmd, cost_koop] = ... - evaluate_model_performance(K_nom, A_edmd, B_edmd, C_edmd, A_koop, B_koop, ... - C_koop, Nsim, X0, Xf, Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results) + cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(K_nom, ... + A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, X0, Xf, Ntraj, ... + Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results) n = size(C_koop,1); m = size(B_koop,2); @@ -22,12 +21,18 @@ for i = 1 : length(q) Q = q(i)*eye(n); R = r(i)*eye(m); - [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... - mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... - cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... - sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... - Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,... - C_edmd,A_koop,B_koop,C_koop,Q,R); +% [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... +% mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... +% cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... +% sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... +% Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,... +% C_edmd,A_koop,B_koop,C_koop,Q,R); + +% [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... +% mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... +% cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... +% [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + end %Plot results @@ -56,7 +61,7 @@ %h1.Position = h1.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot %h2 = subplot(2,2,2); - h2 = subplot(3,2,3) + h2 = subplot(3,2,3); hold on for i = 1 %Only plot first trajectory plot([0:Ntime]*deltaT,reshape(x(2,i,:),Ntime+1,1),':b','linewidth',lw); hold on diff --git a/scripts/Koopman-ID/utils/sim_prediction.m b/scripts/Koopman-ID/utils/sim_prediction.m index a462854..0b90e84 100644 --- a/scripts/Koopman-ID/utils/sim_prediction.m +++ b/scripts/Koopman-ID/utils/sim_prediction.m @@ -9,6 +9,10 @@ [A_origin, B_origin, ~] = find_nominal_model_ctrl(n,m,f_u,eye(n),eye(m),[0; 0]); f_origin = @(t,x,u) A_origin*x + B_origin*u; + % Define KEEDMD model: + f_koop = @(t,x,u) A_koop*x + B_koop*u; + + x = zeros(n,Nsim,Ntime+1); x_origin = zeros(n,Nsim,Ntime+1); z_edmd = zeros(n_edmd,Nsim,Ntime+1); @@ -22,7 +26,7 @@ % Simulate all systems and initial points for i = 1:Ntime %Controller: - u(:,:,i) = K_nom*(x(:,:,i)-Xf) + 2*rand()-1; + u(:,:,i) = K_nom*(x(:,:,i)-Xf) + 5*rand()-2.5; %True dynamics: x(:,:,i+1) = sim_timestep(deltaT,f_u,0,x(:,:,i), u(:,:,i)); @@ -34,7 +38,8 @@ z_edmd(:,:,i+1) = A_edmd*z_edmd(:,:,i) + B_edmd*u(:,:,i); %Koopman eigenfunction predictor: - z_koop(:,:,i+1) = A_koop*z_koop(:,:,i) + B_koop*u(:,:,i); + %z_koop(:,:,i+1) = A_koop*z_koop(:,:,i) + B_koop*u(:,:,i); + z_koop(:,:,i+1) = sim_timestep(deltaT,f_koop,0,z_koop(:,:,i), u(:,:,i)); end % Calculate corresponding predictions and MSE From 47eb8cc2bf94e61c1bfeee6d5fe51db75258a6f0 Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Mon, 19 Aug 2019 19:53:27 -0700 Subject: [PATCH 7/9] Continuous time version implemented. Functional, some error codes for MPC QP problem must be resolved. --- scripts/Koopman-ID/construct_eigfuncs.m | 24 ++-- scripts/Koopman-ID/main_comparison_pendulum.m | 6 +- .../Koopman-ID/test_eigfunction_generation.m | 119 ++---------------- .../utils/evaluate_model_performance.m | 36 ++++-- .../utils/find_nominal_model_ctrl.m | 4 +- .../Koopman-ID/utils/sim_closed_loop_mpc.m | 34 +---- scripts/Koopman-ID/utils/sim_prediction.m | 12 +- 7 files changed, 62 insertions(+), 173 deletions(-) diff --git a/scripts/Koopman-ID/construct_eigfuncs.m b/scripts/Koopman-ID/construct_eigfuncs.m index 48928f7..6289e80 100644 --- a/scripts/Koopman-ID/construct_eigfuncs.m +++ b/scripts/Koopman-ID/construct_eigfuncs.m @@ -40,20 +40,20 @@ A_cl = A_nom + B_nom*K_nom; cent = 2*pi*rand(n,N_basis) - pi; rbf_type = 'gauss'; - eps_rbf = 2; + eps_rbf = 1; % Set up nonlinear transformations and their gradients zfun = @(xx) [xx; rbf(xx,cent,rbf_type,eps_rbf)]; zfun_grad = @(xx) [eye(2); rbf_grad(xx,cent,rbf_type,eps_rbf)]; zfun_dot = @(xx, xx_dot) [xx_dot; rbf_dot(xx,xx_dot,cent,rbf_type,eps_rbf)]; - % Set up Z and Z_dot matrices: - Z = zfun(X); - Z_dot = zfun_dot(X,X_dot); + % Set up Z and Z_dot matrices: + Z = zfun(X); + Z_dot = zfun_dot(X,X_dot); %Set up constraint matrix con1 = zfun_grad([0; 0]); - + disp('Solving optimization problem...') N = size(Z,1); cvx_begin @@ -66,10 +66,10 @@ %fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) yfun = @(xx) xx + C*zfun(xx); % Full learned diffeomorphism - + % Calculate eigenfunctions for linearized system - [~,D] = eig(A_cl); - [V_a,~] = eig(A_cl'); + [V_a,D] = eig(A_cl); + [W_a,~] = eig(A_cl'); %Define powers (only implemented for n=2): a = 0 : pow_eig_pairs; @@ -77,16 +77,16 @@ c=cat(2,P',Q'); powers=reshape(c,[],2); - linfunc = @(xx) (xx'*V_a)'; + linfunc = @(xx) (xx'*W_a)'./diag(V_a'*W_a); phifun = @(xx) (prod(linfunc(xx).^(powers')))'; - lambd = prod(diag(D).^(powers'))'; + lambd = prod(exp(diag(D)).^(powers'))'; + lambd = log(lambd); % Construct scaling function gfun = @(xx) xx./pi; %Scale state space into unit cube % Construct eigenfunctions for nonlinear system - z_eigfun = @(xx) phifun_mat(phifun, gfun(yfun(xx))); - %z_eigfun = @(xx) phifun(gfun(yfun(xx))); + z_eigfun = @(xx) phifun_mat(phifun, gfun(yfun(xx))); A_koop = diag(lambd); end diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index 2c860dd..424aba1 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -46,7 +46,7 @@ %Koopman eigenfunction parameters: N_basis_diff = 100; %Number of RBFs to use for lifting when learning the diffeomorphism -pow_eig_pairs = 2; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system +pow_eig_pairs = 5; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system plot_basis_koop = false; %Plots the basis functions if true xlim = [-1, 1]; %Plot limits ylim = [-1, 1]; %Plot limits @@ -63,7 +63,7 @@ % Calculate nominal model with Jacobian and find nominal control gains: -[A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R,[0; 0]); %Linearization around 0. +[A_nom, B_nom, C_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R,[0; 0]); %Linearization around 0. % Collect data to learn autonomous dynamics: U_perturb = 0.5*randn(Ntime+1,Ntraj); %Add normally distributed noise to nominal controller @@ -90,7 +90,7 @@ %% ************************ Analysis of Results *************************** disp('Starting analysis of results...'); tic [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... - cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(K_nom, ... + cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(A_nom, B_nom, C_nom, K_nom, ... A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, X0_sim, Xf_sim, ... Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); fprintf('Analysis done, execution time: %1.2f s \n', toc); diff --git a/scripts/Koopman-ID/test_eigfunction_generation.m b/scripts/Koopman-ID/test_eigfunction_generation.m index 76868c4..3037319 100644 --- a/scripts/Koopman-ID/test_eigfunction_generation.m +++ b/scripts/Koopman-ID/test_eigfunction_generation.m @@ -76,8 +76,8 @@ yfun = @(xx) xx + C*zfun(xx); % Full learned diffeomorphism % Calculate eigenfunctions for linearized system - [~,D] = eig(A_cl); - [V_a,~] = eig(A_cl'); + [V_a,D] = eig(A_cl); + [W_a,~] = eig(A_cl'); %Define powers (only implemented for n=2): pow_eig_pairs = 3; @@ -86,9 +86,10 @@ c=cat(2,P',Q'); powers=reshape(c,[],2); - linfunc = @(xx) (xx'*V_a)'; + linfunc = @(xx) (xx'*W_a)'./diag(V_a'*W_a); phifun = @(xx) (prod(linfunc(xx).^(powers')))'; - lambd = prod(diag(D).^(powers'))'; + lambd = prod(exp(diag(D)).^(powers'))'; + lambd = log(lambd); % Construct scaling function gfun = @(xx) xx./pi; %Scale state space into unit cube @@ -99,12 +100,13 @@ A_koop = diag(lambd); %% Check how well the evolution of the eigenfunctions are described by the eigenvalues on linearized system: f_cl = @(t,x) A_cl*x; -[t_test, X_test] = ode45(f_cl,0:deltaT:2,Xstr(:,1,1)); +x0 = [1;1]; +[t_test, X_test] = ode45(f_cl,0:deltaT:2,x0); X_test = X_test'; N = size(lambd,1); -Z_test = z_eigfun(X_test); -f_eig = @(t,x) A_koop*x; +Z_test = phifun_mat(phifun,X_test); +f_eig = @(t,z) A_koop*z; [~,Z_eig] = ode45(f_eig,0:deltaT:2,Z_test(:,1)); Z_eig = Z_eig'; @@ -124,14 +126,9 @@ %% Check how well the evolution of the eigenfunctions are described by the eigenvalues: X_test = reshape(Xstr(:,1,:),n,Ntime+1); N = size(lambd,1); -Z_test = zeros(N,Ntime+1); -Z_eig = zeros(N,Ntime+1); -Z_test(:,1) = phi_nonlin(X_test(:,1)); -Z_eig(:,1) = phi_nonlin(X_test(:,1)); -for j = 2 : Ntime+1 - Z_eig(:,j) = A_koop*Z_eig(:,j-1); - Z_test(:,j) = phi_nonlin(X_test(:,j)); -end +Z_test = z_eigfun(X_test); +[~,Z_eig] = ode45(f_eig,0:deltaT:2,Z_test(:,1)); +Z_eig = Z_eig'; afigure t = 0 : deltaT : Ntime*deltaT; @@ -143,94 +140,4 @@ if i == N legend('Eigval evolution', 'True') end -end - -%% Predict evolution of nonlinear system - - - -%% Old code: (Delete when verified not needed) -% lin_pred_acc = zeros(size(Xacc,1),Ntime*Ntraj); -% Y_res_acc = zeros(size(Xacc,1),Ntime*Ntraj); -% t = deltaT:deltaT:Ntime*deltaT; -% -% afigure -% for i = 1 : Ntraj -% -% lin_pred = A_nom*reshape(Xstr(:,i,1:end-1),size(Xacc,1),Ntime); -% lin_pred_acc(:,(i-1)*Ntime+1:i*Ntime) = lin_pred; -% Y_res = reshape(Xstr(:,i,2:end),size(Xacc,1),Ntime)-lin_pred; -% Y_res_acc(:,(i-1)*Ntime+1:i*Ntime) = Y_res; -% -% % subplot(2,Ntraj/2,i) -% % plot(t, lin_pred(1,:), t, reshape(Xstr(1,i,2:end),1,Ntime),... -% % t, lin_pred(2,:), t, reshape(Xstr(2,i,2:end),1,Ntime)); -% % xlabel('Time (sec)') -% % ylabel('State value') -% % fprintf('Error %i: %.4f\n', i, norm(lin_pred-reshape(Xstr(:,i,2:end),size(Xacc,1),Ntime))); -% end -% -% %% Test eigenfunction generation -% -% center_type = 'random'; -% N = Ntraj*Ntime; -% N_basis = 40; -% -% switch center_type -% case 'random' -% cent = rand(n,N_basis)*2*pi - pi; -% case 'data' -% cent = datasample(Xacc',N_basis)'+0.05*(rand(n,N_basis)*2-1); -% end -% -% rbf_type = 'gauss'; -% eps_rbf = 1; -% zfun = @(xx) [xx'; rbf(xx',cent,rbf_type,eps_rbf)]; -% X = zfun(Xacc'); -% Y = zfun(Yacc'); -% D_norm = diag(vecnorm(X')); -% X = D_norm*X; -% Y = D_norm*Y; -% -% to_scale = 'Scale'; -% to_center = 'Ignore'; -% k_mode = -1; -% tol = N_basis*eps; -% nobal = 'Ignore'; -% n_ref = 0; -% ref_select = 1; -% target = [0 0]'; %Not used because ref_select not equal ot 2 -% overwrite = 'OverWrite'; -% file_save = 'NoSave'; -% -% % [Z, Lambda, rez, RQ_ref, RSI, Z_ref, rez_ref, U, AxU_k] = ... -% % XY_DDMD_R4( X, Y, to_scale, to_center, k_mode, tol, nobal, n_ref,... -% % ref_select, target, overwrite, file_save); -% -% A = Y/X; -% error = norm(A*X-Y) -% [V,D] = eig(A'); -% rel_inds = find(diag(abs(D)) > 0.1); -% V_red = V(:,rel_inds); -% D_red = D(rel_inds,rel_inds); -% -% z_eigfun = @(xx) (zfun(xx)'*V_red)'; -% A_koop = D_red; %Discrete time autonomous dynamics; -% Zacc = z_eigfun(Yacc'); -% -% %Compare z with its linear evolution -% z = z_eigfun(Xacc(:,1)'); -% for i = 1 : Ntime -% z = [z A_koop*z(:,end)]; -% end -% -% %% -% t = deltaT : deltaT : Ntime*deltaT; -% n_plot = 15; -% afigure -% for i = 1 : n_plot -% subplot(n_plot,1,i) -% plot(t,Zacc(i,1:end),t,z(i,2:end)) -% legend('True', 'Linear evolution') -% end -% \ No newline at end of file +end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/evaluate_model_performance.m b/scripts/Koopman-ID/utils/evaluate_model_performance.m index f575f7e..81a42ab 100644 --- a/scripts/Koopman-ID/utils/evaluate_model_performance.m +++ b/scripts/Koopman-ID/utils/evaluate_model_performance.m @@ -1,5 +1,5 @@ function [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... - cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(K_nom, ... + cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(A_nom, B_nom, C_nom, K_nom, ... A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, X0, Xf, Ntraj, ... Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results) @@ -13,25 +13,35 @@ [x,x_origin, x_edmd,x_koop, mse_origin_avg, mse_edmd_avg,mse_koop_avg,... mse_origin_std, mse_edmd_std,mse_koop_std]... = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,Xf,f_u,liftFun,... - phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop); + phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop); %Closed loop task: q = [1 5 50]; r = [0.01 0.01 0.01]; + + %Discretize nominal system: + continuous_model_nom = ss(A_nom, B_nom, C_nom, 0); + discrete_model_nom = c2d(continuous_model_nom,deltaT); + A_nom_d = discrete_model_nom.A; + B_nom_d = discrete_model_nom.B; + C_nom_d = discrete_model_nom.C; + + %Discretize KEEDMD system: + continuous_model_koop = ss(A_koop, B_koop, C_koop, 0); + discrete_model_koop = c2d(continuous_model_koop,deltaT); + A_koop_d = discrete_model_koop.A; + B_koop_d = discrete_model_koop.B; + C_koop_d = discrete_model_koop.C; + for i = 1 : length(q) Q = q(i)*eye(n); R = r(i)*eye(m); -% [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... -% mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... -% cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... -% sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... -% Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,... -% C_edmd,A_koop,B_koop,C_koop,Q,R); - -% [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... -% mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... -% cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... -% [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... + mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... + cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... + sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... + Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,... + C_edmd,A_koop_d,B_koop_d,C_koop_d,Q,R); end diff --git a/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m b/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m index d7a397b..f93fd36 100644 --- a/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m +++ b/scripts/Koopman-ID/utils/find_nominal_model_ctrl.m @@ -1,4 +1,4 @@ -function [A_nom, B_nom, K_nom] = find_nominal_model_ctrl(n, m, f_u, Q, R, x0) +function [A_nom, B_nom, C_nom, K_nom] = find_nominal_model_ctrl(n, m, f_u, Q, R, x0) %Linearize around origin and design linear feedback control law using LQR %Inputs: @@ -15,6 +15,6 @@ x = sym('x',[n;1]); u = sym('u',[m;1]); A_nom = double(subs(jacobian(f_u(0,x,u),x),[x;u],[x0;0])); B_nom = double(subs(jacobian(f_u(0,x,u),u),[x;u],[x0;0])); - + C_nom = eye(n); K_nom = -lqr(A_nom,B_nom,Q,R); end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m index 3380cc4..07f5f44 100644 --- a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m +++ b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m @@ -1,7 +1,7 @@ function [x_nom,x_edmd,x_koop,mse_nom,mse_edmd,mse_koop, t_plot, traj_d, E_nom, E_edmd, E_koop,... cost_nom, cost_edmd, cost_koop]... = sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,Tsim,... - f_u,liftFun,phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,... + f_u,liftFun,phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,C_edmd,A_koop,... B_koop,C_koop,Q,R) %Set up trajectory to track: @@ -35,28 +35,18 @@ z_edmd(:,1) = liftFun(traj_d(:,1)); z_koop(:,1) = phi_fun_v(traj_d(:,1)); - % Define Koopman controller - Tpred = Tsim/2;%0.1; % Prediction horizon + % Define MPC parameters: + Tpred = Tsim;%0.1; % Prediction horizon Np = round(Tpred / deltaT); traj_d = [traj_d traj_d(:,end).*ones(n,Np)]; %Add extra points to trajectory to allow prediction horizon xlift_min = [];%[ymin ; nan(Nlift-1,1)]; % Constraints xlift_max = [];%[ymax ; nan(Nlift-1,1)]; % Build Koopman MPC controller + MPC_nom = getMPC(A_nom,B_nom,C_nom,0,Q,R,Q,Np,-100, 100, xlift_min, xlift_max,'qpoases'); MPC_edmd = getMPC(A_edmd,B_edmd,C_edmd,0,Q,R,Q,Np,-100, 100, xlift_min, xlift_max,'qpoases'); MPC_koop = getMPC(A_koop,B_koop,C_koop,0,Q,R,Q,Np,-100, 100, xlift_min, xlift_max,'qpoases'); - % Get Jacobian of the true dynamics (for local linearization MPC) - x = sym('x',[2 1]); syms u; - f_ud_sym = sim_timestep(deltaT, f_u, 0, x, u); - Jx = jacobian(f_ud_sym,x); - Ju = jacobian(f_ud_sym,u); - - %Save indices of infeasible MPC-problems (Should never happen with no - %state constraints) - wasinfeas= 0; - ind_inf = []; - % Closed-loop simultion start for i = 1:Ntime_track if(mod(i,10) == 0) @@ -67,17 +57,7 @@ yr = traj_d(:,i:i+Np-1); % Local linearization MPC - %Aloc = double(subs(Jx,[x;u],[x_nom(:,i);u_nom(:,i)])); % Get local linearization - %Bloc = double(subs(Ju,[x;u],[x_nom(:,i);u_nom(:,i)])); - Aloc = double(subs(Jx,[x;u],[[0 0]';0])); % Get local linearization - Bloc = double(subs(Ju,[x;u],[[0 0]';0])); - %Cloc = double(subs(f_ud_sym,[x;u],[x_nom(:,i);u_nom(:,i)])) - Aloc*x_nom(:,i) - Bloc*u_nom(:,i); - [U_nom,~,optval] = solveMPCprob(Aloc,Bloc,eye(2),[],Q,R,Q,Np,-100, 100,[],[],x_nom(:,i),yr); % Get control input - u_nom(:,i) = U_nom(1:m,1); - if(optval == Inf) % Detect infeasibility - ind_inf = [ind_inf i]; - wasinfeas = 1; - end + u_nom(:,i) = MPC_nom(x_nom(:,i),yr); x_nom(:,i+1) = sim_timestep(deltaT, f_u, 0, x_nom(:,i), u_nom(:,i)); % Update true state % EDMD MPC @@ -90,10 +70,6 @@ u_koop(:,i) = MPC_koop(z_koop(:,i),yr);% Get control input x_koop(:,i+1) = sim_timestep(deltaT, f_u, 0, x_koop(:,i), u_koop(:,i)); end - - if(isempty(ind_inf)) - ind_inf = Ntime_track; - end % Calculate corresponding predictions and MSE traj_d = traj_d(:,1:end-Np); %Remove added elements from trajectory diff --git a/scripts/Koopman-ID/utils/sim_prediction.m b/scripts/Koopman-ID/utils/sim_prediction.m index 0b90e84..952eb43 100644 --- a/scripts/Koopman-ID/utils/sim_prediction.m +++ b/scripts/Koopman-ID/utils/sim_prediction.m @@ -1,18 +1,14 @@ function [x,x_origin, x_edmd,x_koop, mse_origin_avg, mse_edmd_avg,mse_koop_avg,... mse_origin_std, mse_edmd_std,mse_koop_std]... = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,Xf,f_u,liftFun,... - phi_fun_v, K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop) + phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop) u = zeros(m,Nsim,Ntime); - % Find linearized model at the origin: - [A_origin, B_origin, ~] = find_nominal_model_ctrl(n,m,f_u,eye(n),eye(m),[0; 0]); - f_origin = @(t,x,u) A_origin*x + B_origin*u; - - % Define KEEDMD model: + % Define nominal and KEEDMD model: + f_nom = @(t,x,u) A_nom*x + B_nom*u; f_koop = @(t,x,u) A_koop*x + B_koop*u; - x = zeros(n,Nsim,Ntime+1); x_origin = zeros(n,Nsim,Ntime+1); z_edmd = zeros(n_edmd,Nsim,Ntime+1); @@ -32,7 +28,7 @@ x(:,:,i+1) = sim_timestep(deltaT,f_u,0,x(:,:,i), u(:,:,i)); %Linearization at origin: - x_origin(:,:,i+1) = sim_timestep(deltaT,f_origin,0,x_origin(:,:,i), u(:,:,i)); + x_origin(:,:,i+1) = sim_timestep(deltaT,f_nom,0,x_origin(:,:,i), u(:,:,i)); %EDMD predictor: z_edmd(:,:,i+1) = A_edmd*z_edmd(:,:,i) + B_edmd*u(:,:,i); From a062c22b1c659dbc568a75d5d73a0677845868a0 Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Mon, 19 Aug 2019 20:44:42 -0700 Subject: [PATCH 8/9] Fixed MPC issues, implemented continuous EDMD --- scripts/Koopman-ID/KEEDMD.m | 5 +- scripts/Koopman-ID/main_comparison_pendulum.m | 20 +++--- scripts/Koopman-ID/utils/collect_data.m | 20 ++---- .../utils/evaluate_model_performance.m | 12 +++- scripts/Koopman-ID/utils/extendedDMD.m | 68 ++++++++----------- scripts/Koopman-ID/utils/sim_prediction.m | 4 +- 6 files changed, 55 insertions(+), 74 deletions(-) diff --git a/scripts/Koopman-ID/KEEDMD.m b/scripts/Koopman-ID/KEEDMD.m index a06456e..9c5a503 100644 --- a/scripts/Koopman-ID/KEEDMD.m +++ b/scripts/Koopman-ID/KEEDMD.m @@ -36,7 +36,6 @@ end % ******************** Construct eigenfunctions *********************** - [A_eigfuncs, liftFun] = construct_eigfuncs(n, N_basis,pow_eig_pairs, ... A_nom, B_nom, K_nom, X, X_dot); @@ -50,15 +49,13 @@ Xlift = [Xlift Xlift_temp]; Xlift_dot = [Xlift_dot num_diff(Xlift_temp,deltaT)]; end - - %fprintf('Lifting DONE, time = %1.2f s \n', toc); % ********************** Build predictor ********************************* %Set up regression for A and B: X_vel = [Xlift; U]; Y_vel = Xlift_dot(n/2+1:n,:); - A_vel = lasso(X_vel',Y_vel','Lambda',1e-1, 'Alpha', 0.8); + A_vel = lasso(X_vel',Y_vel','Lambda',1e-3, 'Alpha', 0.8); %Perform regression and enforce known structure: A_koop = zeros(Nlift); diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index 424aba1..cf324c3 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -35,19 +35,16 @@ X0 = pi*X0./vecnorm(X0); Xf = zeros(n,Ntraj); %Terminal points for each trajectory for learning A - %E-DMD parameters: N_basis_edmd = 36; %Number of basis functions basis_function_edmd = 'rbf'; %Type of basis function rbf_type_edmd = 'thinplate'; %RBF type center_type_edmd = 'data'; %Centers of rbf ('data' - pick random points from data set, 'random' pick points uniformly at random eps_rbf_edmd = 1; %RBF width -plot_basis_edmd = false; %Plots the basis functions if true %Koopman eigenfunction parameters: N_basis_diff = 100; %Number of RBFs to use for lifting when learning the diffeomorphism pow_eig_pairs = 5; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system -plot_basis_koop = false; %Plots the basis functions if true xlim = [-1, 1]; %Plot limits ylim = [-1, 1]; %Plot limits @@ -59,39 +56,42 @@ Xf_sim = 0.2*(2*pi*rand(n,Nsim)-pi); %% ************************** Data Collection ***************************** -disp('Starting data collection...'); tic - % Calculate nominal model with Jacobian and find nominal control gains: - [A_nom, B_nom, C_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R,[0; 0]); %Linearization around 0. % Collect data to learn autonomous dynamics: +disp('Starting data collection...'); tic + U_perturb = 0.5*randn(Ntime+1,Ntraj); %Add normally distributed noise to nominal controller -[Xstr, Xacc, Yacc, Ustr, Uacc, timestr] = collect_data(n,m,Ntraj,... +[Xstr, Ustr, timestr] = collect_data(n,m,Ntraj,... Ntime,deltaT,X0, Xf ,K_nom,f_u,U_perturb); fprintf('Data collection done, execution time: %1.2f s \n', toc); %% *********************** Model Identification *************************** - % Identify model using E-DMD to get eigenvalues and model to use for % comparison: disp('Starting EDMD...'); tic + [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_edmd,... - rbf_type_edmd, center_type_edmd, eps_rbf_edmd, plot_basis_edmd, xlim,... - ylim, Xacc, Yacc, Uacc); + rbf_type_edmd, center_type_edmd, eps_rbf_edmd, Xstr, Ustr, Xf, deltaT); + fprintf('EDMD done, execution time: %1.2f s \n', toc); disp('Starting KEEDMD...'); tic + [A_koop, B_koop, C_koop, phi_fun_v] = KEEDMD(n,m,Ntraj, Ntime, N_basis_diff,... pow_eig_pairs, Xstr, Ustr, Xf, A_nom, B_nom, K_nom, deltaT); + fprintf('KEEDMD done, execution time: %1.2f s \n', toc); %% ************************ Analysis of Results *************************** disp('Starting analysis of results...'); tic + [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(A_nom, B_nom, C_nom, K_nom, ... A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, X0_sim, Xf_sim, ... Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); + fprintf('Analysis done, execution time: %1.2f s \n', toc); \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/collect_data.m b/scripts/Koopman-ID/utils/collect_data.m index 58df8f9..da3f332 100644 --- a/scripts/Koopman-ID/utils/collect_data.m +++ b/scripts/Koopman-ID/utils/collect_data.m @@ -1,4 +1,4 @@ -function [Xstr, Xacc, Yacc, Ustr, Uacc, time_str] = collect_data(n,m,Ntraj,... +function [Xstr, Ustr, time_str] = collect_data(n,m,Ntraj,... Ntime,deltaT,X0,Xf,K_nom,f_u,U_perturb) %Collect data from the "true" system with nominal controller plus %perturbation @@ -10,33 +10,25 @@ %Outputs: % Xstr - (n x Ntraj x Ntime) struct with data from each timestep and % trajectory for each state - % Xacc - (n x Ntraj*Ntime) matrix with all trajectories added to it - % Yacc - (n x Ntraj*Ntime) matrix with all trajectories added to it - % Yacc_k = Xacc_k+1 - % Uacc - (m x Ntraj*Ntime) matrix with all trajectories added to it - % Xstr - (1 x Ntraj x Ntime) struct with the time stamp of each data + % Ustr - (1 x Ntraj x Ntime) struct with the time stamp of each data % point from each trajectory Xstr = zeros(n,Ntraj,Ntime+1); % *str is structure Ustr = zeros(m,Ntraj,Ntime); - Xacc = zeros(n,Ntraj*(Ntime)); % *acc is accumulated vectors - Yacc = zeros(n,Ntraj*(Ntime)); - Uacc = zeros(m,Ntraj*(Ntime)); - time_str = zeros(Ntraj,Ntime+1); + Xcurrent = X0; Xstr(:,:,1) = X0; for i = 1:Ntime Ucurrent = K_nom*(Xcurrent-Xf)+U_perturb(i,:); + Ustr(:,:,i) = Ucurrent; + Xnext = sim_timestep(deltaT, f_u, 0, Xcurrent, Ucurrent); Xstr(:,:,i+1) = Xnext; - Xacc(:,Ntraj*(i-1)+1:Ntraj*(i)) = Xcurrent; - Yacc(:,Ntraj*(i-1)+1:Ntraj*(i)) = Xnext; Xcurrent = Xnext; + time_str(:,i+1) = i*deltaT*ones(Ntraj,1); - Ustr(:,:,i) = Ucurrent; - Uacc(:,Ntraj*(i-1)+1:Ntraj*i) = Ucurrent; end Ucurrent = K_nom*(Xcurrent-Xf)+U_perturb(i+1,:); Ustr(:,:,i+1) = Ucurrent; diff --git a/scripts/Koopman-ID/utils/evaluate_model_performance.m b/scripts/Koopman-ID/utils/evaluate_model_performance.m index 81a42ab..29de7d9 100644 --- a/scripts/Koopman-ID/utils/evaluate_model_performance.m +++ b/scripts/Koopman-ID/utils/evaluate_model_performance.m @@ -26,6 +26,13 @@ B_nom_d = discrete_model_nom.B; C_nom_d = discrete_model_nom.C; + %Discretize EDMD system: + continuous_model_edmd = ss(A_edmd, B_edmd, C_edmd, 0); + discrete_model_edmd = c2d(continuous_model_edmd,deltaT); + A_edmd_d = discrete_model_edmd.A; + B_edmd_d = discrete_model_edmd.B; + C_edmd_d = discrete_model_edmd.C; + %Discretize KEEDMD system: continuous_model_koop = ss(A_koop, B_koop, C_koop, 0); discrete_model_koop = c2d(continuous_model_koop,deltaT); @@ -40,9 +47,8 @@ mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... - Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,... - C_edmd,A_koop_d,B_koop_d,C_koop_d,Q,R); - + Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v,A_nom_d,B_nom_d,C_nom_d,K_nom,A_edmd_d,B_edmd_d,... + C_edmd_d,A_koop_d,B_koop_d,C_koop_d,Q,R); end %Plot results diff --git a/scripts/Koopman-ID/utils/extendedDMD.m b/scripts/Koopman-ID/utils/extendedDMD.m index 33b59d6..622a136 100644 --- a/scripts/Koopman-ID/utils/extendedDMD.m +++ b/scripts/Koopman-ID/utils/extendedDMD.m @@ -1,5 +1,5 @@ function [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m,Ntraj, Ntime, N_basis,basis_function,... - rbf_type, center_type, eps, plot_basis, xlim, ylim, Xacc, Yacc, Uacc) + rbf_type, center_type, eps, Xstr, Ustr, Xf,deltaT) %Identify lifted state space model using Extended Dynamic Mode %Decomposition @@ -24,62 +24,48 @@ % C_edmd - Projection matrix from lifted space to outputs + % ************************** Prepare data ***************************** + Xstr_shift = zeros(size(Xstr)); %Shift dynamics such that origin is fixed point + X = []; + X_dot = []; + U = []; + for i = 1 : Ntraj + Xstr_shift(:,i,:) = Xstr(:,i,:) - Xf(:,i); + X = [X reshape(Xstr_shift(:,i,:),n,Ntime+1)]; + X_dot = [X_dot num_diff(reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3)),deltaT)]; + U = [U reshape(Ustr(:,i,:),m,Ntime+1)]; + end + + % ******************************* Lift *********************************** + % Find RBF Centers switch center_type case 'random' cent = rand(n,N_basis)*2 - 1; case 'data' - cent = datasample(Xacc',N_basis)'+0.05*(rand(n,N_basis)*2-1); + cent = datasample(X',N_basis)'+0.05*(rand(n,N_basis)*2-1); end - - % ********************** Plot basis functions ************************* - if plot_basis - [X,Y] = meshgrid(-xlim(1):0.1:xlim(2),ylim(1):0.1:ylim(2)); - x_flat = reshape(X,[1,size(X,1)*size(X,2)]); - y_flat = reshape(Y,[1,size(X,1)*size(X,2)]); - xy_flat = [x_flat;y_flat]; - - afigure - hold on - for i=1:1 - rbf_flat = rbf( xy_flat,cent(:,i), rbf_type, eps_rbf); - rbf_pack = reshape(rbf_flat,[size(X,1),size(X,2)]); - surf(X,Y,rbf_pack) - end - alpha 0.2 - xlabel('x') - ylabel('y') - end - - % ******************************* Lift *********************************** - - %disp('Starting LIFT GENERATION') + switch basis_function case 'rbf' - liftFun = @(xx)( [xx;rbf(xx,cent,rbf_type,eps)] ); + liftFun = @(xx)( [ones(1,size(xx,2)); xx;rbf(xx,cent,rbf_type,eps)]); end Nlift = length(liftFun(zeros(n,1))); - Xlift = liftFun(Xacc); - Ylift = liftFun(Yacc); - %fprintf('Lifting DONE, time = %1.2f s \n', toc); - + Xlift = []; + Xlift_dot = []; + for i = 1 : Ntraj + Xlift_temp = liftFun(reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3))); + Xlift = [Xlift Xlift_temp]; + Xlift_dot = [Xlift_dot num_diff(Xlift_temp,deltaT)]; + end % ********************** Build predictor ********************************* - %disp('Starting REGRESSION') - %tic - W = [Ylift ; Xacc]; - V = [Xlift; Uacc]; + W = [Xlift_dot ; X]; + V = [Xlift; U]; VVt = V*V'; WVt = W*V'; M = WVt * pinv(VVt); % Matrix [A B; C 0] A_edmd= M(1:Nlift,1:Nlift); B_edmd = M(1:Nlift,Nlift+1:end); C_edmd = M(Nlift+1:end,1:Nlift); - - % Add known structure (overwrite parts of the learned matrices): - %A_edmd(1:n/2,:) = [eye(n/2) deltaT*eye(n/2) zeros(n/2,size(A_edmd,2)-n)]; - %C_edmd = zeros(size(C_edmd)); - %C_edmd(:,1:n) = eye(n); - - %fprintf('Regression done, time = %1.2f s \n', toc); end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/sim_prediction.m b/scripts/Koopman-ID/utils/sim_prediction.m index 952eb43..35bb077 100644 --- a/scripts/Koopman-ID/utils/sim_prediction.m +++ b/scripts/Koopman-ID/utils/sim_prediction.m @@ -7,6 +7,7 @@ % Define nominal and KEEDMD model: f_nom = @(t,x,u) A_nom*x + B_nom*u; + f_edmd = @(t,x,u) A_edmd*x + B_edmd*u; f_koop = @(t,x,u) A_koop*x + B_koop*u; x = zeros(n,Nsim,Ntime+1); @@ -31,10 +32,9 @@ x_origin(:,:,i+1) = sim_timestep(deltaT,f_nom,0,x_origin(:,:,i), u(:,:,i)); %EDMD predictor: - z_edmd(:,:,i+1) = A_edmd*z_edmd(:,:,i) + B_edmd*u(:,:,i); + z_edmd(:,:,i+1) = sim_timestep(deltaT,f_edmd,0,z_edmd(:,:,i), u(:,:,i)); %Koopman eigenfunction predictor: - %z_koop(:,:,i+1) = A_koop*z_koop(:,:,i) + B_koop*u(:,:,i); z_koop(:,:,i+1) = sim_timestep(deltaT,f_koop,0,z_koop(:,:,i), u(:,:,i)); end From c8b5897edbffbc45fd9ec455f9db2395cc3c5fcb Mon Sep 17 00:00:00 2001 From: Cafolkes Date: Wed, 28 Aug 2019 14:14:50 -0700 Subject: [PATCH 9/9] Implemented cart-pendulum and added generalization to the code allowing any dimension of the dynamics --- scripts/Koopman-ID/KEEDMD.m | 15 ++-- scripts/Koopman-ID/construct_eigfuncs.m | 34 +++++--- scripts/Koopman-ID/generate_trajectory.m | 37 ++++++++ scripts/Koopman-ID/main_comparison_pendulum.m | 74 +++++++++++----- scripts/Koopman-ID/test_trajectory_gen.m | 85 +++++++++++++++++++ scripts/Koopman-ID/utils/collect_data.m | 14 +-- .../utils/evaluate_model_performance.m | 81 +++++++++--------- scripts/Koopman-ID/utils/extendedDMD.m | 8 +- .../Koopman-ID/utils/sim_closed_loop_mpc.m | 49 ++++------- scripts/Koopman-ID/utils/sim_prediction.m | 5 +- 10 files changed, 274 insertions(+), 128 deletions(-) create mode 100644 scripts/Koopman-ID/generate_trajectory.m create mode 100644 scripts/Koopman-ID/test_trajectory_gen.m diff --git a/scripts/Koopman-ID/KEEDMD.m b/scripts/Koopman-ID/KEEDMD.m index 9c5a503..df8fe2e 100644 --- a/scripts/Koopman-ID/KEEDMD.m +++ b/scripts/Koopman-ID/KEEDMD.m @@ -1,5 +1,5 @@ function [A_koop, B_koop, C_koop, liftFun] = KEEDMD(n,m,Ntraj, Ntime, N_basis,... - pow_eig_pairs, Xstr, Ustr, Xf, A_nom, B_nom, K_nom, deltaT) + pow_eig_pairs, Xstr, Ustr, qf, A_nom, B_nom, K_nom, deltaT) %Identify lifted state space model using Extended Dynamic Mode %Decomposition @@ -29,10 +29,10 @@ X_dot = []; U = []; for i = 1 : Ntraj - Xstr_shift(:,i,:) = Xstr(:,i,:) - Xf(:,i); - X = [X reshape(Xstr_shift(:,i,:),n,Ntime+1)]; + Xstr_shift(:,i,:) = Xstr(:,i,:)-qf(:,i); + X = [X reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3))]; X_dot = [X_dot num_diff(reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3)),deltaT)]; - U = [U reshape(Ustr(:,i,:),m,Ntime+1)]; + U = [U reshape(Ustr(:,i,:),size(Ustr,1),size(Ustr,3))]; end % ******************** Construct eigenfunctions *********************** @@ -55,12 +55,13 @@ %Set up regression for A and B: X_vel = [Xlift; U]; Y_vel = Xlift_dot(n/2+1:n,:); - A_vel = lasso(X_vel',Y_vel','Lambda',1e-3, 'Alpha', 0.8); + A_vel_x = lasso(X_vel',Y_vel(1,:)','Lambda',1e-3, 'Alpha', 0.5); + A_vel_th = lasso(X_vel',Y_vel(2,:)','Lambda',1e-3, 'Alpha', 0.5); %Perform regression and enforce known structure: A_koop = zeros(Nlift); A_koop(1:n/2,:) = [zeros(n/2) eye(n/2) zeros(n/2,size(A_koop,2)-n)]; - A_koop(n/2+1:n,:) = A_vel(1:Nlift,:)'; + A_koop(n/2+1:n,:) = [A_vel_x(1:Nlift,:)'; A_vel_th(1:Nlift,:)']; A_koop(n+1:end,n+1:end) = A_eigfuncs; Y_kin = X_dot(1:n/2,:) - A_koop(1:n/2,:)*Xlift; @@ -71,7 +72,7 @@ X_eig = U-K_nom*X; B_eig = X_eig'\Y_eig'; - B_koop = [B_kin'; A_vel(Nlift+1:end,:); B_eig']; + B_koop = [B_kin'; A_vel_x(Nlift+1:end,:); A_vel_th(Nlift+1:end,:); B_eig']; C_koop = zeros(n,size(A_koop,1)); C_koop(1:n,1:n) = eye(n); diff --git a/scripts/Koopman-ID/construct_eigfuncs.m b/scripts/Koopman-ID/construct_eigfuncs.m index 6289e80..db3d8ef 100644 --- a/scripts/Koopman-ID/construct_eigfuncs.m +++ b/scripts/Koopman-ID/construct_eigfuncs.m @@ -38,13 +38,16 @@ disp('Starting autonomous dynamics learning...'); tic A_cl = A_nom + B_nom*K_nom; - cent = 2*pi*rand(n,N_basis) - pi; + cent = [5*rand(1,N_basis)-2.5;... + 2*pi/3*rand(1,N_basis)-pi/3;... + 4*rand(1,N_basis)-2;... + 4*rand(1,N_basis)-2]; rbf_type = 'gauss'; eps_rbf = 1; % Set up nonlinear transformations and their gradients zfun = @(xx) [xx; rbf(xx,cent,rbf_type,eps_rbf)]; - zfun_grad = @(xx) [eye(2); rbf_grad(xx,cent,rbf_type,eps_rbf)]; + zfun_grad = @(xx) [eye(n); rbf_grad(xx,cent,rbf_type,eps_rbf)]; zfun_dot = @(xx, xx_dot) [xx_dot; rbf_dot(xx,xx_dot,cent,rbf_type,eps_rbf)]; % Set up Z and Z_dot matrices: @@ -52,38 +55,45 @@ Z_dot = zfun_dot(X,X_dot); %Set up constraint matrix - con1 = zfun_grad([0; 0]); + con1 = zfun_grad(zeros(n,1)); disp('Solving optimization problem...') N = size(Z,1); cvx_begin variable C(n,N); - minimize (norm(X_dot + C*Z_dot - A_cl*(X+C*Z),'fro') + 1*norm(C,'fro')) + minimize (norm(X_dot + C*Z_dot - A_cl*(X+C*Z),'fro') + 1e-2*norm(C,'fro')/N*n) subject to {C*con1 == zeros(n)}; cvx_end fprintf('Solved, optimal value excluding regularization: %.10f, MSE: %.10f\n', norm(X_dot + C*Z_dot - A_cl*(X+C*Z),'fro'),immse(X_dot+C*Z_dot, A_cl*(X+C*Z))) - %fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) - - yfun = @(xx) xx + C*zfun(xx); % Full learned diffeomorphism + fprintf('Constraint violation: %.4f \n', sum(sum(abs(C*con1)))) + yfun = @(xx) xx + [zeros(1,size(xx,2));... + C(2,:)*zfun(xx);... + zeros(1,size(xx,2));... + C(4,:)*zfun(xx)]; % Full learned diffeomorphism +% yfun = @(xx) xx + C*zfun(xx); + + % Calculate eigenfunctions for linearized system [V_a,D] = eig(A_cl); [W_a,~] = eig(A_cl'); %Define powers (only implemented for n=2): a = 0 : pow_eig_pairs; - [P,Q] = meshgrid(a,a); - c=cat(2,P',Q'); - powers=reshape(c,[],2); + combs = combnk(a,n); + powers = []; + for i = 1 : size(combs,1) + powers = [powers; perms(combs(i,:))]; + end - linfunc = @(xx) (xx'*W_a)'./diag(V_a'*W_a); + linfunc = @(xx) (xx'*W_a)';%./diag(V_a'*W_a); phifun = @(xx) (prod(linfunc(xx).^(powers')))'; lambd = prod(exp(diag(D)).^(powers'))'; lambd = log(lambd); % Construct scaling function - gfun = @(xx) xx./pi; %Scale state space into unit cube + gfun = @(xx) xx./[5 4 2*pi/3 4]'; %Scale state space into unit cube % Construct eigenfunctions for nonlinear system z_eigfun = @(xx) phifun_mat(phifun, gfun(yfun(xx))); diff --git a/scripts/Koopman-ID/generate_trajectory.m b/scripts/Koopman-ID/generate_trajectory.m new file mode 100644 index 0000000..11ef673 --- /dev/null +++ b/scripts/Koopman-ID/generate_trajectory.m @@ -0,0 +1,37 @@ +function [q_t, u_t] = generate_trajectory(A,B,C,Qf,q0,qf,t,deltaT,lb,ub) + +% Extract relevant parameters +Nsim = length(t); +Ntraj = size(q0,2); +N = size(A,1); +n = size(C,1); +m = size(B,2); + +% Discretize state space matrices +continuous_model_nom = ss(A, B, C, 0); +discrete_model_nom = c2d(continuous_model_nom,deltaT); +A_d = discrete_model_nom.A; +B_d = discrete_model_nom.B; +C_d = discrete_model_nom.C; + +% Initialize variables +q_t = zeros(n,Ntraj,Nsim); +u_t = zeros(m,Ntraj,Nsim-1); +% Generate trajectories for each initial-final condition pair +for i = 1 : size(q0,2) + cvx_begin quiet + variable u(m,Nsim-1) + variable z(N,Nsim) + minimize ((C_d*z(:,Nsim)-qf(:,i))'*Qf*(C_d*z(:,Nsim)-qf(:,i)) + norm(u,'fro')); + subject to + {z(:,2:Nsim) == A_d*z(:,1:Nsim-1) + B_d*u}; + {C_d*z(:,1) == q0(:,i)}; + {z <= ub.*ones(N,Nsim)}; + {z >= lb.*ones(N,Nsim)}; + cvx_end; + + q_t(:,i,:) = C*z; %Project back to state space if trajectory is based on lifted state + u_t(:,i,:) = u; +end + + diff --git a/scripts/Koopman-ID/main_comparison_pendulum.m b/scripts/Koopman-ID/main_comparison_pendulum.m index cf324c3..7200fe4 100644 --- a/scripts/Koopman-ID/main_comparison_pendulum.m +++ b/scripts/Koopman-ID/main_comparison_pendulum.m @@ -19,52 +19,76 @@ %% **************** Model and simulation parameters *********************** %Dynamics: -m = 1; g = 9.81; l = 1; -f_u = @(t,x,u) [x(2,:); g/l*sin(x(1,:))+ u]; -n = 2; m = 1; %Number of states and control inputs -Q = eye(2); R = 0.1; %LQR penalty matrices for states and control inputs +M = .5; %Cart mass +m = 0.2; %Pendulum mass +g = 9.81; %Gravity +l = 0.4; %Pole length +f_th = 0.1; %Friction coefficient between pendulum and cart + +f_u = @(t,q,u) [q(3,:);... + q(4,:);... + (-m*g*sin(q(2,:)).*cos(q(2,:))+m*l*q(4,:).^2.*sin(q(2,:))+f_th*m*q(4,:).*cos(q(2,:)) + u)./(M+(1-cos(q(2,:)).^2)*m);... + ((M+m)*(g*sin(q(2,:))-f_th*q(2,:))-(l*m*q(4,:).^2.*sin(q(2,:)) + u).*cos(q(2,:)))./(l*(M+(1-cos(q(2,:)).^2)*m))]; + +n = 4; m = 1; %Number of states and control inputs +ub = [2.5 pi/3 2 2]'; %State constraints +lb = -ub; %State constraints +Q = 50*eye(n); R = eye(m); %LQR penalty matrices for states and control inputs %Simulation parameters: -Ntime = 200; %Length of each trajectory (# of time steps) -Ntraj = 20; %Number of trajectories +tspan = [0 2]; deltaT = 0.01; %Time step length of simulation +Ntime = (tspan(2)-tspan(1))/deltaT+1; %Length of each trajectory (# of time steps) +Ntraj = 20; %Number of trajectories rng('shuffle'); %Set seed of random number generator -%X0 = 0.8*(2*pi*rand(n,Ntraj)-pi); -%Xf = 0.2*(2*pi*rand(n,Ntraj)-pi); %Terminal points for each trajectory for learning A -X0 = (2*rand(n,Ntraj)-1); -X0 = pi*X0./vecnorm(X0); -Xf = zeros(n,Ntraj); %Terminal points for each trajectory for learning A +q0 = [4*rand(1,Ntraj)-2;... + 0.2*rand(1,Ntraj)-0.1;... + zeros(1,Ntraj);... + zeros(1,Ntraj)]; +qf = zeros(n,Ntraj); %Terminal points for each trajectory for learning A %E-DMD parameters: -N_basis_edmd = 36; %Number of basis functions +N_basis_edmd = 60; %Number of basis functions basis_function_edmd = 'rbf'; %Type of basis function rbf_type_edmd = 'thinplate'; %RBF type center_type_edmd = 'data'; %Centers of rbf ('data' - pick random points from data set, 'random' pick points uniformly at random eps_rbf_edmd = 1; %RBF width %Koopman eigenfunction parameters: -N_basis_diff = 100; %Number of RBFs to use for lifting when learning the diffeomorphism -pow_eig_pairs = 5; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system +N_basis_diff = 200; %Number of RBFs to use for lifting when learning the diffeomorphism +pow_eig_pairs = 4; %Highest power of eigenpairs to use when generating eigenfunctions for linearized system xlim = [-1, 1]; %Plot limits ylim = [-1, 1]; %Plot limits %Test simulation parameters: Nsim = 5; -Tsim = 1; +Tsim = 2; plot_results = true; -X0_sim = 0.8*(2*pi*rand(n,Nsim)-pi); -Xf_sim = 0.2*(2*pi*rand(n,Nsim)-pi); +q0_sim = [1+rand(1,Nsim);... + 0.2*rand(1,Nsim)-0.1;... + zeros(1,Nsim);... + zeros(1,Nsim)]; +qf_sim = zeros(n,Nsim); %% ************************** Data Collection ***************************** % Calculate nominal model with Jacobian and find nominal control gains: -[A_nom, B_nom, C_nom, K_nom] = find_nominal_model_ctrl(n,m,f_u,Q,R,[0; 0]); %Linearization around 0. +[A_nom, B_nom, C_nom, ~] = find_nominal_model_ctrl(n,m,f_u,Q,R,zeros(4,1)); %Linearization around 0. +%Pole placement controller: +p = [-10 -6 -3 -2]; +K_nom = -place(A_nom,B_nom,p); + +% Generate trajectories for all initial and terminal points +disp('Starting trajectory generation...'); tic +t = tspan(1) : deltaT : tspan(2); Qf = 1e3*eye(n); % Time vector and penalty for final state deviations +[q_traj, ~] = generate_trajectory(A_nom, B_nom, C_nom,Qf,q0,qf,t,deltaT,lb,ub); +fprintf('Trajectory generation done, execution time: %1.2f s \n', toc); % Collect data to learn autonomous dynamics: disp('Starting data collection...'); tic U_perturb = 0.5*randn(Ntime+1,Ntraj); %Add normally distributed noise to nominal controller [Xstr, Ustr, timestr] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0, Xf ,K_nom,f_u,U_perturb); + Ntime,deltaT,q0, qf ,K_nom,f_u,U_perturb,q_traj); fprintf('Data collection done, execution time: %1.2f s \n', toc); @@ -74,23 +98,29 @@ disp('Starting EDMD...'); tic [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m, Ntraj, Ntime, N_basis_edmd,basis_function_edmd,... - rbf_type_edmd, center_type_edmd, eps_rbf_edmd, Xstr, Ustr, Xf, deltaT); + rbf_type_edmd, center_type_edmd, eps_rbf_edmd, Xstr, Ustr, qf, deltaT); fprintf('EDMD done, execution time: %1.2f s \n', toc); disp('Starting KEEDMD...'); tic [A_koop, B_koop, C_koop, phi_fun_v] = KEEDMD(n,m,Ntraj, Ntime, N_basis_diff,... - pow_eig_pairs, Xstr, Ustr, Xf, A_nom, B_nom, K_nom, deltaT); + pow_eig_pairs, Xstr, Ustr, qf, A_nom, B_nom, K_nom, deltaT); fprintf('KEEDMD done, execution time: %1.2f s \n', toc); %% ************************ Analysis of Results *************************** + +t = 0 : deltaT : Tsim; Qf = 1e3*eye(n); % Time vector and penalty for final state deviations +[q_traj_sim,~] = generate_trajectory(A_nom,B_nom,C_nom,Qf,q0_sim,qf_sim,t,deltaT,lb,ub); +[q_traj_track,~] = generate_trajectory(A_nom,B_nom,C_nom,Qf,[2 0 0 0]',[0 0 0 0]',t,deltaT,lb,ub); +q_traj_track = reshape(q_traj_track,size(q_traj_track,1),size(q_traj_track,3)); + disp('Starting analysis of results...'); tic [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(A_nom, B_nom, C_nom, K_nom, ... - A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, X0_sim, Xf_sim, ... + A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, q_traj_sim, q_traj_track, ... Ntraj, Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results); fprintf('Analysis done, execution time: %1.2f s \n', toc); diff --git a/scripts/Koopman-ID/test_trajectory_gen.m b/scripts/Koopman-ID/test_trajectory_gen.m new file mode 100644 index 0000000..774b11e --- /dev/null +++ b/scripts/Koopman-ID/test_trajectory_gen.m @@ -0,0 +1,85 @@ +clear all; close all; clc; +%% **************** Model and simulation parameters *********************** +%Dynamics: +M = .5; %Cart mass +m = 0.2; %Pendulum mass +g = 9.81; %Gravity +l = 0.4; %Pole length +f_th = 0.1; %Friction coefficient between pendulum and cart + +% f_u = @(t,q,u) [q(2);... +% (-m*g*sin(q(3))*cos(q(3))+m*l*q(4)^2*sin(q(3))+f_th*m*q(4)*cos(q(3)) + u)/(M+(1-cos(q(3))^2)*m);... +% q(4);... +% ((M+m)*(g*sin(q(3))-f_th*q(4))-(l*m*q(4)^2*sin(q(3)) + u)*cos(q(3)))/(l*(M+(1-cos(q(3))^2)*m))]; + +f_u = @(t,q,u) [q(3,:);... + q(4,:);... + (-m*g*sin(q(2,:)).*cos(q(2,:))+m*l*q(4,:).^2.*sin(q(2,:))+f_th*m*q(4,:).*cos(q(2,:)) + u)./(M+(1-cos(q(2,:)).^2)*m);... + ((M+m)*(g*sin(q(2,:))-f_th*q(2,:))-(l*m*q(4,:).^2.*sin(q(2,:)) + u).*cos(q(2,:)))./(l*(M+(1-cos(q(2,:)).^2)*m))]; + + +n = 4; m = 1; %Number of states and control inputs + +%Simulation parameters: +tSpan = [0 2]; +deltaT = 0.01; %Time step length of simulation +q0 = [2 0 0 0]'; +qf = [0 0 0 0]'; + +%Linearize dynamics around x0 +Q = 20*eye(n); R = eye(m); +[A_nom, B_nom, C_nom, ~] = find_nominal_model_ctrl(n, m, f_u, Q, R, qf); + +%Pole placement controller: +p = [-10 -6 -3 -2]; +K_nom = -place(A_nom,B_nom,p); + +%% Test trajectory generator based on linearized model +N = n; %Lifting dimension +t = tSpan(1) : deltaT : tSpan(end); +N_sim = length(t); +R_traj = eye(m); +Qf = 1000*eye(n); +ub = [3 pi/3 10 10]'; +lb = -ub; + +[z_t,u_t] = generate_trajectory(A_nom,B_nom,C_nom,Qf,q0,qf,t,deltaT,lb,ub); + +afigure +for i = 1 : n + subplot(2,2,i); + plot(t,z_t(i,:)); +end + +afigure +plot(t(1:end-1),u_t(1,:)) + + +%% Test LQR controller +u_lqr = zeros(m,N_sim-1); +q_lqr = zeros(n,N_sim); +q_lqr(:,1) = q0; + +u_lqr_t = zeros(m,N_sim-1); +q_lqr_t = zeros(n,N_sim); +q_lqr_t(:,1) = q0; + +for i = 1 : N_sim-1 + u_lqr_t(:,i) = K_nom*(q_lqr_t(:,i)-z_t(:,i)); + q_lqr_t(:,i+1) = sim_timestep(deltaT,f_u,0,q_lqr_t(:,i),u_lqr_t(:,i)); +% u_lqr(:,i) = K_nom*(q_lqr(:,i)-qf); +% q_lqr(:,i+1) = sim_timestep(deltaT,f_u,0,q_lqr(:,i),u_lqr(:,i)); +end + +afigure +for i = 1 : n + subplot(2,2,i); + plot(t,q_lqr_t(i,:),t,q_lqr(i,:),t,z_t(i,:)); + legend('lqr traj', 'lqr','traj') +end + +afigure +plot(t(1:end-1),u_lqr_t(1,:),t(1:end-1),u_lqr(1,:),t(1:end-1),u_t(1,:)) +legend('lqr traj', 'lqr','traj') + + \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/collect_data.m b/scripts/Koopman-ID/utils/collect_data.m index da3f332..5692e99 100644 --- a/scripts/Koopman-ID/utils/collect_data.m +++ b/scripts/Koopman-ID/utils/collect_data.m @@ -1,5 +1,5 @@ function [Xstr, Ustr, time_str] = collect_data(n,m,Ntraj,... - Ntime,deltaT,X0,Xf,K_nom,f_u,U_perturb) + Ntime,deltaT,X0,Xf,K_nom,f_u,U_perturb,qtraj) %Collect data from the "true" system with nominal controller plus %perturbation %Inputs: @@ -14,14 +14,14 @@ % point from each trajectory - Xstr = zeros(n,Ntraj,Ntime+1); % *str is structure - Ustr = zeros(m,Ntraj,Ntime); - time_str = zeros(Ntraj,Ntime+1); + Xstr = zeros(n,Ntraj,Ntime); % *str is structure + Ustr = zeros(m,Ntraj,Ntime-1); + time_str = zeros(Ntraj,Ntime); Xcurrent = X0; Xstr(:,:,1) = X0; - for i = 1:Ntime - Ucurrent = K_nom*(Xcurrent-Xf)+U_perturb(i,:); + for i = 1:Ntime-1 + Ucurrent = K_nom*(Xcurrent-qtraj(:,:,i))+U_perturb(i,:); Ustr(:,:,i) = Ucurrent; Xnext = sim_timestep(deltaT, f_u, 0, Xcurrent, Ucurrent); @@ -30,6 +30,6 @@ time_str(:,i+1) = i*deltaT*ones(Ntraj,1); end - Ucurrent = K_nom*(Xcurrent-Xf)+U_perturb(i+1,:); + Ucurrent = K_nom*(Xcurrent-qtraj(:,:,i+1))+U_perturb(i+1,:); Ustr(:,:,i+1) = Ucurrent; end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/evaluate_model_performance.m b/scripts/Koopman-ID/utils/evaluate_model_performance.m index 29de7d9..6645eaf 100644 --- a/scripts/Koopman-ID/utils/evaluate_model_performance.m +++ b/scripts/Koopman-ID/utils/evaluate_model_performance.m @@ -1,6 +1,6 @@ function [mse_origin_avg, mse_edmd_avg, mse_koop_avg, mse_origin_std, mse_edmd_std, mse_koop_std,... cost_nom, cost_edmd, cost_koop] = evaluate_model_performance(A_nom, B_nom, C_nom, K_nom, ... - A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, X0, Xf, Ntraj, ... + A_edmd, B_edmd, C_edmd, A_koop, B_koop, C_koop, Nsim, q_traj_sim, q_traj_track, Ntraj, ... Xstr, Tsim, deltaT, f_u, liftFun, phi_fun_v, plot_results) n = size(C_koop,1); @@ -12,7 +12,7 @@ %Prediction task: [x,x_origin, x_edmd,x_koop, mse_origin_avg, mse_edmd_avg,mse_koop_avg,... mse_origin_std, mse_edmd_std,mse_koop_std]... - = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,Xf,f_u,liftFun,... + = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,q_traj_sim,f_u,liftFun,... phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop); %Closed loop task: @@ -44,16 +44,17 @@ Q = q(i)*eye(n); R = r(i)*eye(m); [x_track{i},x_edmd_track{i},x_koop_track{i},mse_nom_track{i}, mse_edmd_track{i},... - mse_koop_track{i},t_plot,traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... + mse_koop_track{i},traj_d, E_nom{i}, E_edmd{i}, E_koop{i},... cost_nom{i}, cost_edmd{i}, cost_koop{i}] = ... sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,... Ntime,deltaT,Tsim,f_u,liftFun,phi_fun_v,A_nom_d,B_nom_d,C_nom_d,K_nom,A_edmd_d,B_edmd_d,... - C_edmd_d,A_koop_d,B_koop_d,C_koop_d,Q,R); + C_edmd_d,A_koop_d,B_koop_d,C_koop_d,Q,R,q_traj_track); end %Plot results if plot_results lw=2; + t_plot = 0 : deltaT : Tsim; font_size = 16; set(gcf,'units','pixel') @@ -80,49 +81,26 @@ h2 = subplot(3,2,3); hold on for i = 1 %Only plot first trajectory - plot([0:Ntime]*deltaT,reshape(x(2,i,:),Ntime+1,1),':b','linewidth',lw); hold on - plot([0:Ntime]*deltaT,reshape(x_origin(2,i,:),Ntime+1,1), 'k','linewidth',lw) - plot([0:Ntime]*deltaT,reshape(x_edmd(2,i,:),Ntime+1,1), 'r','linewidth',lw) - plot([0:Ntime]*deltaT,reshape(x_koop(2,i,:),Ntime+1,1), 'g','linewidth',lw) + plot([0:Ntime]*deltaT,reshape(x(3,i,:),Ntime+1,1),':b','linewidth',lw); hold on + plot([0:Ntime]*deltaT,reshape(x_origin(3,i,:),Ntime+1,1), 'k','linewidth',lw) + plot([0:Ntime]*deltaT,reshape(x_edmd(3,i,:),Ntime+1,1), 'r','linewidth',lw) + plot([0:Ntime]*deltaT,reshape(x_koop(3,i,:),Ntime+1,1), 'g','linewidth',lw) end - axis([0 Tsim min(x(2,1,:))-0.2 max(x(2,1,:))+0.2]) + axis([0 Tsim min(x(3,1,:))-0.2 max(x(3,1,:))+0.2]) %title('Prediction comparison, 1st trajectory - $x_2$','interpreter','latex'); xlabel('Time [s]','interpreter','latex'); - ylabel('$x_2$','interpreter','latex'); + ylabel('$x_3$','interpreter','latex'); set(gca,'fontsize',font_size) %LEG = legend('True','EDMD','Koopman e-func','location','southwest'); set(LEG,'interpreter','latex') %h2.Position = h2.Position + [0 0.1 0 -0.1]; %Modify size of 1st subplot - % Plot trajectories Learning -% h3 = subplot(2,2,3); -% hold on -% for i=1:Ntraj -% scatter(Xstr(1,i,1),Xstr(2,i,1),'+') -% p(i) = plot(squeeze(Xstr(1,i,:)),squeeze(Xstr(2,i,:)),':k','linewidth',1); -% %alpha(p(i),0.2) -% end -% for i = 1 : Nsim -% plot(reshape(x(1,i,:),Ntime+1,1),reshape(x(2,i,:),Ntime+1,1),'-k') -% plot(reshape(x_edmd(1,i,:),Ntime+1,1),reshape(x_edmd(2,i,:),Ntime+1,1),'-r') -% plot(reshape(x_koop(1,i,:),Ntime+1,1),reshape(x_koop(2,i,:),Ntime+1,1),'-g') -% end -% %scatter(cent(1,:),cent(2,:),'o') -% %axis equal -% xaxis([-5 5]) -% yaxis([-5 5]) -% xlabel('x') -% xlabel('y') -% %legend('True','EDMD','Koopman e-func') -% title('Training and simulated trajectories','interpreter','latex'); -% h3.Position = h3.Position + [0 0 0 0.125]; %Modify size of 3rd subplot - %Closed loop plot: - h4 = subplot(3,2,[2, 4]); + h4 = subplot(3,2,2); plot(t_plot,traj_d(1,:),'-b','linewidth',lw); hold on - lin_typ = {'-', '--', '-.'}; - for i = 1 : length(q) + lin_typ = {'--', '-', '-.'}; + for i = 2% : length(q) plot(t_plot,x_track{i}(1,:),strcat(lin_typ{i},'k'),'linewidth',lw); hold on plot(t_plot,x_edmd_track{i}(1,:),strcat(lin_typ{i},'r'),'linewidth',lw); hold on plot(t_plot,x_koop_track{i}(1,:),strcat(lin_typ{i},'g'),'linewidth',lw); hold on @@ -132,12 +110,31 @@ xlabel('Time [s]','interpreter','latex'); ylabel('$x_1$','interpreter','latex'); set(gca,'fontsize',font_size) - LEG = legend({'Reference', ... - strcat('Lin at 0$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('EDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),... - strcat('Lin at 0$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('EDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),... - strcat('Lin at 0$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('EDMD$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(3)/r(3)),'}$')},... - 'location','southeast','NumColumns',2); - set(LEG,'Interpreter','latex') +% LEG = legend({'Reference', ... +% strcat('Lin at 0$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('EDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),... +% strcat('Lin at 0$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('EDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),... +% strcat('Lin at 0$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('EDMD$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(3)/r(3)),'}$')},... +% 'location','southeast','NumColumns',2); +% set(LEG,'Interpreter','latex') + %h4.Position = h4.Position + [0 0 0 0.125]; %Modify size of 4th subplot + + h4 = subplot(3,2,4); + plot(t_plot,traj_d(3,:),'-b','linewidth',lw); hold on + for i = 2% : length(q) + plot(t_plot,x_track{i}(3,:),strcat(lin_typ{i},'k'),'linewidth',lw); hold on + plot(t_plot,x_edmd_track{i}(3,:),strcat(lin_typ{i},'r'),'linewidth',lw); hold on + plot(t_plot,x_koop_track{i}(3,:),strcat(lin_typ{i},'g'),'linewidth',lw); hold on + end + %axis([0 Tsim min(x_edmd(1,1,:))-0.15 max(x_edmd(1,1,:))+0.15]) + xlabel('Time [s]','interpreter','latex'); + ylabel('$x_3$','interpreter','latex'); + set(gca,'fontsize',font_size) +% LEG = legend({'Reference', ... +% strcat('Lin at 0$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('EDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(1)/r(1)),'}$'),... +% strcat('Lin at 0$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('EDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(2)/r(2)),'}$'),... +% strcat('Lin at 0$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('EDMD$_{q/r=',num2str(q(3)/r(3)),'}$'),strcat('KEEDMD$_{q/r=',num2str(q(3)/r(3)),'}$')},... +% 'location','southeast','NumColumns',2); +% set(LEG,'Interpreter','latex') %h4.Position = h4.Position + [0 0 0 0.125]; %Modify size of 4th subplot set(gcf, 'Position', [0, 0, 1200, 600]) %Modify size of figure window diff --git a/scripts/Koopman-ID/utils/extendedDMD.m b/scripts/Koopman-ID/utils/extendedDMD.m index 622a136..af916d2 100644 --- a/scripts/Koopman-ID/utils/extendedDMD.m +++ b/scripts/Koopman-ID/utils/extendedDMD.m @@ -1,5 +1,5 @@ function [A_edmd, B_edmd, C_edmd, liftFun] = extendedDMD(n,m,Ntraj, Ntime, N_basis,basis_function,... - rbf_type, center_type, eps, Xstr, Ustr, Xf,deltaT) + rbf_type, center_type, eps, Xstr, Ustr,Xf,deltaT) %Identify lifted state space model using Extended Dynamic Mode %Decomposition @@ -30,10 +30,10 @@ X_dot = []; U = []; for i = 1 : Ntraj - Xstr_shift(:,i,:) = Xstr(:,i,:) - Xf(:,i); - X = [X reshape(Xstr_shift(:,i,:),n,Ntime+1)]; + Xstr_shift(:,i,:) = Xstr(:,i,:)-Xf(:,i); + X = [X reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3))]; X_dot = [X_dot num_diff(reshape(Xstr_shift(:,i,:),size(Xstr_shift,1),size(Xstr_shift,3)),deltaT)]; - U = [U reshape(Ustr(:,i,:),m,Ntime+1)]; + U = [U reshape(Ustr(:,i,:),size(Ustr,1),size(Ustr,3))]; end % ******************************* Lift *********************************** diff --git a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m index 07f5f44..d592132 100644 --- a/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m +++ b/scripts/Koopman-ID/utils/sim_closed_loop_mpc.m @@ -1,26 +1,11 @@ -function [x_nom,x_edmd,x_koop,mse_nom,mse_edmd,mse_koop, t_plot, traj_d, E_nom, E_edmd, E_koop,... +function [x_nom,x_edmd,x_koop,mse_nom,mse_edmd,mse_koop, q_traj, E_nom, E_edmd, E_koop,... cost_nom, cost_edmd, cost_koop]... = sim_closed_loop_mpc(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,Tsim,... f_u,liftFun,phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,C_edmd,A_koop,... - B_koop,C_koop,Q,R) - - %Set up trajectory to track: - t = 0 : deltaT : Tsim; - t1 = t(1:floor(Ntime/3)); - t2 = t(floor(Ntime/3):floor(2*Ntime/3)); - t3 = t(floor(2*Ntime/3):end); - t_plot = [t1 t2 t3]; - x0 = -pi/2; %Start angle - x1 = 0.2; %Waypoint angle - x2 = -0.2; %Waypoint angle - x3 = pi/3; %Final angle - traj_d = [spline([t1(1) t1(end)], [0 [x0 x1] 0], t1) ... - spline([t2(1) t2(end)], [0 [x1 x2] 0], t2) ... - spline([t3(1) t3(end)], [0 [x2 x3] 0], t3)]; - traj_d = [traj_d; diff([traj_d traj_d(end)])/deltaT]; + B_koop,C_koop,Q,R,q_traj) %Initialize variables: - Ntime_track = size(traj_d,2)-1; + Ntime_track = size(q_traj,2)-1; x_nom = zeros(n,Ntime_track+1); u_nom = zeros(m,Ntime_track); z_edmd = zeros(n_edmd,Ntime_track+1); @@ -29,16 +14,16 @@ z_koop = zeros(n_koop,Ntime_track+1); x_koop = zeros(n,Ntime_track+1); u_koop = zeros(m,Ntime_track); - x_nom(:,1) = traj_d(:,1); - x_edmd(:,1) = traj_d(:,1); - x_koop(:,1) = traj_d(:,1); - z_edmd(:,1) = liftFun(traj_d(:,1)); - z_koop(:,1) = phi_fun_v(traj_d(:,1)); + x_nom(:,1) = q_traj(:,1); + x_edmd(:,1) = q_traj(:,1); + x_koop(:,1) = q_traj(:,1); + z_edmd(:,1) = liftFun(q_traj(:,1)); + z_koop(:,1) = phi_fun_v(q_traj(:,1)); % Define MPC parameters: Tpred = Tsim;%0.1; % Prediction horizon Np = round(Tpred / deltaT); - traj_d = [traj_d traj_d(:,end).*ones(n,Np)]; %Add extra points to trajectory to allow prediction horizon + q_traj = [q_traj q_traj(:,end).*ones(n,Np)]; %Add extra points to trajectory to allow prediction horizon xlift_min = [];%[ymin ; nan(Nlift-1,1)]; % Constraints xlift_max = [];%[ymax ; nan(Nlift-1,1)]; @@ -54,7 +39,7 @@ end % Prediction horizon of reference signal - yr = traj_d(:,i:i+Np-1); + yr = q_traj(:,i:i+Np-1); % Local linearization MPC u_nom(:,i) = MPC_nom(x_nom(:,i),yr); @@ -72,14 +57,14 @@ end % Calculate corresponding predictions and MSE - traj_d = traj_d(:,1:end-Np); %Remove added elements from trajectory - mse_nom = immse(traj_d,x_nom); - mse_edmd = immse(traj_d,x_edmd); - mse_koop = immse(traj_d,x_koop); + q_traj = q_traj(:,1:end-Np); %Remove added elements from trajectory + mse_nom = immse(q_traj,x_nom); + mse_edmd = immse(q_traj,x_edmd); + mse_koop = immse(q_traj,x_koop); E_nom = norm(u_nom); E_edmd = norm(u_edmd); E_koop = norm(u_koop); - cost_nom = sum(diag((x_nom(:,2:end)-traj_d(:,2:end))'*Q*(x_nom(:,2:end)-traj_d(:,2:end)))) + sum(diag(u_nom'*R*u_nom)); - cost_edmd = sum(diag((x_edmd(:,2:end)-traj_d(:,2:end))'*Q*(x_edmd(:,2:end)-traj_d(:,2:end)))) + sum(diag(u_edmd'*R*u_edmd)); - cost_koop = sum(diag((x_koop(:,2:end)-traj_d(:,2:end))'*Q*(x_koop(:,2:end)-traj_d(:,2:end)))) + sum(diag(u_koop'*R*u_koop)); + cost_nom = sum(diag((x_nom(:,2:end)-q_traj(:,2:end))'*Q*(x_nom(:,2:end)-q_traj(:,2:end)))) + sum(diag(u_nom'*R*u_nom)); + cost_edmd = sum(diag((x_edmd(:,2:end)-q_traj(:,2:end))'*Q*(x_edmd(:,2:end)-q_traj(:,2:end)))) + sum(diag(u_edmd'*R*u_edmd)); + cost_koop = sum(diag((x_koop(:,2:end)-q_traj(:,2:end))'*Q*(x_koop(:,2:end)-q_traj(:,2:end)))) + sum(diag(u_koop'*R*u_koop)); end \ No newline at end of file diff --git a/scripts/Koopman-ID/utils/sim_prediction.m b/scripts/Koopman-ID/utils/sim_prediction.m index 35bb077..6471961 100644 --- a/scripts/Koopman-ID/utils/sim_prediction.m +++ b/scripts/Koopman-ID/utils/sim_prediction.m @@ -1,6 +1,6 @@ function [x,x_origin, x_edmd,x_koop, mse_origin_avg, mse_edmd_avg,mse_koop_avg,... mse_origin_std, mse_edmd_std,mse_koop_std]... - = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,X0,Xf,f_u,liftFun,... + = sim_prediction(n,m,n_edmd,n_koop,Nsim,Ntime,deltaT,q_traj,f_u,liftFun,... phi_fun_v,A_nom,B_nom,C_nom,K_nom,A_edmd,B_edmd,C_edmd,A_koop,B_koop,C_koop) u = zeros(m,Nsim,Ntime); @@ -15,6 +15,7 @@ z_edmd = zeros(n_edmd,Nsim,Ntime+1); z_koop = zeros(n_koop,Nsim,Ntime+1); + X0 = q_traj(:,:,1); x(:,:,1) = X0; x_origin(:,:,1) = X0; z_edmd(:,:,1) = liftFun(X0); @@ -23,7 +24,7 @@ % Simulate all systems and initial points for i = 1:Ntime %Controller: - u(:,:,i) = K_nom*(x(:,:,i)-Xf) + 5*rand()-2.5; + u(:,:,i) = K_nom*(x(:,:,i)-q_traj(:,:,i)) + 5*rand()-2.5; %True dynamics: x(:,:,i+1) = sim_timestep(deltaT,f_u,0,x(:,:,i), u(:,:,i));