traduction par un des membres de c6 "barda"
très intéressant quand au fonctionnement de l'ia en combat !
de rof en passant par bos
l'ia de rof amélioré et expliquée en détail
si la lecture ne vous fait pas peur et que les sim aérienne vous botte
je vous conseille vivement de le lire
Re: Developer Diary # 36
Post Number:#10 Postby Barda » 12 Oct 2013 15:13
Bonjour les amis !
On m’a rapporté que vous avez apprécié mes précédents textes sur l’histoire et les principes des “Modèles de vols” dans notre jeu et que vous vouliez en savoir plus .
Bien, c’est dur pour moi, le Chef Projet, d’écrire des textes intéressants sur notre travail ; parceque c’est très « technique ». C’est rempli de définitions complexes et de sujets ardus, mais bon essayons.
Comme mon précédent texte parlait des modèles de vols des avions, cette fois, parlons de l’intelligence articielle des pilotes de ces avions.
Commençons par des définitions importantes :
Généralement, il est difficile de trouver des différences dans les systèmes IA des simus de vol modernes parce que les principes appropriés sont largement connus et utilisés par les dév.
Les IA pilotes comme les autres IA contrôlant un véhicule sont connus comme des « Machines à états » . Cela veut dire que la totalité des tâches gérées par l’IA est découpé en régle basique numérique (un état) dans lequel le comportement de l’IA peut-être décrit comme son propre algorythme simple contenant un minimum de conventions.
Pour un pilote de la 2e guerre mondiale (WW2), nous parlons d’entre 20 et 30 variations de ces états :
Taxier (rouler), décoller, faire le point, suivre le leader, trouver et désigner des cibles, engager une cible aérienne, combat aérien etc…
Il y a des conditions particulières pour chaque état qui détermine son activation ou sa désactivation.
Chaque état contient un algorithme pour chaque commande de vol d’avion, système et armement.
Par exemple, l’état « Engager une cible au sol » a 5 niveaux de décision basique :
1- L’IA construit une trajectoire de vol et un gabarit de vitesse décrivant sa trajectoire dépendant de sa position et de celle de la cible
2- L’IA contrôle le manche,palonnier et gaz pour rester sur sa trajectoire et garder une vitesse appropriée, Tout en prenant en compte l’altitude courante et les caractéristique spécifiques de l’avion.
3- L’IA continue en permance d’évaluer la situation de l’avion. En cas d’apparition de menace ou si la cible effectue des manœuvres d’évitement, ou si une cible de plus haute priorité apparait ; l’IA casse « l’état d’engagement » et entre dans un autre « état » plus approprié aux nouvelles circonstances.
4- L’IA continue de suivre les commandes provenant du script de mission. Quand une nouvelle commande arrive, il désengagera et entrera dans l’état approprié déterminé par le script.
5- L’IA surveille l’état de son appareil. Si les quantités de carburant ou de munitions sont estimées trop faible pour procéder à l’attaque, il désengagera et entrera dans l’état « Retour à la base ».
Ainsi, comme mentionné auparavant, cette approche est pratiquement utilisée dans toutes les simulations de vol modernes. Ce qui amène la question suivante :
Pourquoi les logiques d’IA sont-elles si différentes dans les différents jeux ?
Comme toujours le diable est dans les détails, même si l’architecture de l’approche commune du comportement des IA a été réglée depuis des années. Les algorithmes de décision qui permettent de passer entre les états, ainsi que les circonstances qui causent la bascule d’un état à l’autre, sont implémentées de manières différentes dans tous les projets.
C’est à ce niveau qu’on peut voir les différences entre les IA des différentes simus de vol et où les IA trouvent leur individualité.
Les avions IA dans ROF
Quand nous avons travaillé sur l’IA pour ROF, nous avons travaillé de façon similaire à tous ses prédécesseurs; toutefois nous avons ajouté un zeste de ce qui l’a différencié compare aux IA précédentes. Nous avions choisi d’ajouter 2 caractéristiques :
Les pilotes IA dans ROF volent avec exactement le même avion que le joueur, sans aucune amélioration de physique. Cela plait au joueur quand une IA bouge comme si elle était vivante ; au décollage et à l’atterrissage, quand elle manœuvre, en dog fight ou quand elle est touchée.
Les joueurs ne se sentent pas bernés par une IA qui vole sur des rails, et ils trouvent gratifiant de contrer une manœuvre d’IA ennemie parce qu’elle n’utilise pas de modèle de vol simplifié. On ré-équilibre la situation.
Un effort particulier a été porté sur l’approche complexe des logiques d’état (comme “Recherche”, “désignation de la priorité des cibles »). L’algorithme a été complexifié de beaucoup d’embranchements, avec des conditions additionnelles multiples dans le but d’améliorer l’effet du monde virtuel sur les avions contrôlés par l’IA. Ceci afin de rendre vraiment significative cette influence quand il est crucial de prendre des décisions tactiques comme choisir une cible ou la désigner à son ailier.
J’ai mentionné la 1ère caractéristique dans ma précédente note, donc je vais me concentrer sur le 2e sujet.
Donc, comment avons-nous créé l’algorithme pour choisir une cible ? En tout premier lieu, on commence par examiner comment c’est fait en vrai, à la fois par un pilote expérimenté et par un débutant.
C’est pourquoi, nous avons invité 2 joueurs expérimentés d’IL2 et un consultant historique, et passé des heures à leur demander de décrire leur raisonnement de combat qui influence la priorité de désignation des cibles. Evidemment, nous avions besoin d’un système de référence, un « banc d’essai » qui nous permettrai de comparer tous les autres facteurs d’une situation de combat. Cette référence pourrait nous aider à les évaluer puis à les comparer entre eux.
Le paramètre de « Temps d’entrée en portée de tir » (closing time) fut choisit comme référence, et des tonnes de questions sont arrivées :
« Imaginez que vous avez 2 cibles dans les 12, vous croiserez la cible A dans 1 min et la B dans 2 min, mais la cible B est plus rapide (donc plus dangereuse). De combien doit-être la B plus rapide pour que vous choisissiez de l’attaquer en 1er en ignorant la A ? »
Et l’expert a dit : « J’attaquerai la cible la plus rapide si la différence de vitesse dépasse 100km/h ».
Nous avions une référence montrant l’importance du différentiel de vitesse et du « closing time ».
La même approche fût utilisée pour d’autres paramètres incluant :
Différence de vitesse max des cibles à l’altitude actuelle
Différence de taux max de montée des cibles actuelles
Différence d’altitudes entre les cibles
Différence de supériorité numérique en avions ennemis proches de la cible
Différence de types de cibles (chasseur, reco, bombardier)
Nous avons travaillé avec ces références et fait les corrections nécessaires pour les réglages de niveaux de difficulté et nous avons obtenu une méthode standard de priorité de désignation de cibles. Par exemple, un temps de jonction de 60sec ajoute « +1 » au compteur de priorité, donc 120 sec donnera « +2 ». La situation décrite précédemment par l’expert a conduit vers le fait qu’une différence en vitesse max de 100km/h ajoutera aussi « +1 » en priorité, alors que 50km/h donnera « +0.5 » et ainsi de suite.
Après ça, le pilote IA doit choisir une cible entre celles qu’il peut voir. En premier, on élimine les cibles selon les critères suivants :
- Les cibles qui prendraient trop de temps à intercepter (trop loin, trop hautes ou trop rapides)
- Les cibles entourées par plus d’avions ennemis et d’avions alliés autour de l’IA, ce qui sous-entend un suicide (cette condition est très utilisée par les pilotes IA de rang As)
-La cible est plus haute que l’alti max de l’avion IA
-Les cibles sont plus hautes et leur taux de montée plus élevé que l’avion IA
Après avoir éliminé les cibles non atteignables, on commence à trier les restantes par priorité. A ce moment, on passe toutes les cibles qui ont passé le filtre d’élimination et on les compare aux autres cibles restantes selon les catégories précédemment citées. On compare les paramètres de priorité des cibles 2 à 2. Puis chaque cible reçoit son score et on les trie par ordre croissant.
Au final, on dispose d’une liste de cibles filtrées par priorité. Quand c’est fait, il est temps de désigner ces cibles à l’ailier. Ceci se déroule en fonction du niveau de l’IA et du nombre de cible.
Un chef IA de haut niveau, s’il domine en altitude et en nombre d’ailiers, donnera l’ordre d’attaquer mais seulement à une quantité réduite d’ailiers. Le reste de la formation restera en altitude et fournira la couverture haute en cas de menace subite.
Un chef IA de bas niveau désignera 1 chasseur par cible en commençant par celles qui ont la plus haute priorité, alors qu’un chef IA de haut niveau en désignera 2 par cible et ainsi de suite.
De plus, les ailiers IA observant aussi la scène en continu. Ils attaqueraient la cible donnée par le leader, mais en cas de danger, ils abandonneront la tâche en cherchant à se protéger eux-même.
Ainsi, les ailiers IA surveillent leur chef, et s’il est attaqué par une cible non désignée, ils l’engageront et lui fourniront une protection. Et ils stopperont aussi leur attaque si elle les emmène trop loin de leur chef, en retournant en formation.
Au final, ROF a donc un algorithme pour la priorité de désignation de cible fourni par le chef de section qui était le plus réaliste et sans précédent en son temps. Le système était transparent et pouvait être façilement modifié en bougeant les paramètres appairés. En plus, ROF possédait des comportements IA comme :
Manœuvres évasives anti DCA, système de visibilité prenant en compte l’éclairage, la couverture nuageuse, les projecteurs de recherche etc….
Le paramètre « éclairage » prennait en compte aussi les sources lumineuses de l’avion lui-même, les flashes de tir et l’incendie des structures.
Je dois noter, qu’une part de la communauté à pris ces caractéristique comme des bugs. Par exp, quand un chef de formation IA refusait d’attaquer un joueur en cas d’infériorité numérique.
Actuellement ce chef IA refuse une attaque suicidaire qui le mènerait à la mort avec ses ailiers.
Une autre situation sujette à discussion était que le chef IA n’attaquait pas un vol de reconnaissance directement au-dessus de sa formation à haute altitude.La raison est simple :Le chef IA estimait le temps de montée à cette altitude et réalisait qu’il arriverait trop tard, la reco pourrait rejoindre son secteur du front. Dans ces situations, nous avons dû expliquer aux joueurs que les pilotes IA haut niveau n’étaient pas idiots et qu’ils ne se laisseraient pas embarquer dans une telle aventure.
Bien sûr, un tel niveau de complexité de l’IA peut causer des bugs au début, mais nous les avons trouvé et réparé depuis le temps. Je dois particulièrement remercier Alexander Patryaev, le programmeur IA, qui a créé l’architecture du programme et qui a écrit le code qui fonctionne dans ROF depuis 4 ans et demi.
Son travail sert de base à l’IA de notre nouveau projet IL2.
Les avions IA dans IL2 :BOS
Laisser moi admettre que l’IA pour un pilote de la première guerre mondiale dans ROF a été conçue avec une perspective de développement à long terme vers les avions de la 2e guerre mondiale.
Basiquement, on aurait pu la transporter directement de ROF avec des changements minimaux et l’implémenter dans IL2 BOS. Toutefois nous avons décidé de la porter vers un nouveau plus haut niveau et d’effectuer des changements espèrés par la majorité (des joueurs). Dans ROF nous étions concentrés sur les algorithmes de recherche de cibles et de priorités de désignation. Dans IL2 BOS, nous portons nos efforts sur les manœuvres de combat en dogfight. Une décision typique d’un pilote IA de ROF dans un « état d’attaque de cible aérienne » est de réaliser une manœuvre de pilotage standard – effectuer un virage serré vers la cible, peu importe où elle se trouve (à droite, à gauche, au-dessus ou en dessous). Pour la WW1, ceci à un sens, les combats étaient très compacts, avec des mouvements rapides et de grand taux de virages. Toutefois, les vitesses de manœuvres étaient très faibles (parfois moins de 100km/h)
La WW2 montre un visage complétement différent : Le combat requiert un espace significatif, la distance entre les adversaires est plus grand la majeure partie du temps, les vitesses sont plus grandes et les taux de virages plus faibles. Dans cette situation il est plus facile de concevoir une structure de manœuvre de combat et de lui donner une forme spécifique. Cette mission a été donnée à notre nouveau programmeur, Ilya « Naryiv » Steshov. Ilya a commencé par modifier finement et polir l’IA de ROF, les améliorations réalisées depuis le printemps 2013 lui sont dus.
D’une autre part, une liste de besoins a été établie avec l’assistance d’experts invités, consultés au sujet des manœuvres de combat : Quelle astuces sont utilisées, quand ont-elles été utilisées, comment joue le niveau du pilote sur la capacité à réussir des manœuvres particulières, quelles sont les conditions pour telle ou telle manœuvre etc……
Avec l’expertise très riche obtenue, nous avons trouvé une voie pour résoudre cette tâche : « L’état d’attaque de cible aérienne » est monté au niveau de macro fonction en contenant lui-même une « machine à état »à un niveau inférieur. Ainsi chaque manœuvre de dogfight a été construit comme un « état » individuel de cette « machine à état ».
Ce qui veut dire que la logique de cette macro fonction reste fonctionnelle en accord avec chaque condition d’entrée/sortie, ce qui nous a permis d’implémenter cette mise à jour dans ROF sans changement significatif d’architecture sur la macro-fonction
Maintenant, jetons un œil sur les manœuvres varies qu’un IA peut utiliser dans un dogfight dans BOS:
“Tourne et tire”- Un mode basique similaire à celui utilisé dans ROF. Utilisé si uune cible est proche de la ligne de tir et tout IA doit ajuster sa trajectoire par un virage et faire feu.
“Montée à énergie verticale” – l’avion grimpe fort à régime moteur max, en convertissant la vitesse en altitude. Usuellement utilisée pour sauver de l’énergie quand l’IA est plus rapide que l’ennemi et pourrait le dépasser.
“Immelman”- L’avion fait un demi looping en montée, pratiquement le même effet que la montée à l’énergie.
“Montée forte”-L’avion monte fort, mais pas verticalement. L’idée générale est la même que la montée à l’énergie : convertir vitesse en altitude
“Virage de combat” – L’avion monte en suivant une spirale ascendante, reduisant sa vitesse. Utilisée après avoir engagé une cible par-derrière.
“Spirale montante” – L’avion tourne en direction approximative de la cible au régime moteur max, conservant vitesse et gain d’altitude. Cet algorithme est utilisé si une cible est à plus de 100-200 mètres au-dessus et sur le côté (pas directement devant)
“Spirale descendante” – L’IA engage son virage si la cible est plus basse de 100-200 m et pas directement devant. Peut-être utilisée pour « sortir » un ennemi de la queue de l’IA si l’altitude est suffisante (la spirale descendante implique des G positifs forts et prolongés)
“Virage au régime max” – L’IA tourne dans le plan horizontal au régime moteur max (et prend les G max) si la cible se situe dans l’hémisphère avant, grossièrement à la même altitude.
“Virage standard” – L’IA tourne dans le plan horizontal au régime moteur max, mais en limitant l’excès de G pour obtenir une vitesse optimale de virage. Ce virage est utilisé dans toutes les autres situations.
“Yoyo haut” – Pendant le virage,l’IA reduit son rayon de virage pour un court instant, convertissant un peu de vitesse en altitude. Ceci est pratique si la vitesse est plus élevée que l’optimal durant le virage et l’IA converti une partie de celle-ci en altitude pour ne pas la gaspiller.
“Yoyo bas” – Pendant le virage, l’IA augmente légèrement le rayon pendant un bref instant, convertissant un peu d’altitude en vitesse, réduisant le temps nécessaire au virage, mais en augmentant les G. L’IA fait ceci si l’angle à la cible ne se réduit pas depuis un temps prolongé ( ce qui veut dire que les 2 avions ne peuvent se départager en virage)
“Split S” – L’IA se retourne sur le dos et poursuit par un immelman au régime moteur max avec beaucoup de G. Peut-être utiliser pour sortir un ennemi de la queue de l’IA si la réserve d’altitude est suffisante.
“Queue de poisson” - L’IA ajuste le gouvernail tout en compensant pour garder la ligne de vol. Ceci peut conduire un ennemi à tirer mal de trop loin, pensant que l’IA change de direction.
“Ciseaux à plat” – L’IA reduit sa vitesse et vire de gauche à droite pour sortir un ennemi de sa queue,si la réserve d’altitude est insuffisante, car l’IA est plus stable à basse vitesse que l’ennemi.
“Break de dégagement – Tuck-under break” – L’IA tire nez haut et engage un tonneau barriqué. Encore une autre astuce pour sortir l’ennemi des 6. Ceci n’est pas une manœuvre simple et est seulement accessible aux IA As.
“Virage defensif” – Le pilote IA garde l’ennemi sur sa perpendiculaire en montant ou descendant en permanence. Utilisé pour éviter le tir précis de l’ennemi spécialement à longue portée.
Mis à part le nouveau système multivoie pour les manoeuvres de combat rapproché qui dépend du niveau de l’IA, nous avons travaillé sur l’ajout de plus de réalisme pour le comportement du chasseur IA en dogfight.
Nous avons implémenté un système qui limite la vision d’une cible par l’IA qui dépend de la construction du cockpit. Il est ajusté à chaque avion et ne prend pas seulement en considération le pilote qui tourne la tête mais aussi les autres mouvements possibles (quand le pilote se redresse, se penche ou regarde par-dessus l’épaule)
- Dans l’”état Dog fight” nous avons introduit une nouvelle sous-routine de recherche de cible, quand la cible est perdue pour une raison ou une autre (L’IA penche l’avion et essaye de réacquérir la cible. Si ça ne suffit pas, l’IA penche l’avion de l’autre côté jusqu’à ce qu’il estime l’avoir complétement perdue)
- Aussi dans l’”état Dogfight”, pour les cas où la cible est presque trop haute, nous avons implémenté un mode de la montée plus optimale pour que l’IA puisse la rattraper.
Pour échapper aux chasseurs ennemis, les avions d’attaque et les bombardiers ne font plus seulement des manœuvres évasives, mais peuvent plonger si l’altitude et la distance avec l’ennemi sont suffisantes.
Pour échapper aux attaques de chasseurs, bombardier et avions d’assault ne sont plus limités aux virages en S, mais peuvent plonger si l’altitude et la distance avec l’ennemi sont suffisantes.
Plus tard cet hiver, nous prévoyons d’ajouter un contrôleur aérien avancé, qui evaluera la situation de combat du secteur et dirigera les avions vers les cibles par radio. Ensuite les IA pourront coordonner leurs attaques avec le contrôleur.
- En plus du système existant d’attaque au sol, les IA seront capables d’utiliser des missile non guidés, pendant que le JU87 et le PE2 pourront bombarder en piqué vertical.
- Avec les hautes vitesses, et la variété des armes, nous avons eu besoin de revoir à la fois le calcul et la trajectoire des tirs de précision. L’IA ne se contera pas juste du déplacement de sa cible mais aussi devra prendre en compte la balistique des différents canons et mitrailleuses
Mieux encore :
Les pilotes IA sont capables des comms radio avec l’aérodrome et leur chef/ailiers
Les IA sont capables de rouler du parking au décollage, puis de revenir au parking après l’atterrissage.
-Et bien sur, les IA savent utiliser les systèmes qui n’existaient pas pendant la première guerre mondiale, et qui sont apparus à la seconde : trains rétractables, volets, bloquage de la roulette,feu de nav, feu d’atterrissage, lampes de cockpit,aérofreins, freins de roues, surcompresseur, conservateur de vitesse, verrière ouvrante, parachutage etc…..
Il est intéressant de mentionner que tout ce qui relate ici est realisé, et que vous pourrez le tester avec la version d’accès premium. Le système d’IA de ROF était déjà joliment sophistiqué, mais il est devenu plus complexe dans BOS et conduira surement à d’inévitables bugs. Mais nous devrions avoir suffisamment de temps pour le polir et jusqu’à la sortie pour obtenir un niveau d’IA de très haute qualité
Une grande question : Quelle est la raison de tout ça ? La réponse est simple – nous essayons de créer une bataille aérienne aussi proche de la réalité que possible, pas seulement en créant des modèles de vols réalistes ( le sujet du dernier texte) mais aussi avec un comportement IA logique réaliste sophistiqué et multivoies pour les alliés et les ennemies.
La prochaine fois , je vous expliquerai comment nous faisons pour rendre le combat aérien plus réaliste et fascinant, car les modèles de vols et les IA ne sont pas les seuls composants du succès.
A Plus !
ZAK : Comme vous vous souvenez , nous avons promis une skin unique du Bf109 F4 pour ceux qui ont précommandé BOS avant le 1er octobre. Maintenant nous vous suggeronsde faire votre choix et de décider celui que vous préférez. Pour les détails allez voir le sujet intitulé Unique skin for Bf109 F4 suggestions
Notez que le vote démarré pour donner l’opinion des fondateurs sur l’exclusivité du mod R7 pour 109F4 est toujours ouvert
Et pour le dessert, les fond d’écran avec le lagg3 portant la skin gagnante du précèdent vote (16/9 et 4/3)