(7-3-04)反馈控制与系统稳定性:基于深度学习的反馈控制系统(4)线性化电路控制器

7.2.5  线性化电路控制器

文件circuits.py实现了基于递归时间相关反馈线性化(RTCFL)的循环神经网络(RNN)控制电路,该电路包含的神经网络模型用于模拟黑盒Plant模型(plant_bb)和控制器(controller_nn),通过监督学习的方式迭代地优化Plant模型和控制器的性能。在本项目中,根据内部标志(_circuitModeFlag)的状态,将电路分为三个阶段:Step 1训练plant_nn,Step 2训练controller_nn,和最终的RTCFL优化模式。通过时序数据的训练和损失的动态更新,电路实现了对复杂系统的逐步学习和控制。例如 static PID-FOPDT控制器的实现代码如下所示。

class PID_static_FOPDT(circuitBase):
    def __init__(self, P: float, I: float, D: float, K: float, tau: float, theta: float) :
        """除了父类参数外,还需要为这个电路中使用的PID控制器和FOPDT系统的静态参数。

        参数
        ----------
        P : float
            PID控制器的比例(P)参数。
        I : float
            PID控制器的积分(I)参数。
        D : float
            PID控制器的微分(D)参数。
        K : float
            FOPDT系统模型的过程增益(K_p)参数。
        tau : float
            FOPDT系统模型的过程时间常数(tau_p)参数。
        theta : float
            FOPDT系统模型的过程死时间(theta_p)参数。
        """
        super().__init__()

        print(f"PID_static_FOPDT电路已创建!参数如下:\n\tP\t: {P}\n\tI\t: {I}\n\tD\t: {D}\n\tK\t: {K}\n\ttau\t: {tau}\n\ttheta\t: {theta}")

        # 在此处创建字段
        self.returnDict["P"]           = P
        self.returnDict["I"]           = I
        self.returnDict["D"]           = D
        self.returnDict["K"]           = K
        self.returnDict["tau"]         = tau
        self.returnDict["theta"]       = theta

        self.keysToPlot = ['r', 'u', 'y', 'e']
        
        # 在此处初始化控制器
        self._controller = controllers.PID_static(
            params={
                "P" : self.returnDict["P"],
                "I" : self.returnDict["I"],
                "D" : self.returnDict["D"]
            }
        )

        # 在此处初始化FOPDT系统
        self._plant = plants.FOPDT(
            params={
                "K"     : self.returnDict["K"],
                "tau"   : self.returnDict["tau"],
                "theta" : self.returnDict["theta"]
            }
        )

    def __str__(self):
        """此类的字符串返回覆盖。只是一个描述性名称,用于表示此电路。
        """
        return '静态PID到FOPDT电路.'

    def getDescriptionString(self) -> str:
        """控制器PID actor和FOPDT actor参数的文本摘要。
        """
        return f"PID参数:P={self.returnDict['P']}, I={self.returnDict['I']}, D={self.returnDict['D']}。\nFOPDT参数:K={self.returnDict['K']}, tau={self.returnDict['tau']}, theta={self.returnDict['theta']}."


    def execute(self, r) -> float:
        """执行PID_static_FOPDT电路并更新包含在self.returnDict中的列表。请注意,这个字典中的所有列表都需要具有相同的长度,否则调度程序类中的绘图生成将中断。这意味着这些列表中的每个元素的相应索引之间存在上下文时间相关性。

        参数
        ----------
        r: float
            需要输入电路的r值

        返回
        -------
        Float
            Plant模型的最终输出'y'
        """

        last_yVal = 0
        if len(self.returnDict['y']) > 0 :
            last_yVal = self.returnDict['y'][-1]
        output_controller = self._controller.execute(r, last_yVal)
        output_plant = self._plant.execute(output_controller)

        self.returnDict['r'].append(r)
        self.returnDict['e'].append(self._controller.getAuxiliaryInfo()['lastError'])
        self.returnDict['u'].append(output_controller)
        self.returnDict['y'].append(output_plant)

        return output_plant

在上述代码中,类PID_static_FOPDT实现了一个简单的静态PID控制器,用于控制一个简单的FOPDT(First-Order Plus Dead Time)系统。通过设置PID和FOPDT系统的参数,该电路模拟了一个具有给定动力学特性的控制系统。execute 方法模拟电路的执行过程,根据输入信号 r 计算控制信号和系统输出,并更新记录这些变量的字典。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值