控制算法手记-先学习系统动力学建模和分析

写在前面

  • 对于初步接触控制算法的工程师或者科研人员来说,往往会迷失于种类繁多、名称各异的控制理论/算法和浩瀚的文献中,相关资料越看越迷茫(除非是找到了和自己的问题完全匹配的文献),有时会占用大量的时间。到底我该选用哪种控制算法?我选择了一种我认为合适的控制算法,是不是还有更好的的算法被我忽略掉了?某种算法很流行/热门,很高级,我是不是也用在我的项目中?我想学习这类控制算法该从何处着手?
图1. 庞杂的控制理论和算法(来源-https://engineeringmedia.com)
  • 以上这些问题,也会出现在刚大量接触新的学科知识的时候。初期的方向不明、迷茫或者焦虑虽然难以避免,但可以通过科学、系统的思维方式可以尽量降低其对项目执行的影响。回到控制算法设计的问题上,这些问题一方面是因为我们首先没有对自己面临的主要问题进行认真分析,对控制系统语境下控制算法的本质、各种控制算法的基本思想和原理没有深入理解;另一方面,我们总是倾向于认为存在着某种标准/参考的控值算法,一定能够很好地解决我的问题,静静地躺在文献海洋中,只是等待着去发现,于是盲目去学习相关资料;

  • 应该意识到:控制算法虽然种类繁多,但各种控制算法具有很强的问题针对性、具体被控对象指向性,即各种控制算法提出之初,都是针对某一类问题或者某类被控对象(这类被控对象中体现了某一种/多种共同问题)。‘控制算法’本质是一种人为设计的‘动力学系统’人们设计这种动力学系统,目的在于和‘被控对象’这一‘动力学系统’相互作用后,包含控制算法的‘整个被控系统’的‘动力学行为’符合目标性能要求(比如稳态精度、带宽/上升时间、跟踪性能、抗干扰能力等),如图2所示。如果人们对整体被控系统的动力学性能要求大体一致的话,那么显然是被控对象的主要动力学特性决定了最终控制算法的设计。
图2. 控制算法和被控对象的动力学系统相互作用后,使得整个被控系统动力学行为表现符合要求
  • 图2对控制算法设计的启发是深刻的:一方面是控制目标和被控对象的主要动力学特性(参见控制算法手记—什么让控制算法复杂化?),而不是哪种控制算法是否热门,是否‘先进’决定了我们该选用哪种控制算法。不同领域(如机电、电力电子、电网、化工过程等)的被控对象体现出来的主要动态特性/面临的主要问题不同,必须要深入了解实际工艺/工作过程以及所关联的动力学行为,不能轻易将一个领域好用的算法随便套用到另一个领域中去;另一方面:控制算法和被控对象的(工艺/工作过程,结构)设计、分析和实施要放在整个控制系统的架构下进行,因为最终目的是使整个被控系统的性能满足预期。这就要求控制、机械、电气等工程师在整个系统层面的协同设计,并能从系统动力学(system dynamics)的视角发展出各个子系统/部件之于整体系统性能的直觉和洞察力(如每个子系统/部件的动力学是如何影响了最终的动力学性能,是否占据了主导地位,如何通过设计提前改善动力学特性以避免不利影响)。

  • 因此,在控制算法设计、学习以至控制系统设计、开发过程中,必须十分重视系统动力学建模和分析的地位。然而遗憾的是,这一块在国内的控制理论课程教育体系中长久以来都被轻视。初学者只记住了传递函数/状态空间表达式等概念,记住了一堆以此为基础的设计方法,却不知这些式子实际中如何得来,为什么要写成这些形式,这些公式的解又怎样和系统动力学性能所关联,如何根据自己所面临的问题将所学到的知识有效运用,更不用说去研发新的控制算法以更有针对性地解决这个问题。不合理的课程设置体系、缺少和现实物理世界的关联,控制理论的学习/设计显得‘云里雾里‘。那么,系统动力学建模和分析是否能够解决控制算法设计/学习过程中这些问题呢?

系统动力学建模和分析

在回答上面这个问题之前,应该注意到控制算法始终是和动力学/动态变化关联起来的:

控制算法的对象是实际的动力学系统。这些动力学系统或是机械、电力、温度、磁、光、声、流体等物理领域或是涉及化学反应过程,体现出极其丰富/复杂的动力学行为。如何驯服这些丰富/复杂的动力学行为,有赖于对动力学行为的深刻认识和分析。

控制算法的目标在于使得最终的整个被控系统的动力学行为符合预期要求(这些要求一般可以从稳定性、控制精度、动态响应性三个维度进行描述),以实现动力学系统脱离人为干预的自动运行(注意不是自主运行)。

控制算法的实施一般依赖于各种能够进行数值计算的硬件平台上,这些硬件平台以信号采样的形式实时收集所需要的信息并进行处理、运算,然后将动态运算结果/控制指令作用于被控对象;

因此,控制算法看似庞杂,但想深入学习却是有迹可循的,即一定要抓住动力学系统这个核心。那么,旨在研究对实际动力学系统进行建模和分析的‘系统动力学建模和分析’就格外重要了。一方面,它为整个控制系统(图2)的分析、设计、实施提供了一个一以贯之的分析性框架,勾连起现实物理世界和数学世界(控制算法手记-建模重要嚒)。另一个方面对被控对象的动力学特性分析结果为控制算法的设计提供了前提和动机。

图3. 先学习系统动力学建模与分析

在控制算法的学习中,作者认为应该按照‘’系统动力学建模及分析-基本控制理论和控制算法设计方法-控制算法实施‘’的思路,如图3所示,其中:‘系统动力学建模及分析’即以实际的动力学系统为研究对象,研究如何建立起合乎需要的数学模型(包含机理模型和数据模型)以描述动态变化,又如何依据这些模型得到典型系统动力学行为(模型的解和动力学行为直接关联),这些典型的动力学行为又如何影响了最终的控制性能等;‘基本控制理论和控制算法设计方法’回应了对于给定的实际动力学系统及其典型的动力学行为表现,如何通过对控制算法的设计以驯服丰富/复杂的动力学行为,使其满足人类预期,实现控制目标;‘控制算法实施’则关照到了在数字计算时代,如何将在数学世界中的控制算法在现实物理世界中有效落地,这一落地过程是否又对系统动力学行为施加了影响(如采样-计算延迟,离散化影响等)。

图3中,必备知识体系只是给出了学习控制算法必须掌握的基本控制理论、概念、框架和体系,为‘选择性模块知识体系(即可以根据自己的具体领域和应用场景有选择性地学习)’奠定了扎实和确切的基础。控制算法的学习应该循序渐进,在对典型的动力学系统以及其行为表现、分析方法、基本控制理论、概念、框架和体系(图3中的必备知识体系)确切掌握的基础上,再学习一些'先进控制算法'(很多‘先进控制算法’并没有逃出这些基本概念和框架)。切忌贪多求全,忽视对现实动力学行为的深刻理解和深入分析,只身投入控制理论的浩瀚海洋中。

总结

在控制算法学习和实践中,先不要着急学习/运用‘先进控制算法’,反倒要注重对系统动力学建模和分析方法体系的掌握,对自己的控制对象动力学特性和主要问题的分析,任何控制算法的设计和深入理解,无论是基于机理模型还是数据驱动,这都是十分必要的一步。