-- FUZZY-BASIS-FUNCTION NETWORK
----------------------------------------------------------------------------------------------------
FUNCTION Y(p$, q$) = 2 * sin(0.5 * p$) * cos(0.1 * q$)
----------------------------------------------------------------------------------------------------
-- triangle membership functions
--
ARRAY X$[1], mb$[1] | -- dummy-argument arrays
SUBMODEL fuzzmemb(N$, X$, mb$, input$)
Vector mb$ = SAT((X$ - input$)/(X$ - X${1}))
Mbb = mb$[1] | mcc = mb$[N$ - 1]
Vector mb$ = mb${-1} - mb$
mb$[1] = 1 - mbb | mb$[N$] = mcc
end
----------------------------------------------------------------------------------------------------
ARRAY x[2]
N1 = 7 | N2 = 5 | n = N1 * N2
ARRAY X1[N1], X2[N2]
ARRAY mb1[N1], mb2[N2], F[N1,N2] = f
ARRAY W[1,n], y[1], error[1]
----------------------------------------------------------------------------------------------------
lratef = 0.2 | kappa = 0.9999 | lrate0 = 0.0
NN=20000
------------------------------------
data -0.9, -0.5, -0.1, 0, 0.1, 0.5, 0.9 | read X1
data -0.9, -0.5, 0, 0.5, 0.9 | read X2
--------------------------------------------------------------------------
drun | -- function-learning run
write "type go for a recall run" | STOP
lratex=0 | lratef=0 | lrate0=0 | NN=2000 | display R
drun | -- recall run
---------------------------------------------------------------------------------
DYNAMIC
---------------------------------------------------------------------------------
-- lratef = kappa*lratef+lrate0 | -- reduce learning rate
--
Vector x = ran() | Y = TGT(x[1], x[2]) | -- training pairs
invoke fuzzmemb(N1, X1, mb1, x[1])
invoke fuzzmemb(N2, X2, mb2, x[2])
MATRIX F = mb1 * mb2 | -- joint membership functions
Vector y = W * f | Vector error = Y - y
DELTA W = lratef * error * f | -- LMS algorithm for output y
--
----------------------------------------------- stripchart display
ERRORx50 = 50 * abs(error[1]) - scale
x1 = x[1] | x2 = x[2] | -- shorten names to fit display list!
m2 = 0.5 * (0.5 * mb1[2] + scale)
m3 = 0.5 * (0.5 * mb1[3] + scale)
M2 = 0.25 * mb2[2] | M3 = 0.25 * mb2[3]
DISPXY Y, y[1],Y, ERRORx50, x1, m2, x1, m3, x2, M2, x2, M3
FIGURE A-2
a
. Program for a two-dimensional fuzzy-basis-function network learning the
two-input function
2 * sin(0.5 * x[1]) * cos(0.1 * x[2]).