Bonjour,
L'idée
Comme un membre l'avait mentionné il y a quelques semaines, on pourrait essayer de collaborer pour réaliser une IA sur codingame. Ça tombe bien, ils ont lancé dernièrement un nouveau jeu multijoueur, Platinum Rift 2, et il nous reste 36 jours pour participer.
Le principe du jeu est détaillé sur le site, je ne vais pas y revenir. En point de départ, j'ai rapidemment écrit quelques lignes en python (qui ont gagné contre l'IA aléatoire fournie sur le site, mais qui ne parviendront jamais à battre une IA créée par un participant). Je fournis le code dans la balise secrète plus bas. Pour être honnête, je ne suis pas programmeur, donc c'est certainement très mal écrit, mais ça a le mérite d'exister. Le site accepte beaucoup de langages, donc même si vous ne programmez pas en python, vous pouvez participer à la discussion sur l'IA.
L'IA
Donc pour l'instant, je fais un déplacement et un spawn aléatoire, sans la moindre réflexion. Quelques pistes d'amélioration à discuter.
- Ne se déplacer que sur une case qui ne nous appartient pas, pour maximiser la capture. Quelle direction choisir dans le cas où l'on possèderait déjà toutes les cases voisines ?
- Ne créer des pods que sur les cases ayant une voisine neutre ou ennemie, pour être directement près du front.
- Déplacer les pods un par un, pour maximiser la capture. Si le reste de l'IA est faite correctement, on devrait de toute façon après un moment avoir des déplacement par groupe, même si gérés un par un.
- Corriger le bug dans la partie qui s'occupe du spawn. J'ai un peu de platinium restant à la fin, quand ça ne devrait pas être le cas.
Je vous écoute pour toute proposition, que ce soit au niveau de l'IA ou du code !
Le code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | import sys, math, random ZonesPlatinium=[] totalPlatinium=0 graph={} playerCount, myId, zoneCount, linkCount = [int(i) for i in input().split()] #Lit le Pt par zone for i in range(zoneCount): zoneId, platinumSource = [int(i) for i in input().split()] ZonesPlatinium.append(platinumSource) #Crée le dictionnaire avec les liens for i in range(linkCount): zone1, zone2 = [int(i) for i in input().split()] if zone1 not in graph: graph[zone1]=[] if zone2 not in graph: graph[zone2]=[] if zone2 not in graph[zone1]: graph[zone1].append(zone2) if zone1 not in graph[zone2]: graph[zone2].append(zone1) # game loop while 1: Zones=[] ZonesPresence=[] ZonesPossedees=[] spawn="" deplacement="" platinum = int(input()) # my available Platinum #Lit les zones où on est présent for i in range(zoneCount): zId, ownerId, podsP0, podsP1, podsP2, podsP3 = [int(i) for i in input().split()] exec("count=podsP"+str(myId)) Zones.append(ownerId) if count: ZonesPresence.append([zId,ownerId,count]) #Gere le déplacement for zone in ZonesPresence: if zone[1]==myId: choix=random.randint(0,len(graph[zone[0]])-1) deplacement+=str(zone[2])+" "+str(zone[0])+" "+str((graph[zone[0]])[choix])+" " #Gere le spawn for zone in range(len(Zones)-1): if Zones[zone]==myId: totalPlatinium+=ZonesPlatinium[zone] ZonesPossedees.append(zone) while totalPlatinium>=20: choix=random.randint(0,len(ZonesPossedees)-1) spawn+="1 "+str(ZonesPossedees[choix])+" " totalPlatinium-=20 #Instructions print(deplacement) print(spawn) |