Accueil / Astuces / [TestZone] #5 – Agriculture : disposition & croissance

[TestZone] #5 – Agriculture : disposition & croissance

[TestZone] #5 – Agriculture : disposition & croissance
5(100%) 16 votes

Bienvenue à toi, cher joueur, dans la zone de test ! Pour faire le tri entre les idées reçues, les légendes urbaines et autres informations, une seule solution : expérimenter nous-mêmes pour en vérifier leur exactitude. Ensemble, nous allons soumettre le jeu à l’analyse afin de démêler le vrai du faux. Aujourd’hui, nous allons rejoindre les champs et étudier le comportement des plantes, et plus précisément de l’influence de leur disposition sur leur croissance.

Cute Divider

Mise en contexte :

L’agriculture est un des stades obligatoires de la survie, pour obtenir une première source de nourriture facile, à consommer directement ou destinée à vos animaux. L’avantage de cette dernière est d’être plus facilement automatisable que l’élevage : si le cacao nécessite une intervention du joueur, la culture du melon et de la citrouille est entièrement automatisable et les villageois peuvent désormais s’occuper des cultures de blé, pommes de terre et carottes.

Champs de blé, de carottes et de pommes de terre entretenus par des villageois


Certes, nos cultures sont automatisables, mais augmenter le rendement nécessite de savoir comment les plantes poussent dans le jeu. Nous allons nous intéresser à la disposition des plantes dans les champs afin de confirmer certaines techniques de joueur.

Cute Divider

Mise en évidence du phénomène

On cherche ici à suivre l’évolution d’un champ au court du temps.

Vue du montage expérimental


Le principe est le suivant : on forme une surface de terre qu’on laboure et qu’on hydrate. On la recouvre ensuite de plantes et on suit la croissance des plantes

La croissance des plantes dans le jeu, si elle ressemble un peu les plantes réelles, dépend de nombreuses variables. On s’intéresse uniquement à la disposition ici, on fixe donc les facteurs environnementaux :

  • le cycle jour-nuit a été désactivé et l’heure est fixée vers midi :

/gamerule doDaylightCycle false

/time set 6000

  • la pluie et l’orage a été désactivée :

/weather clear 1000000

  • l’hydratation de la terre labourée est maximale : la zone de test est composée de 6×6 zones de 9×9 blocs hydratées par une source d’eau au centre. Il y a donc au total 2 880 blocs de terre labourée.
  • la vitesse de pousse est celle du jeu par défaut :

/gamerule randomTickSpeed 3

Note : la difficulté du jeu a été mise à 0 (mode Paisible), le biome utilisée est Plaine et la zone est entièrement contenue dans la zone du chunk principal (pour que la zone de test soit constamment chargée). La version utilisée est la 1.8.9.

Les plantes passent par différents stades de croissance. Ces stades sont représentés par une augmentation de la Data value du bloc, que nous avons déjà expliqué dans le test sur la canne à sucre. Nous étudierons trois plantes :

  • le blé : 8 stades de croissance, de 0 (les graines plantées) à 7 (mûr)
  • la carotte : 8 stades de 0 à 7, mais il ne possède pas de visuels différents à tous les stades.
  • la pomme de terre : 8 stades de 0 à 7, mais il ne possède pas de visuels différents à tous les stades.

Note : la verrue du Nether, le cacao et la betterave en version 1.9 ont seulement 4 stades de pousse.

L’objet de l’étude concerne donc la disposition de deux plantes. On peut imaginer de nombreux cas :

  • deux parties distinctes.
  • des bandes de 1 bloc de large alternées.
  • un maillage alterné avec des carrés de 1 bloc.
  • et toute autre disposition qui garde une répartition 50-50 de chaque plante.

Nous allons donc effectuer les mesures pour chacune des dispositions présentées, puis les comparer pour conclure.

Lorsqu’on génère une grille, chaque item a la même coordonnée y, ce qui est l’équivalent d’un plan horizontal (en rose). Les objets qui seront absorbés sont l’intersection de la zone de récupération et de ce plan, ce qui forme une zone vide rectangulaire (représentée en rouge).

Donc nos expériences précédentes ne sont qu’une petite fraction de la zone de récupération, il va falloir trouver des méthodes pour balayer la dimension verticale.

Pour laisser la zone de test intacte lors des mesures, on effectue une copie de l’état sur une autre surface à proximité. Cela permet d’avoir une image visuelle pour suivre facilement l’évolution des plantes.

Pour chaque stade n (de 0 à 7), on effectue la procédure suivante :

  • on copie toutes les plantes au stade n présents dans la zone de test (en rouge) dans la zone de copie (en bleu) :

/clone  <x1> <y1> <z1> <x2> <y2> <z2>  <X1> <Y1> <Z1>  filtered  normal  minecraft:<plante> n

  • on remplace les plantes copiées par un tapis de la couleur correspondant au code couleur défini précédemment :

/fill  <X1> <Y1> <Z1> <X2> <Y2> <Z2>  minecraft:carpet  <DV>  replace  minecraft:<plante>  n

L’opération doit être faite pour chaque plante et chaque stade, ce qui correspond à 2×2×8 = 32 étapes pour nos expériences (on se limite à 2 types de plantes).

