专家控制

学习笔记,用于记录学习

资料:《智能控制》(第四版)——刘金琨

专家系统

一、专家系统的定义

专家系统是一类包含知识推理的智能计算机程序,其内部包含某领域专家水平的只是和经验,具有解决专门问题的能力

二、专家系统的构成

三、专家系统的建立

知识库包含三类知识:

  1. 基于专家经验的判断性规则
  2. 用于推理、问题求解的控制性规则
  3. 用于说明问题的状态、事实和概念及当前的条件和常识等的数据

推理机包括三种推理方式:

  1. 正向推理:从原始数据和已知条件得出结论
  2. 反向推理:现提出假设的理论,然后寻找支持的证据,若证据存在,则假设成立
  3. 双向推理:运用正向推理提出假设的结论,运用反向推理来证实假设

产生式规则的表达方式为

IF E THEN H WITH CF(E,H)

E 为规则前提条件,即证据,H 为规则的结论部分,即假设,CF为规则的强度,即可信度

四、专家控制的基本原理

专家控制的基本结构:

与专家系统的区别

  1. 专家系统能完成专门领域的功能,辅助用户决策,专家控制能进行独立的、实时的自动决策。专家控制比专家系统对可靠性和抗干扰性有着更高的要求
  2. 专家系统处于离线工作方式,而专家控制要求在线获取反馈信息,即要求在线工作方式

五、 分析典型二阶系统

使用simulink做一个典型二阶系统的图

书上有五个分析,分别对应例子中的规则

  1. |e(k)|>M1时,误差绝对值很大,应无视误差变化趋势,定值输出,是误差绝对值快速减小,同时避免超调,相当开环控制
  2. e(k)Δe(k)>0 或 Δe(k) = 0时,误差绝对值正在增大,或误差为定值。

    a. |e(k)| ≥ M2时,误差较大,控制器输出为:



    b. |e(k)| < M2 时,误差绝对值不大,但正在增大,此时控制器输出为:

  3. e(k)Δe(k) < 0,e(k)Δe(k-1) > 0或e(k) = 0时,误差绝对值正在减少,或达到平衡
  4. e(k)Δe(k) < 0,Δe(k)Δ(k-1) < 0时,误差处于极值,此时看误差绝对值,绝对值大(|e(k)| ≥ M2),就实施强控制,绝对值小(|e(k)| ≤ M2),就实施弱控制
  5. |e(k)| ≤ ε(精度)时,误差绝对值很小,应加入积分环节,减小稳态误差

六、仿真实例

求三阶传递函数的阶跃响应:

仿真程序:(chap2_1.m)

%专家PID控制仿真程序

clear all;
close all; ts=0.001; %采样时间 sys=tf(5.235e005,[1,87.35,1.047e004,0]); %传递函数
dsys=c2d(sys,ts,'z'); %转化为离散系统
[num,den]=tfdata(dsys,'v'); %获取系数 u_1=0;u_2=0;u_3=0;
y_1=0;y_2=0;y_3=0; x=[0,0,0]';
x2_1=0; kp=0.6;
ki=0.03;
kd=0.01; error_1=0;
for k=1:1:500
time(k)=k*ts; r(k)=1.0;
u(k)=kp * x(1) + kd * x(2) + ki * x(3); %规则1,当绝对值过大时定值输出小数值(强控制)
if abs(x(1))> 0.8
u(k)=0.45;
elseif abs(x(1))> 0.40
u(k)=0.40;
elseif abs(x(1))> 0.20
u(k)=0.12;
elseif abs(x(1))> 0.01
u(k)=0.10;
end %误差绝对值正在增大,或误差为定值
if x(1) * x(2)> 0| (x(2) ==0)
if abs(x(1))>=0.05
u(k)=u_1 + 2*kp*x(1);
else
u(k)=u_1+ 0.4*kp*x(1);
end
end %误差绝对值正在减小,货已经平衡
if (x(1)* x(2)<0&x(2)* x2_1>0)|(x(1)==0)
u(k) = u(k);
end %误差处于极值
if x(1)*x(2)< 0&x(2)*x2_1< 0
if abs(x(1))>=0.05
u(k)=u_1 +2* kp* error_1;
else
u(k)=u_1 +0.6* kp* error_1;
end
end %误差绝对值很小
if abs(x(1))<=0.001
u(k)=0.5* x(1)+ 0.010* x(3);
end if u(k) >= 10
u(k) = 10;
end
if u(k) <= -10
u(k) = -10;
end y(k) = -den(2)* y_1- den(3)* y_2- den(4)* y_3+ num(1)* u(k)+ num(2)* u_1+ num(3)* u_2+ num(4)* u_3;
error(k) = r(k)- y(k); u_3 = u_2;u_2 = u_1;u_1 = u(k);
y_3 = y_2;y_2 = y_1;y_1 = y(k); x(1) = error(k); %P
x2_1 = x(2);
x(2) = (error(k)- error_1)/ts; %D
x(3) = x(3)+ error(k)* ts; %I error_1 = error(k);
end
figure(1);
plot(time,r,'b',time,y,'r');
xlabel('time(s)'); ylabel('r,y');
figure(2);
plot(time,r- y,'r');
xlabel('time(s)');ylabel('error');

