Proyecto Final

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Proyecto Final:

El ejercicio completo y correcto tiene un valor de 2 puntos sobre la calificación final de la materia.
El valor para cada apartado se especifica entre paréntesis en la siguiente descripción. Se debe
entregar el archivo con extensión ".ipynb" así como el enlace URL hacia el cuaderno de Google
Colab que tenga únicamente permisos de lectura para quién sea que tenga el enlace.

Descripción del Ejercicio

Crear un programa en Python que utilice la librería de ipywidgets para crear una interfaz gráfica
interactiva para el usuario de modo que tenga la siguiente funcionalidad:

1. La ventana inicial debe ser un menú que permita al usuario elegir entre los siguientes
casos de uso:
 Iniciar nueva simulación. (Vale 1.5 puntos en total, explicados a fondo más
adelante)
 Ver resultados de la última simulación (el cual deberá estar deshabilitado la
primera vez que se acceda al menú principal o deberá detectar cuando no se haya
aún ejecutado una simulación) (0.25 puntos con la condición de que se debe
entregar la simulación funcionando)
 Exportar resultados de la última simulación (de igual forma no debería ser
utilizable esta opción si aún no se ha realizado alguna simulación) (0.25 puntos
con la condición de que se debe entregar la simulación funcionando)
 Terminar la ejecución del programa.
2. La funcionalidad de la opción "a)" será:
 Se deberán presentar los widgets necesarios para que el usuario introduzca los
parámetros iniciales de la simulación. Los cuales deberán ser al menos los
siguientes: (0.25 puntos de los 1.5 posibles en este inciso)
i. Durante cuántos minutos y segundos se considerará el banco como
"abierto": mínimo 1 minuto y máximo 10 minutos. Donde cada iteración
de la simulación debería corresponder a (más no necesariamente durar) 1
segundo de simulación.
ii. Un booleano que permita seleccionar si la simulación se llevará a cabo en
tiempo real o no, es decir, suponiendo que el usuario especificó 2 minutos
de simulación, entonces la simulación tendrá 120 iteraciones. Esto quiere
decir que si se lleva a cabo la simulación en tiempo real, estas 120
iteraciones deberían tardar 120 segundos en realizarse (se pueden auxiliar
de la función 'sleep()' que se encuentra dentro de la librería 'time' para
realizar este retraso de tiempo), de lo contrario, si no se selecciona
realizar la simulación en tiempo real, entonces no hay necesidad de añadir
un retraso de tiempo entre cada una de las 120 iteraciones y se debería
terminar a la velocidad normal de procesamiento de Python.
iii. La cantidad de cajeros que atenderán el banco.
iv. La capacidad máxima de gente en la fila/cola del banco.
v. Los límites inferiores y superiores para la cantidad de gente que se
agregará a la fila aleatoriamente por minuto (número entero de valor al
menos de 1 y cuyo valor superior no puede ser ni menor ni igual al valor
inferior).
vi. Los límites inferiores y superiores para la cantidad de dinero aleatorio que
la gente interaccionará con el banco (debe ser un número con punto
decimal distinto a cero y con 2 cifras decimales. Si el número es positivo,
significará que el usuario depositará esa cantidad de dinero al banco, si el
número es negativo significa que el usuario retirará esa cantidad de dinero
del banco).
vii. Los límites inferiores y superiores para la cantidad de tiempo aleatorio
que un cajero tardará en realizar el depósito o retiro de dinero con el
cliente
 Una vez que se hayan proporcionado al menos los parámetros anteriores (más
aparte los que consideres necesarios para la simulación) se deberán utilizar los
widgets que consideres pertinentes para representar gráficamente tanto la cola
del banco, como a cada una de las cajas del banco y de sus clientes. Se
recomienda el uso de "IntSliders" para la cola del banco (cuyo valor numérico y
posición del slider representaría la cantidad de clientes en la fila) y de "Checkbox"
para representar cada uno de los cajeros (en el cual se puede alterar el texto para
representar el estado actual de la caja). La anterior forma de representación es
solo una sugerencia, ya que la eres libre de utilizar los widgets que consideres más
adecuados o visualmente más atractivos para la simulación. (0.25 puntos de los
1.5 posibles en este inciso)
 Se deberá simular el funcionamiento del banco durante el tiempo especificado
