1

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 :

Tipper

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 :

enter image description here

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 !

Tou Mou
  • 1,270
  • 5
  • 16

0 Answers0