                                PRedatOr2

Consideremos un rea geogrfica donde habitan N especies animales distintas,
identificadas con los valores 1..N, de las que C son especies carnvoras
(tambin nos referiremos a ellas como "depredadores") que se alimentan de otros
animales y N-C son especies herbvoras. N y C son enteros mayores que 0 y C<=N,
pero los identificadores de las especies carnvoras no necesariamente sern los
valores 1..C. 

El rea geogrfica a estudiar se divide exactamente en R regiones,
identificadas con los valores 1..R, donde R es un entero mayor que cero. Las
regiones pueden estar conectadas entre s a travs de corredores ecolgicos.
Existe una regin especial, la gran planicie central, que puede estar conectada
directamente con un mximo de dos regiones.  Estas, a la vez, podrn estar
conectadas directamente con otras dos como mximo en direccin opuesta a la
gran planicie central (es decir, hacia la periferia), y as sucesivamente,
formando una estructura arbrea, por lo que tambin nos referiremos a las
regiones como "nodos" y no podr haber circularidad en las conexiones.  Cuando
un nodo slo tenga un sucesor directo en direccin a la periferia, no
distinguiremos entre "izquierda" y "derecha", sino que asumiremos por
definicin que siempre es un sucesor "por la izquierda".

Ejemplo de una estructura de 10 regiones: los nmeros indican los
identificadores de las regiones y las lneas indican las conexiones entre
ellas.  El nodo 3 es la gran planicie central y los nodos 1, 2, 4, 6 y 7
representan regiones perifricas.
                         
                      
                           3
                       /       \
                     9           10
                   /   \       /                
                  5     4     8
                 / \         / \
                1   2       6   7


Nos interesa observar evolucin de la poblacin (o nmero de individuos) de
cada especie en cada regin. Los cambios que se producirn en estas poblaciones
sern debidos a tres causas: muertes en la lucha por la supervivencia (comer y
ser comido), nacimientos y migraciones. Para simplificar, no consideraremos
muertes por enfermedades o accidentes; los animales herbvoros slo morirn al
ser devorados por depredadores, mientras que los depredadores podrn morir de
hambre (si no se alimentan suficientemente) o al ser devorados por otros
depredadores superiores.

Las luchas por la supervivencia se realizarn de manera independiente en cada
regin.  Es decir, a efectos de una lucha en un momento determinado, cada
regin funciona como un sistema ecolgico cerrado. Los nacimientos estarn
localizados en regiones que se determinarn en cada momento. Sin embargo, como
describimos ms adelante, las migraciones permitirn mover individuos de una
especie de unas regiones a otras en dos direcciones (hacia la periferia o hacia
la planicie central) siguiendo unas determinadas estrategias de ocupacin.


Caractersticas de las especies
===============================

Cada especie se caracteriza por una serie de atributos. El primero de ellos es
el nmero de especies de las que se puede alimentar, a las que nos referiremos
como "presas". Este valor (llammosle npres) puede variar mucho de una especie
a otra y, en general, ser mucho ms pequeo que el nmero total de especies N.
De cada especie tambin se conoce un conjunto de tamao npres, formado por los
identificadores de especie de sus presas, que representa las preferencias entre
ellas (de mayor a menor). Una especie herbvora se caracteriza por npres=0 y un
conjunto vaco de presas. Recordad que los depredadores tambin pueden ser
presas de otros depredadores, pero ninguna especie carnvora puede ser presa de
s misma (es decir, no existe el canibalismo!). Sobre la prioridad de caza
entre las diversas especies de depredadores hablaremos ms adelante al
describir en detalle la lucha por la supervivencia.

Otra simplificacin ser considerar que los individuos de una especie tendrn
un determinado valor alimenticio (el mismo para todos, pero quizs distinto de
los de las otras especies), medido en una unidad arbitraria (que podra
representar masa corporal o caloras, por ejemplo), incluso para los individuos
recin introducidos en una regin por nacimiento.  Las especies carnvoras
tambin se caracterizan por un mnimo de unidades alimenticias que deben comer
por unidad de tiempo. Para nosotros, la unidad de tiempo es lo que durar un
proceso de lucha en una regin. Si un individuo no consigue comer las
suficientes presas para llegar al mnimo de unidades alimenticias requerido
para su especie, morir de hambre al final de dicho periodo. 


