调整评估相关代码

This commit is contained in:
zhiyang7 2021-12-08 17:16:27 +08:00
parent ee409846f3
commit a755ffe719
4 changed files with 112 additions and 80 deletions

4
.gitignore vendored
View File

@ -1 +1,5 @@
*.pyc *.pyc
baselines*/
douzero_checkpoints/
.vscode/
*.pkl

View File

@ -6,6 +6,7 @@ from douzero.env.game import GameEnv
import torch import torch
import numpy as np import numpy as np
import BidModel import BidModel
import psutil
def load_card_play_models(card_play_model_path_dict): def load_card_play_models(card_play_model_path_dict):
players = {} players = {}
@ -102,7 +103,7 @@ def mp_simulate(card_play_data_list, card_play_model_path_dict, q, output, bid_o
else: else:
print("".join([EnvCard2RealCard[c] for c in action]), end=end) print("".join([EnvCard2RealCard[c] for c in action]), end=end)
count+=1 count+=1
if idx % 10 == 0 and not bid_output: if output and idx % 10 == 0 and not bid_output:
print("\nindex", idx) print("\nindex", idx)
# print("End -------") # print("End -------")
env.reset() env.reset()
@ -149,8 +150,14 @@ def evaluate(landlord, landlord_up, landlord_down, eval_data, num_workers, outpu
target=mp_simulate, target=mp_simulate,
args=(card_paly_data, card_play_model_path_dict, q, output, output_bid, title)) args=(card_paly_data, card_play_model_path_dict, q, output, output_bid, title))
p.start() p.start()
processes.append(p) processes.append(p)
parent = psutil.Process()
parent.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS)
for child in parent.children():
child.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS)
for p in processes: for p in processes:
p.join() p.join()
@ -165,4 +172,4 @@ def evaluate(landlord, landlord_up, landlord_down, eval_data, num_workers, outpu
print('WP results:') print('WP results:')
print('landlord : Farmers - {} : {}'.format(num_landlord_wins / num_total_wins, num_farmer_wins / num_total_wins)) print('landlord : Farmers - {} : {}'.format(num_landlord_wins / num_total_wins, num_farmer_wins / num_total_wins))
print('ADP results:') print('ADP results:')
print('landlord : Farmers - {} : {}'.format(num_landlord_scores / num_total_wins, 2 * num_farmer_scores / num_total_wins)) print('landlord : Farmers - {} : {}'.format(num_landlord_scores / num_total_wins, 3 * num_farmer_scores / num_total_wins))

View File

@ -3,6 +3,43 @@ import argparse
from douzero.evaluation.simulation import evaluate from douzero.evaluation.simulation import evaluate
def make_evaluate(args, t, frame, adp_frame, folder_a = 'baselines', folder_b = 'baselines'):
if t == 1:
args.landlord = '%s/resnet_landlord_%i.ckpt' % (folder_a, frame)
args.landlord_up = 'random'
args.landlord_front = 'random'
args.landlord_down = 'random'
print('%i vs random' % frame)
elif t == 2:
args.landlord = 'random'
args.landlord_up = '%s/resnet_landlord_up_%i.ckpt' % (folder_a, frame)
args.landlord_front = '%s/resnet_landlord_front_%i.ckpt' % (folder_a, frame)
args.landlord_down = '%s/resnet_landlord_down_%i.ckpt' % (folder_a, frame)
print('random vs %i' % frame)
elif t == 3:
args.landlord = '%s/resnet_landlord_%i.ckpt' % (folder_a, frame)
args.landlord_up = '%s/resnet_landlord_up_%i.ckpt' % (folder_b, adp_frame)
args.landlord_front = '%s/resnet_landlord_front_%i.ckpt' % (folder_b, adp_frame)
args.landlord_down = '%s/resnet_landlord_down_%i.ckpt' % (folder_b, adp_frame)
print('%i vs %i' % (frame, adp_frame))
elif t == 4:
args.landlord = '%s/resnet_landlord_%i.ckpt' % (folder_b, adp_frame)
args.landlord_up = '%s/resnet_landlord_up_%i.ckpt' % (folder_a, frame)
args.landlord_front = '%s/resnet_landlord_front_%i.ckpt' % (folder_a, frame)
args.landlord_down = '%s/resnet_landlord_down_%i.ckpt' % (folder_a, frame)
print('%i vs %i' % (adp_frame, frame))
evaluate(args.landlord,
args.landlord_up,
args.landlord_down,
args.eval_data,
args.num_workers,
args.output,
args.bid,
args.title)
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
'Dou Dizhu Evaluation') 'Dou Dizhu Evaluation')
@ -15,80 +52,63 @@ if __name__ == '__main__':
parser.add_argument('--landlord_down', type=str, parser.add_argument('--landlord_down', type=str,
default='baselines/douzero_12/landlord_down_weights_39762328900.ckpt') default='baselines/douzero_12/landlord_down_weights_39762328900.ckpt')
parser.add_argument('--eval_data', type=str, parser.add_argument('--eval_data', type=str,
default='eval_data_1000.pkl') default='eval_data_200.pkl')
parser.add_argument('--num_workers', type=int, default=5) parser.add_argument('--num_workers', type=int, default=5)
parser.add_argument('--gpu_device', type=str, default='0') parser.add_argument('--gpu_device', type=str, default='0')
parser.add_argument('--output', type=bool, default=True) parser.add_argument('--output', type=bool, default=True)
parser.add_argument('--bid', type=bool, default=True) parser.add_argument('--bid', type=bool, default=True)
parser.add_argument('--title', type=str, default='New') parser.add_argument('--title', type=str, default='New')
args = parser.parse_args() args = parser.parse_args()
args.output = True # args.output = True
args.output = False
args.bid = False args.bid = False
if args.output or args.bid: if args.output or args.bid:
args.num_workers = 1 args.num_workers = 1
t = 3 t = 3
frame = 64000 frame = 13252000
adp_frame = 2511184300 adp_frame = 8697600
# args.landlord = 'baselines/resnet_landlord_%i.ckpt' % frame
args.landlord_up = 'baselines/resnet_landlord_up_%i.ckpt' % frame
args.landlord_down = 'baselines/resnet_landlord_%i.ckpt' % frame
args.landlord = 'baselines/douzero_ADP/landlord.ckpt'
# args.landlord_up = 'baselines/douzero_ADP/landlord_up.ckpt'
# args.landlord_down = 'baselines/douzero_ADP/landlord_down.ckpt'
if t == 1:
args.landlord = 'baselines/resnet_landlord_%i.ckpt' % frame
args.landlord_up = 'baselines/douzero_ADP/landlord_up.ckpt'
args.landlord_down = 'baselines/douzero_ADP/landlord_down.ckpt'
elif t == 2:
args.landlord = 'baselines/douzero_ADP/landlord.ckpt'
args.landlord_up = 'baselines/resnet_landlord_up_%i.ckpt' % frame
args.landlord_down = 'baselines/resnet_landlord_down_%i.ckpt' % frame
elif t == 3:
args.landlord = 'baselines/resnet_landlord_%i.ckpt' % frame
args.landlord_up = 'baselines/resnet_landlord_up_%i.ckpt' % frame
args.landlord_front = 'baselines/resnet_landlord_front_%i.ckpt' % frame
args.landlord_down = 'baselines/resnet_landlord_down_%i.ckpt' % frame
elif t == 4:
args.landlord = 'baselines/douzero_ADP/landlord.ckpt'
args.landlord_up = 'baselines/douzero_ADP/landlord_up.ckpt'
args.landlord_down = 'baselines/douzero_ADP/landlord_down.ckpt'
elif t == 5:
args.landlord = 'baselines/douzero_WP/landlord.ckpt'
args.landlord_up = 'baselines/douzero_WP/landlord_up.ckpt'
args.landlord_down = 'baselines/douzero_WP/landlord_down.ckpt'
elif t == 6:
args.landlord = 'baselines/resnet_landlord_%i.ckpt' % frame
args.landlord_up = 'baselines/douzero_ADP/landlord_up_weights_%i.ckpt' % adp_frame
args.landlord_down = 'baselines/douzero_ADP/landlord_down_weights_%i.ckpt' % adp_frame
elif t == 7:
args.landlord = 'baselines/douzero_ADP/landlord_weights_%i.ckpt' % adp_frame
args.landlord_up = 'baselines/resnet_landlord_up_%i.ckpt' % frame
args.landlord_down = 'baselines/resnet_landlord_down_%i.ckpt' % frame
elif t == 8:
args.landlord = 'baselines/douzero_ADP/landlord_weights_%i.ckpt' % adp_frame
args.landlord_up = 'baselines/douzero_ADP/landlord_up_weights_%i.ckpt' % adp_frame
args.landlord_down = 'baselines/douzero_ADP/landlord_down_weights_%i.ckpt' % adp_frame
elif t == 9:
args.landlord = 'baselines/resnet_landlord_%i.ckpt' % frame
args.landlord_up = 'baselines/resnet_landlord_up_%i.ckpt' % adp_frame
args.landlord_down = 'baselines/resnet_landlord_down_%i.ckpt' % adp_frame
elif t == 10:
# landlord_down_weights_10777798400
args.landlord = 'baselines/douzero_ADP/landlord.ckpt'
args.landlord_up = 'baselines/douzero_ADP/landlord_up_weights_%i.ckpt' % adp_frame
args.landlord_down = 'baselines/douzero_ADP/landlord_down_weights_%i.ckpt' % adp_frame
elif t == 11:
args.landlord = 'baselines/douzero_ADP/landlord_weights_%i.ckpt' % adp_frame
args.landlord_up = 'baselines/douzero_ADP/landlord_up.ckpt'
args.landlord_down = 'baselines/douzero_ADP/landlord_down.ckpt'
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
os.environ["CUDA_VISIBLE_DEVICES"] = args.gpu_device os.environ["CUDA_VISIBLE_DEVICES"] = args.gpu_device
evaluate(args.landlord, # eval_list = [
args.landlord_up, # [8697600, None],
args.landlord_down, # [8697600, 8697600],
args.eval_data, # [11402400, None],
args.num_workers, # [11402400, 8697600],
args.output, # [11402400, 11402400],
args.bid, # [13252000, None],
args.title) # [13252000, 8697600],
# [13252000, 11402400],
# [13252000, 13252000],
# [15096800, None],
# [15096800, 8697600],
# [15096800, 11402400],
# [15096800, 13252000],
# [15096800, 15096800],
# [25397600, None],
# [25397600, 8697600],
# [25397600, 11402400],
# [25397600, 13252000],
# [25397600, 15096800],
# [25397600, 25397600],
# ]
eval_list = [
[4968800, 8697600, 'baselines', 'baselines2'],
[4968800, 4968800, 'baselines', 'baselines'],
]
for vs in reversed(eval_list):
frame = vs[0]
adp_frame = vs[1]
folder_a = vs[2]
folder_b = vs[3]
if adp_frame is None:
make_evaluate(args, 1, frame, None)
make_evaluate(args, 2, frame, None)
else:
make_evaluate(args, 3, frame, adp_frame, folder_a , folder_b)
if frame != adp_frame:
make_evaluate(args, 4, frame, adp_frame, folder_a, folder_b)

View File

@ -2,3 +2,4 @@ torch>=1.6.0
GitPython GitPython
gitdb2 gitdb2
rlcard rlcard
psutil