Problem [SOLVED] with GTX770-DC2OC-2GD5

216273

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:

  • Between 2 maps of BF4. During the loading of the new map
  • After playing BF4 while attempting to open a browser.
  • After mining coin (using cudaminer), not during but right after I would stop it.

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!

2013 – AI GameDev – Capture The Flag

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é :

  1. Atteindre le drapeau ennemi en utilisant les routes avec peu de risques.
  2. Ramener le drapeau en utilisant une route avec peu de risques

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)

Map de visibilité
Map de visibilité

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 :

  1. Grouper plusieurs combattants proche du drapeau ennemi, et quand ils sont tous prĂȘt, attaquer selon une route dĂ©tournĂ©e.
  2. Certains de mes combattants sont dĂ©signĂ©s pour tuer les campeurs. Ils attaquent leurs ennemis via l’algo AStar en prenant en considĂ©ration la zone de vision et la portĂ©e des campeurs

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:

Fredv2_suryav3

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:

ranking

Une partie entre les deux premiers:

FinalBot: Hold’Em Poker AI Contest (C# bot)

[Update]

AprĂšs de nombreux tournois, mon bot (postĂ© il y a maintenant plus de 6 mois) est dĂ©sormais premier du classement, yeyyy 😀

finalBot_060513
Classement au 04/06/2013

[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.

Top 2! (11/06/2012) Le premier est … loin oO

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)

FinalBot Canon Launcher – Un design hors du commun

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:

Comparaison performance bots
Tiens tiens, la version 8 semble moins efficace que la 7…

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)

Lien vers le site FinalBot