模糊理论
在上一篇文章内讲过了
高斯型隶属函数
高斯型隶属函数( gaussian membership function)公式:
它不是高斯概率密度函数(gaussian probability density function):
模糊集
使用高斯型隶属函数求得满足条件的模糊集合,然后进行乘法运算。
目标:
假设一辆行驶速度为v米/秒的汽车前方d米有一个障碍物,设阻力为速度的程度和距离的程度的联合,设计并求出该联合。
①划分v、d的程度区间,这里只是假设,就将它们都划分成(0, 50, 100)三个程度;
②在v和d区间内随机地产生一定数量的随机数x, y;
③使用高斯型隶属函数,求得v,d各自的模糊集X, Y;
④将两个模糊集相乘,得到三维矢量集:Z = X + Y;
⑤以XYZ在三维坐标系中画出。
实现
# python-模糊数乘积运算
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import math
import mpl_toolkits.mplot3d
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
# 均值v, d
v = [0,50,100]
d = [0,50,100]
c1 = [0, 25, 26, 75, 76, 100]
c2 = [0, 25, 26, 75, 76, 100]
# 高斯函数
def GMF(x, y, c1, c2):
return np.exp(((x - c1) ** 2 + (y - c2) ** 2) / (-2 * 25 ** 2))
ax = plt.subplot(111, projection='3d')
for i in range(0,3):
for j in range(0,3):
x, y = np.mgrid[c1[i * 2] : c1[i * 2 + 1] : 200j, c2[j * 2] : c2[j * 2 + 1] : 200j]
z = GMF(x, y, v[i], d[j])
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow', alpha=1)
# 三维
ax.invert_xaxis()
ax.set_title('整体')
ax.set_xlabel('v')
ax.set_ylabel('d')
ax.set_zlabel('stop')
plt.grid(True)
plt.show()
绘图结果:
绘图展示的是速度的大中小程度与距离的大中小程度相乘的结果,阻力的程度与速度和距离有关,因此用模糊理论来讲两者联系起来。图中有九个凸包,分别代表v小d小,v小d中,…,…,v大*d大。v轴代表速度,d轴代表距离,stop轴表示(v, d)符合对应模糊集相乘的归属程度。
这里很容易误解成利用v,d程度求阻力程度的大中小,这个问题是后面划分这9个凸包的工作。