Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-0202 Principios de Informática
Lunes 06 de diciembre de 2021, 9 a.m. a 12 m.d.

Enunciado del problema

La disminución de las poblaciones de abejas es un problema mundial que pone en peligro la existencia de otras especies, en especial plantas y al ser humano incluido. Se sabe que la destrucción de su hábitad, el uso de pesticidas, el ataque de depredadores, y el cambio climático afectan, pero aún no se sabe a ciencia cierta la causa de esta problemática. Las asociaciones de apicultores profesionales han hecho un urgente llamado a recoger datos que ayuden a comprender qué está ocurriendo con las abejas en el mundo [1].

Suponga que usted forma parte de un grupo de investigadores motivados por comprender la problemática de las abejas. Hay varios apiarios o colmenares participantes en el estudio. Un apiario consta de varias colmenas. En la abertura (conocida como piquera) de cada colmena se ha instalado un sensor que cuenta cuántas abejas ingresan o salen de ella. Estos números son útiles para saber en qué medida las poblaciones de abejas disminuyen –o lo que se desearía, que crezcan– en el tiempo.

Por el tamaño del cuerpo, los sensores son capaces de distinguir entre abejas y otros insectos. Por la dirección del movimiento, el sensor distingue si éstos ingresan o salen de la colmena. La información recolectada durante un día por los sensores es enviada a una computadora central que la guarda en archivos de texto. El formato de estos archivos es de valores separados por comas con extensión .csv. El siguiente es un ejemplo:

APIARIO,COLMENA,FECHA,SALIDA,ENTRADA,ATAQUES
505,1,2021-12-04,4000,3500,0
505,1,2021-12-05,3600,3400,1
277,2,2021-12-04,7478,7325,3
505,3,2021-12-06,18003,18092,17
277,2,2021-12-05,8171,8171,4
505,1,2021-12-06,3450,3200,0

Como es habitual, la primera línea del archivo contiene los encabezados de columna, lo que facilita su manejo en hojas de cálculo. Las restantes líneas del archivo corresponden cada una a un registro realizado en una colmena en un día particular y se compone de los siguientes datos:

# Campo Descripción

1

APIARIO

Número identificador del apiario (colmenar o finca) donde se encuentra la colmena

2

COLMENA

Número identificador de la colmena

3

FECHA

Fecha en formato AAAA-MM-DD en que se recibió el registro

4

SALIDA

Cantidad de abejas que salieron en la colmena durante el día

5

ENTRADA

Cantidad de abejas que entraron en la colmena durante el día

6

ATAQUES

Cantidad de ataques de otros insectos a la colmena durante el día

Los valores de un registro se separan uno del otro por un carácter de coma. Las columnas se presentan siempre en el orden mostrado en la tabla. Las filas son escritas en el orden que la máquina central las recibe, y por tanto, pueden entremezclarse las filas de diferentes colmenas. Sin embargo, los datos de una colmena siempre aparecen en orden creciente de fecha.

Los investigadores desean un programa en Python (versión 3) que pueda responder algunas consultas que faciliten en el monitoreo de las poblaciones de abejas. El programa debe tener un buen diseño que permita a futuro agregar más tipos de consultas como las siguientes:

  1. Estimar la cantidad de abejas en todas las colmenas

  2. Advertir cuáles colmenas presentan la mayor tasa de pérdida de abejas

  3. Indicar cuáles colmenas son más atacadas por otros insectos

Para poder calcular la cantidad de abejas en una colmena, considere los siguientes supuestos y simplificaciones:

  1. Las colmenas están identificadas por números secuenciales que inician en 1.

  2. Los apicultores siempre crean todas las colmenas con una colonia inicial de 10000 abejas. Normalmente las colmenas no superan las 100 mil abejas.

  3. Las abejas que salen de la colmena a conseguir polen o néctar se llaman abejas pecoreadoras. Salen al amanecer y detienen su labor de búsqueda al oscurecer. Suponga por simplicidad que estas abejas sólo salen una vez de la colmena al día y lo hacen todos los días.

  4. Suponga por sencillez que la cantidad de abejas pecoreadoras son un 40% del total de abejas en la colmena. Es decir, que si en una colmena hay 10000 abejas, 4000 de ellas saldrán durante el día, y las otras 6000 se mantendrán dentro.

  5. Algunas abejas pecoreadoras no regresan a la colmena, por diversas razones, como depredadores, pesticidas, extravío, etc.

  6. Las abejas se reproducen dentro de la colmena lo que se puede reflejar en un incremento de las abejas que salen a diario de la colmena. Pero si la cantidad de abejas que no regresan a la colmena supera la tasa de reproducción, la población disminuye y se refleja en la cantidad de abejas que salen al día siguiente.

  7. En un día pueden ingresar más abejas de las que salen, por ejemplo, cuando son aceptadas en una nueva colonia.

Con las simplificaciones anteriores, la cantidad de abejas de una colmena se puede estimar a partir de la cantidad de abejas que salen en un día con la relación:

total_abejas = 2.5 * abejas_que_salen

Desarrollo de la solución

Desarrolle un programa interactivo que permita a los investigadores obtener respuesta a las consultas frecuentes. El programa muestra repetitivamente un menú con las consultas frecuentes y una opción para terminar la sesión. El siguiente podría ser un ejemplo de ejecución donde los valores en negritas representan entradas del usuario.

Ingrese nombre de archivo: abeja
No existe abeja.csv
Ingrese nombre de archivo: abejas

