模糊理论、 高斯型隶属函数、模糊集这些之前的文章已经说明过了。
已知小车速度和离危险距离,使用高斯型隶属函数求得模糊集合,进行乘法运算,运用比例原则进而推导出小车应设的阻力。
这是目前要解决的问题。
分析
假设一辆行驶速度为v米/秒的汽车前方d米有一个障碍物,设阻力为速度的程度和距离的程度的联合,设计并求出该联合。
①划分v、d的程度区间,这里只是假设,就将它们都划分成(0, 50, 100)三个程度;
②在v和d区间内随机地产生一定数量的随机数x, y;
③使用高斯型隶属函数,求得v,d各自的模糊集X, Y;
④将两个模糊集相乘,得到三维矢量集:Z = X + Y;
也就是下面这张图:
⑤设置比例原则的规则,这里通过经验按照原设计设置了下面9个规则:
⑥按照比例原则公式进行小车阻力推理演算
⑦先展示一下上面思路的最终效果:
⑧思路的结果与高斯隶属函数设置的σ有关,如果增加σ的值的话,则会得到:
实现
# python-模糊数乘积运算
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import math
import mpl_toolkits.mplot3d
def GMF(x, y,c1, c2):
return np.exp(((x - c1) ** 2 + (y - c2) ** 2) / (-2 * 24 ** 2))
hc = [ 50, 25, 5,
75, 50, 25,
100, 75, 50]
v = [0,50,100]
d = [0,50,100]
x, y = np.mgrid[0:100:500j, 0:100:500j]
z = [0]*500
for i in range(0,3):
for j in range(0,3):
n = GMF(x, y, v[i], d[j]) * hc[i * 3 + j]
z = z + n
ax = plt.subplot(111, projection='3d')
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow', alpha=1)
ax.invert_xaxis()
ax.set_xlabel('v')
ax.set_ylabel('d')
ax.set_zlabel('stop')
plt.grid(True)
plt.show()