工业控制之“什么叫RTO?”

2024-09-01 05:20
文章标签 工业 控制 rto

本文主要是介绍工业控制之“什么叫RTO?”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

读研究生时,过程控制领域经常涉及“APC”、“RTO”等字眼,导师也经常性提及,现在在工作中也开始提了,可能意识到先进控制的重要性了。

今天谈一下RTO在工业上的应用,曾经和一个博士生对“RTO涉及哪些算法”发生过激烈争吵,关于一些算法寻优名词,例如:”瞎子爬山法“、“进退法”、“成功失败法”等,这些算法其实是一种局部择优的贪心搜索算法,本质上是梯度下降法。神经网络中的权值调整就是通过梯度下降法。J目标函数(偏差最小),优化权值,典型案例求最值问题,梯度下降法先天不足就是只能在单调区间内寻优(单调函数),假设有多个单调区间,(负)梯度下降法就会被拉回原单调区间,这就是经常说的容易陷入局部最优解问题。权值w取值区间假设[0 +∞],采用梯度下降法只能得到第一个谷点。如果应用到PID控制上,假设已知被控对象传递函数,经差分离散化得到差分函数,经过梯度下降法循环迭代求出一组权值(PID参数)得到第一个谷点,权值在迭代过程中始终没有越过[0 w5点],也就是说限制在w3点上,典型案例人工神经网络优化PID参数。

关于梯度下降法原理可以参考:https://blog.csdn.net/weixin_43213884/article/details/122303703

在这里插入图片描述
在这里插入图片描述
不断逼近-0.625
在这里插入图片描述

遗传算法可以解决梯度下降法的局部最优解问题,举个完整例子[图片摘自智能控制导论_昆明理工大学]:

在这里插入图片描述
在这里插入图片描述
有几个自变量就有几个样本数据,把这几个样本数据合成一个染色体。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

%Generic Algorithm for function f(x1,x2) optimum
clear all;
close all;%Parameters
Size=80;   
G=100;     
CodeL=10;umax=2.048;
umin=-2.048;
%初始化 种群 采样rand+round 产生0和1
E=round(rand(Size,2*CodeL));    %Initial Code%Main Program
for k=1:1:G
time(k)=k;for s=1:1:Size
m=E(s,:);
y1=0;y2=0;%Uncoding  解码操作
m1=m(1:1:CodeL);
for i=1:1:CodeLy1=y1+m1(i)*2^(i-1);
end
x1=(umax-umin)*y1/1023+umin;
m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeLy2=y2+m2(i)*2^(i-1);
end
x2=(umax-umin)*y2/1023+umin;
%优化目标是求函数的最大值,故可将个体的适应度直接取为对应的目标函数值
F(s)=100*(x1^2-x2)^2+(1-x1)^2;
end
%选个体适应度的倒数作为目标函数
Ji=1./F;     %(有一说一 这个真的没用)
%****** Step 1 : Evaluate BestJ ******
BestJ(k)=min(Ji);fi=F;                          %适应度函数 
%'ascend' 表示升序(默认值),'descend' 表示降序。
[Oderfi,Indexfi]=sort(fi,'ascend' );     %升序排列
Bestfi=Oderfi(Size);           %Let Bestfi=max(fi )选出最优个体
BestS=E(Indexfi(Size),:);      %Let BestS=E(m), m is the Indexfi belong to max(fi)
bfi(k)=Bestfi;             %作图用的 寻优过程%****** Step 2 : Select and Reproduct Operation******fi_sum=sum(fi);fi_Size=(Oderfi/fi_sum)*Size;%比例法进行 复制fi_S=floor(fi_Size);        %Selecting Bigger fi valuekk=1;       for i=1:1:Sizefor j=1:1:fi_S(i)        %Select and Reproduce TempE(kk,:)=E(Indexfi(i),:);  %%优秀的个体进行复制kk=kk+1;              %kk is used to reproduceendend%************ Step 3 : Crossover Operation ************
pc=0.60;               %%交叉的概率
n=ceil(20*rand);       %%一点交叉 选择出一点交叉的位置
for i=1:2:(Size-1)temp=rand;if pc>temp                  %Crossover Conditionfor j=n:1:20TempE(i,j)=E(i+1,j);TempE(i+1,j)=E(i,j);endend
end
TempE(Size,:)=BestS;
E=TempE;%************ Step 4: Mutation Operation **************
%pm=0.001;
%pm=0.001-[1:1:Size]*(0.001)/Size; %Bigger fi, smaller Pm
%pm=0.0;    %No mutation
pm=0.1;     %Big mutation   %%%变异for i=1:1:Sizefor j=1:1:2*CodeLtemp=rand;if pm>temp                %Mutation Conditionif TempE(i,j)==0TempE(i,j)=1;        %1变0 0变1elseTempE(i,j)=0;endendendend%Guarantee TempPop(30,:) is the code belong to the best individual(max(fi))
TempE(Size,:)=BestS;      %保证最优个体不丢失(变异交叉等会改变最优个体的基因)
E=TempE;                  %形成新的一代种群的基因
endMax_Value=Bestfi
BestS
x1
x2
figure(1);
plot(time,BestJ); 
xlabel('Times');ylabel('Best J');
figure(2);
plot(time,bfi);
xlabel('times');ylabel('Best F');

