Comme beaucoup de gamedev, la réponse à la façon dont les jeux de simulation de ville accomplissent cet exploit apparemment impossible est: ils ne le font probablement pas. Ils font juste semblant. ;)
Des sims comme ceux-ci fonctionneront généralement à un niveau "fragmenté", modélisant des groupes de personnes, des quartiers, des couloirs de circulation ou d'autres dynamiques de la ville dans son ensemble, plutôt que de traiter l'IA pour chacun des milliers ou des millions de résidents.
Il y a plusieurs façons dont nous pouvons aborder cela:
"Sparse" bottom-up: ici, nous simulons toujours les résidents individuels de la ville, mais pas "trop" d'entre eux, et pas chaque image. Vous pourriez penser à cela comme un sondage ou un recensement délivré à un échantillon aléatoire de personnes chaque semaine. Vous interpolez les résultats pour arriver à des estimations de la population virtuelle plus large - où ils vivent, leur vocation, leur revenu, leur démographie, etc.
Ainsi, par exemple, si vous ne simulez qu'une centaine d'habitants de votre ville et que 5 d'entre eux sont des étudiants, vous pouvez estimer qu'environ 5% de la population de votre ville sont des étudiants et modéliser la demande d'écoles en conséquence.
Vous devrez peut-être recréer occasionnellement vos échantillons aléatoires à partir de la répartition de la population de votre ville, pour éviter un regroupement excessif / clairsemé (par exemple, si un quartier devient impopulaire et que tous les habitants du recensement s'éloignent, vous voulez noter l'exode sans le quitter complètement). dépourvu de représentation dans votre sim!)
De haut en bas: vous obtenez ici une formule maîtresse qui examine votre ville et modélise sa dynamique dans son ensemble. Dans un style similaire à la macroéconomie, nous négligeons les détails des agents individuels, ou les considérons comme une sorte de "fluide" continuellement divisible de l'activité économique qui s'écoule selon des lois fondées sur des principes.
Plutôt que de penser aux préférences individuelles et à la variabilité des personnes, vos règles de jeu pourraient ressembler davantage à des équations différentielles reliant les proximités d'agrément et les taux d'imposition et les productivités et les valeurs des propriétés et les taux de criminalité et et et ...
Middle-out: divers hybrides entre les deux sont possibles - par exemple, simuler chaque «faction», «industrie» ou segment démographique de la ville comme sa propre méta-personne, prendre ses propres décisions individuelles, mais réparties dans une carte thermique ou la fonction d'onde à travers la ville plutôt que d'exister dans un seul corps. Ou en découpant la ville en quartiers qui traitent chacun leurs propres règles à plus petite échelle en interaction avec leurs voisins.
Maintenant, lorsque le joueur fait un zoom avant assez près pour voir des personnes individuelles, ou regarde des rapports de statistiques citant le nombre d'individus - ce n'est pas nécessairement la vérité fondamentale qui est utilisée pour exécuter la simulation. Ils peuvent plutôt en être un produit présumé.
Disons que nous zoomons sur un bloc de ville particulier. De notre simulation globale de la ville, nous connaissons la population approximative de cette partie de la ville, les types d'activités qui s'y déroulent, les moments de la journée où elle est active. Donc, sur demande, nous pouvons engendrer un nombre approprié de personnes de la démographie appropriée faisant ce genre d'activités là-bas. Leur IA peut être très simple, peut-être aussi peu que jouer une animation sur place ou suivre un point de cheminement jusqu'au bord de la porte / de l'écran le plus proche où ils peuvent réapparaître.
Cela signifie que nous n'aurons généralement pas besoin de rechercher le chemin pour chaque agent. Au lieu de cela, nous pouvons effectuer une passe principale de cartographie des flux sur l'ensemble du réseau routier, afin d'identifier le volume global des différents types de trafic le long de chaque segment. Ensuite, nous pouvons faire apparaître suffisamment de véhicules des bons types dans ces segments pour refléter cette densité. Une fois générés, les agents peuvent simplement se débrouiller avec une direction locale ou des points de cheminement pré-générés pour arriver à un point de réapparition. Garder les placards de réapparition le long de chaque segment correctement équilibrés avec le taux de désapparition nous permet de maintenir le volume constant de trafic que nous voulons.
De cette façon, les personnes et les véhicules que le joueur voit sont des figments, comme un système de particules gonflé donnant l'impression de nuages réalistes sans réellement calculer la dynamique des fluides complète sur chaque molécule de vapeur. ;) Nous les organisons en set dressing pour communiquer l'état de la simulation, plutôt que de la piloter.
Pour de nombreux jeux, cela suffira. Le joueur n'est souvent pas en mesure de sélectionner un agent individuel pour les interroger sur ce qu'ils font là ou où ils vont, il est donc difficile de repérer les coutures et de remarquer si un agent fait quelque chose qui n'a pas de sens, comme conduire trois fois dans le même bloc.
Mais si vous avez besoin d'agents absolument cohérents dans un environnement densément peuplé, vous pouvez envisager une technique soignée appelée " Génération Alibi ". Il s'agit d'une technique d'échantillonnage sophistiquée qui vous permet de générer des agents que vous attendez de trouver dans une situation donnée. Ensuite, si le joueur essaie d'en étudier un plus en détail, vous pouvez rétroactivement échantillonner plus de détails sur ce qu'il fait, d'une manière cohérente avec ce que le joueur a observé à ce sujet jusqu'à présent. L'idée est que vous bénéficiez toujours la plupart du temps des avantages légers des personnes "remplaçantes en carton", mais sur place, elles peuvent constituer un alibi plausible pour passer pour des agents entièrement simulés.