DECLARE FUNCTION aumoinsunpeuvrai! (a!)
DECLARE FUNCTION calcul! (param!)
DECLARE SUB NETTOYAGE (param!)
DECLARE FUNCTION calcult! (param!)
DECLARE FUNCTION centre! (x1!, x2!, x3!, x4!, h!)
DECLARE FUNCTION contrainte! (valeur!, param!)
DECLARE FUNCTION et! (a!, b!)
DECLARE FUNCTION fuzzy! (a!)
DECLARE FUNCTION non! (a!)
DECLARE FUNCTION ou! (a!, b!)
DECLARE FUNCTION ouex! (a!, b!)
DECLARE FUNCTION parametre! (min!, max!, sec!)
DECLARE FUNCTION securite! (param!)
DECLARE FUNCTION si! (valeur!, z!)
DECLARE FUNCTION sipe! (valeur!, z!)
DECLARE FUNCTION sipg! (valeur!, z!)
DECLARE FUNCTION sipgoe! (valeur!, z!)
DECLARE FUNCTION sipp! (valeur!, z!)
DECLARE FUNCTION sippoe! (valeur!, z!)
DECLARE FUNCTION surface! (x1!, x2!, x3!, x4!, h!)
DECLARE FUNCTION tresvrai! (a!)
DECLARE FUNCTION vrai! (a!)
DECLARE FUNCTION zone! (param!, x1!, x2!, x3!, x4!)
REM Noyau de logique floue
REM E. Brasseur
REM octobre 1993
REM liste des parametres:
DIM SHARED pm(0 TO 31, 0 TO 2) AS SINGLE
DIM SHARED pmlibre AS INTEGER
REM liste des zones:
DIM SHARED zo(0 TO 127, 0 TO 5) AS SINGLE
DIM SHARED zolibre AS INTEGER
REM inserer ici votre programme
FUNCTION aumoinsunpeuvrai (a)
aumoinsunpeuvrai = (a > .25)
END FUNCTION
FUNCTION calcul (param)
c = calcult(param)
NETTOYAGE param
calcul = c
END FUNCTION
FUNCTION calcult (param)
re = 0
st = 0
FOR z = 0 TO zolibre - 1
IF zo(z, 0) = param THEN
s = surface(zo(z, 1), zo(z, 2), zo(z, 3), zo(z, 4), zo(z, 5))
c = centre(zo(z, 1), zo(z, 2), zo(z, 3), zo(z, 4), zo(z, 5))
re = re + c * s
st = st + s
END IF
NEXT z
IF st <> 0 THEN
calc = re / st
ELSE
calc = pm(param, 2)
END IF
calcult = calc
END FUNCTION
FUNCTION centre (x1, x2, x3, x4, h)
xg = h * (x2 - x1) + x1
xd = -h * (x4 - x3) + x4
centre = ((x4 + x1) / 2 + (xg + xd) / 2) / 2
END FUNCTION
FUNCTION contrainte (valeur, param)
r = valeur
IF valeur < pm(param, 0) THEN r = pm(param, 0)
IF valeur > pm(param, 1) THEN r = pm(param, 1)
contrainte = r
END FUNCTION
FUNCTION et (a, b)
reponse = a
IF b < a THEN reponse = b
et = reponse
END FUNCTION
FUNCTION fuzzy (a)
IF a = (2 = 3) THEN
rep = 0
ELSE
rep = 1
END IF
fuzzy = rep
END FUNCTION
SUB modifieparametre (p, min, max, secu)
pm(p, 0) = min
pm(p, 1) = max
pm(p, 2) = secu
END SUB
SUB modifiezone (z, p, x1, x2, x3, x4)
zo(z, 0) = p
zo(z, 1) = x1
zo(z, 2) = x2
zo(z, 3) = x3
zo(z, 4) = x4
END SUB
SUB NETTOYAGE (param)
FOR z = 0 TO zolibre - 1
IF zo(z, 0) = param THEN zo(z, 5) = 0
NEXT z
END SUB
SUB NETTOYAGEGENERAL
FOR z = 0 TO zolibre - 1
zo(z, 5) = 0
NEXT z
END SUB
FUNCTION non (a)
non = 1 - a
END FUNCTION
FUNCTION ou (a, b)
reponse = a
IF b > a THEN reponse = b
ou = reponse
END FUNCTION
FUNCTION ouex (a, b)
ouex = et(ou(a, b), non(et(a, b)))
END FUNCTION
FUNCTION parametre (min, max, sec)
pm(pmlibre, 0) = min
pm(pmlibre, 1) = max
pm(pmlibre, 2) = sec
pmlibre = pmlibre + 1
parametre = pmlibre - 1
END FUNCTION
FUNCTION securite (param)
securite = pm(param, 2)
END FUNCTION
FUNCTION si (valeur, z)
x1 = zo(z, 1)
x2 = zo(z, 2)
x3 = zo(z, 3)
x4 = zo(z, 4)
zocalc = 0
IF valeur >= x2 AND valeur <= x3 THEN
zocalc = 1
ELSE
IF valeur >= x1 AND valeur < x2 THEN
zocalc = (valeur - x1) / (x2 - x1)
ELSE
IF valeur > x3 AND valeur <= x4 THEN
zocalc = 1 - (valeur - x3) / (x4 - x3)
END IF
END IF
END IF
si = zocalc
END FUNCTION
FUNCTION sipe(valeur, z)
sipe = non(si(valeur, z))
END FUNCTION
FUNCTION sipg (valeur, z)
x1 = zo(z, 1)
x2 = zo(z, 2)
x3 = zo(z, 3)
x4 = zo(z, 4)
zocalc = 0
IF valeur >= x4 THEN
zocalc = 1
ELSE
IF valeur >= x3 AND valeur < x4 THEN
zocalc = (valeur - x3) / (x4 - x3)
END IF
END IF
sipg = zocalc
END FUNCTION
FUNCTION sipgoe (valeur, z)
sipgoe = ou(si(valeur, z), sipg(valeur, z))
END FUNCTION
FUNCTION sipp (valeur, z)
x1 = zo(z, 1)
x2 = zo(z, 2)
x3 = zo(z, 3)
x4 = zo(z, 4)
zocalc = 0
IF valeur <= x1 THEN
zocalc = 1
ELSE
IF valeur > x1 AND valeur <= x2 THEN
zocalc = 1 - (valeur - x1) / (x2 - x1)
END IF
END IF
sipp = zocalc
END FUNCTION
FUNCTION sippoe (valeur, z)
sippoe = ou(si(valeur, z), sipp(valeur, z))
END FUNCTION
SUB sortir (z, amplitude)
zo(z, 5) = amplitude
END SUB
FUNCTION surface (x1, x2, x3, x4, h)
xg = h * (x2 - x1) + x1
xd = -h * (x4 - x3) + x4
surf = (xg - x1) * h / 2 + (xd - xg) * h + (x4 - xd) * h / 2
surface = surf
END FUNCTION
FUNCTION tresvrai (a)
tresvrai = (a > .75)
END FUNCTION
FUNCTION vrai (a)
vrai = (a >.5)
END FUNCTION
FUNCTION zone (param, x1, x2, x3, x4)
zo(zolibre, 0) = param
zo(zolibre, 1) = x1
zo(zolibre, 2) = x2
zo(zolibre, 3) = x3
zo(zolibre, 4) = x4
zo(zolibre, 5) = 0
zolibre = zolibre + 1
zone = zolibre - 1
END FUNCTION
|