Une fois la copie effectuée, reste à l’analyser. On utilise pour cela 6×9 = 54 ArmorStands qui vont balayer horizontalement la surface. Avant de se déplacer d’une unité, l’ArmorStand détecte la couleur du tapis et ajoute au tableau des scores correspondant la valeur correspondante.

Par exemple, pour compter le nombre de plantes au stade 0, on augmente de 1 le score Composition du joueur nommé “0” à chaque fois qu’on détecte un tapis blanc :

/execute [email protected][type=ArmorStand]  ~ ~ ~  detect  ~ ~ ~  minecraft:carpet 0  /scoreboard players  add 0  Composition 1

Et ceci est fait pour chacune des 8 couleurs de tapis. Lorsqu’on a fini une zone, il faut réinitialiser les scores de ces joueurs “virtuels”. La méthode utilisée est de supprimer puis de recréer l’objectif “Composition” :

/scoreboard objectives remove Composition

/scoreboard objectives add Composition dummy

/scoreboard objectives setdisplay sidebar Composition

La dernière ligne de commande sert à remettre l’affichage des scores sur la partie droite, c’est purement esthétique.

Maintenant que nous avons les outils, il ne reste plus qu’à faire les mesures !

Cute Divider

Résultats préliminaires :

Avant de développer la théorie concernant un phénomène, il est préférable de montrer que ce phénomène existe. De nombreuses comparaisons de dispositions des plantes dans les cultures ont été souvent produites, la plus connue étant la vidéo Minecraft MythBusting de xisumavoid, ce premier montage permet d’illustrer visuellement et numériquement le phénomène.

Croissance accélérée d’un champ (plantation en deux blocs distincts)


Les études “en plein champ” ont donné les résultats suivants :


On n’a même pas besoin de passer par les mathématiques pour voir que c’est la culture en bandes qui est la plus efficace : si on regarde le dernier stade de croissance, on voit que la moitié du champ en bandes est à maturité au bout de 24 minutes, alors que les autres dispositions le sont bien plus tard (à 46 minutes).

Cela va dans le sens de toutes les vidéos produites jusque-là : la configuration en bandes permet d’aller 2 fois plus rapidement. Mais on n’a pas l’explication du pourquoi.

Cute Divider

Théorie de la croissance des plantes

Si on veut répondre au pourquoi, il va falloir expliciter le mécanisme par lequel pousse les plantes. Nous allons donc théoriser et transposer en équations pour obtenir un modèle mathématique. Si le modèle donne des prédictions proches de l’expérimentation, on pourra considérer que la description est correcte.

La croissance d’une plante peut être vue comme une succession d’étapes successives, où une plante passe d’un stade à un autre dans un ordre précis.

Par la suite, on définira un ensemble de fonctions \left ( B_n \right ), qui sont l’ensemble des plantes du champ au stade n. n est un entier allant de 0 (premier stade) à 7 (plante à maturité).

Concrètement, cet ensemble de fonctions à pour variable le temps :

    \[B_n : t \mapsto B_n(t)\]

A tout instant t de l’expérience, la fonction B_n donne le nombre de plantes au stade n présent dans mon champ, sous la forme d’un nombre noté B_n(t).

Si je ne sème ni ne détruit de plants durant l’expérience, la somme de ces fonctions est une constante à tout instant t :

    \[B_0(t) + B_1(t) + \cdots + B_7(t) = \sum_{n=0}^7 B_n(t) = N\]

Avec N le nombre total de plantes présentes dans le champ.

2016-07-02_19.02.57Chaque flèche représente une étape de transformation et reflète le fonctionnement du jeu.

Imaginons le champ à un instant t. Après un délai \delta t très petit, le jeu a eu le temps de faire qu’une seule étape :

  • le jeu choisit au hasard une plante dans le champ, comme il tirerait une boule dans une urne.
  • avec de nombreux facteurs externes (les voisins, l’éclairage, l’humidification du sol, que sais-je), le jeu va décider si cette plante va grandir ou pas.

Si on s’intéresse maintenant à une vision globale et des intervalles de temps plus importants, on peut dire modéliser la vitesse de transformation \left \{ n \right \} \rightarrow \left \{ n+1\right \}, notée v_n, ainsi :

    \[v_n(t) = k_n \, B_n(t)\]

  • La probabilité que la plante choisie soit au stade n est directement proportionnelle au nombre de plantes à l’état n à l’instant t, autrement dit à B_n(t). Plus un stade est représenté, plus il a de chances d’être sélectionné.
  • L’ensemble des facteurs externes modulant la transformation peut être représentée par une constante k_n \geq 0 : plus cette constante est importante, plus la transformation est rapide.

Comme on ne sait pas si le stade de la plante influence la vitesse de transformation, on pose donc 7 constantes (k_n), une pour chaque transformation.

2016-07-02_18.21.57Mais si on considère le nombre de plantes à un stade n, il faut considérer deux effets :

  • la transformation \left \{ n -1 \right \} \rightarrow \left \{ n\right \} va augmenter B_n.
  • la transformation \left \{ n \right \} \rightarrow \left \{ n + 1\right \} va diminuer B_n.

En utilisant la dérivée  \dfrac{\text{d} \, B_n}{\text{d} t}  pour représenter comment varie B_n au cours du temps, on peut donc écrire que :

    \[\frac{\text{d} \, B_n}{\text{d} t} =  v_{n-1} - v_n\]

