💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
摘要:
数据驱动的转换可以在线性框架中重新构建非线性系统,具有巨大的潜力使用线性系统理论对强非线性动力学进行预测、估计和控制。库普曼算子已经成为非线性动力学的一个有原则的线性嵌入,它的本征函数建立了内在坐标,沿着这个坐标,动力学表现为线性。 之前的研究已经使用模型预测控制方法的库普曼算子的有限维近似。在这个在本文中,我们说明了这种方法的一个基本闭合问题,并认为首先验证它是有益的特征函数,然后在这些经过验证的特征函数中构建降阶模型。这些坐标通过设计形成一个库普曼不变子空间,从而提高了预测能力。 然后我们展示了如何控制可以直接在这些内在坐标中制定,并讨论潜在的益处和注意事项从这个角度来看。 由此产生的控制架构被称为库普曼降阶非线性识别和控制(KRONIC)。 进一步证明,这些本征函数可以用下式近似基于控制数据驱动回归和幂级数展开的偏微分方程库普曼算子的无穷小生成元。 验证发现的特征函数至关重要,我们展示可以从EDMD或隐式公式中忠实地提取轻微阻尼的本征函数。这些轻微阻尼的本征函数与控制特别相关,因为它们对应于几乎守恒的与持久动力学相关的量,如哈密顿量。 然后,KRONIC在许多相关示例上进行了演示,包括1)具有已知线性嵌入的非线性系统,2)各种哈密顿系统,以及3)海洋混合的高维双涡模型。
关键词:动力系统、非线性控制、库普曼理论、系统识别、机器学习
Koopman算子作为一种基于原理的非线性动态的线性嵌入方法已经崭露头角,其特征函数建立了动态行为呈现线性的内在坐标。KRONIC旨在通过从数据中使用稀疏回归来识别Koopman特征函数,然后在这些内在坐标中推导出控制器。
讨论与结论
总之,我们将Koopman算子形式主义扩展到包含驱动的情况,并展示了如何将一个非线性控制问题转化为特征函数坐标中的双线性控制问题。接着,我们提出了一个数据驱动的框架,用于识别Koopman算子的主要特征函数,并提出了扩展的动态模态分解(EDMD)的稀疏性促进扩展。我们发现,通过回归可以从数据中准确地近似轻阻尼或无阻尼的特征函数,因为这些特征函数对应于持久现象,例如守恒量。而且,这些通常是我们在控制中寻求的结构,因为它们影响长期行为。我们在多个非线性系统上展示了这种新的数据驱动控制架构的有效性,包括哈密顿系统和一个具有挑战性的高维海洋混合模型。这些结果表明,识别和控制Koopman特征函数可能使我们在实现通用数据驱动非线性控制策略的最终目标方面取得重大进展。
Koopman算子的有限维近似通常是将其投影到指定的基上,这可能会受到众所周知的封闭性问题的困扰。矩阵\(K\)通常很大,因为状态被提升到高维空间,而得到的模型很少能封闭,可能会出现虚假的特征函数。基于EDMD,我们使用经过验证的Koopman特征函数构建降阶模型,从而使得到的模型在设计上是封闭的。KRONIC和带控制的EDMD [65] 都提供了基于Koopman的系统辨识,可以用于基于模型的控制,如模型预测控制(MPC)或线性二次调节器(LQR),如图16所示。然而,它们之间存在一些关键差异:(1)KRONIC直接识别Koopman特征函数,而EDMDc近似受限于高维可观测量空间的Koopman算子。(2)EDMD通过增加非线性测量来扩充状态向量,从而增加了系统的维度。相比之下,KRONIC得到的是以少数Koopman特征函数表示的降阶模型。(3)在EDMDc中,控制被作为近似的仿射线性项纳入。KRONIC通过生成器方程推导出特征函数如何受控制影响的表达式。然而,这可能会使控制项呈现双线性(状态非线性)。(4)EDMDc的成本函数是在状态或测量空间中定义的,而KRONIC在特征函数中定义成本函数;注意,这些成本函数并不总是可以相互转换的。(5)最后,KRONIC更容易接受更复杂的解决方案,例如极限环的稳定化,因为这些对应于特征函数的水平集。
与以往的研究一样,本研究进一步巩固了准确识别和表示Koopman特征函数的重要性。未来的工作将继续开发从数据中提取近似特征函数的算法,这些工作可能会从机器学习的进步中受益。此外,在表示Koopman特征函数时存在一个基本的不确定性原理,因为这些特征函数本身可能无法表示,就像混沌系统的长期流映射一样。与其寻求可能无法实现的完美Koopman特征函数,不如将不确定性量化纳入数据驱动的Koopman框架。然后可以用鲁棒控制来管理模型的不确定性。
本研究还强调了在使用Koopman近似时选择视角的重要性。一般来说,Koopman特征函数是全局对象,例如哈密顿能量函数。尽管动力学的全局线性表示很有吸引力,但这些表示也丢失了一些信息。例如,在哈密顿特征函数的情况下,关于特定固定点和空间位置的信息被折叠成一个单一的标量能量。如果将哈密顿函数视为相空间上的地形图,那么这个特征函数只携带关于海拔的信息,而不是位置信息。相比之下,Lan和Mezić [72] 表明,可以将Hartman-Grobman定理扩展到某些固定点和周期轨道的整个吸引域,从而提供动力学的局部线性嵌入。将这些视角联系起来将继续在Koopman理论中产生有趣且重要的进展。此外,相空间中几何结构的特征值与Koopman算子的谱之间存在已知的联系 [83]。这种知识可能会指导Koopman特征函数的准确识别。
以Koopman特征函数来制定控制需要改变视角,因为控制目标现在可以在特征函数坐标中定义。特征函数表征了系统的几何属性,例如固定点和极限环,作为特定的水平集,控制目标可以等价地制定为将系统引导至这些对象。此外,特定的特征函数代表了连贯结构,即系统的持久特征,这些特征一直是控制的目标。然而,选择用于控制的特定特征函数及其关于特定控制目标的解释仍然是一个开放问题。尽管如此,可能仍然可以在原始状态空间中制定控制,例如通过将状态作为可观测量纳入,适当修改状态权重矩阵,或者通过学习逆映射的近似 [58],这可以更容易地纳入模型预测控制的上下文中。这也激发了进一步研究这些坐标中的可控性和可观测性与非线性系统的性质之间的关系。可控性和可观测性的程度通常会随着不同的特征函数而变化,因此可能可以得到平衡的实现。此外,经典结果,例如PBH测试,表明可能需要多通道驱动来同时控制对应于相同特征值的不同特征函数,例如哈密顿能量和守恒的角动量。多通道输入产生的额外自由度也可以用于特征结构分配,以塑造Koopman特征函数 [50]。因此,驱动可以修改连贯结构的形状(即与特定特征函数相关的Koopman模态)及其时间动态。也有可能使用Koopman线性嵌入来优化非线性系统的传感器和驱动器的布局。
最后,由于无阻尼或轻阻尼的特征函数对应于守恒或几乎守恒的量,因此所提出的控制策略有许多潜在的应用。例如,对称性会产生其他守恒量,这些守恒量同样会产生新的Koopman特征函数。在许多物理系统中,同时控制系统的能量和角动量可能是一个重要的目标。目前的大部分工作都是以空间任务设计问题为背景而制定的。在太阳系中实现能效运输长期以来一直推动着理论和计算动力学的进展,可能会从基于Koopman特征函数的控制中受益。更广泛地说,许多领域都能从改进的非线性控制中受益,包括自动驾驶汽车、湍流控制、抑制疾病传播、稳定金融市场、人机界面、假肢和康复,以及神经紊乱的治疗,仅举几例。
📚2 运行结果
部分代码:
clear all, close all, clc
addpath('./utils/');
path2figs = '../Figures/DOUBLE_GYRE/'; mkdir(path2figs)
path2data = '../Data/'; mkdir(path2data)
ModelName = 'AutonomDoubleGyre_';
% Parameters double gyre
tspan = 0:.01:50;
epsilon = 0;
omega = 2*pi;
A = 0.25;
% Streamfunction / Hamiltonian
x = [0:0.01:2]; y = [0:0.01:1];
[X,Y] = meshgrid(x,y);
StreamFun = A*sin(pi*X).*sin(pi*Y);
Hfield = -StreamFun;
% Parameters control
x0 = [1.3; 0.5]; % initial state
Q = 1; % weighing efun/state in cost function
R = 1; % penalize control
REF = 0.2; % reference value / level set
ode_options = odeset('RelTol',1e-10, 'AbsTol',1e-11);
% Define functions
Psi = @(x)(A*sin(pi*x(1)).*sin(pi*x(2))); % Streamfunction
gradPsi = @(x)([A*pi*cos(pi*x(1))*sin(pi*x(2)); % Gradient of Psi
A*pi*sin(pi*x(1))*cos(pi*x(2))]);
%% UNFORCED SYSTEM
B = [0; 0];
f = @(t,x,u)([-A*pi*sin(pi*x(1))*cos(pi*x(2));A*pi*cos(pi*x(1))*sin(pi*x(2))] + B*u);
[t,y0] = ode45(@(t,x)f(t,x,0),tspan,x0,ode_options);
[Psivals0,Jvals0] = evalCostFun_KoopEfun(Psi,y0,zeros(1,size(y0,1)),Q,R,REF);
%% Controlled system: different actuation choice
% B = [0; 1]; R = 1;
% ModelName1 = [ModelName, 'B01_'];
% B = [1; 0]; R = 1;
% ModelName1 = [ModelName, 'B10_']; % not gain comp
B = [1, 0; 0, 1]; R = eye(2);
ModelName1 = [ModelName, 'B11_'];
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
🌈4 Matlab代码、文章
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取