Here is a very nice coding game with a good difficulty. Several ways to solve the problem.
Don’t miss it!
http://alexnisnevich.github.io/untrusted/
Thanks Yann đ
Here is a very nice coding game with a good difficulty. Several ways to solve the problem.
Don’t miss it!
http://alexnisnevich.github.io/untrusted/
Thanks Yann đ
Had the following problem these past days after mounting my new rig:
[PROBLEM]
My computer was “randomly” crashing. My monitor was turning black (but stayed ON) and I had to reboot manually. It used to happen a lot:
My dump files mentionned:
System:
SYSTEM_SERVICE_EXCEPTION nvlddmkm.sys
[…]
Probably caused by : nvlddmkm.sys ( nvlddmkm+39be1c )
Application:Â the thread tried to read from the virtual address for which it does not have the appropriate access
I tried to remove/install all kind of nvidia drivers without any success.
[SOLUTION]
GO to the following website and download/install the bios update (under Driver & Tools)
VBIOS update for GTX770-DC2OC-2GD5 & GTX770-DC2-2GD5
Improve stability
https://www.asus.com/Graphics_Cards/GTX770DC2OC2GD5/#support
It worked for me!
Il y a quelque temps s’achevait le concours:Â AI Sandbox: CTF(Capture The Flag)
Jâai terminĂ© Ă la 6Ăšme position (70 participants) pour une durĂ©e d’1 mois et demi dessus (enfin, des soirs et weekends), assez intense (surtout avec le taff en parallĂšle) mais super sympa ! J’ai mĂȘme pu ĂȘtre interviewĂ©Â sur les stratĂ©gies mises en place (la classe! :D)
Voici un match (un des seuls que j’ai pu sauvĂ©, oĂč mon IA prends cher contre le 3Ăšme de la compĂ©tition)
Quel Ă©tait le but du concours?
Ce concours consistait Ă dĂ©velopper une Intelligence Artificielle (IA) pour le jeu « Capture the flag » LâimplĂ©mentation du capture the flag Ă©tait on ne peut plus simple : rĂ©cupĂšre le drapeau ennemi et ramĂšne le Ă la zone de score pour marquer un point. Le bot qui a le plus de points Ă la fin gagne la partie ! Ce concours Ă©tait organisĂ© par AiGameDev.com et parrainĂ© par « Guerilla games », dĂ©veloppeurs de la sĂ©rie « Killzone » sur Playstation
A savoir:
– Le jeu est en temps rĂ©el. Certaines actions sont automatiques (comme tirer : il suffit dâavoir un ennemi dans son champs de vision et Ă porter de tir)
– Chaque ordre donnĂ© Ă un bot entraine un freeze dâune seconde (dâoĂč une partie de la difficultĂ©Â : il ne faut pas redonner des ordres sans cesse)
– Sur la carte, vous pouvez voir des petits blocs (blanc/gris). Les combattants ne peuvent pas passer Ă travers mais ils peuvent voir et tirer par-dessus. Les autres blocs sont trop grands pour voir quoique ce soit
Détails du développement (Fonctionnalités triées par ordre chronologique de dev)
A.     Récupération du Drapeau & parcours pour le ramener
Ce sont les 2 premiers rĂŽles que jâai implĂ©mentĂ©Â :
Pour faire cela, jâai utilisĂ© un algorithme A* (astar). La pondĂ©ration des cases a beaucoup Ă©voluĂ©e durant le dev, et a fini par prendre en compte
–         Les positions oĂč lâennemi dĂ©fend
–Â Â Â Â Â Â Â Â Â Les positions oĂč mes combattants sont morts.
–         La proximitĂ© du spawn ennemi. (en lien avec la vitesse de respawn (diffĂ©rente selon les parties, et le nombre de combattants total) Lorsquâun de mes combattants porte le drapeau, un autre va sur lâendroit de spawn du drapeau ennemi dans le but de maximiser les points marquĂ©s.
B.     Défendre (camper) des endroits
Ensuite jâai voulu avoir des protecteurs de drapeau.
Pour cela, jâai implĂ©mentĂ© un algorithme permettant de calculer la visibilitĂ© de chaque cellule sur la carte (pour que mes combattants puissent se cacher au maximum).
LâĂ©quipe dâadmin AIGameDev nous ayant donnĂ© quelques indices trĂšs utiles pour rĂ©aliser ce type dâalgo.
Jâai utilisĂ© la mĂ©thode du âray castingâ pour obtenir ce que je voulais. VoilĂ un exemple de carte de visibilitĂ© calculĂ© au dĂ©but de chaque match (300ms~~ pour gĂ©nĂ©rer cela)
Au final jâai utilisĂ© cette fonctionnalitĂ© de recherche de points de campe assez souvent pour:
–Â Â Â Â Â Â Â Â Â DĂ©fendre la zone oĂč mon drapeau apparait
–Â Â Â Â Â Â Â Â Â DĂ©fendre la zone de score de lâennemi.
–         DĂ©fendre mon drapeau sâil a Ă©tĂ© pris et relĂąchĂ© par un ennemi.
–         Attaquer les points oĂč mes ennemies pourraient se trouver pour protĂ©ger leur drapeau.
Cette fonctionnalitĂ© donne parfois de mauvaises positions (trop proche dâun bloc adjacent et empĂȘchant mon combattant de voir rĂ©ellement la zone couverte)
Jâai fait des modifications Ă la toute fin pour corriger ce bug mais je nâai pas eu le temps de tester cela correctement (et jâai bien lâimpression que le bug subsiste)
Jâaurai pu faire mieux aussi dans le sens oĂč je ne prends pas en compte le chemin que les combattants ennemis prennent pour venir.
Donc il arrive (plutĂŽt souvent) que mes dĂ©fenseurs soient tuĂ©s par derriĂšre, sans quâaucune intelligence ennemie ne soit nĂ©cessaire. Pour contrer cela, je surveille lâefficacitĂ© du point de campe (si 2 dĂ©fenseurs meurent sans tuer personne, lâendroit sera recalculĂ©)
C.      Attaque des combattants ennemis les plus proches
Jâavais donc mes combattants qui dĂ©fendent, celui qui essai de rĂ©cupĂ©rer le flag.
Jâai ensuite dĂ©cidĂ© dâenvoyer tous mes autres combattants Ă des positions spĂ©cifiques (zone de spawn du drapeau ennemi, zone de scoreâŠ) jusquâĂ temps de voir des combattants ennemis.
Tout ennemi est traquĂ© en suivant la consigne suivante : « Pas plus de 2 de mes combattants affectĂ©s par combattant ennemi» Â
D.     Attaque de la base ennemie
AprĂšs un moment, jâai vu que mon IA ne pouvait pas gagner contre une dĂ©fense descente, donc jâai implĂ©mentĂ© 2 nouvelles fonctionnalitĂ©s pour y parvenir :
E.      Interception de lâennemi porteur de drapeau
  Jâai remarquĂ© que nous avions, via lâAPI, la position de notre drapeau Ă tout moment (que nous voyons notre drapeau ou non) Jâai donc implĂ©mentĂ© une fonctionnalitĂ© permettant Ă mes combattants dâintercepter lâennemi porteur de drapeau.
Seuls mes combattants ayant un job « peu important » (Ă savoir attaque de zone oĂč dâennemi) sont concernĂ©s.
F.      Etat âholdingâ dâun bot
  A la fin, je me suis concentrĂ© sur une particularitĂ© de ce concours, lâĂ©tat âholdingâ pour un combattant donnĂ©.
Cet Ă©tat se produit lorsque plusieurs combattants se rencontrent alors quâils sont Ă une distance supĂ©rieur Ă leur portĂ©e de tir, ils se regardent sans bouger et nĂ©cessite un dĂ©veloppement particulier.
Jusquâaux derniers jours avant la fin du concours, jâai eu des parties oĂč ni moi ni lâadversaire ne savait gĂ©rer cette holding state, donnant de belles parties oĂč tout sâarrĂȘte pendant quelques secondes jusquâau dĂ©blocage par un Ă©vĂšnement extĂ©rieur (un autre combattant qui passe par lĂ ). Parfois la partie freezait ainsi jusquâĂ la fin.
DĂ©sormais, lorsquâun de mes combattants est dans cet Ă©tat, il obtient lâordre dâattaquer lâennemi qui le bloque, en prenant en compte la portĂ©e de tir de cet ennemi.
Le nombre de combattants allouĂ© Ă chaque tĂąche est dĂ©fini Ă lâinitialisation, suivant le nombre de combattants total. Jâaurai pu amĂ©liorer le niveau global de mon IA en jouant un peu plus sur ces chiffres.
G. Â Â Tests and optimisations
Dans le but de tester mes fonctionnalitĂ©s, jâai fait quelques fonctions de debug afin dâĂȘtre sur que toutes les valeurs sont comme je les attends.
Evidemment un fichier de log (vu quâil Ă©tait quasiment impossible de debugger avec des breakpoints avec lâarchitecture du jeu) mais aussi des bitmaps des cartes (extrĂȘmement utiles pour vĂ©rifier la carte de poids liĂ© au pathfinding, aux positions de camp et aussi les zone de tir des ennemis suivant leurs Ă©tats.
Comme pour chaque concours dâIA, je pense quâil est extrĂȘmement important dâavoir un plan de test. De cette maniĂšre il est facile de savoir si le niveau global de lâIA augmente avec les nouvelles fonctionnalitĂ©s implĂ©mentĂ©es et sâil nây a pas de rĂ©gression.
Pour cela, jâai crĂ©Ă© une liste de .cmd qui lançait les parties avec des configurations spĂ©cifiques et Ă©crivant les rĂ©sultats des matches dans un fichier. A la fin (aprĂšs import/groupement des donnĂ©es dans Excel) Jâavais ce genre dâinfos:
TrĂšs utile pour savoir sur quelles cartes mon IA est faible. (en l’occurence la map01 ou encore la map22)
H.   Conclusion: Je pense que jâaurai pu faire mieux avec plus de temps (comme tous les participants en fait :D). Je suis entrĂ© dans la compĂ©tition Ă la fin de la phase 2.
Les participants et les admins ont Ă©tĂ© trĂšs sympa, jâai eu beaucoup de plaisir Ă monter dans le classement jusquâĂ affronter les meilleurs.
Annexes:
Une partie entre les deux premiers:
[Update]
AprĂšs de nombreux tournois, mon bot (postĂ© il y a maintenant plus de 6 mois) est dĂ©sormais premier du classement, yeyyy đ
[Post Initial]
AprĂšs AI Challenge “Ants” 2011, en manque de dĂ©fi d’IA, j’ai effectuĂ© pas mal de recherche sur internet afin de trouver un concours qui me plairait.
Et je l’ai trouvĂ© (enfin partiellement) FinalBot est un site concu il y a un peu plus d’un an, avec pour but d’hoster diffĂ©rents concours d’IA.
Lors du lancement, 2 jeux sont mis en place:
Un jeu de dark chess (les Ă©checs avec du brouillard de guerre! Il fallait y penser!) et , de maniĂšre plus importante: un jeu de Hold’em Poker.
J’avais dĂ©jĂ eu l’envie de faire une IA sur ce thĂšme du poker. Mais la mise en place du jeu peut ĂȘtre laborieuse et chronophage, ce qui m’avait un peu refroidi.
Bref, découverte du concours:
J’arrive aprĂšs la guerre: le site et le concours ont Ă©tĂ© lancĂ© durant l’Ă©tĂ© 2011 et une fois les rĂ©compenses donnĂ©es aux vainqueurs, le site a vu sa frĂ©quentation dĂ©croĂźtre. Les bots dĂ©veloppĂ©s sont toujours prĂ©sents et 3 compĂ©titions sont organisĂ©es automatiquement tous les jours (standard, headsup, bigpool). C’est CLR plateforme uniquement (C#/CPP/F#)
J’ai crĂ©Ă© un bot dĂ©but AoĂ»t, random bot d’abord, afin de tester le site. Puis je m’y suis rĂ©ellement mis. J’ai rĂ©cupĂ©rĂ© et testĂ© un bon paquet de librairies “permettant” de calculer les probas dont j’avais besoin.
J’ai fini par choisir un package(C#) crĂ©Ă© par Keith Rule (lien). Cet utilitaire ne fonctionne pas, comme je l’avais imaginĂ©, sur des tables de donnĂ©es prĂ©calculĂ©es. Non, les probas sont re-calculĂ©s Ă la volĂ©e. C’est extrĂȘmement bien optimisĂ© (pour du C#), ce qui permet de calculer ces probas avec une bonne prĂ©cision dans le temps imparti.
Mon bot est assez simpliste pour le moment. Il joue relativement safe et tente des bluffs dans un seul cas: s’il est le dernier Ă parler, que tout le monde Ă check et qu’il a des jetons. (dans ce cas lĂ uniquement 30% du temps) Il n’analyse pas le comportement de chaque joueur en face (c’est le prochain pas)
Beaucoup de rĂšgles sont donc implĂ©mentĂ©es, avec de nombreux tresholds variables selon le nombre de joueurs toujours Ă la table, les valeurs de base Ă©tant settĂ© via la bonne vieille mĂ©thode empirique et de bon sens. (donc trĂšs clairement amĂ©liorable!) Le Heads-Up (1v1) est gĂ©rĂ© de maniĂšre indĂ©pendante (car il faut ĂȘtre, de maniĂšre gĂ©nĂ©rale, bien plus agressif  en 1V1 que dans une partie avec plusieurs adversaires)
AprĂšs des mises Ă jour successives, je me suis rendu compte que le rythme des tournois mis en place sur le site officiel Ă©tait bien trop faible pour avoir une visibilitĂ© un tant soit peu prĂ©cise sur les consĂ©quences des “amĂ©liorations” apportĂ©es au bot. De mĂȘme pour le client de test (permettant de faire des matchs offline, entre les bots fourni (raisebot-callbot etc) et les bots dĂ©veloppĂ©s (dont on possĂšde les dll bien sur!)) :  ProblĂšme: ce client de test permet de faire … 1 match par 1 match. Pas de quoi avoir des stats prĂ©cises :/
J’ai donc prit cet exe de test, browsĂ© son code (via ILSpy) pour rĂ©cupĂ©rer les mĂ©thodes utilisĂ©es pour ajouter les joueurs, lancer les matchs, rĂ©cupĂ©res les scores etc. Ensuite, crĂ©ation d’un nouvel exe winform sur visual studio. IntĂ©gration des dlls de l’exe de test, et je me suis fait mon tool Ă moi (trĂšs design, comme d’hab)
Grace Ă ce tool, j’ai dĂ©sormais la possibilitĂ© de voir ce que mon bot vaut … vĂ©ritablement: (donnĂ©es basĂ©es sur le % de premiĂšre place) Ici un exemple avec 1000 parties:
ProblĂšme: je n’ai pas les DLLs des concurrents! (Ă venir, le premier du concours m’ayant “promis” sa DLL) A l’heure actuelle (je n’ai pas touchĂ© au bot depuis au moins 1 mois et demi) je suis 2Ăšme du classement continu (La montĂ©e Ă pris du temps, dĂ» au fait qu’il y a seulement 3 tournois/jour)