jxTMS--模糊控制

31 篇文章 1 订阅
25 篇文章 0 订阅

jxTMS:低成本快速定制的业务系统开发平台。

模糊控制

模糊控制就是运用模糊数学的基本原理,结合产生式的知识运用方式,通过定义模糊规则,根据当前采集到的输入量经过推理计算出控制量。

所以要实现模糊控制包括如下的几个步骤:

  • 定义模糊数,我一般称为模糊性质,如轻、重、中等力度等,主要是对当前属性的实际取值给出一个性质判断

  • 定义模糊变量,如大小、方向、速度、力量等,一般由两个以上的模糊性质组成,其实就是通常的模糊集

  • 定义模糊规则,如:如果 方位 是 非常 左 则 方向 是 右 且 速度 是 大。意为当拍摄到的人脸偏左偏的很厉害的时候,小车应大速向右方行驶

  • 采集或测量某信号的当前值,如上面这条规则,就是判定小车上的摄像头所观察到的某人脸相对屏幕中心点在水平方向上的方位

  • 在必要的时候,如定时轮询或关键信号量采集后,对需要使用到的控制量,执行推理

  • 用推理得到的控制量进行控制

注:模糊推理一般都是使用浮点数进行计算,而一般采集到的信号与控制信号都是数字量,所以需要根据应用场景进行数据转换,因为这属于领域相关的内容,所以本文不讨论

下面我们逐一进行讨论。

定义模糊数

定义模糊数,一般是两个步骤:

  • 首先根据应用场景,确定性质数,比如为了控制速度,我们可以定义:快、慢、很快、很慢、正常。原则上不必定义的太多,否则规则难以起到作用,但也不宜定义的太少,否则控制精度会太差,可以先如我这里这样定义五个,然后写出规则后看控制效果,再进行优化

  • 根据所定义的性质数,将该变量的取值范围划分给对应的性质,然后用折线法给出该性质的隶属度函数

例如,速度这个变量,我们定义了五个性质:快、慢、很快、很慢、正常。然后测得速度的范围就是【0,6】,那么我们先初步定义各性质的隶属度:

  • 很慢:(0,0)、(1,1)、(2,0)这三个点所组成的折线就是很慢的隶属度函数

  • 慢:(1,0)、(2,1)、(3,0)这三个点所组成的折线就是慢的隶属度函数

  • 正常:(2,0)、(3,1)、(4,0)这三个点所组成的折线就是正常的隶属度函数

  • 快:(3,0)、(4,1)、(5,0)这三个点所组成的折线就是快的隶属度函数

  • 很快:(4,0)、(5,1)、(6,0)这三个点所组成的折线就是很快的隶属度函数

请大家根据我说的点,自己画一个坐标系后标出各点然后连线,应该就可以理解了模糊性质的隶属度的定义方法。

注:这个隶属度是初步的试算,是在很少经验的情况下的主观设定,等可以工作以后,随着经验的增多,根据测试结果来逐渐增加、调整组成折线的点,逐步确定隶属度函数的定义就可以了

通过增加、改变组成折线的点,我们就可以改变相应模糊性质的隶属度函数。

大家在刚设计一个模糊控制系统时,就按这个三点法来给出初步的隶属度函数就可以了,等系统可以工作了,再逐步调优。这就是模糊控制系统的优势之一:不需要过多的领域知识就能工作,等能工作以后再随着经验的积累来逐步调优、提高控制精度

使用折线法定义隶属度有三个原则:

  • 所有性质的取值范围叠加后必须覆盖整个测量空间,即不能有空洞:某值无法确定其性质【而根据模糊集的定义,某值可能是0.3的慢、0.5的正常当然是可以的,还是必须的】

  • 性质的隶属度必须覆盖【0,1】,即每个性质必须有三个取值范围:明确不属于本性质的取值范围【隶属度为0】、明确属于本性质的取值范围【隶属度为1】、可能属于本性质的取值范围【隶属度介于0和1之间】

  • 各性质在语义上不应有逻辑冲突,即如果出现某取值,是明确的很慢,同时还是明确的快,这肯定就是定义错误了,那么在推理时就可能无法命中任何一条规则

注:人写的规则,当然应该符合人的思考习惯,所以这个语义的要求其实是对人的要求,如果真这么定义了,控制系统本身还会工作,只不过工作结果会比较奇怪

定义模糊变量

模糊变量的定义非常简单,只要定义好了模糊性质,然后给模糊变量指定其由哪几个性质组成就可以了。

定义模糊规则

模糊控制的第二个优势就是:天然的就是降阶控制。也就是编写某情景下的控制规则时,只考虑这个情景所涉及到的量就好了。如我上面给出的规则,其实速度的控制还需要考虑远近的问题,但因为条件只有方位,而速度对于方位来说就是快速纠正与否的问题,所以这条规则就只根据方位的偏离大小然后决定是否进行快速的纠正而不需考虑是前进还是后退,前进后退的控制由其它规则考虑,最后再进行加权综合就好了。

那么,会不会出现因为速度过大,让小车直接驶出控制范围了呢?!答案就是模糊控制是必须要有多条规则一起生效才会起作用,如果只命中一条规则,而且次次如此,那么就不应该使用模糊控制。为什么呢?!