在这里插入图片描述

关于遗传算法原理可以参考:https://blog.csdn.net/qq_30759585/article/details/112761360

遗传算法PID的解析和实现
https://zhuanlan.zhihu.com/p/139945063

function GA_PID()
%{
程序功能:
1、遗传算法PID的实现
2、传递函数:
G(s)=400/(s^2+50s)date:2020.05.12
%}clear,clcclose allglobal N  L   num w1 w2 w3 w4 vin t G%-----------------完成PID初始化---------------------------------------------w1=0.5;  %误差权重w2=0.4;  %超调量权重w3=0.9;  %上升时间w4=0.4;  %调节时间  %权重的大小可以影响对应的性能vin=1; %参考输入  KPRange=[0.001, 20];KIRange=[0.001 ,1];KDRange=[0.001,1 ] ;   %参数取值范围,不要从0开始,否则会陷入迭代困难!G=tf(400,[ 1 ,50, 0 ]) ; %被控对象time=0.1 ;%仿真时长t=linspace(0,time ,200);%----------------完成遗传算法初始化-----------------------------------------------num=3 ;%变量个数N = 50;                          % 种群上限ger = 10;                       % 迭代次数L = 10;                           % 单个变量的编码基因长度pc = 0.8;                        % 交叉概率pm = 0.1;                        % 变异概率pt=0.2;                         %自我复制概率dna1 = randi([0, 9], [N, L]);     % 基因dna2=randi([0, 9], [N, L]);     % 基因dna3=randi([0, 9], [N, L]);     % 基因dna=[dna1,dna2,dna3]; %合并3个变量的基因for epoch = 1: ger               % 进化代数为100%交叉[x1,x2]=jiaoCha(dna, pc);  % 变异操作x3=bianYi(dna, pm); %自我复制x4=copy(dna, pt);dna = [dna; x1; x2; x3; x4];               % 合并新旧基因dna1=dna(:, 1:L);dna2=dna(:, L+1 : 2*L);dna3=dna(:, 2*L+1 : num*L);fi = zeros(N*5, 1);                % 初始化适应度,提速
%         fi = Fx(jieMa(dna1,xRange) , jieMa(dna2 ,yRange));    %         计算适应度,容易理解,求最大值M=length(dna1);for k=1:Mfi(k)=-Fx(jieMa(dna1(k,:),KPRange) , jieMa(dna2(k,:) ,KIRange) , jieMa(dna3(k,:) ,KDRange)); %求最小值end%         fi=Fx(jieMa(dna1,xRange) , jieMa(dna2 ,yRange)); %求最大值dna = [dna, fi];  %适应度放在最后一列  %自然选择dna=choice(dna, fi);dna = dna(:, 1 : num*L);  %去掉矩阵末尾的适应度,进入下一次迭代endx = jieMa( dna(:, 1:L) ,KPRange);            % 对最终种群解码 (dco(1)-1)y = jieMa( dna(:, L+1:2*L ) ,KIRange);z=  jieMa(dna( :, 2*L+1 : num*L) ,KDRange) ;KP=x(1)KI=y(1)KD=z(1)
%     Fxy=Fx(KP,KI,KD)y=draw( KP, KI, KD) ;figureplot(t ,y, 'linewidth' ,3) %绘制效果图title('Genetic algorithm PID')xlabel('time(s)')ylabel('Amplitude')grid onend%适应度函数/目标函数
function J=Fx(kp , ki , kd)global w1 w2 w3 w4 vin  [y, tr ,ts ,pos]=performance( kp, ki, kd ) ;n=length(y);J=0;for k=1:ne=vin-y(k) ; %误差J=J+w1*abs(e)+w2*pos+w3*tr ;      %误差超调量的积分  endJ=J+w4*ts ;%调节时间end%绘制图形
function y=draw( kp, ki, kd)global t GGpid=tf([kd, kp ,ki ], [1,0] ) ; %描述PID控制器的传递函数Gs=feedback(Gpid*G  ,1,  -1)  ;%描述闭环系统的负反馈传递函数,H=1
%     figurey=step(Gs, t) ; %单位阶跃响应end%{
计算PID性能指标tr:上升时间ts:调节时间pos:超调量
%}
function [y, tr ,ts ,pos]=performance(kp, ki, kd)global t  y=draw( kp, ki, kd);ymax=max(y);  %最大响应yend=y(length(y));  %响应终值pos=( ymax-yend )/yend;  %超调量n=1;while( y(n)<yend  )n=n+1;endtr=t(n) ;%上升时间
%     n=1;
%     while( y(n)<ymax )
%         n=n+1;
%     end
%     tp=t(n) ; %峰值时间n=length(t) ;while( y(n)>0.98*yend && y(n)<1.02*yend )n=n-1;endts=t(n); %调节时间end%解码
function result=jieMa(gene , range)global La=range(1) ;b=range(2) ;dco=zeros(L,1);for i=1 : Ldco(i)=10^(L-i); %解码器endresult=gene * dco / (dco(1)-1)/10 *(b-a)+a;end%选择
function result=choice(gene, fi)% 自然选择--排名法global L N numdna = flipud(sortrows(gene, L*num + 1));    % 对适应度进行降序排名,while size(dna, 1) > N                 % 自然选择,只保留50条基因d = randi(size(dna, 1));           % 排名法%当d非常大时,则容易被淘汰if rand < (d - 1) / size(dna, 1)  %根据概率大小,淘汰排名靠后的小概率基因 dna(d,:) = [];fi(d, :) = [];endendresult=dna ; 
end%变异
function result=bianYi(gene, pm)global N L numfor i = 1: N                           % 变异操作if rand < pmgene(i,randi(num*L)) = randi([0, 9]);endendresult=gene;end%复制
function result=copy(gene, pt)global N L numx= zeros(N, num*L);                % 初始化子代基因,提速用for i = 1: N                 % 交叉操作if rand < ptd = randi(N);                 x(i,:)=gene(d,:);% 随机抽选一个自我复制的个体endendresult=x;
end%交叉函数,一条dna,产生两条交叉后的dna
function [x1,x2]=jiaoCha(gene, pc)global N L numx1 = zeros(N, num*L);                % 初始化子代基因,提速用x2 = x1;                         % 同上for i = 1: N                 % 交叉操作if rand < pcd = randi(N);            m = gene(d,:);            % 随机抽选一个交叉的个体d = randi(num*L-1);          % 确定交叉断点x1(i,:) = [gene(i,1:d), m(d+1: num*L)];  % 新个体 1        x2(i,:) = [m(1:d), gene(i, d+1: num*L)];  % 新个体 2endend
end

这篇关于工业控制之“什么叫RTO?”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126059

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

【电机控制】数字滤波算法(持续更新)

文章目录 前言1. 数字低通滤波 前言 各种数字滤波原理,离散化公式及代码。 1. 数字低通滤波 滤波器公式 一阶低通滤波器的输出 y [ n ] y[n] y[n] 可以通过以下公式计算得到: y [ n ] = α x [ n ] + ( 1 − α ) y [ n − 1 ] y[n] = \alpha x[n] + (1 - \alpha) y[n-1]

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—1控制节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—10.控制节点-Heat服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack Victoria版——7.1控制节点-Neutron网络服务组件

7.1控制节点-Neutron网络服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版 离线安装部署系列教程(全) OpenStack Train版 离线安装部署系列教程(全) 欢迎留言沟通,共同进步。 文章目录 一、创建n