Last active
May 28, 2026 12:57
-
-
Save je4npw/53e8e9fd32f1e30a48b482c070fafe21 to your computer and use it in GitHub Desktop.
Cálculo de Gorjeta (Procedural vs Lógica Nebulosa)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| % Roteiro U3 - Cálculo de Gorjeta (Procedural vs Lógica Nebulosa) | |
| clear; clc; | |
| % --- Valores de teste --- | |
| qualidade_comida = 8; | |
| qualidade_servico = 6; | |
| % ========================================== | |
| % PARTE 1: Abordagem Procedural (if/else) | |
| % ========================================== | |
| media = (qualidade_comida + qualidade_servico) / 2; | |
| if media <= 4 | |
| gorjeta_proc = 5; | |
| elseif media <= 7 | |
| gorjeta_proc = 10; | |
| else | |
| gorjeta_proc = 15; | |
| end | |
| fprintf('=== ABORDAGEM PROCEDURAL ===\n'); | |
| fprintf('Entradas: Comida=%.0f | Serviço=%.0f\n', qualidade_comida, qualidade_servico); | |
| fprintf('Gorjeta calculada: %.1f%%\n\n', gorjeta_proc); | |
| % ========================================== | |
| % PARTE 2: Abordagem com Lógica Nebulosa | |
| % ========================================== | |
| % Passo 1: Entradas e saídas já definidas acima. | |
| % Passo 2: Função de pertinência triangular | |
| mf_tri = @(x, a, b, c) max(0, min((x-a)/(b-a), (c-x)/(c-b))); | |
| % Cálculo dos graus de pertinência para as entradas | |
| mu_c_ruim = mf_tri(qualidade_comida, 0, 2, 4); | |
| mu_c_med = mf_tri(qualidade_comida, 2, 5, 8); | |
| mu_c_boa = mf_tri(qualidade_comida, 6, 8, 10); | |
| mu_s_ruim = mf_tri(qualidade_servico, 0, 2, 4); | |
| mu_s_med = mf_tri(qualidade_servico, 2, 5, 8); | |
| mu_s_boa = mf_tri(qualidade_servico, 6, 8, 10); | |
| % Passo 3: Regras Fuzzy (Inferência Mamdani simplificada) | |
| % R1: SE comida RUIM OU serviço RUIM -> gorjeta BAIXA (~5%) | |
| alpha1 = max(mu_c_ruim, mu_s_ruim); | |
| % R2: SE serviço MÉDIO -> gorjeta MÉDIA (~10%) | |
| alpha2 = mu_s_med; | |
| % R3: SE comida BOA OU serviço BOM -> gorjeta ALTA (~15%) | |
| alpha3 = max(mu_c_boa, mu_s_boa); | |
| % Passo 4: Defuzzificação (Método do Centroide Ponderado) | |
| centro_baixa = 5; centro_media = 10; centro_alta = 15; | |
| numerador = (alpha1 * centro_baixa) + (alpha2 * centro_media) + (alpha3 * centro_alta); | |
| denominador = alpha1 + alpha2 + alpha3; | |
| if denominador == 0 | |
| gorjeta_fuzzy = 10; | |
| else | |
| gorjeta_fuzzy = numerador / denominador; | |
| end | |
| fprintf('=== ABORDAGEM COM LÓGICA NEBULOSA ===\n'); | |
| fprintf('Graus de ativação: Baixa=%.3f | Média=%.3f | Alta=%.3f\n', alpha1, alpha2, alpha3); | |
| fprintf('Gorjeta calculada: %.2f%%\n', gorjeta_fuzzy); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment