jueves, 29 de marzo de 2012

[MSDS] Mapa de Logística. Puntos Extra

Código




GNUPLOT




Comando


python logisticMap.py 0.000039 100 1000 100000
gnuplot logisticMap.plot
convert -flatten data.eps data.png

Resultado Pagina Web





Resultado Código





Referencias


jueves, 23 de febrero de 2012

[MSDS] Procesos Estocásticos Discretos y Contínuos

"La distribución de probabilidad de una variable aleatoria es una función que asigna a cada suceso definido sobre la variable aleatoria la probabilidad de que dicho suceso ocurra.
La distribución de probabilidad está definida sobre el conjunto de todos los sucesos, cada uno de los sucesos es el rango de valores de la variable aleatoria.
Cuando la variable aleatoria toma valores en el conjunto de los números reales, la distribución de probabilidad está completamente especificada por la función de distribución, cuyo valor en cada real x es la probabilidad de que la variable aleatoria sea menor o igual que x."



Distribución Discreta

Las distribuciones discretas son aquellas en las que la variable aleatoria puede pude tomar un número determinado de valores, por ejemplo:

  • Si se lanza una moneda al aire puede salir cara o cruz
  • Si se tira un dado puede salir un número de 1 al 6
  • En una ruleta el número puede tomar un valor del 1 al 32
Para mi tarea elegí la distribución discreta binomial.

Distribución Discreta Binomial


Grafica de la Distribucion Discreta Binomial (fuente: Wikipedia.org)

Las distribución binomial parte de la distribución de Bernouilli.

La distribución de Bernouilli se aplica cuando se realiza una sola vez un experimento que tiene únicamente dos posibles resultados (éxito o fracaso), por lo que la variable sólo puede tomar dos valores: el 1 y el 0

La distribución binomial se aplica cuando se realizan un número"n" de veces el experimento de Bernouilli, siendo cada ensayo independiente del anterior. La variable puede tomar valores entre:

  • 0: si todos los experimentos han sido fracaso
  • n: si todos los experimentos han sido éxitos
Por ejemplo: se tira una moneda 10 veces: ¿cuantas caras salen?.

Si no ha salido ninguna la variable toma el valor 0; si han salido dos caras la variable toma el valor 2; si todas han sido cara la variable toma el valor 10

Partiendo de esta definición, tome el siguiente problema de distribución binomial, tratare de explicar un poco si comportamiento binomial y posteriormente lo relacionaremos con una distribución de probabilidad continua.

Planteamiento

"Tenemos un examen que consta de 20 preguntas, cada pregunta puede ser verdadera o falsa. ¿La probabilidad de obtener 13 preguntas acertadas?"

Comportamiento

En este caso, la respuesta es binaria, entonces podemos deducir que:
  • La probabilidad de éxito es 0.5
  • La probabilidad de fracaso es 0.5
Ahora, la distribución binomial recibe 2 parámetros, B(n,p)
  • n: que es el número de veces que se repite el experimento.
  • p: que es la probabilidad de que el experimento sea exitoso, en este caso, que la respuesta sea acertada
La variable aleatoria x en este caso puede valer x = 0, 1, 2, ..., 20 dependiendo de cuantas preguntas sean acertadas (éxitos); la probabilidad de éxito se calcula con la siguiente formula:


donde:


Ahora, analicemos el comportamiento del problema con el siguiente programita, escrito reutilizando algunos módulos de la clase anterior, recibe el numero de repeticiones "n" y la probabilidad "p" y lo único que hace es aumentar el valor de x desde 0 hasta n (en este caso, 20), con estos valores podremos realizar una pequeña gráfica, utilizo la función bincoeff de Octave para obtener la mayor precisión, el código es el que sigue:

Se ejecuta entrando a Octave y llamando al script, escribiendo el nombre de la funcion y pasando los parametros correspondientes a nuestro problema planteado: binomial(20, 0.5) La salida generada consiste en 2 columnas donde la segunda corresponde a la probabilidad de obtener el numero de respuestas acertadas, dado por la primera columna, la salida es la siguiente:

Y la gráfica es la siguiente, generada con la herramienta GNUplot:


El resultado a nuestro problema es una probabilidad de 0.073929 (7.3929%) de obtener 13 aciertos de 20 preguntas de verdadero y falso.

Distribución Continua