Et finalement, en remplaçant avec ce qu’on a vu précédemment :

    \[\frac{\text{d} \, B_n (t)}{\text{d} t} = k_{n-1} \; B_{n-1}(t) - k_n \; B_n(t) \]

système_equations_1Au final, nous avons donc un système de 8 équations pour décrire les 8 fonctions (B_n) :

  • pour le premier stade n=0, l’équation reflète une diminution :
  •     \[\frac{\text{d} \, B_0 (t)}{\text{d} t} = - k_0 \; B_0(t) \]

  • pour les 6 stades intermédiaires 1 \leq n \leq 6, les variations dépendent de deux mécanismes :
  •     \[\frac{\text{d} \, B_n (t)}{\text{d} t} = k_{n-1} \; B_{n-1}(t) - k_n \; B_n(t) , \; n \in [\![ 1 ; 6 ]\!] \]

  • pour le dernier stade n=7, c’est une augmentation :
  •     \[\frac{\text{d} \, B_7 (t)}{\text{d} t} = k_6 \; B_6(t)\]

On a posé mathématiquement un système d’équations différentielles, les dérivées des fonctions dépendant de combinaisons linéaires des fonctions. Reste à résoudre ce système.

 

Un peu de théorie : la dérivée

Pour décrire l’évolution d’un paramètre, il est souvent plus commode de parler en termes d’augmentation et de diminution durant une période. Par exemple, si je suis l’évolution du nombre de plantes au stade 2 présentées par le graphique ci-dessous :

Pour avoir une idée de comment varie  au cours du temps, je peux par exemple faire deux mesures à des instants différents et comparer :

    \[\definecolor{Blue}{RGB}{00,00,255} \begin{matrix} {\color{Blue} t} & {\color{Blue} B_2(t)} \\ t_1 = 3 \text{ min} & B_2(t_1)= 457 \text{ plantes}\\ t_2 = 3 \text{ min} & B_2(t_2)= 751 \text{ plantes} \end{matrix}\]

Ici, on observe une augmentation. Durant une durée \Delta t = t_2 - t_1 = 5 min, le nombre de plantes au stade 2 a augmenté de \Delta B_2 = B_2(t_2) - B_2(t_1) =294 plantes.

Pour se représenter cette augmentation, on peut aussi raisonner avec la quantité suivante :

    \[\frac{\Delta B_2}{\Delta t} = \frac{B_2(t_2)-B_2(t_1)}{t_2-t_1} = 58.8 \; \text{plantes/min}\]

Graphiquement, cette quantité correspond à la pente de la droite entre les deux points de mesure sur la courbe. Le grand avantage de cette quantité est de quantifier numériquement les variations de  :

  • son signe me renseigne s’il s’agit d’une augmentation (signe positif) ou d’une diminution (signe négatif). Si c’est nul, on a stagné.
  • sa valeur absolue (la partie purement numérique) m’indique si le processus est plutôt rapide (grande valeur absolue) ou au contraire lente (petite valeur absolue).

On peut donc dire qu’en moyenne, durant cette période de 5 minutes, B_2 a augmenté de 59 plantes chaque minute. Mais est-ce que ce nombre représente fidèlement ce qu’il s’est passé ? En consultant la courbe, vous pouvez vous convaincre que non : on a eu certes une augmentation, mais la seconde mesure a eu lieu pendant que B_2 commençait à diminuer…

Dans un monde idéal, pour suivre exactement comment la fonction varie au moment de la première mesure, il faudrait faire la seconde mesure à un instant très proche, voire même infiniment proche (faire tendre le délai \Delta t vers une durée proche de 0). C’est ça, la dérivée à un instant t : calculer la variation locale de notre fonction en considérant deux mesures séparées d’un délai extrêmement petit.derivee

En utilisant une notation plus qu’abusive, on écrira la dérivée de B_2 comme ceci :

    \[\frac{\text{d} B_2(t)}{\text{d}t} = \lim_{\Delta t \rightarrow 0} \frac{B_2(t+\Delta t) - B_2(t)}{\Delta t}\]

Si vous devez retenir une chose de la dérivée, c’est une fonction qui permet de quantifier comment varie la fonction associée.


Il est bien beau d’écrire des équations, mais c’est encore mieux si on peut les résoudre. Commençons par le début, le tout premier stade n=0

graphe_0_seulCi-dessus, on a représenté le nombre de plantes au stade n=0 en fonction du temps. Le champ était un rectangle entièrement rempli de 2880 plants de blé, tous au stade 0 à t=0.

Si vous avez déjà un certain passif en mathématiques ou en physique, vous devez reconnaître cette allure de courbe qui fait penser à une décroissance exponentielle : B_0 décroit rapidement au départ, puis la transformation ralentie de plus en plus pour ne plus évoluer une fois le zéro atteint.

Reprenons notre équation différentielle de B_0 :

\dfrac{\text{d} \, B_0 (t)}{\text{d} t} = - k_0 \; B_0(t)

Il s’agit d’une équation différentielle du premier ordre, et sa résolution est au programme des terminales scientifiques. La forme générale des solutions est :