因为模糊控制所使用的模糊推理,本质上就是对多种可能情况估计各自可能性后的加权平均。如果某个控制量在每次推理时始终没有多个规则的参与,那么其推理结果就是不可靠的、不可用的。这个控制系统的规则体系就是失败的,或者就不适合采用模糊控制体制。

举个例子,笔者曾用模糊推理编写过斗地主的玩家出牌规则,在80条规则时,基本能达到初学者的水平了。然后笔者一激动,想通过规则的增多来提高程序的打牌水平,但在把规则增加到了四百多之后,出牌水平还下降了!!研究之后才发现,因为斗地主一共才25张牌,在出了几手牌之后,能覆盖的牌型非常少,所以越往后打,所能覆盖的规则越少,最后就成了命中一条规则,然后就直接按这条规则出牌了。而刚才说了,模糊推理的规则都是只考虑某种情况就定义了的,所以按一条规则的出牌是很差的。

也就是说,如果能覆盖的规则很少时,越是增加规则的数量,就会导致可以覆盖到的规则数更少【因为规则细化了,能符合规则的条件其实是提高了】,而越少的规则由于没有加权平均,所以计算出来的结果质量就会越差。当出现每次只命中一条规则的极端情况时,模糊控制系统已经退化到比产生式还差的水平了。

模糊规则的定义,就是产生式【if-then,产生式没有else】的定义,只不过有几点小的修正

  • 模糊规则的前提条件是各变量性质判断的谓词逻辑的与,如:速度 是 大 且 方位 是 左

  • 模糊规则的结论考虑到实用性,是模糊变量设置为当前性质的与,如:速度 是 大 且 方位 是 左

  • 模糊规则中的模糊性质,可以加两个程度的修饰词进行程度上的修饰:非常、有些,如:非常 大、有些 慢

注:程度修饰其实就是隶属度函数的调整,如,【非常 大】的隶属度是【大】的隶属度的开方,而【有些 大】的隶属度是【大】的隶属度的平方

模糊规则的定义比较简单,就是先主观再客观,即先根据自己的想象写一些控制规则,主要是考虑我上面所说的情况,尽量避免规则过细导致命中数量太少;然后等可以工作以后,再根据实际运行的反馈来优化规则就好了。

采集信号与应用推理结果进行控制

这是比较简单的,从模糊控制本身来说,就是输入输出数据的转换问题,属于领域相关问题,我们就不展开讨论了。

模糊推理

前面说过了,模糊推理就是对可能性的估计,然后进行加权平均。所以模糊推理包括如下的步骤:

  • 模糊规则的筛选,非常简单,和目标变量有关的规则全部挑选出来就好了

  • 对每条规则,对其每个前提的谓词逻辑【某变量 是 某性质】进行判定,就是计算一下该变量的当前值根据该性质的隶属度函数计算出来的隶属度是否大于指定门限,大于这个经验门限的,就判定成立,否则该规则就是未命中。而此门限为何会被称为经验门限呢,就是根据不同的应用,这个门限也是不同的,但需要注意的是,此门限一般不宜设定的太高,否则规则难以命中

  • 对于命中的规则,经各前提的隶属度按最小法给出该规则的置信度,然后对结论中的各变量,收集相应性质的中心点和这个置信度

  • 所有挑选出来的规则推理完毕后,对需要输出的变量,用推理过程中收集到的各性质的中心点和相应置信度的数组,执行解模糊,其实就是各中心点对于置信度的加权平均

  • 解模糊后得到的结果,就是该控制变量的推理结果,将其输出即可

结论

模糊控制的优点是:

  • 简单,不需要太多的领域知识就能工作,然后积累经验逐渐调优

  • 工作模式模拟人的经验推测,所以其应用范围极广,大部分人能推理的领域,其就能工作

模糊控制的缺点是:

  • 精度差,不适合对精度要求很高的场合

  • 含有大量的主观判断,所以无法通过量化分析进行调优,调优只能凭经验积累、甚至运气

所以模糊控制适合在了解不多的时候,先建立起一个能工作的、粗略的负反馈型控制系统,然后在认识深入后,根据总结出来的规律增加其它类型的前馈型控制。

注1:但这里的能工作,还是要求控制量相对系统行为具有足够的精度。比如,笔者曾建立的用树莓派根据拍摄到的人脸相对屏幕中心点的位置来控制小车使其运动到让人脸居于屏幕的正中间。但由于树莓派的能力限制,每一次人脸识别都需要1到2秒的时长,而小车速度过低的时候又由于摩擦力的影响无法运动,所以只能调高速度的控制量。最终的表现就是每次控制量输出,都会让小车的运动距离过大,结果小车就一直围绕着中心点反复的前后运动而无法准确锁定后停下来:(
注2:左右的控制是靠小车两个轮子的差速进行的,所以左右的偏差不管多大在两三个来回后就纠正了,这就是模糊控制的优势:我根本不知道差速和左右的控制逻辑,但简单书写的两三条控制规则就完成了这个控制目标,而我随意调整差速的配置,都基本不会影响控制效果【即基本不需要调优】

目前,jxTMS已经打包为云服务器镜像,开发者开箱即用:
jxTMS-腾讯云市场​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值