Thursday, December 8, 2011

Conclusiones de la Tarea

Algunas variables son mudas, esto es, se pueden cambiar en todo el programa, y éste sigue haciendo lo mismo.

Ejemplo: Todas las que están entre tres comillas dobles ("""), o con un símbolo de gato #. Estos cambian de color, entre tres comillas dobles son verdes, y con gato son rojas.

Ejemplo: Hay otras que eran negras, y al cambiarlas, no pasó nada. por ejemplo name, pusimos nombre en todos lados donde estaba name, y dio lo mismo.

Nc

Este valor indica cuantos mostradores, o cajas hay. Se asocia a la variable resource, que quiere decir recurso. Entre más grande sea Nc, salen más rápido los clientes, y no se puede cambiar arbitrariamente, es necesario cambiar el programa, si ponemos Nc mayor.

Es necesario cambiar los programas, para entenderlos. Hay que seguir cambiándolos. Suponer qué va a pasar, y verificar que pasa. Por ejemplo, cuando se reduce Nc de 2 a 1, los clientes se tardaron más, porque hay menos cajeras en los mostradores para atender a los clientes.

El estudio de cómo asignar recursos para dar servicio, se llama Logística, y es lo que se estudia con esta modelación de un banco.

Tarea

Copiar todos los programas en el directorio que están, cambiándoles el nombre. Usar Save us, con un nuevo nombre, 001, etc.. Correr las copias y ver que hacen lo mismo. Cambiar partes del programa, y ver qué sucede, así entendemos mejor los programas.

Presentar un reporte en el blog de las conclusiones.

Esta tarea la hacemos para aprender más.

Así puede uno estudiar solo, sin necesidad de preguntarle al maestro. Si el programa no funciona es por error en el cambio que hicimos. Si sí funciona, y además produce lo que esperábamos, es porque entendemos el programa.

Tuesday, November 22, 2011

Resumen de los 24 Programas de SimPy

El primero tiene un sólo cliente, el segundo tiene más. El primero es determinado (no - azar), ya después son al azar. Random es azar, así como en La Lotería. Los tiempos que los clientes están en el banco, se distribuyen al azar, según una ley exponencial.

Así pues el tutorial va de lo sencillo, e.g. un cliente, a lo complicado, muchos clientes.Con más clientes puede haber interacción. Guido es un cliente distinguido, se refieren a Guido von Rossum.




Tuesday, November 15, 2011

Tarea

Buscar los programas del tutorial del banco en su computadora.
En mi Ubuntu están en:
/usr/eduardo/Downloads/SimPy-2.2/docs/examples/BankTutorialModels

Solución de mi tarea:

Friday, November 11, 2011

Friday, October 28, 2011

random()


Help(Random)

Python 3.1.2 (r312:79147, Sep 27 2010, 09:45:41) 
[GCC 4.4.3] on linux2
Type "copyright", "credits" or "license()" for more information.
==== No Subprocess ====
>>> from random import Random
>>> help(Random)
Help on class Random in module random:

class Random(_random.Random)
 |  Random number generator base class used by bound module functions.
 |  
 |  Used to instantiate instances of Random to get generators that don't
 |  share state.
 |  
 |  Class Random can also be subclassed if you want to use a different basic
 |  generator of your own devising: in that case, override the following
 |  methods:  random(), seed(), getstate(), and setstate().
 |  Optionally, implement a getrandbits() method so that randrange()
 |  can cover arbitrarily large ranges.
 |  
 |  Method resolution order:
 |      Random
 |      _random.Random
 |      builtins.object
 |  
 |  Methods defined here:
 |  
 |  __getstate__(self)
 |  
 |  __init__(self, x=None)
 |      Initialize an instance.
 |      
 |      Optional argument x controls seeding, as for Random.seed().
 |  
 |  __reduce__(self)
 |  
 |  __setstate__(self, state)
 |  
 |  betavariate(self, alpha, beta)
 |      Beta distribution.
 |      
 |      Conditions on the parameters are alpha > 0 and beta > 0.
 |      Returned values range between 0 and 1.
 |  
 |  choice(self, seq)
 |      Choose a random element from a non-empty sequence.
 |  
 |  expovariate(self, lambd)
 |      Exponential distribution.
 |      
 |      lambd is 1.0 divided by the desired mean.  It should be
 |      nonzero.  (The parameter would be called "lambda", but that is
 |      a reserved word in Python.)  Returned values range from 0 to
 |      positive infinity if lambd is positive, and from negative
 |      infinity to 0 if lambd is negative.
 |  
 |  gammavariate(self, alpha, beta)
 |      Gamma distribution.  Not the gamma function!
 |      
 |      Conditions on the parameters are alpha > 0 and beta > 0.
 |  
 |  gauss(self, mu, sigma)
 |      Gaussian distribution.
 |      
 |      mu is the mean, and sigma is the standard deviation.  This is
 |      slightly faster than the normalvariate() function.
 |      
 |      Not thread-safe without a lock around calls.
 |  
 |  getstate(self)
 |      Return internal state; can be passed to setstate() later.
 |  
 |  lognormvariate(self, mu, sigma)
 |      Log normal distribution.
 |      
 |      If you take the natural logarithm of this distribution, you'll get a
 |      normal distribution with mean mu and standard deviation sigma.
 |      mu can have any value, and sigma must be greater than zero.
 |  
 |  normalvariate(self, mu, sigma)
 |      Normal distribution.
 |      
 |      mu is the mean, and sigma is the standard deviation.
 |  
 |  paretovariate(self, alpha)
 |      Pareto distribution.  alpha is the shape parameter.
 |  
 |  randint(self, a, b)
 |      Return random integer in range [a, b], including both end points.
 |  
 |  randrange(self, start, stop=None, step=1, int=, default=None, maxwidth=9007199254740992)
 |      Choose a random item from range(start, stop[, step]).
 |      
 |      This fixes the problem with randint() which includes the
 |      endpoint; in Python this is usually not what you want.
 |      Do not supply the 'int', 'default', and 'maxwidth' arguments.
 |  
 |  sample(self, population, k)
 |      Chooses k unique random elements from a population sequence or set.
 |      
 |      Returns a new list containing elements from the population while
 |      leaving the original population unchanged.  The resulting list is
 |      in selection order so that all sub-slices will also be valid random
 |      samples.  This allows raffle winners (the sample) to be partitioned
 |      into grand prize and second place winners (the subslices).
 |      
 |      Members of the population need not be hashable or unique.  If the
 |      population contains repeats, then each occurrence is a possible
 |      selection in the sample.
 |      
 |      To choose a sample in a range of integers, use range as an argument.
 |      This is especially fast and space efficient for sampling from a
 |      large population:   sample(range(10000000), 60)
 |  
 |  seed(self, a=None)
 |      Initialize internal state from hashable object.
 |      
 |      None or no argument seeds from current time or from an operating
 |      system specific randomness source if available.
 |      
 |      If a is not None or an int, hash(a) is used instead.
 |  
 |  setstate(self, state)
 |      Restore internal state from object returned by getstate().
 |  
 |  shuffle(self, x, random=None, int=)
 |      x, random=random.random -> shuffle list x in place; return None.
 |      
 |      Optional arg random is a 0-argument function returning a random
 |      float in [0.0, 1.0); by default, the standard random.random.
 |  
 |  triangular(self, low=0.0, high=1.0, mode=None)
 |      Triangular distribution.
 |      
 |      Continuous distribution bounded by given lower and upper limits,
 |      and having a given mode value in-between.
 |      
 |      http://en.wikipedia.org/wiki/Triangular_distribution
 |  
 |  uniform(self, a, b)
 |      Get a random number in the range [a, b) or [a, b] depending on rounding.
 |  
 |  vonmisesvariate(self, mu, kappa)
 |      Circular data distribution.
 |      
 |      mu is the mean angle, expressed in radians between 0 and 2*pi, and
 |      kappa is the concentration parameter, which must be greater than or
 |      equal to zero.  If kappa is equal to zero, this distribution reduces
 |      to a uniform random angle over the range 0 to 2*pi.
 |  
 |  weibullvariate(self, alpha, beta)
 |      Weibull distribution.
 |      
 |      alpha is the scale parameter and beta is the shape parameter.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  VERSION = 3
 |  
 |  ----------------------------------------------------------------------
 |  Methods inherited from _random.Random:
 |  
 |  __getattribute__(...)
 |      x.__getattribute__('name') <==> x.name
 |  
 |  getrandbits(...)
 |      getrandbits(k) -> x.  Generates a long int with k random bits.
 |  
 |  random(...)
 |      random() -> x in the interval [0, 1).
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes inherited from _random.Random:
 |  
 |  __new__ = 
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T

>>> 

Tarea

Genere un número al azar en Python. Usando el modulo random.

Thursday, October 27, 2011

Tuesday, October 25, 2011

SimPy-2.3b1

SimPy
=====

SimPy is a process-based discrete-event simulation language based on standard
Python and released under the GNU LGPL.

It provides the modeller with components of a simulation model. These include
processes for active components like customers, messages and vehicles as well
as  resources for passive components that form limited capacity congestion
points (like servers, checkout counters and tunnels). It also provides monitor
variables to aid in gathering statistics. SimPy comes with extensive plotting
capabilities.

The distribution contains in-depth documentation, tutorials, and a large number
of simulation models.

Simulation model developers are encouraged to share their SimPy modeling
techniques with the SimPy community. Please post a message to the SimPy-Users
mailing list: http://lists.sourceforge.net/lists/listinfo/simpy-users

Software developers are also encouraged to interface SimPy with other Python-
accessible packages, such as GUI, database or mapping and to share these new
capabilities with the community under the GNU LGPL.


Installation
------------

SimPy requires Python 2.3 or above. Python 3 is not yet supported, but we are
working on it.

You can install SimPy easily via `PIP `_
(or ``easy_install``)::

    $ pip install SimPy
    $ # or:
    $ easy_install SimPy

You can also download and install SimPy manually::

    $ cd where/you/put/simpy/
    $ python setup.py install


If you want to upgrade an existing installation of SimPy, just add the ``-U``
option to *pip* or *easy_install*, e.g.::

    $ pip install -U SimPy


Getting started
---------------

Run one or more of the programs under *docs/examples/* to see whether Python
finds the SimPy module. If you get an error message like *ImportError: No
module named SimPy*, check if the SimPy packages exists in your site-packages
folder (like /Lib/site-packages).

The tutorial and manuals are in the *docs/html* folder. Many users have
commented that the Bank tutorials are valuable in getting users started on
building their own simple models. Even a few lines of Python and SimPy can
model significant real systems.

For more help, contact the `SimPy-Users mailing list
`_. SimPy users are pretty helpful.

Enjoy simulation programming in SimPy!

Autores de SimPy

SimPy was originally created by Klaus G. Müller and Tony Vignaux in 2002.

In 2008, Ontje Lünsdorf and Stefan Scherfke started to contribute to SimPy and
became active maintainers in 2011.

In 2011, Karen Turner came on board to generally help with all the bits and
pieces that may get forgotten :-)

We’d also like to thank:

- Johannes Koomer for a fix for Store._put.

Tarea

Del programa del Banco, escribir dudas en su blog.

Thursday, October 20, 2011

Tarea

Escribir en el blog un resumen del ejercicio del banco que viene en las notas de la Universidad de Venezuela. Lean las notas [liga]

Monday, October 17, 2011

bank.py

#!/usr/bin python
""" bank11: Simulate customers arriving
    at random, using a Source, requesting service
    from two counters each with their own queue
    random servicetime.
    Uses a Monitor object to record waiting times

"""
from __future__ import generators   #(not needed in Python 2.3+)
from SimPy.Simulation  import *
from random import Random

class Source(Process):
    """ Source generates customers randomly"""
    def __init__(self,seed=333):
        Process.__init__(self)
        self.SEED = seed

    def generate(self,number,interval):       
        rv = Random(self.SEED)
        for i in range(number):
            c = Customer(name = "Customer%02d"%(i,))
            activate(c,c.visit(timeInBank=12.0))
            t = rv.expovariate(1.0/interval)
            yield hold,self,t

def NoInSystem(R):
    """ The number of customers in the resource R
    in waitQ and active Q"""
    return (len(R.waitQ)+len(R.activeQ))

class Customer(Process):
    """ Customer arrives, is served and leaves """
    def __init__(self,name):
        Process.__init__(self)
        self.name = name
        
    def visit(self,timeInBank=0):       
        arrive=now()
        Qlength = [NoInSystem(counter[i]) for i in range(Nc)]
        for i in range(Nc):
            if Qlength[i] ==0 or Qlength[i]==min(Qlength): join =i ; break
        yield request,self,counter[join]
        wait=now()-arrive
        waitMonitor.observe(wait)                                 
        tib = counterRV.expovariate(1.0/timeInBank)
        yield hold,self,tib
        yield release,self,counter[join]

def model(counterseed=393939):
    global Nc,counter,counterRV,waitMonitor                      
    Nc = 2
    counter = [Resource(name="Clerk0"),Resource(name="Clerk1")]
    counterRV = Random(counterseed)
    waitMonitor = Monitor()                                      
    initialize()
    sourceseed = 99999
    source = Source(seed = sourceseed)
    activate(source,source.generate(50,10.0),0.0)                
    simulate(until=2000.0)                                       
    return (waitMonitor.count(),waitMonitor.mean())              

result = model(393939)                                           
print ("Average wait for %4d was %6.2f"% result )                 

Friday, October 7, 2011

Bank11: A simple example using monitor.

#!/usr/bin python
""" bank11: Simulate customers arriving
at random, using a Source, requesting service
from two counters each with their own queue
random servicetime.
Uses a Monitor object to record waiting times
"""
from __future__ import generators #(not needed in Python 2.3+)
from SimPy.Simulation import *
from random import Random
class Source(Process):
""" Source generates customers randomly"""
def __init__(self,seed=333):
Process.__init__(self)
self.SEED = seed
def generate(self,number,interval):
rv = Random(self.SEED)
for i in range(number):
c = Customer(name = "Customer%02d"%(i,))
activate(c,c.visit(timeInBank=12.0))
t = rv.expovariate(1.0/interval)
yield hold,self,t
def NoInSystem(R):
""" The number of customers in the resource R
in waitQ and active Q"""
return (len(R.waitQ)+len(R.activeQ))
class Customer(Process):
""" Customer arrives, is served and leaves """
def __init__(self,name):
Process.__init__(self)
self.name = name
def visit(self,timeInBank=0):
arrive=now()
Qlength = [NoInSystem(counter[i]) for i in range(Nc)]
for i in range(Nc):
if Qlength[i] ==0 or Qlength[i]==min(Qlength): join =i ; break
yield request,self,counter[join]
wait=now()-arrive
waitMonitor.observe(wait)
tib = counterRV.expovariate(1.0/timeInBank)
yield hold,self,tib
yield release,self,counter[join]
def model(counterseed=393939):
global Nc,counter,counterRV,waitMonitor
Nc = 2
counter = [Resource(name="Clerk0"),Resource(name="Clerk1")]
counterRV = Random(counterseed)
waitMonitor = Monitor()
initialize()
sourceseed = 99999
source = Source(seed = sourceseed)
activate(source,source.generate(50,10.0),0.0)
simulate(until=2000.0)
return (waitMonitor.count(),waitMonitor.mean())
result = model(393939)
print ("Average wait for %4d was %6.2f")% result
Tomado de SimPy

Tarea

Estudiar Función de Distribución

Wikipedia  

Thursday, October 6, 2011

Wednesday, October 5, 2011

programa en python (py) de cola

Python es un lenguaje de programación de alto nivel cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico, es fuertemente tipado y multiplataforma.

Listas
>>> lista = ["abc", 42, 3.1415]
>>> lista[0] # Acceder a un elemento por su índice
'abc'
>>> lista[-1] # Acceder a un elemento usando un índice negativo
3.1415
>>> lista.append(True) # Añadir un elemento al final de la lista
>>> lista
['abc', 42, 3.1415, True]
>>> del lista[3] # Borra un elemento de la lista usando un índice (en este caso: True)
>>> lista[0] = "xyz" # Re-asignar el valor del primer elemento de la lista
>>> lista[0:2] # Mostrar los elementos de la lista del índice "0" al "2" (sin incluir este último)
['xyz', 42]
>>> lista_anidada = [lista, [True, 42L]] # Es posible anidar listas
>>> lista_anidada
[['xyz', 42, 3.1415], [True, 42L]]
>>> lista_anidada[1][0] # Acceder a un elemento de una lista dentro de otra lista (del segundo elemento, mostrar el primer elemento)
True

Friday, September 30, 2011

Thursday, September 29, 2011

los números

uno=timba
dos=riammá
tres=riatsu
cuatro=riatco
cinco=vitsu
seis=majúú
siete=migiyúú
nueve=minagúhua
diez=gúhua

Thursday, September 22, 2011

Ataque de denegación de servicio

un ataque de denegación de servicio, también llamado ataque DoS (de las siglas en inglés Denial of Service), es un ataque a un sistema de computadoras o red que causa que un servicio o recurso sea inaccesible a los usuarios legítimos. Normalmente provoca la pérdida de la conectividad de la red por el consumo del ancho de banda de la red de la víctima o sobrecarga de los recursos computacionales del sistema de la víctima.

Una ampliación del ataque Dos es el llamado ataque distribuido de denegación de servicio, también llamado ataque DDoS (de las siglas en inglés Distributed Denial of Service) el cual lleva a cabo generando un gran flujo de información desde varios puntos de conexión.

Métodos de ataque
Un ataque de "Denegación de servicio" impide el uso legítimo de los usuarios al usar un servicio de red. El ataque se puede dar de muchas formas. Pero todas tienen algo en común: utilizan el protocolo TCP/IP para conseguir su propósito.
Un ataque DoS puede ser perpetrado de varias formas. Aunque básicamente consisten en :
  • Consumo de recursos computacionales, tales como ancho de banda, espacio de disco, o tiempo de procesador.
  • Alteración de información de configuración, tales como información de rutas de encaminamiento.
  • Alteración de información de estado, tales como interrupción de sesiones TCP (TCP reset).
  • Interrupción de componentes físicos de red.
  • Obstrucción de medios de comunicación entre  usuarios de un servicio y la víctima, de manera que ya no puedan comunicarse adecuadamente.

diagrama de un ataque DDoS
usando el software stacheldraht

Tomado de Wikipedia

Tuesday, September 20, 2011

Tarea

Leer de la página 166 a 168 del libro "Probabilidad y Estadística", de Samuel Fuenlabrada, McGraw Hill, 3a edición.

Explicar el Ataque de Denegación de Servicio. DoS

Calcular el área de un cuarto de círculo con el método de Monte Carlo. Escribir los resultados en su blog.

Monday, September 12, 2011

SIMULACION DE SISTEMA CON LINEA DE ESPERA

La SELECCIÓN del modelo para analizar una línea de espera, sea analítico o por
simulación, está determinado principalmente por las distribuciones de los tiempos de llegada y los tiempo de servicio. En la practica estas distribuciones se determinan observando las líneas de espera durante su operación y registrando los datos correspondientes.

CUANDO OBSERVAR?
Se observa el sistema cuando esta funcionando “normalmente”, esto cada una de sus partes esta maniobrando. Para un investigador “conservador” será correcto observar y recopilar los datos durante los “periodos de mayor actividad”, que corresponde a los momentos de congestión en los sistemas de colas; por lo que el sistema debe diseñarse para tomar en cuenta esas condiciones extremas:

Otra alternativa para observar, es simplemente cuando el sistema está en su “comportamiento o fase estable”: Tiempo de espera similar por cada cliente o producto Cualquier sistema de colas pasa por 2 fases básicas: La fase transitoria y la fase estable. En el curso, se resolverán sólo casos en condiciones estables.

CÓMO REGISTRAR LOS DATOS?
La recolección de datos relativos a llegadas y salidas se puede efectuar utilizando uno de dos métodos:
Método 1.- Medir el tiempo entre llegadas (o salidas) sucesivas para determinar los tiempos entre arribos (o servicio). Se busca analizar las distribuciones de los tiempos entre arribos o servicios

Método 2.- Contar el número de llegadas ( o salidas) durante una unidad de tiempo seleccionada (por ejemplo, una hora). Se busca analizar las distribuciones del número de llegadas o salidas.

Para la recolección de datos se pueden usar : Un cronómetro o un dispositivo de registro automático(cuando las llegadas ocurren a una tasa alta)

La información deberá resumirse en una forma adecuada para luego determinar la distribución asociada: Elaboración de un histograma de frecuencias, gráfica de la distribución empírica, prueba de bondad de ajuste. El tiempo está asociado a la distribución exponencial y el
Tiempo de Espera Número de Clientes

Colas de Espera Virtuales

Teoría de Colas

HISTOGRAMA

 es la grafica que mas se conoce y se utiliza para para datos cuantitativos, debido a que en todo los cursos de estadistica, se enseña su elaboracion. la construccion, parte de el supuesto, de que los datos han sido agrupados mediante una tabla de frecuencias.

Un histigrama esta formada por los siguientes componentes:
  • titulo
  • escala de valores para los datos (eje x)
  • escalas de frecuencia absoluta, frecuencia relativa o frecuencia porcentual (eje y).
  • barras de frecuencia. deben ser contiguas compartiendo los limites reales de las clases.
  • descripcion de cada clase o intervalo, al pie de la grafica, incluyendo la fuentes de los datos.
ventajas
  •  es ideal cuando tenemos un gran numero de datos cuantitativos.
  • muestra si existe simetria en la grafica
  • se puede observar, si los datos tienden a acumularse alrededor de un valor o esta muy separados.
  • permite observar, si existe valores aislados.
desventaja:
  • cuando la longitud de clase no es la adecuada, el histograma no aporta informacion confiable
como se elabora una grafica de histograma
1.-   la elaboracion de un histograma parte de una tabla de frecuencias.
2.-   se divide el eje de la absisas de acuerdo de los limites reale de clases. y
3.-   se traza un rectangular por cada clase o intervalo, con altura igual a la frecuencia seleccionada.

Tuesday, September 6, 2011

Programa de Trabajo


Objetivos generales
Contribuir a que los estudiantes sean capaces de :
--Modelar sistemas, utilizando las técnicas de simulación, así como de realizar la validación correspondiente.
--Realizar experimentaciones en el modelo que permitan evaluar políticas que mejoren el funcionamiento del sistema real.
--Decidir el tipo de de lenguaje más apropiado para desarrollar computacionalmente el modelo establecido
--Interpretar y sintetizar los resultados obtenidos con la utilización de aquellos paquetes computacionales de propósitos específicos que se utilicen en el proceso de simulación.

Contenido de la asignatura

Sistemas de conocimientos

Conceptos básicos de la simulación: sistema, transacción, entidad, actividad e imagen. Modelos continuos y discretos. Proceso de simulación de sistemas. Ventajas y desventajas de la simulación y de los distintos lenguajes de desarrollo relacionados con ella. Generación de series de números aleatorios con distribuciones dadas. Modelos con paquetes de propósito específico.

Sistema de habilidades

Identificar las características principales de un sistema a modelar. Seleccionar el tipo de lenguaje más adecuado para desarrollar el modelo. Validar y diseñar experimentos en un modelo de simulación. Analizar la sensibilidad del modelo ante modificaciones en las  componentes principales del sistema.

Literatura docente

  1. Fuentes Zenón, A. (1990), El enfoque de sistemas en la solución de problemas. Cuadernos de planeación, DEPFI, UNAM
  2. Gordon, G. (1988), Simulación de Sistemas. Editorial Diana.
  3. Payne, J.A. (1988), Introduction to Simulation: Programming Techniques and Methods of Analysis

Ejercicio

html no es mas que una aplicacion del sgml
Conjunto Potencia

Friday, September 2, 2011

Esta es la Primera Clase

Tarea: Estudia HTML, busca un tutorial.

Tarea: Empezar un blog en blogger.