t \mapsto C^{ste} \cdot \exp (-k_0 \, t)

Avec C^{ste} qui dépend des conditions initiales. Au début de l’expérience, t=0 et le champ contient N plantes au stade 0, donc :

B_0(0) = N = C^{ste} \cdot \exp{0} = C^{ste}

Pour finalement écrire notre équation d’évolution :

B_0(t) = N \cdot \exp (-k_0 \, t)

Pour ceux qui veulent plus de détails, les grandes lignes sont expliquées dans l’onglet ci-dessous.

graphe_0_ln

En utilisant la fonction logarithme népérien (réciproque de l’exponentielle), on obtient une fonction linéaire :

B_0(t) = N \cdot \exp (-k_0 \, t) \Leftrightarrow - \ln \left ( \dfrac{B_0(t)}{N} \right ) = k_0 \cdot t

L’avantage d’une fonction linaire, c’est qu’elle permet de juger d’un simple coup d’œil si le modèle correspond ou non. En effet, il est plus facile pour un humain (et un ordinateur pour calculer un coefficient de régression R^2) de raisonner sur des droites et des points qui sont censés être alignés.

Ici, la correspondance est plutôt satisfaisante. Comme l’incertitude augmente au fur et à mesure du temps t, il n’est pas étonnant que les derniers points soient plus à l’écart. Et le coefficient de régression linéaire R^2 est proche de 1, ce qui valide le modèle.

Pour ceux qui veulent plus de détails sur ces fonctions, elles sont développées dans l’onglet ci-dessous.

graphe_0_modeleEn traçant le modèle théorique avec les données brutes, on peut voir que le modèle est assez proche de la réalité. En fait, plus votre champ est grand, plus vous réduisez l’importance des fluctuations dues au hasard et plus vous serez proches de cette courbe.

Remarquez qu’il est plus difficile de voir sous cette forme que les différences notamment vers le plateau de la fin de la courbe.

 

Un peu de théorie : équations différentielles, exponentielle et logarithme népérien

Comme nous l’avons dit, la physique chercher à relier des grandeurs et comment elles évoluent, ce qui en termes d’équations revient à relier les fonctions à leurs dérivées, voire même à des dérivées de dérivées (par exemple l’accélération, qui est la dérivée de la vitesse, elle-même dérivée de la position). Une équation différentielle permet donc de lier les différentes dérivées et les fonctions de base.

Mais avant de résoudre notre équation, il faut s’intéresser à quelque chose de simple, par exemple : est-ce qu’il existe des fonctions qui est sont égale à leur propre dérivée ?

    \[\frac{\text{d} f}{\text{d} t} = f\]

Non seulement on peut démontrer que des solutions existent, mais on peut même démontrer qu’on a une solution unique si on pose une condition. Par exemple, si je pose :

    \[f(0)=1\]

On a une unique solution, qu’on nomme la fonction exponentielle exp :

    \[\left.\begin{matrix} \dfrac{\text{d} f}{\text{d} t} = f \\ f(0)=1 \end{matrix}\right\} \Rightarrow f : t \mapsto \exp(t)\]

Pour obtenir toutes les autres fonctions, il suffit de la multiplier par une constante puisque nous avons :

    \[\definecolor{Red}{RGB}{255,00,00} \begin{matrix} \dfrac{N \cdot \exp(x) - N \cdot \exp(t)}{x-t} & =  & N \times \dfrac{\exp(x) - \exp(t)}{x-t}\\ \\ \downarrow \; \; \underset{x \to t}{\lim} & \, & \downarrow \; \; \underset{x \to t}{\lim}\\ \\ {\color{Red} \dfrac{\text{d}}{\text{d}t} \left [ N \cdot \exp(t) \right ]} & {\color{Red} =} & {\color{Red} N \cdot \exp(t)} \end{matrix}\]

Je précise que ceci est n’est pas une réelle démonstration, mais simplement l’essence du raisonnement de la démonstration.

Maintenant, si on a une constante multiplicative dans l’exponentielle, la fonction de départ se voit multiplier par la constante après dérivation :dexpktD’où l’omniprésence de cette exponentielle dans les équations qui vont suivre.

La fonction logarithme népérien, notée ln, est ce qu’on appelle en mathématiques la fonction réciproque de l’exponentielle. Imaginons que vous êtes un prestidigitateur faisant un tour de nombre : vous demandez à votre volontaire de choisir un nombre, puis vous lui faites faire quelques opérations et lui demandez le résultat. Pour que le tour soit spectaculaire, le résultat n’a souvent rien d’évident pour distinguer le nombre de départ. Mais vous devez avoir un moyen d’annuler rapidement toutes ces opérations : c’est ça qu’on appelle la fonction réciproque.

    \[\definecolor{Red}{RGB}{255,00,00} x \; \xrightarrow[{\color{Blue} \text{spectateur}}]{\exp} \; \exp(x) \; \xrightarrow[{\color{Blue} \text{magicien}}]{\ln} \; x\]

Voilà les grandes lignes. Pour aller plus loin, un bon livre de mathématiques sera nécessaire.


Nous avons donc résolu plutôt facilement le cas n=0, mais les choses vont se corser et nous allons même créer un nouveau circuit pour le reste de l’étude :