输出结果:



专家PID控制仿真学习的更多相关文章

  1. 专家PID控制

    1.专家PID控制原理 PID专家控制的实质是,基于受控对象和控制规律的各种知识,无需知道被控对象的精确模型,利用专家经验来设计PID参数.专家PID控制是一种直接型专家控制器. 典型的二阶系统单位阶 ...

  2. MATLAB-离散系统的数字PID控制仿真

    %PID Controller clear all; close all; ts=0.001; %采样时间=0.001s  sys=tf(,]); %建立被控对象传递函数 dsys=c2d(sys,t ...

  3. 利用Matlab实现PID控制仿真

    该文转自博客园: https://www.cnblogs.com/kui-sdu/p/9048534.html %PID Controller clear, clc, close all; ts=0. ...

  4. 经典PID控制及应用体会总结

    经典PID控制及应用体会总结 PID控制原理 PID是一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制方案: 重点关注相关算法是如何对偏差进行处理的: PID控制器各校正环节 ...

  5. PID控制器开发笔记之十一:专家PID控制器的实现

    前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ...

  6. 专家PID

    前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ...

  7. PID控制学习笔记(二)

    不管是基本的PID控制还是变形的PID控制算法,其核心都是对输入信号(设定值信号.测量信号或者偏差信号等)做基本的比例.积分.微分运算,最终提供给被控过程良好的调节信号. 在过程控制仪表,特别是在数字 ...

  8. 两轮自平衡小车双闭环PID控制设计

                                                                                            两轮自平衡小车的研究意义 ...

  9. PID控制最通俗的解释与PID参数的整定方法

    转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...

随机推荐

  1. 类其中的变量为final时的用法

    类其中的变量为final时的用法:   类当中final变量没有初始缺省值,必须在构造函数中赋值或直接当时赋值.否则报错. public class Test {     final int i;   ...

  2. setTimeout中第一个参数

    永远不要传递字符串作为setTimeout的第一个参数!!!记住第一个参数只允许函数,或者匿名函数!因为传递字符串有陷阱啊!!它就是披着羊皮的eval啊!!而且上下文会变成全局啊!! 第一个参数为可执 ...

  3. 自学java如何快速地达到工作的要求?

    自学java如何快速地达到工作的要求,是很多初学者都比较关心的问题,对于初学者来说,盲目自学不但不能快速入门,还会浪费大量的时间. 今天知了堂就来分享自学Java如何快速达到找工作的要求. 1.自学J ...

  4. Mybatis映射文件动态SQL语句-01

    因为在很多业务逻辑复杂的项目中,往往不是简单的sql语句就能查询出来自己想要的数据,所有mybatis引入了动态sql语句, UserMapper.xml <?xml version=" ...

  5. 小程序容器技术,App热更新与敏捷开发新方案

    作为追求代码洁癖的软件工程师,我们对"紧耦合"的技术实现可以说是深恶痛绝.要解决当前企业移动端App日益沉重.难以真正迭代.投入产出比低的问题,首先在技术架构上要实现真正的&quo ...

  6. Go xmas2020 学习笔记 12、Structs, Struct tags & JSON

    12-Structs, Struct tags & JSON. Struct. Struct Gotcha. Anonymous Struct Type. Make the zero valu ...

  7. 靶场vulnhub-CH4INRULZ_v1.0.1通关

    1.CH4INRULZ_v1.0.1靶场通关 ch4inrulz是vulnhub下的基于Linux的一个靶场,作为练习之用 目的:通过各种手段,获取到靶机内的flag的内容 2.环境搭建: 攻击机 K ...

  8. python基础练习题(题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少)

    day13 --------------------------------------------------------------- 实例021:猴子偷桃 题目 猴子吃桃问题:猴子第一天摘下若干 ...

  9. 重磅!业界首个云原生批量计算项目Volcano正式晋级为CNCF孵化项目

    摘要:4月7日,云原生计算基金会(CNCF)宣布,由华为云捐献的业界首个云原生批量计算项目Volcano正式晋级为CNCF孵化项目. 4月7日,云原生计算基金会(CNCF)宣布,由华为云捐献的业界首个 ...

  10. C#中检查null的语法糖

    今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了.然后我又想起来null检查,这个可以说一说. 函数参数null检查 传统写法 写一个函 ...