MENU [1] Cantidad de abejas  [2] Pérdida promedio  [3] Ataques  [0] Salir
Ingrese opción: 1
Colmena 1: 8625
Colmena 2: 20427.5
Colmena 3: 45007.5

MENU [1] Cantidad de abejas  [2] Pérdida promedio  [3] Ataques  [0] Salir
Ingrese opción: 2
Colmena 1: 316.6666667
Colmena 2: 76.5
Colmena 3: -89

MENU [1] Cantidad de abejas  [2] Pérdida promedio  [3] Ataques  [0] Salir
Ingrese opción: 3
Colmena 1: 1
Colmena 2: 7
Colmena 3: 17

MENU [1] Cantidad de abejas  [2] Pérdida promedio  [3] Ataques  [0] Salir
Ingrese opción: 0
Gracias por usar el sistema.

Cuando el programa inicia, solicita el nombre del archivo de datos. El usuario lo ingresa y por conveniencia podría omitir la extensión .csv. En tal caso, el programa debe agregar la extensión automáticamente antes de abrir el archivo. Suponga que el archivo se encuentra en la misma carpeta de donde se ejecuta el programa de Python. Si no existe un archivo con el nombre ingresado por el usuario, se debe indicar un mensaje de error y permitir al usuario volverlo a escribir. El programa presentará el menú sólo hasta que se haya provisto un archivo correcto con datos de abejas.

Cuando el usuario ingresa la opción de menú 1, el sistema estima la cantidad de abejas en cada colmena y las reporta en el orden del identificador. La cantidad de abejas se calcula con el último dato de salida registrado en el archivo para la colmena.

Cuando el usuario ingresa la opción de menú 2, el programa imprime el promedio de pérdida de abejas de cada colmena. La pérdida de abejas en un día es la diferencia entre la cantidad de abejas que salen al amanecer y las que regresan al ocaso. El promedio de pérdida corresponde a promediar las pérdidas ocurridas todos los días registrados para una colmena en particular.

Cuando el usuario ingresa la opción de menú 3, el sistema presenta la cantidad de ataques que ha recibido cada colmena. Esta cantidad se calcula simplemente como la suma de todos los ataques de otros animales que se han registrado en la colmena.

Si el usuario activa la opción 0, el programa termina su ejecución con un mensaje de agradecimiento.

Evaluación

Su solución debe seguir las buenas prácticas de programación vistas en el curso y tener un buen diseño orientado a objetos que facilite el agregar nuevas consultas en el futuro. Su solución debe constar de al menos dos clases, una con un rol de control y otra con un rol de modelo de colmena.

Clase de control

Implemente una clase para controlar el sistema de consultas con las siguientes características.

  1. [15%] La clase tiene un nombre apropiado. De la clase se crea una única instancia en una función principal del programa. La clase tiene un método que se encargará de correr el sistema de consultas. En este enunciado se le hará referencia como método 1 pero usted debe darle un nombre significativo a éste y todos los métodos. El método 1 se encargará de invocar otros métodos que se listan en los puntos siguientes, y reaccionar apropiadamente a los valores que éstos retornan.

  2. [20%] En un método 2 solicite al usuario el nombre del archivo de abejas, lo abre y carga las colmenas a la memoria de la máquina para acelerar el tiempo de respuesta de las consultas posteriores del usuario. Las colmenas deben guardarse en una colección de objetos de tipo Colmena. La clase Colmena proveerá funcionalidad para ayudar en este cargado. La colección de colmenas debe ser un atributo de la clase de control. Recuerde que debe permitir al usuario reingresar el nombre del archivo si éste no existe o no se puede abrir. Use manejo de excepciones para este fin.

  3. [10%] En un método 3 presentar reiteradamente el menú al usuario, esperar en cada iteración una respuesta, e invocar los métodos respectivos para atender la respuesta del usuario, hasta que éste decida terminar la ejecución del programa.

  4. [15%] Implementar un método 4 que recorra todas las colmenas y para cada una de ellas imprima la estimación de la cantidad de abejas. Implementar un método 5 que para cada colmena imprime el total de ataques. Implementar un método método 6 que imprima la pérdida promedio de abejas de cada colmena. Estos tres métodos necesitarán invocar métodos de la clase Colmena.

Clase modelo Colmena

Implemente una clase Colmena que se encarga de las siguientes responsabilidades:

  1. [5%] Sus atributos son los 6 campos que tiene una línea del archivo. Puede agregar otros atributos que le ayuden a responder las consultas de los investigadores.

  2. [15%] Cargar del archivo o de una cadena que proviene del archivo, un registro que pertenece a esta colmena con un método exclusivo para este fin. Note que una colmena puede tener muchos registros en el archivo. Este método puede cargar valores en los atributos que le faciliten luego responder a las siguientes consultas.

  3. [5%] Con un método estimar y retornar la cantidad de abejas en la colmena a partir del último registro cargado.

  4. [10%] En un método retornar el promedio de pérdida de abejas en la colmena.

  5. [5%] En un método retornar la cantidad de ataques que ha recibido la colmena.

Aspectos generales

En todos los rubros se evaluará si su código utiliza consistentemente una convención de nomenclatura, usa nombres significativos, aplica buenas prácticas de programación. La interacción con el usuario debe ser clara, completa, e indicar unidades de medida cuando apliquen.

Para sus pruebas puede usar estos archivos de colmenas.