Lucha por la supervivencia en una regin
========================================

Las especies carnvoras cazan y comen siguiendo un estricto orden de prioridad
entre ellas, que ser el mismo para todas las regiones. Como ejemplo
ilustrativo, primero comen los leones, despus las hienas (cuando han acabado
todos los leones) y finalmente los buitres (cuando han acabado todos los leones
y todas las hienas).

Dentro de cada especie tambin existir una jerarqua estricta entre los
individuos de una misma regin, de forma que hasta que no acaba de comer el
primero (por ejemplo, el jefe de la manada) no empieza el segundo, y as
sucesivamente hasta el ltimo. Sin embargo, como no deseamos hacer un
seguimiento de cada individuo, sino nicamente del nmero de individuos de cada
especie en cada regin, no guardaremos datos identificativos de cada individuo
ni consecuentemente del orden entre ellos. Podremos simular los efectos
numricos de este orden secuencial entre los individuos de una especie en una
regin sin necesidad de una identificacin explcita de dichos individuos.

Finalmente, cada individuo carnvoro sigue el orden de preferencia entre sus
presas propio de su especie. Por ejemplo, cada len intentar alimentase
prioritariamente de cebras; si no hay cebras, intentar cazar us; si no hay
us, liebres, etc.

Como se ha mencionado antes, si un individuo llega a consumir su mnimo de
unidades alimenticias, deja de cazar y pasa el turno al siguiente individuo de
su especie o al primero de la siguiente especie carnvora en prioridad, si se
trata del ltimo de su especie. Como simplificacin adicional, supondremos que
si la presa que le permite alcanzar su mnimo tiene unidades alimenticias
sobrantes, stas no se aprovechan por otros depredadores, ni de su misma
especie ni de las dems.


Migraciones
===========

Las migraciones sern de dos clases: a) hacia la periferia y b) hacia la
planicie central. En cualquiera de ellas se especificar la regin de origen de
la migracin y el nmero h de individuos de una nica especie que salen de
ella, adems del identificador de dicha especie. Tambin se especificar un
nmero entero g, mayor que 0 y estrictamente menor que h, que ser un factor
determinante del proceso migratorio cuyo papel describimos ms adelante.

En primer lugar, ninguno de los h individuos que comienzan la migracin se
queda en la regin de origen, independientemente del nmero de regiones
conectadas con ella y del tipo de migracin de que se trate. Las regiones
perifricas no pueden ser orgenes de migraciones de clase a y la planicie
central no puede ser origen de migraciones de clase b.

Establecido lo anterior, describamos las normas que rigen las migraciones.
Ntese que no entramos a analizar las causas por las que todos o parte de los
individuos de una especie que est migrando se queda en una regin o pasa de
largo por ella (por ejemplo, si van a encontrar suficiente comida). Dicho
anlisis se sale del mbito de este proyecto.

El primer movimiento de las migraciones no depende del factor g: si se trata de
una migracin de tipo a, consideramos las regiones conectadas directamente a
la regin de origen, en direccin a la periferia, que pueden ser una o dos. Si
solo hay una, entonces los k individuos pasan a la regin sucesora; si hay dos,
entonces (k/2) individuos pasan a la regin sucesora "por la derecha" y (k-k/2)
pasan a la regin sucesora "por la izquierda". Si se trata de una migracin de
tipo b, los k individuos abandonan la regin de origen y pasan a la siguiente
regin en direccin a la planicie central.
 
Supongamos ahora que r es una regin distinta de la de origen y por ella pasan
k individuos de una migracin de factor g:

* En las migraciones tipo a, si k>=g y r no es una regin perifrica,
consideramos las regiones conectadas directamente a r en direccin a la
periferia, que pueden ser una o dos. Si solo hay una, entonces (k/2) individuos
se quedan en r y (k-k/2) migran a la siguiente.  Si hay dos, entonces (k/2)
individuos migran a la regin sucesora "por la derecha" y (k-k/2) migran a la
regin sucesora "por la izquierda" (es decir, ninguno de los k individuos se
queda en r).  Si r es una regin perifrica o si k<g, se quedan en ella los k
individuos.

* En las migraciones tipo b, si k>=g y r no es la planicie central, (k/2)
individuos se quedan en r y (k-k/2) migran a la siguiente regin en direccin a
la planicie central.  Si r es la planicie central o k<g, se quedan en ella los
k individuos.


Nacimientos / repoblaciones
===========================

En los momentos en que no se estn realizando ni luchas ni migraciones,
podremos incrementar en un valor dado el nmero de individuos de una especie en
una regin, simulando los nacimientos o las repoblaciones correspondientes de
nuevos individuos.


Actualizacin de preferencias de las especies carnvoras
========================================================

En los momentos en que no se estn realizando luchas (e independientemente de
las migraciones y nacimientos) ser posible actualizar las preferencias de una
especie carnvora, indicando cuntas y cules son sus presas en el orden de
preferencia en el que se introduzcan (esta informacin substituir a la
anterior para dicha especie).


Consultas de poblacin
======================

Consideraremos solamente una operacin de consulta de este tipo, en la que se
listar para cada regin el nmero de individuos que contiene de cada especie.
El orden en que aparecern las regiones ser por orden creciente de
identificador y, dada una regin, el nmero de individuos de cada especie
tambin se escribir por orden creciente de identificador de especie.


SE PIDE:
========

Disear un programa modular razonablemente eficiente que permita modelar el
ecosistema descrito, simulando las altas, bajas y modificaciones en las
poblaciones de las diferentes especies mediante las operaciones
correspondientes de nacimientos, luchas y migraciones. Tambin ha de permitir
modificar las preferencias de los depredadores y consultar las poblaciones de
cada especie.

En primer lugar, debe leer el nmero total N de especies, el nmero C de
especies carnvoras, y las caractersticas de cada especie. Luego leer el
orden de prioridad entre las C especies carnvoras. Seguidamente se leer el
nmero de regiones R, su estructura de conexin y la informacin de cada
regin, que consistir en el nmero de individuos de cada especie que viven
inicialmente en ellas.  Despus tendr que ir procesando las diversas tareas
que se le pidan.  Estas podrn ser las siguientes:

1) Lanzar la lucha entre especies en todas las regiones, lo que posiblemente
reducir el nmero de individuos en las regiones, ya sea porque son cazados y
devorados o porque mueren de hambre.

2) Realizar una migracin. Dado un tipo de migracin (tomemos el valor 1 para
indicar la migracin hacia la periferia, y el valor 2 para la planicie
central), un identificador de regin de origen r, un identificador de especie
e, un nmero de individuos que migran h y un factor g, simular la migracin,
modificando adecuadamente el nmero de individuos de la especie e en las
regiones implicadas.

3) Incrementar en m individuos la poblacin de una especie e en una regin r,
dado un valor entero m mayor que 0, un identificador e entre 1 y N y un
identificador r entre 1 y R.

4) Dado un identificador de especie carnvora e entre 1 y N, actualizar sus
preferencias de presas, leyendo el nmero y tipos de stas del canal de
entrada, por orden de preferencia de mayor a menor.

5) Listar las poblaciones de todas las especies en todas las regiones, por
orden creciente de identificador de regin y por orden creciente de
identificador de especie para cada regin.


La forma de comunicarnos con el programa para que realice dichas tareas ser
parecida a la del caso de estudio "Cubeta" que aparece en la sesin 8 de
laboratorio.  Podis disear un esquema provisional que ya refinaris cuando
conozcis el juego de pruebas pblico.

En das sucesivos se completarn los detalles que se hayan podido pasar por
alto en este enunciado y se publicarn las aclaraciones oportunas.

La sintaxis *exacta* de los datos y resultados, acompaada del juego de pruebas
pblico, se conocer tres semanas antes del da de entrega de la prctica.
Hasta entonces no podris implementar de forma definitiva las operaciones de
lectura y escritura necesarias para los tipos que utilicis, aunque s podris
especificarlas.
