模糊數乘積運算

模糊理論

在上一篇文章內講過了

高斯型隸屬函數

高斯型隸屬函數( 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個凸包的工作。

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