Add learning.py
This commit is contained in:
parent
14a8e8d546
commit
4489c95ddc
140
learning.py
Normal file
140
learning.py
Normal file
@ -0,0 +1,140 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import random
|
||||
import statistics
|
||||
import sys
|
||||
|
||||
from opale.carte import *
|
||||
from opale.game import Game
|
||||
|
||||
max_importance = None
|
||||
mean_importance = {
|
||||
Chasseresse: 7,
|
||||
DragonCorail: 7,
|
||||
Pearl: 7,
|
||||
Witch: 7,
|
||||
DragonPetrified: 7,
|
||||
Golem: 7,
|
||||
Guardian: 7,
|
||||
Horser: 7,
|
||||
City: 7,
|
||||
}
|
||||
values_importance = {
|
||||
Chasseresse: [7],
|
||||
DragonCorail: [7],
|
||||
Pearl: [7],
|
||||
Witch: [7],
|
||||
DragonPetrified: [7],
|
||||
Golem: [7],
|
||||
Guardian: [7],
|
||||
Horser: [7],
|
||||
City: [7],
|
||||
}
|
||||
borne_min_importance = {
|
||||
Chasseresse: 14,
|
||||
DragonCorail: 14,
|
||||
Pearl: 14,
|
||||
Witch: 14,
|
||||
DragonPetrified: 14,
|
||||
Golem: 14,
|
||||
Guardian: 14,
|
||||
Horser: 14,
|
||||
City: 14,
|
||||
}
|
||||
borne_max_importance = {
|
||||
Chasseresse: 0,
|
||||
DragonCorail: 0,
|
||||
Pearl: 0,
|
||||
Witch: 0,
|
||||
DragonPetrified: 0,
|
||||
Golem: 0,
|
||||
Guardian: 0,
|
||||
Horser: 0,
|
||||
City: 0,
|
||||
}
|
||||
|
||||
NB_ROUND = 999
|
||||
|
||||
seed_range = random.randrange(1000000000)
|
||||
dum_range = seed_range + min(NB_ROUND/10, 99)
|
||||
for seed in range(seed_range, seed_range + NB_ROUND):
|
||||
sys.stdout.write("\r%d/%d - %s " % (seed - seed_range, NB_ROUND, {k.__name__: int(mean_importance[k]*100)/100 for k in mean_importance.keys()}))
|
||||
max_score_diff = 0
|
||||
for i in range(100):
|
||||
random.seed(seed)
|
||||
game = Game(None, None)
|
||||
|
||||
random.seed()
|
||||
if seed > dum_range and i > 50:
|
||||
newImportance = {
|
||||
Chasseresse: random.randint(int(borne_min_importance[Chasseresse]),int(borne_max_importance[Chasseresse]+1)),
|
||||
DragonCorail: random.randint(int(borne_min_importance[DragonCorail]),int(borne_max_importance[DragonCorail]+1)),
|
||||
Pearl: random.randint(int(borne_min_importance[Pearl]),int(borne_max_importance[Pearl]+1)),
|
||||
Witch: random.randint(int(borne_min_importance[Witch]),int(borne_max_importance[Witch]+1)),
|
||||
DragonPetrified: random.randint(int(borne_min_importance[DragonPetrified]),int(borne_max_importance[DragonPetrified]+1)),
|
||||
Golem: random.randint(int(borne_min_importance[Golem]),int(borne_max_importance[Golem]+1)),
|
||||
Guardian: random.randint(int(borne_min_importance[Guardian]),int(borne_max_importance[Guardian]+1)),
|
||||
Horser: random.randint(int(borne_min_importance[Horser]),int(borne_max_importance[Horser]+1)),
|
||||
City: random.randint(int(borne_min_importance[City]),int(borne_max_importance[City]+1)),
|
||||
}
|
||||
z = i % 10
|
||||
if z == 0:
|
||||
newImportance[Chasseresse] = random.randint(0,14)
|
||||
elif z == 1:
|
||||
newImportance[DragonCorail] = random.randint(0,14)
|
||||
elif z == 2:
|
||||
newImportance[Pearl] = random.randint(0,14)
|
||||
elif z == 3:
|
||||
newImportance[Witch] = random.randint(0,14)
|
||||
elif z == 4:
|
||||
newImportance[DragonPetrified] = random.randint(0,14)
|
||||
elif z == 5:
|
||||
newImportance[Golem] = random.randint(0,14)
|
||||
elif z == 6:
|
||||
newImportance[Guardian] = random.randint(0,14)
|
||||
elif z == 7:
|
||||
newImportance[Horser] = random.randint(0,14)
|
||||
elif z == 8:
|
||||
newImportance[City] = random.randint(0,14)
|
||||
else:
|
||||
newImportance = {
|
||||
Chasseresse: random.randint(0,14),
|
||||
DragonCorail: random.randint(0,14),
|
||||
Pearl: random.randint(0,14),
|
||||
Witch: random.randint(0,14),
|
||||
DragonPetrified: random.randint(0,14),
|
||||
Golem: random.randint(0,14),
|
||||
Guardian: random.randint(0,14),
|
||||
Horser: random.randint(0,14),
|
||||
City: random.randint(0,14),
|
||||
}
|
||||
|
||||
game.player1.importance = lambda: newImportance
|
||||
game.player2.base_importance = lambda t: mean_importance[t]
|
||||
|
||||
def play_turn():
|
||||
return game.current_player.play_turn(game.play_round)
|
||||
|
||||
while not game.isFinished():
|
||||
play_turn()
|
||||
play_turn()
|
||||
|
||||
if game.player1.get_score() > game.player2.get_score():
|
||||
#print("Fight %d.%d: \033[93mP1\033[0m: \033[1m%d\033[0m pts vs. \033[93mP2\033[0m: \033[1m%d\033[0m pts" % (seed-seed_range, i, game.player1.get_score(), game.player2.get_score()))
|
||||
if game.player1.get_score() - game.player2.get_score() > max_score_diff:
|
||||
max_score_diff = game.player1.get_score() - game.player2.get_score()
|
||||
max_importance = newImportance
|
||||
for t in mean_importance.keys():
|
||||
values_importance[t].append(max_importance[t])
|
||||
mean_importance[t] = statistics.mean(values_importance[t])
|
||||
if seed >= dum_range:
|
||||
if borne_min_importance[t] > mean_importance[t]:
|
||||
borne_min_importance[t] = mean_importance[t]
|
||||
if borne_max_importance[t] < mean_importance[t]:
|
||||
borne_max_importance[t] = mean_importance[t]
|
||||
|
||||
print()
|
||||
print("\nMax importance (diff=%d): %s" % (max_score_diff, max_importance))
|
||||
print("\nBornes: %s" % ({t: "%s - %s" % (borne_min_importance[t], borne_max_importance[t]) for t in mean_importance}))
|
||||
print("\nMean importance: %s" % (mean_importance))
|
Loading…
Reference in New Issue
Block a user