2016-07-03_01.31.55Le précédent montage reproduisait des conditions d’agriculture classique, mais il n’est pas très souple pour tester différents paramètres :

  • variation de stade de départ : on dispose de 20\times20 = 400 plants de blé sous la surveillance d’un ArmorStand de la team Sensor. Au départ de la simulation, chaque plant de blé peut être amené à un stade de pousse précis avec la commande /fill :

/fill      -30 21 -30      -32 21 -32      minecraft:wheat      n      replace      minecraft:wheat

  • variation du voisinage : le plant de blé est au centre d’une zone labourée de 3\times3 où on peut ajouter des voisins (plants de blé ou de carottes). Il suffit de modifier la zone de référence (en gris clair en haut à droite) et d’appliquer ces changements à toutes les cellules :

/execute     [email protected][team=Sensor]      ~ ~ ~      /clone      -32 21 -32      -30 21 -30      ~-1 21 ~-1

Toutes les zones sont hydratées, isolées les unes des autres par au moins une bordure d’un bloc de large et l’éclairage est constant.

2016-07-03_01.40.12Le principe global est le suivant :

  • On passe le randomTickSpeed à 0, la zone de référence est copiée dans toutes les cellules et les plantes sont initialisées au stade de croissance voulue.
  • L’expérience commence : le randomTickSpeed est réinitialisé et une horloge se charge de lancer la récolte des données toutes les minutes (tous les 1200 tics de jeu)
  • Toutes les minutes donc, les ArmorStand Sensor relèvent le stade de la pousse de blé centrale et le communique à l’ArmorStand Curseur.
  • L’ArmorStand Curseur transmet les informations à l’ArmorStand de l’équipe Liste qui se trouve face à lui, puis se décale vers la droite pour la prochaine mesure.
  • Lorsque l’ArmorStand Curseur s’est décalé au bout de la liste de mémoire, il retourne au départ, déclenchant un nouveau cycle.

Une première remarque vient sur le fait qu’on peut accélérer la croissance des plantes en changeant le randomTickSpeed, mais il faut diminuer la période de l’horloge en respectant :

\left [ \, \text{randomTickSpeed} \, \right ] \times \left [ \, \text{Periode} \, \right ] = 3 \times 1 \,200 = 3 \, 600

Si vous multipliez par 30 le randomTickSpeed, il faudra diviser par 30 la période de l’horloge. Deux effets apparaissent et se compensent en partie :

  • en augmentant la fréquence de l’horloge (en diminuant la fréquence), on augmente l’erreur en rendant non négligeables des effets comme le lag ou le temps de réponse du circuit.
  • mais réduire le temps total d’un cycle permet d’atteindre des plus grands échantillons : en divisant par 30 la période, on peut récolter 30 fois plus de données pour la même durée réelle.

En testant différentes combinaisons, la reproductibilité est satisfaisante (avec une erreur de l’ordre de 0.1%) avec un randomTickSpeed de 60. C’est ce qui servira pour les données suivantes.

Une seconde remarque vient sur les données qui sont collectées :

  • un premier système consiste à récolter à chaque mesure l’intégralité des valeurs B_n pour tous les stades à chaque cycle. Cela implique d’avoir une durée de cycle constante et à accumuler beaucoup d’informations redondantes (par exemple, chercher des plantes au stade 0 après 70 minutes).
  • un second système récolte les informations sur un seul stade et oublie tous les autres. En implémentant des conditions connues sur le stade (par exemple que B_n reste à 0 une fois qu’il a atteint ce nombre), on peut passer directement au cycle suivant sans effectuer des mesures inutiles et donc gagner en efficacité.
2016-07-03_01.25.11Nous avons posé au départ que les transformations pouvaient avoir des vitesses différentes en fonction de stade concerné. On a donc défini 7 constantes k_n dans nos équations, chacune reflétant l’influence des paramètres extérieurs sur la transformation \left \{ n \right \} \rightarrow \left \{ n+1 \right \}. Reste à déterminer ces constantes.

Revenons à l’équation qui définit le nombre de plantes au stade n :

\dfrac{\text{d} \, B_n (t)}{\text{d} t} = k_{n-1} \; B_{n-1}(t) - k_n \; B_n(t)

L’idéal serait d’avoir une équation aussi simple que celle que nous avons déjà résolu au stade 0. C’est possible, mais il faut s’arranger pour ne jamais avoir de plantes au stade n-1 :

\forall t \in \mathbb{R}^+, \, B_{n-1}(t) = 0 \;  \Rightarrow \;  \dfrac{\text{d} \, B_n (t)}{\text{d} t} = - k_n \; B_n(t)

Il suffit donc de débuter l’expérience avec tous les plants de blé au stade n, et on pourra tracer la régression linéaire comme précédemment. Ce sont les 7 courbes qui suivent.

 
Statistiques faites sur 50 000 plants de blé isolés au stade 0.
Statistiques faites sur 50 000 plants de blé isolés au stade 1.
Statistiques faites sur 50 000 plants de blé isolés au stade 2.
Statistiques faites sur 50 000 plants de blé isolés au stade 3.
Statistiques faites sur 50 000 plants de blé isolés au stade 4.
Statistiques faites sur 50 000 plants de blé isolés au stade 5.
Statistiques faites sur 50 000 plants de blé isolés au stade 6.

