燃烧卡路里-体重变化(黑盒建模)的建模与PID调节

d# Introduction
大多数人常为自己的体重而担忧,诸多APP(如KEEP)也根据不同的用户而进行饮食量化控制。

其实,当我们学完自动控制原理(经典控制)后,可以通过PID控制,对一个体重变化这一模型进行调节。

本实验是关于DR_CAN[自动控制原理(经典控制)(https://www.bilibili.com/video/BV1W441167qn)的进一步研究。

由于作者本身不是学自动化出身的,文中出现错误望包含指正!

Modeling

建模粗糙分类

(1)白盒建模法。了解被建模对象的物理特性,通过对系统理论层次的了解推导出数学方程。(所有的数学算式都和物理公式对应,一般都为微分方程,因为微分方程可以表征物体随着时间的变化规律)。
(2)黑盒建模法。通过对对象的实测数据推导出数学公式,当我们很难去用一直的物理规律去描述一个对象时,往往通过向对象加输入得出对象输出规律。在分析比较复杂的系统时候往往采用黑盒建模法。

我们在网上搜索,有很多这样的体重变化的模型,所以这里我们直接选取一个比较靠谱的Mifflin St.jeor公式。当然你要问这个公式怎么来的,笔者估计应该是通过黑盒建模法得到的。

建模过程

首先我们设置一些基本量:

热量输入:E_i  (input)
热量输出:E_e  (expenditure)
净热量:E_n = E_i - E_e   (net)
基础代谢率(Basal Metabolic Rate):p ,心跳啥的
基础代谢率系数:α
   其中 α=1.3 for 轻体力劳动
   		α=1.5 for 中体力劳动
   		α=1.9 for 重体力劳动

单位:Kcal(千卡)
其中7000Kcal≈1KG

燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第1张图片
Mifflin St.jeor公式比较实用,用以替代p

p = 10m + 6.25h -5a + s
p: BMR(KCal)
m: 体重(KG)
h: 身高(cm)
a: 年龄(year)
s: 性别调整参数
	男:5
	女:-161 

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
设系统输入u = E_i - E_e - αc代入
在这里插入图片描述
这里直接给出传递函数的结果:
燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第2张图片

Experiment

无扰动模型

我们根据这个传递函数,在simulink中搭建模型如下:

燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第3张图片
笔者用的Matlab 2018b版本,关于传递函数,是在带的 Varying Transfer Function,低版本可能没有,当然也可以自己搭建。这里就不贴源文件了,大家可以自己动手搭建尝试一下。

关于参数选择,以自己为例。由于疫情期间,有些长肉,体重设为80KG。日常摄入查阅资料定位2500KCal,平时喜欢打篮球,篮球一小时大概能消耗500KCal,那也不能天天打,二天一次,取个平均数每天250KCal。平时在家也没啥体力活,α取1.3,其他的根据自身情况赋值。得到以下动态响应曲线
燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第4张图片
图像收敛到72KG多一点,这大概是我在学校的体重,还算比较准确。

有扰动模型

上述问题是一个开环控制,实在理想条件下(日复一日规律)的收敛情况。作为一个没有毅力的人,很多时候会收到环境的扰动,比如下雨天没有运动,周末跟朋友出去吃了榴莲火锅等。为了能够更准确地模型,接下来就是给模型添加扰动,同时设计成为一个闭环系统能够通过反馈调节自己。

比例调节(P调节)

设置一个目标体重

r = 65KG
则误差e = r - m(t)
u = E_i - E_e
D = -αc
c = 6.25h - 5a + s

注意这里的输入和扰动有所变动。
为了方便直接手绘了···
燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第5张图片
为了能让系统稳定,另P_2<0,解的k_p>-10α=13。
下图是在simulink中搭建,其中我们取不同的k值。
燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第6张图片
调节Kp的增益,红色为200,蓝色为20,黄色为目标体重参考线。
燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第7张图片
当Kp < -13 时,认为该系统能够收敛。其Bode图和根轨迹如下。
燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第8张图片
燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第9张图片
这个模型里可以把Kp看成一个“决心因子”或者“自控因子”。Kp越大,表示你减小差距的愿望越强烈,采取的行动越多。根据系统的根我们知道Kp+10α两个参数共同影响着体重的输出结果。于是当你的决心Kp在代谢率系数10α的承受范围内,即Kp>-13时,体重总是可控的,而且愿望越强烈,就能越快达到目标。
Kp>0说明你比较节制,只要体重超过预期,就会采取行动减肥;
Kp=0说明you just dont care,不会因为体重和预期有差距而产生任何行动,任由干扰项身体代谢率 do the job。
Kp<0(比如-5)说明你就算体重超过预期仍然快乐养膘,这时只要你的快乐程度没有战胜基础代谢率(系统自身的稳定性储备),那么体重虽然慢但仍然早晚可以依靠自然代谢率降下来。但是如果你看到自己越胖约开心,主观上加大力度继续变胖,自控因子Kp<-13,身体代谢率也救不了你的时候,你的体重就会疯狂爆炸。

比例积分调节(PI调节)

在实际问题中,我们不可能无限增大Kp来使得自己的体重达到目标,这里我们引入积分项。

燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第10张图片

燃烧卡路里-体重变化(黑盒建模)的建模与PID调节_第11张图片

致敬DR_CAN! 后文待续。

你可能感兴趣的:(实验)