模糊数乘积运算

模糊理论

在上一篇文章内讲过了

高斯型隶属函数

高斯型隶属函数( 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个凸包的工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章