(7-3-01)反馈控制与系统稳定性:基于深度学习的反馈控制系统(1)项目介绍+框架设计

7.2  基于深度学习的反馈控制系统

在下面的项目中,实现了一个反馈控制系统的仿真工具,分别实现了基于不同电路模型(如PID、RTCFL_RNN等)的控制器与Plant模型的集成仿真。通过调度器、电路模型和参数配置,用户可以模拟不同控制策略对于各种输入信号的动态响应。该工具提供了灵活的输入方式,支持从文本文件读取输入信号,同时能生成相应的响应曲线图,方便用户直观了解不同控制策略的性能表现。项目中还使用了深度学习技术,如循环神经网络,为用户提供更复杂的控制策略建模和仿真能力。

实例7-2:基于深度学习的反馈控制系统(源码路径:codes\7\feed\pid.py

7.2.1  项目介绍

本项目是一个综合了控制反馈系统仿真和深度学习技术的工具。通过该工具,用户可以模拟和评估不同控制策略(如PID、RTCFL_RNN等)对于各种输入信号的动态响应。深度学习技术在项目中得以应用,提供了更灵活和复杂的控制策略建模能力,例如使用循环神经网络(RNN)进行模型训练。用户能够通过调度器、电路模型和灵活的参数配置,以及支持从文本文件读取输入信号的方式,进行仿真实验,并生成相应的响应曲线图,从而直观地了解不同控制策略的性能表现。这使得项目成为一个综合了传统控制方法和深度学习的强大工具,可用于系统动态响应分析和控制算法优化。

7.2.2  框架设计

文件base.py定义了一个用于控制反馈系统模拟的基础框架,主要包括三个类:actorBase(通用的执行者),plantBase(Plant/过程的基类),controllerBase(控制器的基类)。这个框架为用户提供了一个灵活的结构,可以通过继承这些基类创建不同类型的执行者、Plant和控制器,并通过相应的调度器(scheduler)进行模拟和测试。整体上,这个框架提供了一个通用的结构,使得用户能够轻松构建和测试控制反馈系统。

from lib import *
import abc

class actorBase(abc.ABC):
    """执行者的基类。
    """
    @abc.abstractmethod
    def __init__(self, params={}):
        """构造函数
        参数
        ----------
        params : dict
            执行者的静态参数字典,默认为空
        """
        pass

    @abc.abstractmethod
    def execute(self, inputs: Dict[str, float]) -> float:
        """该函数封装了执行者在单个时间步骤中需要进行的所有计算。
        调用当前和历史输入(如果需要),并返回单个输出浮点数。
        同时将必要的值存储到执行者具有的任何字段中。
        
        参数
        ----------
        inputs: Dict
            输入字典,其中字典中的每个元素应为单个浮点数。
            对于控制器,默认情况下应只有 r。
            对于Plant,字典可能需要包含更多项目,这需要进行异常强制执行。

        返回
        -------
        Float
            执行者的输出值
        """
        output = -69
        return output

    @abc.abstractmethod
    def paramAdj(self, inputs):
        """允许在类被实例化后调整特定允许参数/类字段的参数。
        参数
        ----------
        inputs :
            输入可以是任何格式,应符合执行者的具体要求。
        """
        pass

    @abc.abstractclassmethod
    def getAuxiliaryInfo(self) -> Dict:
        """返回执行者中不是输入或输出的所有参数和其他信息的字典。
        返回
        -------
        Dict
            执行者的所有 '内部' 信息字典。
        """
        outputDict = {}
        return outputDict

class plantBase(actorBase):
    """Plant基类,是执行者的子类。
    父类:actorBase
    """
    @abc.abstractmethod
    def __init__(self, params={}):
        """在此初始化Plant的特定字段
        参数
        ----------
        params : dict, optional
            用于Plant的静态参数字典,默认为空
        """
        super().__init__(params)

    @abc.abstractmethod
    def execute(self, inputs: Dict[str, float]) -> float:
        """该函数封装了Plant在单个时间步骤中需要进行的所有计算。
        调用当前和历史输入(如果需要),并返回单个输出浮点数。
        同时将必要的值存储到Plant具有的任何字段中。

        参数
        ----------
        inputs: Dict
            输入字典,其中字典中的每个元素应为单个浮点数。
            对于Plant,字典可能需要包含更多项目,这需要进行异常强制执行。

        返回
        -------
        Float
            Plant的输出值。
        """
        output = super().execute(inputs)
        return output

    def paramAdj(self, inputs):
        """允许在类被实例化后调整特定允许参数/类字段的参数,这不是一个抽象方法,因为在这个子类中没有强制要求实现。

        参数
        ----------
        inputs :
            输入可以是任何格式,应符合执行者的具体要求。
        """
        pass

    @abc.abstractclassmethod
    def getAuxiliaryInfo(self) -> Dict:
        """返回Plant中不是输入或输出的所有参数和其他信息的字典,这不是一个抽象方法,因为在这个子类中没有强制要求实现。

        返回
        -------
        Dict
            Plant的所有 '内部' 信息字典。
        """
        pass

class controllerBase(actorBase):
    """控制器基类,是执行者的子类。
    父类:actorBase
    """
    @abc.abstractclassmethod
    def __init__(self, params={}):
        """在此初始化控制器的特定字段
        参数
        ----------
        params : dict, optional
            用于控制器的静态参数字典,默认为空
        """
        super().__init__(params)

    @abc.abstractclassmethod
    def execute(self, inputs: Dict[str, float]) -> float:
        """该函数封装了控制器在单个时间步骤中需要进行的所有计算。
        调用当前和历史输入(如果需要),并返回单个输出浮点数。
        同时将必要的值存储到控制器具有的任何字段中。

        参数
        ----------
        inputs: Dict
            输入字典,其中字典中的每个元素应为单个浮点数。
            对于控制器,字典可能需要包含更多项目,这需要进行异常强制执行。

        返回
        -------
        Float
            控制器的输出值
        """
        output = super().execute(inputs)
        return output

    def paramAdj(self, inputs):
        """允许在类被实例化后调整特定允许参数/类字段的参数。
        不是一个抽象方法,因为在这个子类中没有强制要求实现。

        参数
        ----------
        inputs :
            输入可以是任何格式,应符合执行者的具体要求。
        """
        pass

    @abc.abstractclassmethod
    def getAuxiliaryInfo(self) -> Dict:
        """返回控制器中不是输入或输出的所有参数和其他信息的字典。
        不是一个抽象方法,因为在这个子类中没有强制要求实现。

        返回
        -------
        Dict
            控制器的所有 '内部' 信息字典。
        """
        pass

对上述代码的具体说明如下所示:

  1. 类actorBase:作为通用执行者的基类,定义了执行者的抽象方法,包括构造函数__init__,执行函数execute,参数调整函数paramAdj以及获取辅助信息的函数getAuxiliaryInfo。该类规定了执行者的基本结构和操作,包括输入、输出和内部参数的处理。
  2. 类plantBase:继承自actorBase,作为Plant/过程的基类,重写了执行函数execute。Plant执行函数中包括对输入的处理,并定义了参数调整和获取辅助信息的方法。Plant类是执行者的一种特例,用于模拟系统的过程和动力学行为。
  3. 类controllerBase:继承自actorBase,作为控制器的基类,同样重写了执行函数execute。控制器执行函数中包括对输入的处理,并定义了参数调整和获取辅助信息的方法。控制器类用于实现不同的控制算法,如PID、RNN和DNN。
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农三叔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值