人工智能作業——python實作洗衣機模糊推理系統實驗
- 實驗環境
- 實驗要求
- 代碼
- 實驗結果
書中實驗要求用Matlab實作,但是Matlab包太大了,且還需要重新學習Matlab的使用,發現python也可以實作,故使用python完成,
實驗環境
python3.6
開發環境Pycharm
需要安裝的包:scikit-fuzzy,numpy
cmd命令:pip install scikit-fuzzy
pip install numpy
實驗要求
污泥{SD(污泥少), MD(中等污泥), LD(污泥多)}
油脂{NG(無油脂), MG(中等油脂), LG(油脂多)}
洗滌時間{VS(很短), S(短), M(中等), L(長), VL(很長)}
輸入是污泥和油脂,論域:[0, 100]
輸出是洗衣機的洗滌時間,論域:[0, 120]

代碼
import numpy as np
import skfuzzy as fuzz
import matplotlib.pyplot as plt
from skfuzzy import control as ctrl
# 污泥和油脂范圍為[0,100]
# 洗滌時間范圍為[0,120]
x_stain = np.arange(0, 110, 10)
x_oil = np.arange(0, 110, 10)
x_time = np.arange(0, 130, 10)
# 定義模糊控制變數
stain = ctrl.Antecedent(x_stain, 'stain')
oil = ctrl.Antecedent(x_oil, 'oil')
time = ctrl.Consequent(x_time, 'time')
# 生成模糊隸屬函式
#函式中的三元變數,第一個代表折線的起點,第二是最大值,第三是終點
stain['SD'] = fuzz.trimf(x_stain, [0, 0, 50]) #定義污漬的三角隸屬度函式橫坐標
stain['MD'] = fuzz.trimf(x_stain, [0, 50, 100])
stain['LD'] = fuzz.trimf(x_stain, [50, 100, 100])
oil['NG'] = fuzz.trimf(x_oil, [0, 0, 50]) #定義油污的三角隸屬度函式橫坐標
oil['MG'] = fuzz.trimf(x_oil, [0, 50, 100])
oil['LG'] = fuzz.trimf(x_oil, [50, 100, 100])
time['VS'] = fuzz.trimf(x_time, [0, 0, 20]) #定義洗滌時間的三角隸屬度函式橫坐標
time['S'] = fuzz.trimf(x_time, [0, 20, 50])
time['M'] = fuzz.trimf(x_time, [20, 50, 80])
time['L'] = fuzz.trimf(x_time, [50, 80, 120])
time['VL'] = fuzz.trimf(x_time, [80, 120, 120])
#采用解模糊方法——質心解模糊方式
time.defuzzify_method='centroid'
#規則
rule1=ctrl.Rule(antecedent=((stain['SD'] & oil['NG'])),consequent=time['VS'],label='time=VS')
rule2=ctrl.Rule(antecedent=((stain['SD'] & oil['MG'])|(stain['MD'] & oil['MG'])|(stain['LD'] & oil['NG'])),consequent=time['M'],label='time=M')
rule3=ctrl.Rule(antecedent=((stain['SD'] & oil['LG'])|(stain['MD'] & oil['LG'])|(stain['LD'] & oil['MG'])),consequent=time['L'],label='time=L')
rule4=ctrl.Rule(antecedent=((stain['MD'] & oil['NG'])),consequent=time['S'],label='time=S')
rule5=ctrl.Rule(antecedent=((stain['LD'] & oil['LG'])),consequent=time['VL'],label='time=VL')
# 系統和運行環境初始化
rule=[rule1, rule2, rule3,rule4,rule5]
time_ctrl = ctrl.ControlSystem(rule)
wash_time = ctrl.ControlSystemSimulation(time_ctrl)
#規則中帶一些奇怪的規則,處理后輸出
for i in range(len(rule)):
print("rule",i,end=":")
for item in str(rule[i]):
if(item!='\n'):
print(item,end="")
else:
break
print('\t')
#輸入輸出
print("\n請輸入污漬和油污的值")
p=input("污漬的值:")
q=input("油污的值:")
wash_time.input['stain'] = int(p)
wash_time.input['oil'] = int(q)
wash_time.compute()
print ("洗滌時間為:",wash_time.output['time'])
#畫圖
stain.view()
oil.view()
time.view()
#time.view()
plt.show()
實驗結果




參考:
鏈接: https://blog.csdn.net/dcyywin8/article/details/103460871.
官方庫的介紹: https://pythonhosted.org/scikit-fuzzy/auto_examples/index.html.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/354497.html
標籤:AI
上一篇:人臉識別 | Hi 你說,彭于晏是貓咪還是人,還是?
下一篇:如何確認計算機的GPU配置
