(models, arenas, rounds: int, simulations: int, record_ratio: float, output: Path)
| 113 | |
| 114 | |
| 115 | def main(models, arenas, rounds: int, simulations: int, record_ratio: float, output: Path): |
| 116 | # Get all unique pairs of models |
| 117 | models = yaml.safe_load(open(models)) |
| 118 | output.mkdir(parents=True, exist_ok=True) |
| 119 | pairs = [] |
| 120 | for i in range(len(models)): |
| 121 | for j in range(i + 1, len(models)): |
| 122 | pairs.append((models[i], models[j])) |
| 123 | |
| 124 | tracking_dict = {} |
| 125 | arenas_list = ARENAS if arenas == "all" else [a for a in ARENAS if a.name in arenas.split(",")] |
| 126 | if not arenas_list: |
| 127 | print(f"No valid arenas found from {arenas}. Choose from {[a.name for a in ARENAS]}.") |
| 128 | return # Stop execution if no valid arenas are found |
| 129 | for arena in arenas_list: |
| 130 | print(f"Generating {len(pairs)} configs for arena: {arena.name}") |
| 131 | tracking_dict[arena.name] = {} |
| 132 | for pair in pairs: |
| 133 | config = get_config(rounds, simulations, arena, pair) |
| 134 | |
| 135 | if arena == RoboCodeArena: |
| 136 | robocode_adjustments(config, record_ratio) |
| 137 | |
| 138 | pair_names = "__".join(sorted([get_name(pair[0]), get_name(pair[1])])) |
| 139 | config_name = f"{arena.name}__{pair_names}__r{rounds}__s{simulations}.yaml" |
| 140 | with open(output / config_name, "w") as f: |
| 141 | yaml.dump( |
| 142 | config, |
| 143 | f, |
| 144 | default_style=None, |
| 145 | sort_keys=False, |
| 146 | allow_unicode=True, |
| 147 | default_flow_style=False, |
| 148 | Dumper=yaml.SafeDumper, |
| 149 | ) |
| 150 | |
| 151 | clean_config(output / config_name) |
| 152 | |
| 153 | pvp = ".".join(sorted([get_name(pair[0]), get_name(pair[1])])) |
| 154 | tracking_key = f"r{rounds}.s{simulations}.p2" |
| 155 | if tracking_key not in tracking_dict[arena.name]: |
| 156 | tracking_dict[arena.name][tracking_key] = {} |
| 157 | tracking_dict[arena.name][tracking_key][pvp] = 0 |
| 158 | |
| 159 | if Path(TRACKING_PATH).exists(): |
| 160 | with open(TRACKING_PATH) as f: |
| 161 | tracking_dict_current = json.load(f) |
| 162 | tracking_dict.update(tracking_dict_current) |
| 163 | |
| 164 | with open(TRACKING_PATH, "w") as f: |
| 165 | json.dump(tracking_dict, f, indent=2) |
| 166 | print(f"Wrote tracking file to '{TRACKING_PATH}'.") |
| 167 | |
| 168 | print(f"Generated {len(pairs) * len(arenas_list)} configuration files in '{output}'.") |
| 169 | print(f"- # Models: {len(models)}") |
| 170 | print(f"- # Arenas: {len(ARENAS)}") |
| 171 | print(f"- r (rounds) {rounds}") |
| 172 | print(f"- s (sims_per_round) {simulations}") |
no test coverage detected