-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuzzyAmbiguity.py
108 lines (77 loc) · 3.75 KB
/
fuzzyAmbiguity.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 5 11:51:50 2022
@author: Kevin
"""
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
objConf = ctrl.Antecedent(np.arange(0, 1.05, 0.05), 'object confidence')
objectCount = ctrl.Antecedent(np.arange(0, 7.05, 0.05), 'detected object count')
ambiguity = ctrl.Consequent(np.arange(0, 1.05, 0.05), 'ambiguity level')
#object confidence membership function
# objConf['vLow'] = fuzz.trimf(objConf.universe, [0, 0, 0.25])#left point, middle point, rigt point
# objConf['low'] = fuzz.trimf(objConf.universe, [0, 0.25, 0.5])
# objConf['med'] = fuzz.trimf(objConf.universe, [0.25, 0.5, 0.75])
# objConf['high'] = fuzz.trimf(objConf.universe, [0.5, 0.75, 1])
# objConf['vHigh'] = fuzz.trimf(objConf.universe, [0.75, 1, 1])
objConf['vLow'] = fuzz.gaussmf(objConf.universe, 0, 0.1)
objConf['low'] = fuzz.gaussmf(objConf.universe, 0.25,0.1)
objConf['med'] = fuzz.gaussmf(objConf.universe, 0.5,0.1)
objConf['high'] = fuzz.gaussmf(objConf.universe, 0.75,0.1)
objConf['vHigh'] = fuzz.gaussmf(objConf.universe, 1,0.1)
#detected object count membership function
objectCount['noObj'] = fuzz.trimf(objectCount.universe, [0, 0, 1])
objectCount['one'] = fuzz.trimf(objectCount.universe, [0.95, 1, 1.05])
objectCount['two'] = fuzz.trimf(objectCount.universe, [1, 2, 3])
objectCount['more'] = fuzz.trapmf(objectCount.universe, [2,3,7,7])
#ambiguity level membership function
# ambiguity['vLow'] = fuzz.trimf(ambiguity.universe, [0, 0, 0.25])
# ambiguity['low'] = fuzz.trimf(ambiguity.universe, [0, 0.25, 0.5])
# ambiguity['med'] = fuzz.trimf(ambiguity.universe, [0.25, 0.5, 0.75])
# ambiguity['high'] = fuzz.trimf(ambiguity.universe, [0.5, 0.75, 1])
# ambiguity['vHigh'] = fuzz.trimf(ambiguity.universe, [0.75, 1, 1])
ambiguity['vLow'] = fuzz.gaussmf(objConf.universe, 0, 0.1)
ambiguity['low'] = fuzz.gaussmf(objConf.universe, 0.25,0.1)
ambiguity['med'] = fuzz.gaussmf(objConf.universe, 0.5,0.1)
ambiguity['high'] = fuzz.gaussmf(objConf.universe, 0.75,0.1)
ambiguity['vHigh'] = fuzz.gaussmf(objConf.universe, 1,0.1)
objectCount.view()
objConf.view()
objectCount.view()
ambiguity.view()
#fuzzy rules
rule1 = ctrl.Rule(((objConf['vLow'] | objConf['low']) &
(objectCount['noObj']|objectCount['two']|objectCount['more'])),
(ambiguity['vHigh']) )
rule2 = ctrl.Rule(((objConf['vLow'] | objConf['low']) &
(objectCount['one'])),
(ambiguity['high']))
rule3 = ctrl.Rule(((objConf['low'] | objConf['med']) &
(objectCount['two']|objectCount['more'])),
(ambiguity['high']))
rule4 = ctrl.Rule(((objConf['low'] | objConf['med']) &
(objectCount['one'])),
(ambiguity['high'], ambiguity['med']))
rule5 = ctrl.Rule(((objConf['med'] | objConf['high']) &
(objectCount['two']|objectCount['more'])),
(ambiguity['med']))
rule6 = ctrl.Rule(((objConf['med'] | objConf['high']) &
(objectCount['one'])),
(ambiguity['low']))
rule7 = ctrl.Rule(((objConf['high'] | objConf['vHigh']) &
(objectCount['two']|objectCount['more'])),
(ambiguity['med']))
rule8 = ctrl.Rule(((objConf['high'] | objConf['vHigh']) &
(objectCount['one'])),
(ambiguity['vLow']))
ambiguityCtrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8])
#gerenate output
ambiguityLvl = ctrl.ControlSystemSimulation(ambiguityCtrl)
ambiguityLvl.input['object confidence'] = 0.12
ambiguityLvl.input['detected object count'] = 3
ambiguityLvl.compute()
print(ambiguityLvl.output['ambiguity level'])
objConf.view(sim=ambiguityLvl)
objectCount.view(sim=ambiguityLvl)
ambiguity.view(sim=ambiguityLvl)