Las distribuciones continuas son aquellas que presentan un número infinito de posibles soluciones, por ejemplo:
  • El peso medio de los alumnos de una clase puede tomar infinitos valores dentro de cierto intervalo (42,37 kg, 42,3764 kg, 42, 36541kg, etc)
  • La esperanza media de vida de una población (72,5 años, 7,513 años, 72, 50, 63 años)

Analizando la gráfica de la distribución discreta binomial de mi problema, pude relacionar que comportamiento de la misma con la distribución continua normal.

Distribución Continua Normal


Grafica de la Distribucion Continua Normal (fuente: Wikipedia.org)


Es el modelo de distribución más utilizado en la práctica, ya que multitud de fenómenos se comportan según una distribución normal.

Esta distribución de caracteriza porque los valores se distribuyen formando una campana de Gauss, en torno a un valor central que coincide con el valor medio de la distribución.


No quiere decir que mi problema sea continuo, sin embargo, estuve leyendo ciertas investigaciones acerca de la relación existente entre ambas distribuciones y es posible obtener una distribución binomial mediante una aproximación.

El método de aproximación a una distribución binomial por medio de la normal es muy común, vamos a analizar el comportamiento de mi problema mediante una distribución normal. Para ello ya no podemos plantear nuestro problema de la misma forma que en la binomial, ahora el planteamiento seria:

"Tenemos un examen que consta de 20 preguntas, cada pregunta puede ser verdadera o falsa. ¿La probabilidad de obtener por lo menos 13 preguntas acertadas?"

El primer paso es calcular los valores media y desviación estándar correspondientes a la distribucion normal. Para ello se utiliza el teorema de De Moivre, donde:


Entonces calculamos (recordemos que n = 20, p = 0.5, q = 0.5):
Media = np = (20)(0.5) = 10

Desviación Estándar = sqrt(npq) = sqrt[(20)(0.5)(0.5)] = sqrt(5) = 2.236068

Teniendo estos datos, es posible aproximarnos al resultado mediante la siguiente formula:


Donde x sigue valiendo 13 (13 aciertos en 20 preguntas). Entonces calculamos:
Z = [(13 - 10)/2.236068] = (3/2.23608) = 1.34
El valor de 1.34 no es en realidad el valor de la probabilidad, sino el limite central de la distribución normal. Si comparamos este valor de límite central con las tablas de distribución normal vemos que la probabilidad es de 0.91014 (91.014%) de obtener por lo menos 13 preguntas acertadas. Utilizando la funcion normcdf de Octave:



Hay que recordar que nos da un valor de 0.91014 (91.014%) porque nos esta dando la probabilidad de obtener POR LO MENOS 13, es decir, se suman las probabilidades de obtener desde 1 pregunta hasta 13.
Si sumamos los valores de la table que obtuvimos con la binomial el resultado sera 0.94234 que comparado con el 0.91014 lo cual es una buena aproximacion.

Entonces, ahora es posible generar la gráfica de la distribución normal y ver como es su aproximación a la distribución binomial, para ello modifique el programa que calcula la binomial para que calcule la también la normal y realice un proceso de "tipificación" que es lo que nos proverá los valores aproximados a la binomial, esto es, restar a 1 la probabilidad obtenida por la tabla de la distribución normal de acuerdo al limite central obtenido por cada experimento. El código del calculo y ploteo quedaron como sigue:


la parte importante del código es donde se comienza a convertir la gráfica, si vemos son 3 estados principales los cuales producen las siguientes gráficas, los estados los obtenemos comentando y descomentando las lineas (pero nunca debemos tener 2 o mas lineas descomentadas):

Estado 1. Que es la binomial en rojo sin ningún ajuste contra la normal estándar en verde.



Estado 2. Donde ajustamos el desplazamiento causado por la binomial cuando 'n' crece.



Estado 3. Donde convertimos la gráfica binomial basada en la altura de los puntos, a una distribución normal basada en el área debajo de la Campana de.



Asi es como aproxime mi problema binomial y a una normal. :)

Referencias

miércoles, 1 de febrero de 2012

[MSDS] Sistemas deterministas: Lineas de Producción

Primero empezare por definir algunos conceptos:

¿Qué es un Sistema?



"Un sistema es un conjunto de partes o elementos organizadas y relacionadas que interactúan entre sí para lograr un objetivo. Los sistemas reciben (entrada) datos, energía o materia del ambiente y proveen (salida) información, energía o materia. 

