Skip to content

Instantly share code, notes, and snippets.

@je4npw
Last active May 28, 2026 12:57
Show Gist options
  • Select an option

  • Save je4npw/53e8e9fd32f1e30a48b482c070fafe21 to your computer and use it in GitHub Desktop.

Select an option

Save je4npw/53e8e9fd32f1e30a48b482c070fafe21 to your computer and use it in GitHub Desktop.
Cálculo de Gorjeta (Procedural vs Lógica Nebulosa)
% 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