1 | import sys
|
---|
2 | import os
|
---|
3 | import utils.runners
|
---|
4 | import itertools
|
---|
5 | import json
|
---|
6 | import numpy as np
|
---|
7 | from alive_progress import alive_bar
|
---|
8 |
|
---|
9 |
|
---|
10 | our_agent = "agents.orange_agent.orange_agent.OrangeAgent"
|
---|
11 |
|
---|
12 | agents = [
|
---|
13 | "agents.boulware_agent.boulware_agent.BoulwareAgent",
|
---|
14 | "agents.linear_agent.linear_agent.LinearAgent",
|
---|
15 | "agents.gamer_agent.gamer_agent.GamerAgent",
|
---|
16 | "agents.shreker.shreker.Shreker",
|
---|
17 | "agents.hope_agent.hope_agent.HopeAgent",
|
---|
18 | ]
|
---|
19 |
|
---|
20 | param_grid = [
|
---|
21 | [0.0,0.2,0.4],
|
---|
22 | [0.1,0.25],
|
---|
23 | [0.5,0.8],
|
---|
24 | [0.6,0.8],
|
---|
25 | [0.9,0.95],
|
---|
26 | [0.9,0.95],
|
---|
27 | [0.1,0.2],
|
---|
28 | [0.00025,0.0005],
|
---|
29 | [0.00075,0.001],
|
---|
30 | [0.00125,0.002],
|
---|
31 | [0.4,0.5,0.6]
|
---|
32 | ]
|
---|
33 |
|
---|
34 | def conf_to_json(conf, name):
|
---|
35 | data = {
|
---|
36 | "util_adv_from_accept" : conf[0],
|
---|
37 | "util_adv_from_offer" : conf[1],
|
---|
38 | "util_adv_to_offer" : conf[2],
|
---|
39 | "progress_mid" : conf[3],
|
---|
40 | "progress_fast": conf[4],
|
---|
41 | "utility_range_from" : conf[5],
|
---|
42 | "utility_range_to" : conf[5] + conf[6],
|
---|
43 | "slow_decrease" : conf[7],
|
---|
44 | "mid_decrease" : conf[8],
|
---|
45 | "fast_decrease" : conf[9],
|
---|
46 | "minimal_reservation_val": conf[10]
|
---|
47 | }
|
---|
48 | if name is None:
|
---|
49 | name = "params.json"
|
---|
50 | with open(name, 'w', encoding='utf-8') as f:
|
---|
51 | json.dump(data, f, ensure_ascii=False, indent=2)
|
---|
52 |
|
---|
53 | class HiddenPrints:
|
---|
54 | def __enter__(self):
|
---|
55 | self._original_stdout = sys.stdout
|
---|
56 | sys.stdout = open(os.devnull, 'w')
|
---|
57 |
|
---|
58 | def __exit__(self, exc_type, exc_val, exc_tb):
|
---|
59 | sys.stdout.close()
|
---|
60 | sys.stdout = self._original_stdout
|
---|
61 |
|
---|
62 | max_wins = 0
|
---|
63 | avg_sw = 0
|
---|
64 | winning_conf = {}
|
---|
65 |
|
---|
66 | iters = 1
|
---|
67 | for arr in param_grid:
|
---|
68 | iters *= len(arr)
|
---|
69 |
|
---|
70 | confs = itertools.product(*param_grid)
|
---|
71 | i = 0
|
---|
72 |
|
---|
73 | bar = alive_bar(iters)
|
---|
74 |
|
---|
75 | with alive_bar(iters) as bar:
|
---|
76 | for conf in confs:
|
---|
77 | i += 1
|
---|
78 | conf_to_json(conf, None)
|
---|
79 |
|
---|
80 | curr_wins = 0
|
---|
81 | social_welfare = []
|
---|
82 | for agent in agents:
|
---|
83 | settings = {
|
---|
84 | "agents": [
|
---|
85 | our_agent,
|
---|
86 | agent
|
---|
87 | ],
|
---|
88 | "profiles": ["domains/domain00/profileA.json", "domains/domain00/profileB.json"],
|
---|
89 | "deadline_rounds": 200,
|
---|
90 | }
|
---|
91 |
|
---|
92 | _, results_summary = utils.runners.run_session(settings)
|
---|
93 |
|
---|
94 | if results_summary["result"] != "ERROR":
|
---|
95 | social_welfare.append(results_summary['social_welfare'])
|
---|
96 | if results_summary["result"] != "ERROR" and results_summary['utility_1'] > results_summary['utility_2']:
|
---|
97 | curr_wins += 1
|
---|
98 |
|
---|
99 | sw = np.average(social_welfare)
|
---|
100 |
|
---|
101 | if curr_wins > max_wins or (curr_wins == max_wins and sw > avg_sw):
|
---|
102 | max_wins = curr_wins
|
---|
103 | avg_sw = sw
|
---|
104 | winning_conf = conf
|
---|
105 | print("NEW WINNING CONF WITH {} WINS IS WITH AVG SOCIAL WELFARE OF {}:".format(max_wins, sw))
|
---|
106 | print(json.dumps(winning_conf, indent=2))
|
---|
107 | conf_to_json(conf, "best.json")
|
---|
108 | bar()
|
---|
109 |
|
---|
110 |
|
---|
111 |
|
---|
112 | conf_to_json(winning_conf, "params.json")
|
---|
113 | print("WINNING CONF WITH {} WINS IS:".format(max_wins))
|
---|
114 | print(json.dumps(winning_conf, indent=2)) |
---|