Un grupo de elementos no constituye un sistema si no hay una relación e interacción, que de la idea de un "todo" con un propósito."

Determinismo


"Sostiene que todo acontecimiento físico, incluyendo el pensamiento y acciones humanas, están causalmente determinados por la irrompible cadena causa-consecuencia."

Entonces, un Sistema Determinista es un sistema en el cual el azar no está involucrado en los futuros estados del sistema. Dadas ciertas variables de entrada y condiciones de funcionamiento, es sencillo saber cómo el sistema ha de comportarse con el paso del tiempo, entonces se puede predecir sin ningún riesgo de error el estado siguiente del sistema.

Con esta definición, decidí explicar porqué una linea de producción es un ejemplo de sistema determinista. Lo elegí porqque es un sistema (por definicion de sistema) y es determinista debido a que tiene un conjunto de estados preestablecidos para conseguir un fin común.

Lineas de Produccion


Una línea de producción es un conjunto armonizado de subsistemas, mayormente mecanicos, neumáticos, hidráulicos y electrónicos. Todos estos con una finalidad en común: transformar o integrar materia prima en otros productos.

Se puede utilizar una linea de produccion en muchisismo campos de manufactura, las entradas pueden ser: polimeros, telas, metales, maderas, minerales, incluso la energia utilizada en los procesos.

Mientras que las salidas tambien son de variados tipos: automoviles, refrescos, jabones, alimentos enlatados, en fin.

Debido al gran consumismo de la sociedad actual, fue necesario intensificar el uso de las lineas de produccion, ya que las necesidades actuales exigen la existencia permante de ciertos productos con caracteristicas semejantes y de gran calidad.

Henry Ford, fundador de la compañía Ford Motor Company, es considerado el padre de las lineas de produccion modernas al instalar el primer sistema de produccion en masa en su fabrica de automoviles.

Ventajas de una linea de produccion
  • Reduce el tiempo de producción.
  • Regula la carga de trabajo dividiendo el mismo en estaciónes.
  • Es más fácil detectar errores en la producción.
  • Aumenta la productividad.
  • Reduce costos y aumenta la calidad.
  • Reduce inventarios (materiales comprados, obra en proceso, productos terminados).
  • Se puede aplicar a cualquier tipo de empresa que reciba o despache mercancías.

Invito a que vean este video extra donde se explica cómo se fabrican botellas de vidrio, es un ejemplo de linea de produccion.


¿Porqué una Línea de Producción es un sistema determinista?


Considero que es determinista porque involucra variables de entrada como lo expliqué anteriormente y requiere de ciertas condiciones para funcionar. Cada una de las estaciones se puede decir que son los estados de la linea de produccion.
  • Preparacion: Se carga la materia prima y esta se prepara para el siguiente paso. Aqui se puede, por ejemplo, derretir un metal o un polimero, o se puede cargar en algun medio de almacenamiento temporal para su uso posterior.
  • Procesos de moldeado: Este es un paso que se repite en muchas lineas de produccion, al moldear la materia prima, extruirla, aplastarla, etcetera.
  • Ensamblaje: A veces este proceso es paralelizable, es decir, una vez que un material se ha moldeado, posiblemente es mas factible tambien ensamblar pequenas cosas a la vez, y despues juntarlas en un todo.
  • Pruebas: Todas las empresas realizan pruebas de seguridad y calidad para verificar que su producto cumpla con las especificaciones del mercado, se prueba un lote en cieros momentos del dia y por lo general se descarta todo el lote si un solo producto del mismo salio mal.
  • Almacenamiento: Algunos productos son almacenados, ya que a veces se requiere que el mismo sea transportado a otras ciudades a determinados horarios, mientras ese moomento llega, habran de esperar un momento en alguna bodega.
  • Distribucion: El producto se entrega a diferentes cadenas comerciales para que pueda ser adquirido por el usuario final.
  • Uso y reciclado: Se aprovecha el producto, eso le da valor agregado dependiendo de la satisfaccion del cliente, cuando el producto ya no es funcional o es obsoleto, es desechado. Posteriormente se verifica si alguna parte es reciclable y esta se convierte de nuevo en la entrada al sistema.
