aula 3 17 março 2005

21
Aula 3 17 Março 2005

Upload: others

Post on 13-Mar-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Aula 3

17 Março 2005

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

Nota:

Um “1”

representa a

existência da

relação

Composição Regras Fuzzy

Nota:

Um “1”

representa a

completa

existência da

relação

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]〛

Inferência Fuzzy / Difusa

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");

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

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

SciFLT// Desfuzzificarout=defuzzm(x,INFER,"centroide"),plot2d([out out],[0 1],6);

-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