Buscar

Código Máquina de Lavar Fuzzy

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Maquina de Lavar Fuzzy.c
#include <stdio.h>
#include <stdlib.h>
/*
 DADOS DO PROBLEMA
T(X1) = {PS(pequena sujeira),MS(média sujeira),GS(grandesujeira)}
T(X2) = {SM(sem mancha), MM(média mancha),GM(grandemancha)}
T(Y) = {MC(muito curto), C(curto), M(médio), L(longo), ML(muito longo)}
PS 0-50
MS 0-50-100
GS 50-100
SM 0-50
MM 0-50-100
GM 50-100
MC 0-10
C 0-10-25
M 10-25-40
L 25-40-60
ML 40-60
 | SM | MM | GM
PS | MC | M | L
MS | C | M | L
GS | M | L | ML
*/
// Conjuntos Fuzzy de saída
//
// MC C M L ML
//1|**** ---- xxxx aaaa oooo|
// | . * - . . - x . . x a . . a o . |
// | . * - . . - x . . x a . . a o . |
// | . *- . . - x . . x a . . a o . |
// | . - * . . x - . . a x . . o a . |
//0|___.__-______*__.__.___x_____-___.__.___a_____x___.__.___o_____a___.___|
// 0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16 1
struct PertinenciaSugeira
{
 double PS;
 double MS;
 double GS;
};
struct PertinenciaSugeira PerSu;
struct PertinenciaMancha
Página 1
Maquina de Lavar Fuzzy.c
{
 double SM;
 double MM;
 double GM;
};
struct PertinenciaMancha PerMa;
struct PertSaida
{
 double MC;
 double C;
 double M;
 double L;
 double ML;
};
struct PertSaida PerSa;
double saida;
// Conjuntos Fuzzy
//
// Baixo medio alto
//1|**** ---- xxxx|
// | . * - . . - x . |
// | . * - . . - x . |
// | . *- . . - x . |
// | . - * . . x - . |
//0|___.__-______*__.__.___x_____-___.___|
// 0 P1 P2 P3 P4 P5 P6 P7 P8 1
void calculaPertinenciaSugeira(double valor, double p1,double p2,double 
p3,double p4,double p5, double p6, double p7, double p8)
{
 // calcula a pertinência ao conjunto PS
 if(valor<p1)
 {
 PerSu.PS=1.0;
 }
 if(valor>=p1&&valor<p3)
 {
 PerSu.PS=(p3-valor) / (p3-p1);
 }
 if(valor>=p3)
 {
 PerSu.PS=0.0;
 }
 // calcula a pertinência ao conjunto MS
 if(valor<p2)
 {
Página 2
Maquina de Lavar Fuzzy.c
 PerSu.MS=0.0;
 }
 if(valor>=p2&&valor<p4)
 {
 PerSu.MS=(valor - p2) / (p4 - p2);
 }
 if(valor>=p4&&valor<p5)
 {
 PerSu.MS=1.0;
 }
 if(valor>=p5&&valor<p7)
 {
 PerSu.MS=(p7-valor) / (p7-p5);
 }
 if(valor>=p7)
 {
 PerSu.MS=0.0;
 }
 // calcula a pertinência ao conjunto GS
 if(valor<p6)
 {
 PerSu.GS=0.0;
 }
 if(valor>=p6&&valor<p8)
 {
 PerSu.GS=(valor - p6) / (p8 - p6);
 }
 if(valor>=p8)
 {
 PerSu.GS=1.0;
 }
}
void calculaPertinenciaMancha(double valor, double p1,double p2,double p3,double
p4,double p5, double p6, double p7, double p8)
{
 // calcula a pertinência ao conjunto SM
 if(valor<p1)
 {
 PerMa.SM=1.0;
 }
 if(valor>=p1&&valor<p3)
 {
 PerMa.SM=(p3-valor) / (p3-p1);
 }
 if(valor>=p3)
 {
 PerMa.SM=0.0;
 }
 // calcula a pertinência ao conjunto MM
Página 3
Maquina de Lavar Fuzzy.c
 if(valor<p2)
 {
 PerMa.MM=0.0;
 }
 if(valor>=p2&&valor<p4)
 {
 PerMa.MM=(valor - p2) / (p4 - p2);
 }
 if(valor>=p4&&valor<p5)
 {
 PerMa.MM=1.0;
 }
 if(valor>=p5&&valor<p7)
 {
 PerMa.MM=(p7-valor) / (p7-p5);
 }
 if(valor>=p7)
 {
 PerMa.MM=0.0;
 }
 // calcula a pertinência ao conjunto GS
 if(valor<p6)
 {
 PerMa.GM=0.0;
 }
 if(valor>=p6&&valor<p8)
 {
 PerMa.GM=(valor - p6) / (p8 - p6);
 }
 if(valor>=p8)
 {
 PerMa.GM=1.0;
 }
}
struct Regra
{
 double A1;
 double A2;
 double saida;
};
struct Regra R1;
struct Regra R2;
struct Regra R3;
struct Regra R4;
struct Regra R5;
struct Regra R6;
struct Regra R7;
struct Regra R8;
struct Regra R9;
Página 4
Maquina de Lavar Fuzzy.c
void AvaliaRegrasFuzzy()
{
// base de regras
// | SM | MM | GM
// PS | MC | M | L
// MS | C | M | L
// GS | M | L | ML
// Busca os valores de pertinência e armazena nas régras
// Calcula o valor de ativação da régra pelo "MÍNIMO"
// Calcula a ativação de cada conjunto de saída pelo "MÁXIMO"
// 1 SM PS -> MC
R1.A1=PerMa.SM;
R1.A2=PerSu.PS;
if(R1.A1<R1.A2) R1.saida=R1.A1;
else R1.saida=R1.A2;
// 2 SM MS -> C
R2.A1=PerMa.SM;
R2.A2=PerSu.MS;
if(R2.A1<R2.A2) R2.saida=R2.A1;
else R2.saida=R2.A2;
// 3 SM GS -> M
R3.A1=PerMa.SM;
R3.A2=PerSu.GS;
if(R3.A1<R3.A2) R3.saida=R3.A1;
else R3.saida=R3.A2;
// 4 MM PS -> M
R4.A1=PerMa.MM;
R4.A2=PerSu.PS;
if(R4.A1<R4.A2) R4.saida=R4.A1;
else R4.saida=R4.A2;
// 5 MM MS -> M
R5.A1=PerMa.MM;
R5.A2=PerSu.MS;
if(R5.A1<R5.A2) R5.saida=R5.A1;
else R5.saida=R5.A2;
// 6 MM GS -> L
R6.A1=PerMa.MM;
R6.A2=PerSu.GS;
if(R6.A1<R6.A2) R6.saida=R6.A1;
else R6.saida=R6.A2;
// 7 GM PS -> L
R7.A1=PerMa.GM;
Página 5
Maquina de Lavar Fuzzy.c
R7.A2=PerSu.PS;
if(R7.A1<R7.A2) R7.saida=R7.A1;
else R7.saida=R7.A2;
// 8 GM MS -> L
R8.A1=PerMa.GM;
R8.A2=PerSu.MS;
if(R8.A1<R8.A2) R8.saida=R8.A1;
else R8.saida=R8.A2;
// 9 GM GS -> ML
R9.A1=PerMa.GM;
R9.A2=PerSu.GS;
if(R9.A1<R9.A2) R9.saida=R9.A1;
else R9.saida=R9.A2;
/* calcula conjuntos de saída pelo "MÁXIMO"
MC <- R1
C <- R2
M <- MAX (R3,R4,R5)
L <- MAX (R6,R7,R8)
ML <- R9
*/
PerSa.MC=R1.saida;
PerSa.C=R2.saida;
PerSa.M=R3.saida;
if(PerSa.M<R4.saida) PerSa.M=R4.saida;
if(PerSa.M<R5.saida) PerSa.M=R5.saida;
PerSa.L=R6.saida;
if(PerSa.L<R7.saida) PerSa.L=R7.saida;
if(PerSa.L<R8.saida) PerSa.L=R8.saida;
PerSa.ML=R9.saida;
}
void CalculaSaida()
{
double centMC;
double centC;
double centM;
double centL;
double centML;
double num=0;
double den=0;
// Calcula a saída pelo Método da Média Ponderada dos Máximos
// calcula o centro de cada conjunto de saída (MC, C, M, L, ML)
centMC = (0+10)/2;
centC = (0+25)/2;
Página 6
Maquina de Lavar Fuzzy.c
centM = (10+40)/2;
centL = (25+60)/2;
centML = (40+60)/2;
//calcula a média
if(PerSa.MC>0)
{
 num=num+centMC*PerSa.MC;
 den=den+PerSa.MC;
}
if(PerSa.C>0)
{
 num=num+centC*PerSa.C;
 den=den+PerSa.C;
}
if(PerSa.M>0)
{
 num=num+centM*PerSa.M;
 den=den+PerSa.M;
}
if(PerSa.L>0)
{
 num=num+centL*PerSa.L;
 den=den+PerSa.L;
}
if(PerSa.ML>0)
{
 num=num+centML*PerSa.ML;
 den=den+PerSa.ML;
}
saida=num/den;
}
int main()
{
 double sugeira=0; // 0 a 100
 double mancha=0; // 0 a 100
 // obtem entradas
 printf("Digite a quantidade de sugeira e manchas (0 a 100): ");
 scanf("%lf %lf",&sugeira,&mancha);
 printf("Sugeira = %lf\r\nMancha = %lf\r\n",sugeira,mancha);
 // calcula pertinencias das entradas nos conjuntos
 calculaPertinenciaMancha(mancha,0.0,0.0,50.0,50.0,50.0,50.0,100,100);
 calculaPertinenciaSugeira(sugeira,0.0,0.0,50.0,50.0,50.0,50.0,100,100);
 printf("\r\n");
 printf("PerMa.SM,PerMa.MM,PerMa.GM = %lf %lf 
%lf\r\n",PerMa.SM,PerMa.MM,PerMa.GM);
 printf("PerSu.PS,PerSu.MS,PerSu.GS = %lf %lf 
%lf\r\n",PerSu.PS,PerSu.MS,PerSu.GS);
Página 7
Maquina de Lavar Fuzzy.c
 // avalia as regras
 AvaliaRegrasFuzzy();
 printf("\r\n");
 printf("R1.A1,R1.A2,R1.saida = %lf %lf %lf\r\n",R1.A1,R1.A2,R1.saida);
 printf("R2.A1,R2.A2,R2.saida = %lf %lf %lf\r\n",R2.A1,R2.A2,R2.saida);
 printf("R3.A1,R3.A2,R3.saida = %lf %lf %lf\r\n",R3.A1,R3.A2,R3.saida);
 printf("R4.A1,R4.A2,R4.saida = %lf %lf %lf\r\n",R4.A1,R4.A2,R4.saida);
 printf("R5.A1,R5.A2,R5.saida= %lf %lf %lf\r\n",R5.A1,R5.A2,R5.saida);
 printf("R6.A1,R6.A2,R6.saida = %lf %lf %lf\r\n",R6.A1,R6.A2,R6.saida);
 printf("R7.A1,R7.A2,R7.saida = %lf %lf %lf\r\n",R7.A1,R7.A2,R7.saida);
 printf("R8.A1,R8.A2,R8.saida = %lf %lf %lf\r\n",R8.A1,R8.A2,R8.saida);
 printf("R9.A1,R9.A2,R9.saida = %lf %lf %lf\r\n",R9.A1,R9.A2,R9.saida);
 printf("\r\n");
 printf("PerSa.MC = %lf\r\n",PerSa.MC);
 printf("PerSa.C = %lf\r\n",PerSa.C);
 printf("PerSa.M = %lf\r\n",PerSa.M);
 printf("PerSa.L = %lf\r\n",PerSa.L);
 printf("PerSa.ML = %lf\r\n",PerSa.ML);
 CalculaSaida();
 printf("\r\n");
 printf("SAIDA = %lf\r\n",saida);
 return 0;
}
Página 8

Outros materiais