lunes, 27 de febrero de 2012

21.02.2012 MODELADO Y SIMULACIÓN


Hoy en día todos los procesos están automatizados y el sofware empleado en los diferentes niveles de la empresa varía y se adecúan a las tareas especificas de cada proceso empleado en los diferentes niveles de la empresa, es lo que refejamos a continuación en la pirámide de automatización.

Para hacer este estudio se utilizan los paradigmas que se explicaron en la clase anterior:
  • Dynamic system
  • System dynamics
  • Discrete event
  • Agent based


  •  PARTE II : SISTEMAS DE EVENTOS DISCRETOS

    Eventos, son sucesos que ocurren en un tiempo determinado. Una serie de sucesos crean la teoría de colas.
    1.- Sucesos estocásticos: dadas unas propiedades estadísticas crear el colectivo virtual
  • Espacio de probabilidad  
Experimento aleatorio: por algún procedimiento, seleccionar un elemento de un colectivo y obtener un resultado.
Espacio muestral: conjunto de todos los resultados posibles.
Ejemplos de : cartas de una baraja, números de una ruleta, alumnos de una clase, cara y cruz de una moneda, números de un dado  {1; 2; 3; 4; 5; 6}
Enlaces que explican el álgebra de subconjuntos:
                      
http://esfm.egormaximenko.com/real_analysis/sigma_algebras.pdf
                      
Suceso aleatorio
Frecuencia relativa
Función de probabilidad  
  • Variable aleatoria
Función de distribución
Función de densidad
La esperanza matemática
La varianza
  •  Teoría de colas
Las colas son una parte esencial de sistemas de eventos discretos. Aparecen en procesos de fabricación, negocios, bancos, redes de comunicación, etc. La Teoría de colas está muy unida a la simulación.

Una cola de espera está formada por una colección de objetos o  clientes esperando en un punto de servicio a ser atendidos en un cierto orden por un servidor o por varios.
Modelo de una cola, distribuciones de probabilidad:
  • Modelo de llegadas. Los clientes pueden llegar en intervalos de tiempo deterministas o aleatorios, siguiendo una determinada funci on de distribución.
  • Modelo de servicio. El servidor puede realizar el servicio en un tiempo determinista o aleatorio, siguiendo una determinada funci on de distribución.
  • Tipo de disciplina de la cola. Los tipos m as usuales son FIFO ( first input, first output) y LIFO (last input, first output).
Resultados
A partir del modelo de una cola se pueden obtener algunos resultados, a veces por métodos matemáticos o si no por simulación. Los más interesantes desde el punto de vista práctico son:
  • Longitud, o número de elementos, de la cola.
  • Tiempo que espera un cliente para ser atendido.
  • Porcentaje de tiempo que el servidor está ocupado.
  • Número de clientes que llegan en un intervalo de tiempo dado.
  • Número de clientes que reciben servicio inmediato.
  • Longitud máxima que ha alcanzado la cola.
Estos elementos son números que varían de forma aleatoria en el tiempo, condicionados por los datos del modelo los cuales, a su vez, son también aleatorios.




Funcionamiento de la cola
El intervalo de tiempo Ta que pasa entre la entrada de un cliente y la del siguiente se denomina tiempo entre llegadas



El servidor atiende a un cliente de la cola durante un tiempo Td , llamado tiempo de servicio, pasado el cual dicho cliente sale del servidor. Entonces, si la cola no está vacía, el servidor repite la misma operación con el cliente siguiente hasta terminar con todos los clientes que están en cola.
Notación de Kendall
D.G. Kendall propuso la siguiente notaci on para modelos de colas: A/S/Q

en donde las letras A, S y Q denotan: A: Distribución de llegada de clientes
S: Distribución de servicio
Q: Número de servidores 

2.-  Método de Montecarlo: dadas las propiedades estadísticas crear el colectivo virtual
  • Números Aleatorios: Cualquiera de los números dentro de cierto rango en el que todos tienen la misma oportunidad de ocurrir.
  • Método de Montecarlo
En ciertas aplicaciones de la Estadística, dados un colectivo (espacio muestral) y una distribución de probabilidad, se trata de realizar pruebas o experimentos para obtener sucesos con sus probabilidades que son números aleatorios.
En el método de Montecarlo se procede a la inversa,
es decir, dados unos números aleatorios y una distribución, se trata de obtener, no el colectivo real (eso sería imposible) sino una simulación del mismo o "colectivo" virtual.
A veces no se desea obtener el colectivo sino alguna propiedad suya determinada por algunos elementos. En este caso, con el método de Montecarlo obtendremos tales elementos y a partir de ellos calcularemos dicha propiedad.
3.- GPSS
  • Lenguaje GPSS: lenguaje de comandos antiguo en el que no vamos a profundizar.
  • Estamentos de control
  • Bloques básicos
4.- AnyLogic: es un programa nuevo
  • Statecharts: cartas de estado que sirven para desarrollar sistemas estocásticos. Es un lenguaje gráfico para programar los eventos que son complicados de programar en Java o en C++. Es un sistema de estados y transiciones asociados. Cada vez que hay un evento se cambia de estado. Los elementos principales de estas Statecharts son:
               - Estados
               - Transiciones
               - Acción: es un accesorio. Tanto los estados como las transiciones tienen acciones

       Los símbolos son:
  •  Enterprise Library: librería para crear programas de empresa
  • Agent Based (ejemplo: Predator pray): simulación por medio de agentes

lunes, 20 de febrero de 2012

14.02.2012 SISTEMAS CONTINUOS


 

Sistemas Continuos: el sistema evoluciona de forma contínua (ej: Temperatura, no hay saltos.) Se definen con ecuaciones diferenciales: sistemas lineales o no lineales.

Sistemas de Eventos Discretos:
en el sistema se producen eventos, sucesos. Procesos estocásticos, Modelos de colas, Sistemas reactivos.
Estos eventos pueden ser producidos por comunicación de sistemas (ej: choques, ...). Estos eventos pueden aparecer de forma natural o construídos, muy sofisticados.

Métodos de Simulación:
Dynamic Systems (EJS), System Dynamics (Anylogic), Discrete Event, Agent Based.
Programas de Simulación:
veremos algo con EJS y usaremos Anylogic.

EDO (Ecuación Diferencial Ordinaria)

Problema del Valor Inicial:
dx/dt  = f(t,x)
x(0) = x0

Con un ejemplo:

dx/dt  = -3x
x(0) =2

La solución sería: x(t) = 2·e^-3t


Esta ecuación diferencial la podemos resolver con
Anylogic gracias al Diagrama de Forrester de la siguiente manera, dando la solución numérica:
 Donde el símbolo de la válvula representa flow o grifo y el cuadrado representa un depósito o stock.
Esta forma de escribir las ecuaciones deferenciales simplifica su resolución.
Para el ejemplo Dx = -3x + 5 se quedaría:

En Anylogic hacemos click en la válvula y escribimos dx/dt = -3x + 5
Y haciendo click en el cuadrado escribimos: dx/dt = Dx

14.02.2012 PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ORIENTADA A OBJETOS

La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento.

Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad:
  • El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).
  • El comportamiento está definido por los  métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él.
  • La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).
Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento. 

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.


La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.


DEFINICION DE PALABRAS TECNICAS
  • Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar. 
  • Clase: Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas. 
  • Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
  • Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.
  • Herencia: Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.
  • Objeto: Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.
  • Paradigma de programación: Es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.
  • Polimorfismo: Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.
  •  Programación estructurada: Técnica para escribir programas (programación de computadora) de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).
  • Programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen.