Crecimiento exponencial de una granja de vacas con restricciones en Minecraft

Esta pregunta es distinta del crecimiento exponencial de las poblaciones de vacas en Minecraft en el sentido de que en esa publicación falta una restricción importante presente en Minecraft. Aquí están las siguientes restricciones:

  • empezamos con 2 vacas adultas y 0 vacas bebé.
  • Cualquier par dado de vacas adultas solo puede cruzarse para formar 1 vaca bebe cada 5 minutos. ( no incluido en la otra publicación )
  • Una vaca bebé se convierte en adulta después de 20 minutos.

Mi primer intento (fallido) de resolver esto fue inicializar las siguientes funciones A ( 0 ) = 2 , B ( 0 ) = 0 , dónde A y B son funciones de t (tiempo, en minutos) que representa el número de vacas adultas y crías respectivamente.

Ingenuamente, representé esto a través de un sistema de dos ecuaciones diferenciales lineales dadas las condiciones iniciales anteriores:

d A d t = B 20

d B d t = A 5

Donde mi proceso de pensamiento fue que cada 20 minutos habría una adición de B adultos, y cada 5 minutos habría una adición de A 2 vacas bebé. Mediante el uso de álgebra lineal, se puede demostrar que las ecuaciones de A y B son como sigue:

A ( t ) = mi t 10 2 + mi t 10 2
B ( t ) = 1 2 mi t 10 2 ( mi t 5 2 1 )
Donde el número total de vacas, llame a esto C ( t ) es una forma redondeada de A ( t ) + B ( t ) .

El problema con esto: dado que en un momento dado, la 'edad' de los bebés dentro de la piscina será diferente (no uniforme), la formación de adultos será escalonada. Este es el punto que estoy luchando para continuar. He tratado de pensar en B como formando subsecuencias cada 5 minutos, pero no estoy muy seguro de cómo implementar esto de manera significativa.

Entonces, ¿cómo se puede generar esta fórmula?

Editar : pensándolo bien, esto podría reducirse a la publicación vinculada al principio. Aunque no estoy muy seguro.

Edición 2 : como se señaló en los comentarios de Daniel Mathias, esta pregunta es distinta de la publicación vinculada.

La publicación vinculada y la entrada de OEIS asumen que todos los descendientes se convierten en adultos entre cruces. Eso significa al menos 20 minutos entre inseminaciones, por lo que esta pregunta es diferente.
@DanielMathias Ah, de hecho, tienes razón. Gracias, editaré la publicación.

Respuestas (2)

Está ignorando la granularidad de los intervalos de cinco minutos. Una forma de incorporar eso es definir A ( norte ) , B ( norte ) , C ( norte ) , D ( norte ) , mi ( norte ) como el número de vacas de edad 0 , 5 , 10 , 15 , 20 minutos a la vez 5 norte minutos. La condición inicial es todo. 0 excepto mi ( 0 ) = 2 a menos que nazca la primera vaca en el minuto 0 . En ese caso A ( 0 ) = 1 . Tienes un conjunto de recurrencias.

A ( norte + 1 ) = 1 2 mi ( norte ) B ( norte + 1 ) = A ( norte ) , C ( norte + 1 ) = B ( norte ) , D ( norte + 1 ) = C ( norte ) mi ( norte + 1 ) = mi ( norte ) + D ( norte )
Puede escribir la población actual como un vector y las recurrencias como una matriz, encontrar sus valores propios y encontrar la tasa de crecimiento a partir del valor propio más grande.