(1.0 puntos de los 1.5 posibles en este inciso si se cumplen al menos con todas
las características de este inciso). Para ello, Se deberán crear al menos las
siguientes clases/objetos basándose en los parámetros proporcionados por el
usuario:
i. Clase cuentahabiente (o cliente): la cual deberá de tener al menos los
atributos de clase que representen a las siguientes características:
1. Identificador (puede ser un número de folio, un número seriado o
una cadena de texto o nombre personalizado de modo que sea
único para cada cliente generado
2. Tipo de transacción: Depósito o retiro
3. Cantidad de dinero involucrado en la transacción.
4. Cualquier otro atributo de clase que considere pertinente.
ii. Clase/objeto coladebanco: la cual contendrá objetos de la clase
cuentahabiente (o cliente). Esta clase/objeto deberá de comportarse
como una estructura de "Queue" o cola, es decir, que el primer cliente
que se inserte/agregue al final de la cola, será el primero en salir de ella. Si
varios cajeros están disponibles para que un cliente salga de la fila hacia el
cajero, se puede elegir un criterio arbitrario de selección del cajero a
criterio del programador. La distribución en la que se agregan los clientes
a la cola del banco será lo más uniformemente posible. Es decir que:
suponiendo que de acuerdo a los parámetros proporcionados por el
usuario se deben agregar entre 5 y 10 personas al azar por minuto a la
cola del banco, entonces, al inicio de cada minuto de simulación se debe
determinar este valor y asignarlo a un atributo de clase de la cola.
Supongamos que el número al azar fue 6. Esto quiere decir que habrá 6
clientes por minuto en la simulación, y para que sea lo más
uniformemente distribuido posible, entonces se agregará 1 nuevo cliente
a la fila cada 10 segundos. Estos 10 segundos deberán ser guardados
como un atributo de clase en el objeto que representa la cola del banco.
iii. Clase cajero: la cual recibirá 1 cliente a la vez. Su banco deberá al menos
tener 1 cajero. El cajero deberá tener atributos que al menos representen
las siguientes características:
1. Cantidad de clientes atendidos hasta el momento
2. Estado actual de disponibilidad (ocupado o vacante)
3. Cantidad de dinero actual transferido hasta el momento (puede
ser positivo o negativo, dependiendo el tipo de transacciones que
ha realizado)
4. Cantidad de depósitos realizados hasta el momento
5. Cantidad de retiros realizados hasta el momento
6. Cantidad de tiempo que en total se tardará en atender al cliente
actual
7. Cantidad de tiempo invertido hasta el momento en atender al
cliente actual.
8. Cantidad de tiempo que falta por invertir para terminar de
atender al cliente actual
9. Cualquier otro atributo que considere pertinente.
iv. Cualquier otra clase u objeto que considere pertinente.
3. La funcionalidad de la opción "b)" será:
 Mostrar las estadísticas relevantes en consola o widget. Deberán reportarse al
menos 10 rubros, incluyendo los siguientes:
i. El número de cuentahabientes que se generaron hasta el fin de la
simulación: en total, en promedio por minuto así como el mínimo y el
máximo de clientes que se registraron en todos los minutos
ii. El número de transacciones que realizaron (tanto depósitos, retiros y en
total).
iii. La cantidad de dinero que se recibió en depósitos y en retiros.
iv. El balance de dinero que entro o salió del banco al final de la simulación.
v. La cantidad promedio de dinero que los clientes depositaron y que los
clientes retiraron
vi. El número máximo de cajeros en estado no disponible durante la
simulación así como la cantidad de cajeros no disponibles promedio por
minuto.
vii. El tamaño máximo de clientes que tuvo la cola de clientes así como el
tamaño promedio de la cola
viii. El tiempo de espera promedio, mínimo y máximo en la cola del banco
ix. El tiempo promedio, mínimo y máximo de atención en caja para realizar
una transacción por parte del cajero
x. Algún otro dato o estadística que usted considere relevante reportar.
4. La funcionalidad de la opción "c)" será:
 Generar el reporte de la opción "b)" sin mostrarla en consola pero guardándolo en
un archivo de texto dentro del entorno de Google Colab (preferentemente en
formato '.txt' o '.csv'). Preferentemente en una carpeta llamada "Reportes" dentro
de la carpeta de default, es decir, en la ruta "/content/Reportes/"
 Una vez generado el archivo con el reporte, deberá aparecer un botón que al
presionarse, permita automáticamente descargar el archivo hacia la computadora.
Para esto pueden auxiliarse del método "download()" que se encuentra en el
objeto "files" que se localiza dentro de la librería "google.colab"

Consideraciones adicionales:

Se considerará el banco como cerrado una vez que se cumplan los minutos y segundos
proporcionados por el usuario en los parámetros iniciales y por lo tanto no se generarán más
cuentahabientes para la cola de banco una vez que pase este tiempo.

En las estadísticas finales también se debe mencionar cuantos minutos adicionales se requirieron
para terminar de atender el resto de cuentahabientes en la coladebanco.

La simulación no terminará hasta que todos los clientes en la cola del banco hayan sido atendidos
en su totalidad (tal cual como en un banco real)

También podría gustarte