aula 3 17 março 2005
TRANSCRIPT
Trabalhos Práticos
● Devido ao atraso de todos os kits experimentais● Só quem fizer o seu kit experimental o tem
reservado para o seu grupo● Apresentar grupos● Grupos de 3 pessoas ?
– Ok, mas exige-se mais trabalho...
Trabalhos Práticos - Avaliação
● Items a avaliar no trabalho prático– Requisitos de controlo (estudo prévio)– Trabalho mecânico e estudo do que foi atingido– Modelização Fuzzy e convencional– Justificação da abordagem utilizada
● Porquê Fuzzy e o que motiva as regras de controlo– Domínio da ferramenta utilizada– Relatório com Resultados
Recapitular
● Fuzzy Logic como extensão da lógica booleana● Diferente da Teoria das Probabilidades● Recusa a lei do 3 excluído● Modeliza meias verdades e contradições● Conjuntos Fuzzy ● Relações Fuzzy● Variáveis Linguísticas
ac
b
Triangulo Equilátero
A~= mina ,b , cmax a ,b , c
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Z
1.0 1.4 1.8 2.2 2.6 3.0 3.4 3.8 4.2 4.6 5.0
Y1.0
2.0
3.0
4.0
5.0
X
b~=
1−max a ,b , c−mina ,b , cmax a ,b , c
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Z
1.01.4
1.82.2
2.63.0
3.43.8
4.2
X
1.01.4
1.82.2
2.63.0
3.43.8
4.2Y
Composição Regras Fuzzy
y2 z0
x0 y10.6
0.70.1
0.2
R~: X Y
S~:Y Z
T~
= R~°S
~
R~=〚 y1 y2x0 [0.6 0.1 ]〛S~=〚 z0y1[0.7]y2 [0.2]〛
T~maxmin=max min0.6,0 .7 ,min 0.1,0 .2=〚 z0
x0 [0.6]〛T~maxprod=max 0.6∗0.7 , 0.1∗0.2=〚 z0
x0 [0.42]〛
Regras:R1:
Se E == AZ e dE == PS
então V := NSR2:
Se E == AZ e dE == AZ
então V := AZR3:
Se E == NS e dE == NS
então V := PSR4:
Se E == NS e dE == AZ
então V := PB
Controlo Difuso
● Obs: Muitas vezes acaba por ser um PID não linear
● A formulação de velocidade é muito utilizada:
Saída_Actual = Saída_Anterior + + Ganho * ( Erro-Erro_Anterior + reset*Erro )
SciLab - SciFLT
Help da Toolbox SCI-FLT do SCI-Lab
Instalar em c:\scilab30 e depois instalar SCIFLT
Eventualmente também FISLAB
Programação SciLab
clear; // limpar variáveis antigasmode(7); // step by stepx=[-%pi:0.25:%pi];size(x)y=[sin(x)' cos(x)'];size(y)xbasc;plot2d(x,y);
-4 -3 -2 -1 0 1 2 3 4-1.0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
Programação SciLab
xbasc; // limpa graficosubplot(3,1,1)plot2d(x,y(:,1))subplot(3,1,2)plot2d(x,y(:,2))subplot(3,1,3)plot2d(x,y(:,2).^2)
-4 -3 -2 -1 0 1 2 3 4-1.0-0.8-0.6-0.4-0.20.00.20.40.60.81.0
-4 -3 -2 -1 0 1 2 3 4-1.0-0.8-0.6-0.4-0.20.00.20.40.60.81.0
-4 -3 -2 -1 0 1 2 3 40.00.10.20.30.40.50.60.70.80.91.0
Programação SciLab
x=[-%pi:0.25:%pi];y=[sin(x)' cos(x)'];xbasc;plot2d(x,[y , y.^2],leg="sin@cos@sin^2@cos^2"),xgrid(2);
-4 -3 -2 -1 0 1 2 3 4-1.0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
sincossin^2
cos 2
Programação Avançada SciLab
-1.0
-0.6
-0.2
0.2
0.6
1.0
Z
-1.0
-0.6
-0.2
0.2
0.6
1.0X
-1.0
-0.6
-0.2
0.2
0.6
1.0Y
//Ponto de Sela com func deffnx = 20; ny = 20;u = linspace(-1,1,nx);v = linspace(-1,1,ny);[x,y] = ndgrid(u,v);deff("z=f(x,y)","z=x.^2 -(y.^2)")z = f(x,y);xbasc()plot3d3(x,y,z, flag=[2 6 4]); xselect() -1.0
-0.5
0
0.5
1.0
Z
-1.0
-0.6
-0.2
0.2
0.6
1.0
Y
-1.0
-0.6
-0.2
0.2
0.6
1.0
X
SciFLT
-6 -4 -2 0 2 4 60.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
NZP
nx=100;x=linspace(-6,6,nx)';N=zmf(x,[-3,3]); Z=trimf(x,[-4,0,4]); P=smf(x,[-3,3]); xbasc;plot2d([x x x],[N Z P],... [1,3,5],leg="N@Z@P");
SciFLTObs: Para simplicidade, cunjuntos difusos nos antecedentes são
iguais aos dos consequentes: Geralmente não é assim !
// Regra 1: _Se_ entrada==N _Então_ saida=PNvalue=mfeval(sensor,'zmf',[-2,1]);R1=min(P,Nvalue);
// Regra 2: Se entrada==Z Então saida=ZZvalue=mfeval(sensor,'trimf',[-3,0,3]);R2=min(Z,Zvalue);
// Regra 3: Se entrada==P Então saida=NPvalue=mfeval(sensor,'smf',[-1,2]);R3=min(N,Pvalue);
plot2d([x x x],[R1 R2 R3],[1,3,5],leg="N@Z@P");
SciFLT
// acumular conhecimento (neste caso com MAX)INFER=max(R1,R2,R3);plot2d(x,INFER)
-6 -4 -2 0 2 4 60.00.10.20.30.40.50.60.70.80.91.0
NZP
-6 -4 -2 0 2 4 60.00.10.20.30.40.50.60.70.80.9
NZP
-6 -4 -2 0 2 4 60.2
0.30.4
0.50.6
0.70.80.9