Compte-tenu des écarts statistiques, on peut considérer que les constantes de vitesse sont identiques, ce qui permettent de simplifier énormément les calculs.

Ainsi, pour les plantes au stade 1, si k_0 \neq k_1 :

    \[B_1 (t) = N \, k_1 \frac{\exp(-k_0 \, t) - \exp(- k_1 \, t)}{k_1 - k_0}\]

Le fait que les constantes soient égales nous arrange beaucoup, car le cas k_1=k_0 est beaucoup plus digeste :

    \[B_1 (t) = N \, k_0 \, t \exp(-k_0 \, t)\]

Nous avons donc des expressions analytiques simples qui donnent des résultats satisfaisants, super!

Pour le détail de la résolution mathématique, ouvrez l’onglet.

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_0 \, : \, t \mapsto N \, \exp (- k_0 \,  t)

avec k_0 = 0.2935 \, \text{plantes} \, \text{min} ^{-1}                           R^2=0.9952

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_1 \, : \, t \mapsto N \, k_0 \, t \, \exp (- k_0 \,  t)

avec k_0 = 0.2935 \, \text{plantes} \cdot \text{min} ^{-1}                           R^2=0.9918

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_2 \, : \, t \mapsto \dfrac{N}{2} \, k^2_0 \, t^2 \exp (- k_0 \,  t)

avec k_0 = 0.2935 \, \text{plantes} \cdot \text{min} ^{-1}                           R^2=0.9915

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_3 \, : \, t \mapsto \dfrac{N}{6} \, k^3_0 \, t^3 \exp (- k_0 \,  t)

avec k_0 = 0.2935 \, \text{plantes} \cdot \text{min} ^{-1}                           R^2=0.9951

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_4 \, : \, t \mapsto \dfrac{N}{24} \, k^4_0 \, t^4 \exp (- k_0 \,  t)

avec k_0 = 0.2935 \, \text{plantes} \cdot \text{min} ^{-1}                           R^2=0.9924

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_5 \, : \, t \mapsto \dfrac{N}{120} \, k^5_0 \, t^5 \exp (- k_0 \,  t)

avec k_0 = 0.2935 \, \text{plantes} \cdot \text{min} ^{-1}                           R^2=0.9956

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_6 \, : \, t \mapsto \dfrac{N}{720} \, k^6_0 \, t^6  \exp (- k_0 \,  t)

avec k_0 = 0.2935 \, \text{plantes} \cdot \text{min} ^{-1}                           R^2=0.9876

Statistiques faites sur N=20 \, 000 plants isolés initialement au stade 0, modèle tracé en noir.

Équation du modèle : B_7 \, : \, t \mapsto N- B_0(t) - B_1(t) - B_2(t) - B_3(t) - B_4(t) - B_5(t) - B_6(t)

avec k_0 = 0.2935 \, \text{plantes} \cdot \text{min} ^{-1}                           R^2=0.9995

Un peu de théorie : résolution exacte du système

