Vous êtes sur la page 1sur 5

Práctica: 1

Asignatura
Laboratorio de Control Aplicado

Nombre del profesor


Alexandro López

Nombre de los alumnos


Juan Islas Huesca
Sergio Andrés López Chablé
Fecha de Entrega
Lunes 17 de septiembre 2018

1
Práctica: 1
/* Control Aplicado */
/* Sergio López y Juan Islas */

/* Fuzzy Tip */
/* Función de lógica difusa para el problema de la propina. Dadas las entradas servicio y comida se
calcula el porcentaje de propina
Para la entrada de servicio se usan 3 funciones de membresía gaussianas */

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main(void)
{
float service, food, alpha_pobre, beta_pobre, Pobre;
float auxiliar1, auxiliar2,Bueno,alpha_bueno, beta_bueno;
float Excelente,alpha_excelente, beta_excelente;
float alpha_mala, beta_mala, delta_mala=1, phi_mala=3, Mala;
float auxiliar3, auxiliar4, auxiliar5,auxiliar6,min,max;
float alpha_deliciosa, beta_deliciosa, delta_deliciosa=8, phi_deliciosa=10, Deliciosa;
float Baja, Regular, Alta;
int alpha_baja, beta_baja, delta_baja;
int alpha_regular, beta_regular, delta_regular=20;
int alpha_alta, beta_alta, delta_alta;
float tip;

food=0;
service=0;

printf("Equipo JuanitoChenchis: \n Sergio Lopez\n Juan Islas \n\n");


printf("Este programa le permite calcular la propina 0-30 con base a su experiencia \n");
printf("Ingrese su ponderacion 1-10 del servicio: \n");
scanf("%f",&service);
printf("\nIngrese su ponderacion 1-10 de la comida: \n");
scanf("%f",&food);

/* Para la variable service, función Pobre */


beta_pobre=0;
alpha_pobre=1.5;
/* Función gaussiana */
auxiliar1=pow(service-beta_pobre,2);
auxiliar2=pow(alpha_pobre,2);
Pobre=exp((-auxiliar1)/(2*auxiliar2));

/* Función Bueno */
alpha_bueno=1.5;
beta_bueno=5;

2
/* Función gaussiana */
auxiliar1=pow(service-beta_bueno,2);
auxiliar2=pow(alpha_bueno,2);
Bueno=exp((-auxiliar1)/(2*auxiliar2));

/* Función Excelente */
alpha_excelente=1.5;
beta_excelente=10;
/* Función gaussiana */
auxiliar1=pow(service-beta_excelente,2);
auxiliar2=pow(alpha_excelente,2);
Excelente=exp((-auxiliar1)/(2*auxiliar2));

/* Para la variable food */


/* Función Mala */
alpha_mala=0;
beta_mala=0;
delta_mala=1;
phi_mala=3;
/*Función gaussiana*/
auxiliar1=food-alpha_mala;
auxiliar2=beta_mala-alpha_mala;
auxiliar3=phi_mala-food;
auxiliar4=phi_mala-delta_mala;
/*auxiliar5=auxiliar1/auxiliar2;*/
auxiliar6=auxiliar3/auxiliar4;

if(auxiliar6<1)
{
min=auxiliar6;
}
else if(1<auxiliar6)
{
min=1;
}
else
{
min=1;
}

if(min>0)
{
Mala=min;
}
else
{
Mala=0;
}

3
/* Función Deliciosa */
alpha_deliciosa=7;
beta_deliciosa=8;
delta_deliciosa=10;
phi_deliciosa=10;
/*Función gaussiana*/
auxiliar1=food-alpha_deliciosa;
auxiliar2=beta_deliciosa-alpha_deliciosa;
auxiliar3=phi_deliciosa-food;
auxiliar4=phi_deliciosa-delta_deliciosa;
auxiliar5=auxiliar1/auxiliar2;
auxiliar6=auxiliar3/auxiliar4;

if(auxiliar5<=1 && auxiliar5<=auxiliar6)


{
min=auxiliar5;
}
if(auxiliar6<=1 && auxiliar6<=auxiliar5)
{
min=auxiliar6;
}
if(1<=auxiliar5 && 1<=auxiliar6)
{
min=1;
}

if(min>0)
{
Deliciosa=min;
}
else
{
Deliciosa=0;
}

/* Reglas or=max, and=min */


/* Regla uno: If service is Pobre o food is mala Tip= Baja */
if(Pobre>Mala)
{
Baja=Pobre;
}
else
{
Baja=Mala;
}
/* Regla dos: If service is Bueno Tip= Regular */

4
Regular=Bueno;
/* Regla tres: If service is Excelente or food is deliciosa Tip= Alta */
if(Excelente>Deliciosa)
{
Alta=Excelente;
}
else
{
Alta=Deliciosa;
}

/* Centros de las Funciones de membresía de salida*/


/* Función baja */
alpha_baja=0;
beta_baja=5;
delta_baja=10;
/* Función regular centro */
alpha_regular=10;
beta_regular=15;
delta_regular=20;
/* Función alta centro */
alpha_alta=20;
beta_alta=25;
delta_alta=30;
/* Salida calculada por método de los centros */
tip=(Baja*beta_baja+Regular*beta_regular+Alta*beta_alta)/(Baja+Regular+Alta);
printf("\nLa propina que debes dejar es: \n %0.2f ",tip);
}

Vous aimerez peut-être aussi