Esse relatório descreve toda a implementação do Sistema Especialista Fuzzy para Consumo de Combustível utilizando a ferramenta FuzzyClips. O objetivo do sistema é controlar o consumo de combustível do veículo, considerando como variáveis auxiliares a velocidade e o peso do veículo.
As variáveis linguísticas de entrada e saída são mostradas na tabela 1.
Tabela 1 Variáveis linguísticas para consumo de combustível
A primeira coluna da tabela 1 descreve os valores considerados para o peso do carro, enquanto na primeira linha descreve os valores considerados para a velocidade do veículo, as demais informações são em relação ao consumo de combustível de acordo com o peso e velocidade.
Para implementar o código foi utilizado um editor de texto Visual Studio Code, e no código foram descritos um template para cada variável linguística, foi utilizado duas funções pré-definidas (Z e S) e uma trapezoide:
(deftemplate Peso
0 1300 kg
((leve (z 0 800))
(medio (700 0)(800 1)(1000 1)(1100 0))
(pesado (s 1000 1300))
)
)
O código acima mostra o template criado para definir as variáveis de Peso, onde é considerado:
- Peso leve de 0 a 800 Quilos
- Peso medio entre 700 a 1100 Quilos
- Peso pesado de 1000 a 1300 Quilos
A Figura 1 mostra os valores numéricos possíveis para o Peso, leva em consideração as variáveis linguísticas na Tabela 1 e no template em questão.
As variáveis linguísticas de entrada e saída são mostradas na Tabela 1.
Figura 1. Plotagem dos Valores numéricos possíveis para a Peso
(deftemplate Velocidade
0 140 km/h
((baixa (z 0 60))
(media (50 0)(60 1)(90 1)(100 0))
(alta (s 90 140))
)
)
O código acima mostra o template criado para definir as variáveis de Velocidade, onde é considerado:
- Velocidade baixa de 0 a 60 Quilômetros por hora
- Velocidade media entre 50 a 100 Quilômetros por hora
- Velocidade alta de 90 a 140 Quilômetros por hora
A Figura 2 mostra os valores numéricos possíveis para a Velocidade, leva em consideração as variáveis linguísticas na Tabela 1 e no template em questão.
As variáveis linguísticas de entrada e saída são mostradas na Tabela 1.
Figura 2. Plotagem dos Valores numéricos possíveis para a Velocidade
(deftemplate Consumo
0 16 km/l
((muito_baixo (s 13 16))
(baixo (9 0)(11 1)(14 0))
(medio (7 0)(9 1)(10 0))
(alto (4 0)(6 1)(8 0))
(muito_alto (z 0 5))
)
)
O código acima mostra o template criado para definir as variáveis de Consumo, onde é considerado:
- Consumo muito baixo de 13 a 16 Quilômetros por litro
- Consumo baixo entre 9 a 14 Quilômetros por litro
- Consumo medio entre 7 a 10 Quilômetros por litro
- Consumo alto entre 4 a 8 Quilômetros por litro
- Consumo muito alto de 0 a 5 Quilômetros por litro
A Figura 3 mostra os valores numéricos possíveis para a Consumo, leva em consideração as variáveis linguísticas na Tabela 1 e no template em questão.
As variáveis linguísticas de entrada e saída são mostradas na Tabela 1.
Figura 3. Plotagem dos Valores numéricos possíveis para a Consumo
As regras que definiram o consumo de combustível do veículo foram divididas em 5 regras diferentes, considerando uma para cada variável linguística. A utilização da declaração da salience foi a solução adotada para garantir que essas regras fossem executadas antes da regra final de defuzzificação. Abaixo são listadas as 5 regras:
(defrule muito_baixo
(declare (salience 10))
(Peso leve)
(Velocidade baixa)
=>
(assert (Consumo muito_baixo))
)
(defrule baixo
(declare (salience 10))
(or (and (Peso medio) (Velocidade baixa))
(and (Peso leve) (Velocidade media))
)
=>
(assert (Consumo baixo))
)
(defrule medio
(declare (salience 10))
(or (and (Peso pesado) (Velocidade baixa))
(and (Peso medio) (Velocidade media))
(and (Peso leve) (Velocidade alta))
)
=>
(assert (Consumo medio))
)
(defrule alto
(declare (salience 10))
(or (and (Peso pesado) (Velocidade media))
(and (Peso medio) (Velocidade alta))
)
=>
(assert (Consumo alto))
)
(defrule muito_alto
(declare (salience 10))
(Peso pesado)
(Velocidade alta)
=>
(assert (Consumo muito_alto))
)
Para a defuzzificação, foi criado uma variável global e uma regra onde faz a plotagem do valor numérico encontrado. A regra se chama defuzifica e foi declarada com salience 0 para que fosse executada depois das demais regras do sistema.
(defglobal
?*g_resultado* = 0
)
(defrule defuzifica
(declare (salience 0))
?v_tmp <- (Consumo ?)
=>
(bind ?*g_resultado* (moment-defuzzify ?v_tmp))
(plot-fuzzy-value t "*" nil nil ?v_tmp)
(retract ?v_tmp)
(printout t "Consumo: ")
(printout t ?*g_resultado* crlf)
(printout t " >>> FIM <<< " crlf)
)
Os valores finais foram testados através do deffacts, onde é inserido fatos que são tratados nas regras do sistema. Com o intuito de testar as regras e obter os valores numéricos relacionados ao resultado. O código abaixo mostra a utilização dos valores para Peso e Velocidade.
(deffacts Consumo
(Peso medio)
(Velocidade media)
)
A Figura 4 mostra os resultados obtidos para os valores acima.
Figura 4. Resultado dos valores setados como Peso medio e Velocidade media.
(Consumo aproximado de 7.73 quilômetros por litro)
As Figuras 5, 6, 7, 8, 9, 10, 11 e 12 logo abaixo mostram os resultados obtidos para as demais possibilidades de valores de Peso e Velocidade considerados na Tabela 1.
(deffacts Consumo
(Peso leve)
(Velocidade baixa)
)
A Figura 5 mostra os resultados obtidos para os valores acima.
Figura 5. Resultado dos valores setados como Peso leve e Velocidade baixa.
(Consumo aproximado de 14.36 quilômetros por litro)
(deffacts Consumo
(Peso leve)
(Velocidade media)
)
A Figura 6 mostra os resultados obtidos para os valores acima.
Figura 6. Resultado dos valores setados como Peso leve e Velocidade media.
(Consumo aproximado de 11.12 quilômetros por litro)
(deffacts Consumo
(Peso leve)
(Velocidade alta)
)
A Figura 7 mostra os resultados obtidos para os valores acima.
Figura 7. Resultado dos valores setados como Peso leve e Velocidade alta.
(Consumo aproximado de 9.03 quilômetros por litro)
(deffacts Consumo
(Peso medio)
(Velocidade baixa)
)
A Figura 8 mostra os resultados obtidos para os valores acima.
Figura 8. Resultado dos valores setados como Peso medio e Velocidade baixa.
(Consumo aproximado de 10.75 quilômetros por litro)
(deffacts Consumo
(Peso medio)
(Velocidade alta)
)
A Figura 9 mostra os resultados obtidos para os valores acima.
Figura 9. Resultado dos valores setados como Peso medio e Velocidade alta.
(Consumo aproximado de 5.52 quilômetros por litro)
(deffacts Consumo
(Peso pesado)
(Velocidade baixa)
)
A Figura 10 mostra os resultados obtidos para os valores acima.
Figura 10. Resultado dos valores setados como Peso pesado e Velocidade baixa.
(Consumo aproximado de 9.30 quilômetros por litro)
(deffacts Consumo
(Peso pesado)
(Velocidade media)
)
A Figura 11 mostra os resultados obtidos para os valores acima.
Figura 11. Resultado dos valores setados como Peso pesado e Velocidade media.
(Consumo aproximado de 6.36 quilômetros por litro)
(deffacts Consumo
(Peso pesado)
(Velocidade alta)
)
A Figura 12 mostra os resultados obtidos para os valores acima.
Figura 12. Resultado dos valores setados como Peso pesado e Velocidade alta.
(Consumo aproximado de 2.64 quilômetros por litro)
Concluimos então com os resultados obtidos que a implementação e os teste ocorreram de maneira correta e esperada. Os Consumos que foram calculados através dos deffrules nos mostram que quanto menos Peso e menos Velocidade o carro tiver, menor sera o Consumo de combustível, assim como quanto maior o Peso e maior a Velocidade, respectivamente será maior o Consumo. Esse sistema especialista pode ser facilmente aplicado para pessoas comuns em busca de melhores resultados sobre consumo de seu veículo, tendo em vista a alta inflação que ocorre na atualidade em relação ao preço do combustível.