Le système est donc de la forme suivante :

    \[\left\{\begin{matrix} \dfrac{\text{d} B_0(t)}{\text{d}t} = - k_0 \; B_0(t) &\\ \dfrac{\text{d} B_n(t)}{\text{d}t} = k_{n-1} \; B_{n-1}(t) - k_n \; B_n(t) & \text{avec } n \in \left \{ 1 \, ; \, \cdots \, ; \, 6 \right \}\\ \dfrac{\text{d} B_7(t)}{\text{d}t} = k_6 \; B_6(t) & \end{matrix}\right.\]

Ici, on va résoudre le système en considérant que k_0 = k_1 = \cdots = k_6 :

    \[\left\{\begin{matrix} \dfrac{\text{d} B_0(t)}{\text{d}t} = - k_0 \; B_0(t) &\\ \dfrac{\text{d} B_n(t)}{\text{d}t} = k_0 \; \left [B_{n-1}(t) - B_n(t) \right ] & \text{avec } n \in \left \{ 1 \, ; \, \cdots \, ; \, 6 \right \}\\ \dfrac{\text{d} B_7(t)}{\text{d}t} = k_0 \; B_6(t) & \end{matrix}\right.\]

On a déjà résolu la première équation différentielle : B_0 (t) = N \; \exp ( - k_0 \; t ).

Détaillons le calcul pour B_1(t) : \dfrac{\text{d} B_1(t)}{\text{d}t} = k_0 \; B_{0}(t) - k_0 \cdot B_1(t)

Qu’on peut ré-écrire de la façon suivante en remplaçant B_0(t) par son expression :

    \[\frac{\text{d} \, B_1(t)}{\text{d}t} + k_0 \; B_1(t) = k_0 \, N \exp(-k_0 \, t)\]

Posons B_1(t) = Q(t) \cdot \exp{-k_0 \cdot t}, avec Q(t) une fonction à déterminer.

Rappelons la forme de la dérivée d’un produit de fonctions dérivables :

demo_produit_derivée

Donc dériver B_1(t) = Q(t) \cdot \exp(-k_0 \cdot t) donne :

\dfrac{\text{d} \, B_1(t)}{\text{d}t} = - k_0 \; \exp(-k_0 \; t) \; Q(t) + \exp(-k_0 \; t) \; \dfrac{\text{d} \, Q(t)}{\text{d}t}

Et l’équation différentielle se retrouve simplifiée des exponentielles : 

Qui s’intègre avec les conditions initiales : Q(t) = k_0 \; N \; t et finalement :

    \[B_1(t) = N \; k_0 \, t \, \exp(- k_0 \, t) = k_0 \, t \, B_0(t)\]

Passons maintenant à B_2(t), l’équation est très similaire :

\dfrac{\text{d} B_2(t)}{\text{d}t} +  k_0 \cdot B_2(t) = k_0 \; B_1(t) = N \; k^2_0 \, t \, \exp(- k_0 \, t)

Et en posant, de même, B_2(t) = Q(t) \cdot \exp{-k_0 \cdot t}, on obtient  \dfrac{\text{d} \, Q(t)}{\text{d}t}= N k^2_0 \,  t

En regardant comment s’intègre les fonctions puissance :

    \[\definecolor{Red}{RGB}{255,00,00} \begin{matrix} \dfrac{x^n - t^n}{x-t} & = & \underset{n \text{ termes}}{\underbrace{x^{n-1} + x^{n-2} \; t + \cdots + x \; t^{n-2} + t^{n-1}}} \\ \\ \downarrow \; \; \underset{x \to t}{\lim} & \, & \downarrow \; \; \underset{x \to t}{\lim}\\ \\ {\color{Red} \dfrac{\text{d}}{\text{d}t} \left [ \, t^n \, \right ]} & {\color{Red} =} & {\color{Red} n \, t^{n-1}} \end{matrix}\]

On déduit que  \dfrac{\text{d}}{\text{d}t} \left [ \, \dfrac{t^{n+1}}{n+1} \, \right ] = t^n, donc  Q(t) = \dfrac{N}{2} \,  k_0^2 \, t^2.

Finalement B_2(t) = \dfrac{N}{2} \,  k_0^2 \, t^2 \exp(-k_0 \, t) = \dfrac{(k_0 \, t )^2}{2} \,  B_0(t)

Recommençons avec B_3(t) : vous commencez à connaitre la forme de l’équation différentielle.

\dfrac{\text{d} B_3(t)}{\text{d}t} +  k_0 \cdot B_3(t) = k_0 \; B_2(t) = \dfrac{N}{2} \,  k_0^3 \, t^2 \exp(-k_0 \, t)

Qu’on résout, en posant B_3(t) = Q(t) \, \exp(-k_0 \, t), ce qui simplifie la résolution :

\dfrac{\text{d} \, Q(t)}{\text{d}t}= \dfrac{N}{2} k^3_0 \,  t^2 \Rightarrow Q(t)=\dfrac{N}{6} k^3_0 \,  t^3

Et finalement, la résolution donne B_3(t) = \dfrac{N}{6} k^3_0 \,  t^3 \exp(-k_0 \, t) = \dfrac{(k_0 \, t)^3}{3 \, !} B_0(t), avec n \, ! la factorielle définie par

    \[n \, ! = \prod_{j=1}^n j = 1 \times 2 \times \cdots \times (n-1) \times n\]

Vous pouvez donc commencer à voir une récurrence : en effet, lorsqu’on passe de B_n(t) à B_{n+1}(t), on a l’ajout de :

  • un facteur k_0 qui provient de l’écriture de la nouvelle équation différentielle.
  • un facteur \dfrac{t}{n+1} qui provient de l’intégration lors de la dernière étape.

On dégage une forme générale, que vous pouvez vous amuser à démontrer par récurrence :

B_n(t)=\dfrac{(k_0 \, t)^n}{n \, !} B_0(t) = \dfrac{(k_0 \, t)^n}{n \, !} N \exp(- k_0 \, t) avec n \in \left \{ 0 \, ; \, \cdots \, ; \, 6   \right \}

Et pour résoudre la dernière équation différentielle, on utilise le fait que le nombre de plantes total est constant : 

    \[B_0(t) + B_1(t) + \cdots + B_7(t) = \sum_{n=0}^7 B_n(t) = N\]

Ainsi,

    \[B_7(t) = N - \sum_{n=0}^6 B_n(t) = N \left [ 1 - \sum_{n=0}^6 \dfrac{(k_0 \, t)^n}{n \, !} \exp(- k_0 \, t)  \right ]\]

Félicitations, nous avons nos expressions pour tous les stades !


Cute Divider

Action du voisinage sur la vitesse de pousse

Maintenant qu’on sait comment la croissance s’effectue, on va pouvoir (enfin) s’attaquer au sujet de l’étude : l’action du voisinage sur la croissance.

0 - refPour pouvoir faire des comparaisons, il nous faut une référence :

  • un seul blé présent au centre
  • la terre labourée est hydratée au maximum.

Initialement, le blé est au stade 0. A partir de 10 000 plantes, on construit la régression linéaire de la première étape de la croissance. La pente de la régression obtenue ici est :

    \[k_0=0.2988 \, \text{plantes} \, \text{min} ^{-1}\]

 La régression linéaire apparaîtra en rouge pour servir de point de comparaison.

1_voisin_graphePlaçons un premier blé voisin : il y a au total 8 possibilités de le placer autour du blé central. On distingue deux cas :

  • pas de changement dans la constante de vitesse lorsque le plant est sur un axe.
  • une diminution par deux de la constante de croissance si le voisin est placé en diagonale.

Nous avons donc une première règle sur la croissance des plantes : si un bloc est placé en diagonale, la nouvelle constante est \dfrac{k_0}{2}.

2_voisins_grapheEn excluant toutes les situations où un blé voisin se trouve en diagonale (nous verrons plus tard pourquoi), nous avons 6 combinaisons à explorer pour placer 2 voisins. On remarque :

  • si les plants de blé sont alignés selon un axe du jeu, il n’y a pas de différence.
  • si les deux voisins forment un angle droit, la constante de vitesse est réduite de moitié.

Deuxième règle donc : si 2 blés voisins forment un angle droit, la nouvelle constante devient \dfrac{k_0}{2}.

3_voisins_grapheA partir de trois blés, on remarque rapidement que la constante de vitesse k'_0 est forcée de descendre :

  • on a que 2 façons de placer nos deux premiers voisins : alignés selon l’axe nord-sud ou est-ouest
  • si on place le troisième voisin sur une diagonale, on diminue k'_0 d’après la première règle.
  • si on place le troisième voisin sur un axe, on forme des angles droits et donc diminution de k'_0 d’après la deuxième règle.

Vous remarquez également qu’il ne s’agit pas d’un effet cumulatif : k'_0 diminue si une des règles est vérifié, mais elle reste à une valeur de \dfrac{k_0}{2}.

voisins_carotte_grapheRecommençons nos expériences en remplaçant les blés voisins par des carottes (ici représenté en vert) : on remarque… aucun changement.

  • si le plant est en diagonale : aucun changement pour le blé
  • si deux plants de carottes forment un angle droit : aucun changement pour le blé.

Cela fonctionne en remplaçant les carottes par des pommes de terre et le rôle est symétrique : le blé n’influence pas la pousse des carottes et inversement.

8_voisinsAinsi, on peut confirmer les observations faites sur le terrain :

  • champ classique : la grande majorité des plantes sont entourées de 8 plantes identiques, ce qui diminue la vitesse de croissance de moitié.
  • en quadrillage : les plantes possèdent 4 plantes voisines identiques situées en diagonale, donc diminution de moitié.
  • en bandes : les plantes identiques sont alignées selon les axes. Donc pas de changement de la vitesse de croissance.

Conclusion : faire des cultures en bandes permets de mieux rentabiliser votre temps, doublant la production horaire par rapport au champ classique.

Cute Divider

Conclusion :

Nous avons terminé nos expérimentations sur la disposition des cultures. Nous avons étudié et illustré comment la croissance des plantes étaient gérées par le jeu, en montrant notamment que les plantes voisines pouvait diminuer la vitesse de pousse. Nous avons confirmé que la disposition en bandes permettaient le meilleur rendement horaire.

J’espère que cet article vous aura intéressé et que vous avez eu autant de plaisir à le lire que moi à l’écrire. N’hésitez pas à donner vos retours dans les commentaires, ainsi que des expériences que vous voudriez tester sur les mécaniques de jeu dans Minecraft (je remercie d’ailleurs The_MurmeX pour son commentaire avec ce sujet). À bientôt dans la TestZone.

Cute Divider

Téléchargement :

Pour tester par vous-même, voici le monde de test utilisé pour obtenir les résultats présentés :

[1.8+] TestZone 5

A propos de brusicor02

Rédacteur sur Minecraft-France. Il est capable de s'amuser avec quelques câbles de redstone et des blocs de commande pendant des heures et d'en faire un circuit à la MacGyver.

Ceci vous intéresse peut être

[Astuce] Réaliser un piège à mob en survie

A l'aide de cette astuce, vous allez découvrir comment faire simplement un piège à mobs.

13 commentaires

  1. Cet article est juste parfait. C’est juste excellent, continue, moi j’en veux plus!

  2. J’ai enfin compris comment tout cela fonctionnait !
    Merci pour cet excellent article, très complet ;)

  3. Superbe ! Je pige rien aux formules mais on voit bien que le travail accompli est fou !

    Ps : envoie ton article à Nature

  4. Exellent, comme d’hab. J’espère que sa te servira un jour dans un CV ! =D

  5. @cercus Et pourtant, c’est bien pratique que ce soit en chimie ou en physique. Je crois aussi que le programme de prépa MP/PC est toujours le même par contre et qu’ils mangent les équa diff du second degré dès la première année.

  6. @cercus : En effet, c’est un changement assez récent. ^^
    Et les profs de maths de S ont quand même tendance à enseigner les équa diffs de premier ordre en toute fin d’année.

  7. “Il s’agit d’une équation différentielle du premier ordre, et sa résolution est au programme des terminales scientifiques. La forme générale des solutions est ”

    -> Ce n’est plus au programme

  8. Excellent boulot!

  9. GG l’article est genial , super bien redige et tres professionnel juste bravo

  10. Jé pa conpri l ékasion mais le reste j’ai trouvé ça génial .
    GG à toi !

  11. et bien c’est… comment dire… TRES complexe surtout au niveau des equation… je suis qu’en 3eme moi! mais n’enpeche cet article vas bien m’aider…

  12. Très complet comme dossier, bien joué ;)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *