Le modèle
Chaque plan est un programme linéaire en nombres entiers mixtes qui couvre d'un coup toutes les recettes et tous les bâtiments, résolu avec HiGHS. Chaque recette que débloquent les niveaux de vos bâtiments et vos modules, \(r\), reçoit une cadence \(b_r\) (lots par seconde) et un nombre entier d'unités \(u_r\) qui lui sont affectées : des parcelles pour une culture, des machines pour un objet transformé.
\[ \max \ \sum_i p_i \, s_i \;-\; \sum_r c_r \, b_r \]
où \(s_i\) est la quantité de l'objet \(i\) vendue par seconde au prix \(p_i\), et \(c_r\) le coût en graines d'une culture. Pendant le Festival de la Lune des moissons, les graines des cultures de saison coûtent du Blé Rayon de lune à la place, que les plans considèrent comme illimité. Sous les contraintes :
- Unités entières. \(b_r \, t_r \le u_r\), avec \(u_r\) un nombre entier et \(t_r\) le temps par lot. Une unité exécute une recette et reste en marche.
- Équilibre des objets. Tout ce qui est produit couvre ce qu'utilisent les autres recettes plus ce qui est vendu. Une variante rapide produit le même objet que la variante normale.
- Ce que vous possédez. Pour chaque bâtiment et chaque niveau \(L\), les unités affectées aux recettes exigeant le niveau \(L\) ou plus totalisent au plus ce que vous possédez à ce niveau. Une parcelle de niveau supérieur peut exécuter une recette de niveau inférieur.
- Environnements de culture. Une culture qui demande Frais, Chaud, Glacial ou Brûlant pousse à pleine vitesse sur une parcelle couverte par une Fournaise ou un Refroidisseur réglé sur ce mode, et plus lentement sur une parcelle non couverte (voir plus bas). Une culture Adéquat exige une Lampe solaire et ne pousse nulle part ailleurs.
HiGHS prouve que le plan est le meilleur possible. Dans le cas rare où cela prend plus de 30 secondes, il s'arrête avec le meilleur plan trouvé jusque-là et les résultats indiquent à quelle distance de l'optimum il pourrait se situer. Chaque plan est ensuite revérifié indépendamment avant d'être affiché.
Temps par lot
Les cultures et les arbres prennent leur temps de pousse, moins l'arrosage des Aniimo : une parcelle demande de l'eau deux fois pendant sa pousse, aux deux tiers puis au tiers du temps restant, et chaque arrosage retire un huitième du temps propre de la culture. Une culture de 40 minutes revient à 30 et une de 4 minutes à 3. Une culture privée de son environnement pousse plus lentement mais perd quand même les mêmes minutes : une culture de mode Chaud sans bâtiment prend 50 minutes et tombe à 40 avec l'arrosage ; ce point n'est pas encore vérifié en jeu.
Tout le reste a une charge de travail, et sa durée dépend de l'Efficacité \(e\) de l'Aniimo, qu'affiche l'écran du bâtiment, et d'une cadence de base \(r\) :
\[ t = \frac{\text{charge}}{r \times e \times 1.2^{\,\text{personnalité}}} \]
Dans un bâtiment de transformation, \(r\) vaut une charge de travail par seconde. Dans un bâtiment de collecte (Puits, Mine, Château de sable, Maison de rosée et similaires) ainsi qu'à la Polisseuse à tapis de danse et à la Fabrique d'Aniipods, elle est plus élevée sur les recettes exigeant un niveau de métier plus haut : 1 par seconde au niveau 1, 1,25 au niveau 2 et 1,5 au niveau 3. Un Fruit de croissance, de 5 400 de charge de travail, prend une heure à 100 %.
L'Efficacité \(e\) dépend du niveau de métier de l'Aniimo par rapport au niveau qu'exige la recette. Au niveau exact requis, elle vaut 100 %. Dans un bâtiment de transformation, un niveau au-dessus du besoin de la recette donne 300 %, et chaque niveau suivant ajoute 100 % (400 %, 500 %). Dans un bâtiment de collecte, chaque niveau au-dessus ajoute une demi-charge de travail par seconde, quelle que soit la recette, ce qui, rapporté à la cadence de base de la recette, donne +50 % par niveau sur une recette de niveau 1, +40 % sur une de niveau 2 et +33 % sur une de niveau 3. La Polisseuse à tapis de danse et la Fabrique d'Aniipods ajoutent 40 % par niveau. Le terme de personnalité ne compte que si l'Aniimo a la personnalité du bâtiment (+20 %) ; la Polisseuse et la Fabrique d'Aniipods n'en ont pas. Les niveaux de métier s'arrêtent à 4.
Couverture des environnements
Les environnements sont des paliers de température : Glacial -2, Frais -1, aucun bâtiment 0, Chaud +1, Brûlant +2. Une culture pousse à 100 % dans son propre environnement, 80 % à un palier d'écart, 50 % à deux paliers et 20 % au-delà. Une parcelle non couverte est neutre : une culture Frais ou Chaud atteint quand même 80 % et une culture Glacial ou Brûlant 50 %, ce qui explique que les plans les fassent parfois pousser sans aucun bâtiment. Adéquat est à part : ces cultures exigent une Lampe solaire. L'Efficacité allonge le temps de pousse : une Rose à 80 % prend 50 min au lieu de 40 min pour les mêmes 8 roses, avant arrosage.
Les températures s'additionnent là où deux bâtiments atteignent une même parcelle, plafonnées à -2 et +2, et le jeu affiche le résultat sur la parcelle elle-même : Brûlant et Frais ensemble donnent Chaud, Chaud et Frais donnent Tempéré. Les plans en tirent parti : une Fournaise sur Brûlant à quatre cases d'écart d'un Refroidisseur sur Frais couvre trois zones à la fois, Brûlant, Chaud entre les deux, et Frais. L'emplacement du second bâtiment détermine la répartition : tous les placements dont la couverture chevauche encore celle du premier sont calculés, en ligne ou en diagonale, depuis le contact (6 parcelles, 24 au milieu et 6, pour un Champ) jusqu'à un chevauchement d'un coin (22, 10 et 22). Deux bâtiments aussi proches couvrent moins de parcelles au total que deux bâtiments éloignés, donc un plan ne le fait que si la troisième zone vaut davantage. Placez la paire exactement comme l'indique le schéma du plan, et gardez la zone de tout autre bâtiment à l'écart.
Un Refroidisseur fait 2×2 cases, et une Fournaise et une Lampe solaire une case chacune ; chacun couvre une zone de 9×9 centrée sur elle. Une parcelle compte comme couverte si une partie d'elle s'y trouve, et tout s'aligne sur des quarts de case. Chaque façon utile qu'un bâtiment peut couvrir un mélange de Champs, de Bosquets et du reste est calculée une fois par un empaquetage exact ; le plan choisit ensuite un mode et l'un de ces mélanges pour chaque bâtiment.
Montée de niveau
Une montée de niveau coûte des Pièces de Foyer \(C_0\) plus les matériaux qu'elle demande, \(C_1\) et \(C_2\) (Blocs de bois et Sable minéral bruts jusqu'au RV 6, un objet de l'Établi de menuiserie et un objet du Four à cheminée à partir du RV 7), et vous pouvez déjà en avoir une partie de chacun, \(S_j\). Le plan trouve le plus grand nombre de montées de niveau par jour, \(\lambda\), qu'il peut tenir, avec, pour les Pièces de Foyer et chaque objet :
\[ \text{produit}_j \ \ge\ \frac{\lambda \, (C_j - S_j)}{86400} \]
(\(\text{produit}_j\) par seconde), donc la montée de niveau prend \(1/\lambda\) jours. Le stock de tout ce qui est plus bas dans une chaîne (Blocs de bois, Sable minéral, un palier inférieur) compte dans ce qui est produit, puisque l'Établi de menuiserie et le Four à cheminée le transforment vers le haut. Deux résolutions supplémentaires suivent, chacune conservant ce que la précédente a trouvé : le maximum de Pièces de Foyer à ce rythme, puis le plus possible d'objets de montée de niveau en plus, selon le temps libre de l'Établi de menuiserie et du Four à cheminée. C'est pourquoi le minerai finit souvent avant le bois et apparaît en surplus.
Chaque palier consomme 8 du palier inférieur (4 pour le dernier), donc l'Établi de menuiserie et le Four à cheminée alternent entre les paliers au lieu d'exécuter une seule recette comme les autres bâtiments de transformation.
Priorités
Le plan est résolu une fois par priorité cochée, dans votre ordre. Chaque résolution produit le plus possible de sa priorité en conservant au moins ce qu'ont atteint les précédentes ; une dernière résolution gagne ensuite autant de Pièces de Foyer que tout cela le permet. L'EXP d'Aniimo, les Aniipods et, pendant le Festival de la Lune des moissons, les Points de la Lune des moissons comptent comme des monnaies à part, donc le même modèle les traite comme les Pièces de Foyer.
Temps pour atteindre un objectif
Chaque produit commence à s'accumuler une fois que son premier lot a traversé sa chaîne d'ingrédients (son délai), puis garde sa cadence stable :
\[ \text{quantité}(t) = \sum_i \text{cadence}_i \cdot \max(0,\ t - \text{délai}_i) \]
Cette quantité ne fait que croître avec \(t\), donc le temps pour atteindre une cible se trouve par recherche dichotomique.
Le planificateur de secours
Si le planificateur exact ne peut pas s'exécuter (rare ; recharger la page règle généralement le problème), un ancien planificateur prend le relais. Il résout le même problème sous forme de programme linéaire continu, arrondit à des parcelles entières et à une recette par machine, puis résout à nouveau. Ses plans sont généralement proches de l'optimal sans garantie, et les résultats indiquent quand il a été utilisé.