Además podemos extender lo anterior a los estados establecidos a la maquinaria y robots, los cuales estan preparados para seguir un proceso para el cual fueron programados. De hecho esta fue la razon por la cual el recurso humano fue remplazado por robots, porque rinden mejor y, dadas una serie de instrucciones, son capaces de realizar la misma tarea con gran exactitud y de manera consecutiva.

Pseudocodigo


Algo de estilo con Python:

Espero les haya agradado mi explicacion, sin mas por el momento, quedo en ustedes.

De antemano gracias.

Referencias

viernes, 6 de mayo de 2011

Demostración Final

Taller de Programación Orientada a Objetos

Demostracion Final.



VIDEO DEMOSTRACION:

Interfaces Gráficas

Programación Orientada a Objetos - Semana 13 - Reporte 12


Interfaces Gráficas en JAVA



Las GUI (Graphic User Interface) o Interfaz Gráfica de Usuario es una forma de hacer los dispositivos más accesibles a los usuarios en general.
Las interfaces gráficas son en realidad un componente o programa que corre en segundo plano en el sistema donde se ha implementado, su función es transformar cada una de las instrucciones, métodos, acciones o comandos en componentes visuales (haciendo uso de imagenes, pequeños iconos, efectos y demás).
Todo esto convierte un entorno de línea de comandos en un entorno visual más atractivo e intuitivo al usuario lo que es una invitación a utilizar nuestro sistema o aplicación

La necesidad de las interfaces gráficas surge como una consecuencia de la falta de conocimientos por parte de los usuarios sobre el manejo y uso de las CLI (Interfaces de Línea de Comandos) había la necesidad de masificar los sistemas, pero aprender cientos de instrucciones, sintaxis, parámetros y demás no era una buena solución.



Las Interfaces gráficas automatizan gran parte de este trabajo, ya que no es necesario aprender toda una instrucción textual, solo es necesario aprender la funcionalidad de un botón para lograr los resultados deseados.

Los sistemas operativos implementan diferentes gestores GUI o entornos de escritorio, solo por mencionar algunos:

  • Windows XP: LUNA
  • Windows Vista/Seven: AERO
  • MAC OS: AQUA
  • Linux: GNOME, UNITY, KCD

Java ofrece una serie de librerias que facilitan en gran medida la implementación interfaces gráficas.


java.awt(Abstract Windowing Toolkit)


Es el paquete original de herramientas GUI de Java. Las principales ventajas AWT son que viene incluída en todos los paquetes de tecnología Java, incluyendo implementaciones de Java en navegadores de Internet y es muy estable.

AWT es un conjunto de herramientas muy simples con pocos componentes GUI, administradores de diseño, y eventos.
Esto se debe a Sun Microsystems decidió utilizar un mínimo común denominador (LCD) para el enfoque de AWT.
Como resultado de ello, y por desgracia, algunos de los componentes de uso común, tales como tablas, árboles, barras de progreso, y otros, no son compatibles. Para las aplicaciones que necesitan más tipos de componentes, es necesario crearlas desde cero. Esta es una gran carga.

AWT ofrece tres tipos de componentes principales:


a) Básicos: Componentes básicos en cualquier GUI.

  • Button
  • CheckBox
  • Container
  • Panel
  • Window
  • Frame
  • Label
  • List
  • TextComponent
  • MenuComponent


b) Layouts: Sirven para acomodar los componentes de la GUI.

  • FlowLayout
  • GridLayout
  • BorderLayout
  • CardLayout
  • GridBagLayout


c) Eventos: Otorgan funcionalidades a cada uno de los componentes de la GUI.

  • KeyEvent
  • ActionEvent
  • MouseEvent
  • TextEvent



javax.swing


El paquete Swing es parte de la JFC (Java Foundation Classes) en la plataforma Java. La JFC provee facilidades para ayudar a la gente a construir GUIs.

Las componentes Swing se identifican porque pertenecen al paquete javax.swing.

Swing existe desde la JDK 1.1 (como un agregado). Antes de la existencia de Swing, las interfaces gráficas con el usuario se realizaban a través de AWT (Abstract Window Toolkit), de quien Swing hereda todo el manejo de eventos. Usualmente, para toda componente AWT existe una componente Swing que la reemplaza, por ejemplo, la clase Button de AWT es reemplazada por la clase JButton de Swing (el nombre de todas las componentes Swing comienza con "J").

