Good afternoon,
FuzzyR package has some built-in example to follow if someone need to build fuzzy logic model :
library("FuzzyR")
fis = newfis('Tipper')
fis = addvar(fis, "input", "Intent", c(0, 10), 'gauss', 0.5, 'tnorm.min.max')
fis = addvar(fis, "input", "Vehicle_content_important", c(0, 100), 'gauss', 0.5, 'tnorm.min.defuzz.centroid')
fis = addvar(fis, "output", "tip", c(0, 30))
fis = addmf(fis, "input", 1, "poor", "gaussmf", c(1.5, 0, 1))
fis = addmf(fis, "input", 1, "good", "gaussmf", c(1.5, 5, 1))
fis = addmf(fis, "input", 1, "excellent", "gaussmf", c(1.5, 10, 1))
fis = addmf(fis, "input", 2, "rancid", "trapmf", c(0, 0, 1, 3, 1))
fis = addmf(fis, "input", 2, "delicious", "trapmf", c(7, 9, 10, 10, 1))
fis = addmf(fis, "output", 1, "cheap", "trimf", c(0, 5, 10, 1))
fis = addmf(fis, "output", 1, "average", "trimf", c(10, 15, 20, 1))
fis = addmf(fis, "output", 1, "generous", "trimf", c(20, 25, 30, 1))
rl = rbind(c(1, 1, 1, 1, 2), c(2, 0, 2, 1, 1), c(3, 2, 3, 1, 2))
fis = addrule(fis, rl)
showGUI(fis)
This outputs :
I´m trying to build a model for another problematic :
library("FuzzyR")
# Creating the model
fis = newfis('Risk_assessement', fisType = 'tsk', andMethod = 'prod')
# defining variables
fis = addvar(fis, 'input', 'Intent', c(0, 100))
fis = addvar(fis, 'input', 'Vehicle_content_important', c(0, 100))
fis = addvar(fis, 'input', 'Path_lighting_lux', c(0, 100))
fis = addvar(fis, 'input', 'Weather_celcius', c(-30, 50))
fis = addvar(fis, 'input', 'Night_hours', c(0, 24))
fis = addvar(fis, 'input', 'Trajectory_distance_length_KM', c(0, 1000))
fis = addvar(fis, 'input', 'Transport_type', 0:30)
fis = addvar(fis, 'input', 'Aversary_numbers', c(0, 40))
fis = addvar(fis, 'input', 'Aversary_speed_KM', c(0, 200))
fis = addvar(fis, 'input', 'Aversary_efficiency_percentage', c(0, 100))
fis = addvar(fis, 'input', 'Aversary_expertise_years', c(0, 30))
fis = addvar(fis, 'input', 'RF_numbers', c(0, 40))
fis = addvar(fis, 'input', 'RF_speed_KM', c(0, 200))
fis = addvar(fis, 'input', 'RF_efficiency_percentage', c(0, 100))
fis = addvar(fis, 'input', 'RF_expertise_years', c(0, 30))
fis = addvar(fis, 'output', 'Risk_level', c(0, 100))
#Linguistic variables
#intent
fis = addmf(fis, 'input', 1, 'Low', 'trapmf', c(0,0,20,40))
fis = addmf(fis, 'input', 1, 'Medium', 'trapmf', c(20,40,60,100))
fis = addmf(fis, 'input', 1, 'High', 'trapmf', c(40,80,100,100))
#Vehicle_content_important
fis = addmf(fis, 'input', 2, 'Very_Low', R_function, c(15,30))
fis = addmf(fis, 'input', 2, 'Low', 'trimf', c(0,30,60))
fis = addmf(fis, 'input', 2, 'Medium', 'trapmf', c(30,40,60,70))
fis = addmf(fis, 'input', 2, 'High', 'trapmf', c(60,70,85,100))
fis = addmf(fis, 'input', 2, 'Very_High', L_function, c(70,90))
# environment parameters
#Path_lighting
fis = addmf(fis, 'input', 3, 'Hazy', R_function, c(15,40))
fis = addmf(fis, 'input', 3, 'Moderate_clarity', 'gaussmf', c(10,50))
fis = addmf(fis, 'input', 3, 'Clear', 'gaussmf', c(10,80))
#Weather
fis = addmf(fis, 'input', 4, 'Cold', R_function, c(0,15))
fis = addmf(fis, 'input', 4, 'Moderate', 'gaussmf', c(10,20))
fis = addmf(fis, 'input', 4, 'Hot', 'gaussmf', c(10,35))
#night
fis = addmf(fis, 'input', 5, 'day', 'trapmf', c(5,7,17,19))
fis = addmf(fis, 'input', 5, 'Night', N_trapmf, c(5,7,17,19))
#Trajectory_distance_length
fis = addmf(fis, 'input', 6, 'Very_Low', R_function, c(50,200))
fis = addmf(fis, 'input', 6, 'Low', 'trimf', c(20,150,300))
fis = addmf(fis, 'input', 6, 'Medium', 'trapmf', c(180,250,390,600))
fis = addmf(fis, 'input', 6, 'High', 'trapmf', c(400,500,730,1000))
fis = addmf(fis, 'input', 6, 'Very_High', L_function, c(400,800))
#Transport_type
fis = addmf(fis, 'input', 7, 'terrestrial', heavside, c(0,10))
fis = addmf(fis, 'input', 7, 'maritime', heavside, c(10,20))
fis = addmf(fis, 'input', 7, 'airline', heavside, c(20,30))
# Adversary
#Adversary_numbers
fis = addmf(fis, 'input', 8, 'Low', R_function, c(10,20))
fis = addmf(fis, 'input', 8, 'Medium', 'trapmf', c(5,15,30,40))
fis = addmf(fis, 'input', 8, 'High', L_function, c(15,30))
#Aversary_speed
fis = addmf(fis, 'input', 9, 'Low', R_function, c(30,60))
fis = addmf(fis, 'input', 9, 'Medium', 'trapmf', c(50,80,120,160))
fis = addmf(fis, 'input', 9, 'High', L_function, c(150,180))
#Aversary_efficiency
fis = addmf(fis, 'input',10, 'Low', R_function, c(10,20))
fis = addmf(fis, 'input',10, 'Medium', 'trapmf', c(15,30,60,80))
fis = addmf(fis, 'input',10, 'High', L_function, c(75,85))
#Aversary_expertise
fis = addmf(fis, 'input',11, 'Low', R_function, c(10,15))
fis = addmf(fis, 'input',11, 'Medium', 'trapmf', c(10,15,20,25))
fis = addmf(fis, 'input',11, 'High', L_function, c(20,25))
# Response_force
#Response_force_numbers
fis = addmf(fis, 'input',12, 'Low', R_function, c(10,20))
fis = addmf(fis, 'input',12, 'Medium', 'trapmf', c(5,15,30,40))
fis = addmf(fis, 'input',12, 'High', L_function, c(15,30))
#Response_force_speed
fis = addmf(fis, 'input',13, 'Low', R_function, c(30,60))
fis = addmf(fis, 'input',13, 'Medium', 'trapmf', c(50,80,120,160))
fis = addmf(fis, 'input',13, 'High', L_function, c(150,180))
#Response_force_efficiency
fis = addmf(fis, 'input',14, 'Low', R_function, c(10,20))
fis = addmf(fis, 'input',14, 'Medium', c(15,30,60,80))
fis = addmf(fis, 'input',14, 'High', L_function, c(75,85))
#Response_force_expertise
fis = addmf(fis, 'input',15, 'Low', R_function, c(10,15))
fis = addmf(fis, 'input',15, 'Medium', 'trapmf', c(10,15,20,25))
fis = addmf(fis, 'input',15, 'High', L_function, c(20,25))
# Membership functions for risk output 1 :
fis = addmf(fis, 'output',1, 'Low_risk', R_function, c(15,35))
fis = addmf(fis, 'output',1, 'average_risk', 'trapmf', c(15,40,60,75))
fis = addmf(fis, 'output',1, 'High_risk', L_function, c(50,80))
#Some random rules for testing
R1=c(sample(1:2, size = 16, replace = TRUE),1,2)
R2=c(sample(1:2, size = 16, replace = TRUE),1,2)
R3=c(sample(1:2, size = 16, replace = TRUE),1,2)
#adding the rules
rl = rbind(R1,R2,R3)
fis = addrule(fis, rl)
fis
# Showing shiny GUI of the model
showGUI(fis)
For the defuzzification , i get usually this error :
I need just an example of how to get defuzzification values
R_function
, L_function
and heavside
are user-defined :
R_function <- function(mf.params) {
c <- mf.params[1]
d <- mf.params[2]
if (length(mf.params) == 3) {
h <- mf.params[3]
} else {
h <- 1
}
R_function <- function(x) {
y <- pmax(pmin(h, (d - x) / (d - c)), 0)
y[is.na(y)] = h; y
}
}
L_function <- function(mf.params) {
a <- mf.params[1]
b <- mf.params[2]
if (length(mf.params) == 3) {
h <- mf.params[3]
} else {
h <- 1
}
L_function <- function(x) {
y <- pmin(pmax(0, (x-a) / (b-a)), h)
y[is.na(y)] = h; y
}
}
heavside <- function(mf.params) {
a <- mf.params[1]
b=mf.params[2]
Complement=mf.params[3]
if (is.na(mf.params[3])) Complement=FALSE
if (length(mf.params) == 4) {
h <- mf.params[4]
} else {
h <- 1
}
heavside <- function(x) {
y <- ifelse(between(x,a,b),ifelse(Complement==TRUE,0,1),ifelse(Complement==TRUE,1,0))
return(y)
}
}
Thank you in advance for your help !