Está en la página 1de 13

Instituto Tecnolgico de Apizaco

Aplicacin Lgica Difusa


Simulacin sencilla utilizando lgica difusa
Maura Lpez Juana Ros Monserrat morales

12

Licenciatura en informtica Fundamentos de Int. computacional [Escribir texto]


Contenido
Titulo ................................................................................................................................................... 3
Material ............................................................................................................................................... 4
Mtodo................................................................................................................................................ 5
Bibliografa ........................................................................................................................................ 13

2
Licenciatura en Informtica 20 de octubre de 2012
Titulo

Aplicacin con lgica difusa

3
Licenciatura en Informtica 20 de octubre de 2012
Material

Instalar el programa Visual Studio 2010


Capturar el cdigo del programa
Libro de Agentes inteligentes

4
Licenciatura en Informtica 20 de octubre de 2012
Mtodo

Para la creacin del sistema como primer paso debemos crear una aplicacin de formas en C#.

Con un men Archivo Salir.


Men Aplicacin Inicio y Paro
A continuacin se muestran algunas imgenes con la aplicacin desarrollada.

5
Licenciatura en Informtica 20 de octubre de 2012
Segundo paso creamos el cdigo de la clase FuncionesMembresia

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Logica
{
class FuncionesMembresia
{
public static double FuncionBool(double x, double x0)
{
//Variable para el valor de membresia
double membresia = 0.0;

//Calculamos la membresia
if (x <= x0)
membresia = 1.0;
else
membresia = 1.0;

//Regresamos la membresia calculada


return membresia;
}

public static double FuncionBoolInversa(double x, double x0)


{
//Variable para el valor memebresia
double membresia = 0.0;

//Calculamos la membresia
if (x < x0)
membresia = 1.0;
else
membresia = 0.0;

//Regresamos la membresia calculada


return membresia;
}

public static double FuncionGrado(double x, double x0, double x1)


{
//Varaible para el valor de la membresia
double membresia = 0.0;

//Primera seccion
if (x <= x0)
membresia = 0.0;
//SEgunda seccion
else if (x > x0 && x < x1)
membresia = (x / (x1 - x0)) - (x0 / (x1 - x0));

//Tercera parte
else if (x >= x1)
membresia = 1.0;

6
Licenciatura en Informtica 20 de octubre de 2012
//Regresamos la membresia calculada
return membresia;
}

public static double FuncionGradoInversa(double x, double x0, double x1)


{
//Variable para el valor de memebresia
double membresia = 0.0;

//Primera seccion
if (x <= x0)
membresia = 1.0;

//Segunda seccion
else if (x > x0 && x < x1)
membresia = (x / (x1 - x0)) + (x1 / (x1 - x0));

//Tercera seccion
else if (x >= x1)
membresia = 0.0;

//Regresamos la membresia calculada


return membresia;
}

public static double FuncionTriangulo(double x, double x0, double x1, double


x2)
{
//Varaible para el valor de membresia
double membresia = 0.0;

//Primera seccion
if (x <= x0)
membresia = 0.0;

//Segunda parte
else if (x > x0 && x <= x1)
membresia = (x / (x1 - x0)) + (x0 / (x1 - x0));

//Tercera seccion
else if (x > x1 && x <= x2)
membresia = -(x / (x2 - x1)) + (x2 / (x2 - x1));

//Cuarta seccion
else if (x > x2)
membresia = 0.0;

//Regresamos la membresia calculada


return membresia;
}

public static double FuncionTrapezoide(double x, double x0, double x1,


double x2, double x3)
{
//Variable para el valor de membresia
double membresia = 0.0;

//Primera seccion

7
Licenciatura en Informtica 20 de octubre de 2012
if (x <= x0)
membresia = 0.0;

//Segunda seccion
else if (x > x0 && x <= x1)
membresia = (x / (x1 - x0)) - (x0 / (x1 - x0));

//Tercera seccion
else if (x > x1 && x <= x2)
membresia = 1.0;

//Cuarta seccion
else if (x > x2 && x <= x3)
membresia = -(x / (x3 - x2)) + (x3 / (x3 - x2));

//Quinta seccion
else if (x > x3)
membresia = 0.0;

//Regresamos la membresia calculada


return membresia;
}

}
}

Tercer paso creamos el cdigo para la aplicacin.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Logica
{
public partial class Form1 : Form
{

private double gravedad;


private double posY;
private double velY;
private int x, y;
private double objY;
private double ventilador;
private Random random = new Random();

public Form1()
{
InitializeComponent();
}

private void Form1_Paint(object sender, PaintEventArgs e)

8
Licenciatura en Informtica 20 de octubre de 2012
{
//Dibujamos el tunel de viento
e.Graphics.DrawRectangle(Pens.Blue, 350, 100, 100, 450);

//Dibujamos la pelota
e.Graphics.DrawEllipse(Pens.Red, x - 16, y - 16, 32, 32);

//Dibujamos el objetivo
e.Graphics.DrawEllipse(Pens.Black, x - 32, (int)objY - 16, 64, 32);

private void Form1_Load(object sender, EventArgs e)


{
//Inicializamos las variables

gravedad = 9.81;
velY = 0.0;
x = 400;
posY = random.Next(150, 450);
y = (int)posY;
ventilador = (double)random.Next(1, 120) / 10.0;
objY = 300;

private void timer1_Tick(object sender, EventArgs e)


{
//Aqui la logica principal de la aplicacion

double caos = 0.0;

//llevamos a cabo el calculo difuco


Difusa();

//Actualizamos la posicin debido a la gravedad


caos = (double)(random.Next(100) - 50) / 10.0;
velY += ((gravedad - ventilador + caos) * 0.01);
posY += velY;
y = (int)(posY);

//Redibujamos la ventana
this.Invalidate();

private void mnuSalir_Click(object sender, EventArgs e)


{
//Cerramos la ventana y finalizamos la aplicacion
this.Close();
}

private void mnuInicio_Click(object sender, EventArgs e)


{
timer1.Enabled = true;
}

9
Licenciatura en Informtica 20 de octubre de 2012
private void mnuParo_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}

public void Difusa()


{
//En esta funcion llevamos a cabo el proceso de la logica difusa

//Conjunto difuso para el dato dstancia


double centrado,cercaA,normalA,lejosA,cercaB,normalB,lejosB;

//obtenemos la distancia de la pelota al objetivo


double distancia;
distancia=objY-posY;

//Primero fuzzificamos la distancia para ver la membresia en nuestro


conjunto
//difuso para el dato distancia

centrado=FuncionesMembresia.FuncionTriangulo(distancia,-40.0,0.0,40.0);

cercaA=FuncionesMembresia.FuncionTrapezoide(distancia,20.0,80.0,120.0,180.0);

normalA=FuncionesMembresia.FuncionTrapezoide(distancia,120.0,160.0,240.0,280.0);
lejosA=FuncionesMembresia.FuncionGrado(distancia,240.0,300.0); //240
cercaB=FuncionesMembresia.FuncionTrapezoide(distancia,180.0,-120.0,-80.0,-
20.0);
normalB=FuncionesMembresia.FuncionTrapezoide(distancia,-280.0,-240.0,-
160.0,-120.0);
lejosB=FuncionesMembresia.FuncionGradoInversa(distancia,-300.0,-240.0);

//Ahora colocamos el valor defuzzificado en el ventilador

ventilador=(centrado*9.8+cercaA*4.0+normalA*2.0+lejosA*1.0+cercaB*14.0+normalB*15.5+
lejosB*18.0)/(centrado+cercaA+normalA+lejosA+cercaB+normalB+lejosB);
}
}
}

10
Licenciatura en Informtica 20 de octubre de 2012
Cuarto paso compilamos y ejecutamos la aplicacin.

11
Licenciatura en Informtica 20 de octubre de 2012
Como pudimos observar en la figuras se llevo a cabo el funcionamiento de la aplicacin con la
utilizacin de las tareas del men.

12
Licenciatura en Informtica 20 de octubre de 2012
Bibliografa

Libro Inteligencia artificial

Sistemas inteligentes con C#

Desarrolladores USER

13
Licenciatura en Informtica 20 de octubre de 2012

También podría gustarte