Las componentes de Swing utilizan la infraestructura de AWT, incluyendo el modelo de eventos AWT, el cual rige cómo una componente reacciona a eventos tales como, eventos de teclado, mouse, etc... Es por esto, que la mayoría de los programas Swing necesitan importar dos paquetes AWT: java.awt.* y java.awt.event.*.

Ojo: Como regla, los programas no deben usar componenetes pesados de AWT junto a componentes Swing, ya que los componentes de AWT son siempre pintados sobre los de Swing. (Por componentes pesadas de AWT se entiende Menu, ScrollPane y todas las componentes que heredan de las clases Canvas y Panel de AWT)

Swing abarca componentes como botones, tablas, marcos, paneles, ventanas, etc...





APLICACIÓN AL PROYECTO


Es clave en mi proyecto desarrollar una interfaz gráfica amigable para el usuario. Mi intención es desarrollar algo parecido a la factura en físico, con un orden parecido.

En general, la ventana siempre estará compuesta por 2 paneles. El panel de barra de menú y el panel del área de trabajo




El panel de menú tendrá diferentes opciones las cuales se activaran dependiendo del área de trabajo. Para ello implementaré un JMenuBar. Si alguien por ahí sabe como implementarlo pues no dude en comentar.

El área de trabajo sera dinámica, ya que es la que cambiará con cada opción que se elija. Para ello se deberán utilizar de manera creativa los Layouts disponibles en java.awt.
Algunos paneles que me serán útiles son GridLayout, BorderLayout, FlowLayout y el dios GridBagLayout :).
Otros componentes necesarios para mi proyecto serán los básicos: JLabel, JButton, JTextField, JTextArea; asi como implementar de forma correcta el JTable


SALUDOS!! :)

REFERENCIAS




Implementación de Interfaces Gráficas

Taller de Programación Orientada a Objetos - Semana 13 - Reporte 12.

Mi intención es colocar algo parecido a esto, tomando en cuenta el diseño personalizado que el cliente ha pedido.




Para lograr mi objetivo, decidi implementar el VIEW CONTROLLER MODEL.
En este caso solamente mi sistema extiende a un JFrame, mi clase Sistema es como el gestor de la GUI, se encarga de recibir los paneles de otros métodos y de mostrarlos en la pantalla:




Para tener una mejor estructura en mi código y no sobrecargar las clases, decidí distribuir la tarea de crear paneles. Asi por ejemplo, la factura es un panel formado por 4 paneles individuales, que a su vez se componen de paneles independientes armados por cada subclase. Como es el caso del segundo panel contenedor de la factura, el cual recibe los paneles de origen y destino de los métodos correspondientes de cada subclase:




Cuando se entra a la primera pantalla, se implementa un JMenuBar, con varias opciones disponibles, se invita al usuario a elegir una de ellas. Aquí parte del código de la implementación del JMenuBar:




Posterior a eso, se redibuja la pantalla y dependiendo de la opción seleccionada es el panel que se mostrará:



- Si se elige Facturacion > Nueva Factura se mostrará esta pantalla.



La pantalla de nueva factura mostrará todo el entorno de edición de una factura, un tipo de formulario donde se podrán introducir todos los datos necesarios.
Lo botones del final son las acciones que se pueden realizar con la factura.
  • Imprimir: Para imprimir la factura en papel. Conexión con una impresora.
  • Exportar: Para exportar la factura. A XML o PDF.
  • Guardar: Guarda la factura en la base de datos.
  • Limpiar: Limpia todos los campos.


- Si se elige Facturacion > Buscar se mostrará esta pantalla.



Se introducen las palabras clave y al presionar el botón buscar se envían las palabras clave como parámetros a la función buscarFactura(), la cual a su vez conecta con la base de datos por medio de un proxy, el proxy regresa los resultados y buscarFactura los procesa para mostrarlos dentro de un JTable().

Otra cosa que no se debe olvidar son los ActionListener, de que le sirve a uno tener interfaz gráfica, si no tenemos ActionListeners. Estos componentes nos ayudan a asignar acciones a cada botón, movimiento del ratón, etc. Aqui les muestro parte del código de alguno de mis ActionListeners:



La interfaz que he diseñado la hice utilizando muchos tipos de Layouts, definitivamente el que más me ayudo fue el GridBagLayout el cual es realmente poderoso.

SALUDOS :)


Referencias

Presentacion Final

Programación Orientada a Objetos - Semana 14 - Reporte 13

Presentación Final



SALUDOS :)