Hablando con pedantería, A ( norte + 1 ) debería ser realmente 1 2 mi ( norte ) (una distinción que se abordó en la pregunta vinculada similar). Sin embargo, esto no debería afectar mucho el crecimiento de la secuencia.
Así que he construido un vector T ( norte ) con 5 filas, que incluyen A ( norte ) , B ( norte ) , . . . , mi ( norte ) . Escribí todo en términos de A norte luego construyó algo de la forma: T ( norte + 1 ) = A T ( norte ) dónde A es una matriz de 5x5 (que no debe confundirse con A ( norte ) ) con entradas numéricas. No estoy muy seguro de cómo progresar desde aquí (puedo encontrar los valores propios). Soy bastante nuevo en este tipo de problemas de recurrencia.
Ese es el enfoque correcto. Su solución general (asumiendo que no tiene valores propios repetidos) será una suma de C i λ i norte para λ i los valores propios y C i vectores determinados a partir de las condiciones iniciales. Después de un tiempo, dominará el término con el valor propio positivo más grande, de modo que esa será la tasa de crecimiento final (a menos que la coincidencia C es 0).
@TheoBendit: sí, y podríamos preocuparnos por las variaciones estadísticas en la fracción de hombres y mujeres. Creo que es demasiado detalle para este problema.
Creo que una recurrencia aún más simple es contar solo vacas adultas. en cualquier momento norte para norte 4 obtienes una nueva vaca adulta por cada dos vacas que existían en el paso de tiempo norte 4. Es decir, la recurrencia es C ( norte ) = C ( norte 1 ) + 1 2 C ( norte 4 ) .
@DavidK: Muy buen punto. Para el largo plazo podemos ignorar el piso y obtenemos una relación de recurrencia lineal homogénea simple. Las raíces del polinomio característico serán los valores propios de mi matriz, por lo que el resultado será el mismo. Te sugiero que escribas una respuesta sobre esa base.
@RossMillikan Bueno, como dice la pregunta vinculada, el juego no distingue entre vacas macho y hembra, solo vacas adultas y juveniles. Modelar vacas macho y hembra en realidad sería menos representativo del crecimiento real. Creo que esta respuesta está bien; Solo señalo esto porque la pregunta original trataba esto con más detalle.
@RossMillikan Ya veo. Gracias, lo intentaré.
@Simplex1: usando la formulación de David K, la ingresé a Alpha y encontré un valor propio más grande de aproximadamente 1.2537 . Puede darte más dígitos o el exacto si quieres (pero no quieres).
@RossMillikan Ok, intenté usar ese valor propio y parece tener la tendencia correcta, pero parece tener al menos un 10% de descuento para n grande (solo usando ese valor propio produce t norte λ norte 1 . Sin embargo, usando lo que dijiste para 0 i k C i λ i norte con k siendo el número de valores propios, parece ser muy preciso. ¡Gracias por la ayuda!
Para grande norte debe ser bastante preciso. Hice una hoja de cálculo y por norte = 26 la relación entre los pasos es 1.25372
@RossMillikan Ah, de hecho, el crecimiento se aproxima cada vez mejor (y de hecho es asintóticamente equivalente) con ese vector propio. Supongo que si quiero el número real de vacas, puedo tomar una cantidad arbitrariamente grande norte , llama esto norte entonces compara esto λ norte con el valor real que se puede encontrar por A norte t 0 , luego use esta relación entre ellos para escalar cada valor después norte = norte , una vez que hayamos multiplicado por 1.25372.

Podemos limitar nuestro conteo para contar solo el número de vacas adultas. Si hay C norte vacas adultas en generación norte , entonces el C norte / 2 las vacas bebés nacidas de esa generación se convertirán en vacas adultas 20 minutos después, justo a tiempo para ser parte de la población adulta en generación norte + 4.

Mirándolo al revés, preguntando dónde están las vacas en generación. norte vino de -- la relación de recurrencia es

C norte = C norte 1 + 1 2 C norte 4 .

Si ignoramos la función de piso (que tiene un impacto significativo en las primeras generaciones, no tanto en las generaciones posteriores), la relación de recurrencia se simplifica a C norte C norte 1 1 2 C norte 4 = 0 y su polinomio característico es r 4 r 3 1 2 = 0.

El polinomio característico tiene cuatro raíces distintas , pero sólo la raíz r 1.25372495821695 tiene valor absoluto (o módulo complejo) mayor que 1 , y las potencias de esa raíz determinarán la tasa de crecimiento aproximada de la población después de cierto número de generaciones; mientras que la "tasa de crecimiento aproximada" es todo lo que este método puede brindarnos, ya que ignora la función de piso en la recursión real.

Configuración r 1 = 1.25372495821695 , una fórmula ingenua para el crecimiento de la población adulta a partir de 2 vacas adultas en generación 0 sería

(1) C norte 2 r 1 norte ,
redondeando al entero más cercano, lo que fácilmente se demuestra que es relativamente inexacto: después 30 generaciones esto dice que tendríamos 1766 vacas mientras que el número real es 955 , por lo que esta estimación es de aproximadamente 85 % demasiado alto, y continúa aproximadamente 85 % por encima del valor correcto hasta por lo menos norte = 200 (que es por lo que miré).

Una razón obvia de la discrepancia es la función de piso, que hace que se agreguen menos vacas adultas a la población de lo que dice la recursividad simplificada. Teniendo en cuenta que el error porcentual parece establecerse después de unas pocas docenas de generaciones, podríamos intentar calcular k generaciones exactamente y luego usando la fórmula

(2) C norte C k r 1 norte k
estimar las generaciones restantes.

Intentando esto con k = 24 , Encontré que la estimación era de aproximadamente 4.95 % mayor que el valor exacto en la generación 54 y casi lo mismo en la generación 200 . (No miré más allá de la generación 200 .) Con k = 44 , Encontré que la estimación era de aproximadamente 2.09 × 10 3 % mayor que el valor exacto en la generación 70 y casi lo mismo en la generación 200 . Con k = 70 , Encontré que la estimación era de aproximadamente 4.78 × 10 6 % mayor que el valor exacto en la generación 105 y casi lo mismo en la generación 200 .

Esto sugiere que se podría ajustar bastante bien el crecimiento de la población adulta, aunque no exactamente, usando los datos exactos para las primeras generaciones y una fórmula en la forma

C norte METRO r 1 norte
para las generaciones superiores. El constante METRO podría estimarse encontrando el límite aproximado del error porcentual para una de las fórmulas derivadas de la Ecuación ( 2 ) o incluso para la Ecuación ( 1 ) . Siguiendo esta idea obtengo la formula
C norte = 1.08068409116794 1.25372495821695 norte ,
que en realidad está dentro ± 1 del resultado exacto para todas las generaciones hasta la generación 140 (y exacto para todos menos 8 generaciones hasta la generación 131 ) si redondea hacia arriba en lugar de redondear al más cercano. Después de eso, descubrí que el error relativo comienza a crecer lentamente, pero en ese punto los números involucrados son tan grandes que Excel parece ser incapaz de hacer una aritmética de enteros completamente correcta con ellos, por lo que es posible que parte del "error". ver se debe en realidad a un error de cálculo de la secuencia exacta.


Si desea saber el número total de vacas, incluidas las crías, calcularía la generación norte y las tres generaciones anteriores; el número de crías de vaca se puede calcular a partir de las generaciones anteriores. Agregue ese número al número de vacas adultas en la generación norte .