4141 "Median Duration (ms)" ,
4242 "Mean Duration (ms)" ,
4343 "Wins" ,
44+ "Win %" ,
4445]
4546
4647
@@ -76,6 +77,7 @@ class _Statistics:
7677 median_duration = attr .ib (type = Optional [float ])
7778 mean_duration = attr .ib (type = Optional [float ])
7879 wins = attr .ib (type = int )
80+ win_percent = attr .ib (type = float )
7981
8082 @staticmethod
8183 def for_results (name : Optional [str ], results : List [_Result ]) -> _Statistics :
@@ -87,7 +89,8 @@ def for_results(name: Optional[str], results: List[_Result]) -> _Statistics:
8789 median_duration = _median (durations )
8890 mean_duration = _mean (durations )
8991 wins = len (in_scope )
90- return _Statistics (name , median_turns , mean_turns , median_duration , mean_duration , wins )
92+ win_percent = 0.0 if len (results ) == 0 else 100.0 * (wins / len (results ))
93+ return _Statistics (name , median_turns , mean_turns , median_duration , mean_duration , wins , win_percent )
9194
9295
9396@attr .s
@@ -106,13 +109,13 @@ class _Analysis:
106109def _analyze_scenario (
107110 scenario : int ,
108111 mode : GameMode ,
112+ iterations : int ,
109113 players : int ,
110114 sources : Sequence [CharacterInputSource ],
111115 combination : Sequence [CharacterInputSource ],
112116 results : List [_Result ],
113117) -> _Analysis :
114118 """Analyze a scenario, generating data that can be written to the CSV file."""
115- iterations = len (results )
116119 playernames = [source .name for source in combination ] + ["" ] * (MAX_PLAYERS - len (combination ))
117120 overall_stats = _Statistics .for_results (None , results )
118121 source_stats = {name : _Statistics .for_results (name , results ) for name in sorted (list ({source .name for source in sources }))}
@@ -130,7 +133,7 @@ def _write_header(csvwriter, sources: List[CharacterInputSource]) -> None: # ty
130133
131134def _write_scenario (csvwriter , analysis : _Analysis ) -> None : # type: ignore
132135 """Write analysis results for a scenario into the CSV file."""
133- row = [analysis .scenario , analysis .mode , analysis .players ]
136+ row = [analysis .scenario , analysis .mode , analysis .iterations , analysis . players ]
134137 row += analysis .playernames
135138 row += [
136139 analysis .overall_stats .median_turns ,
@@ -139,7 +142,7 @@ def _write_scenario(csvwriter, analysis: _Analysis) -> None: # type: ignore
139142 analysis .overall_stats .mean_duration ,
140143 ]
141144 for stats in analysis .source_stats .values ():
142- row += [stats .median_turns , stats .mean_turns , stats .median_duration , stats .mean_duration , stats .wins ]
145+ row += [stats .median_turns , stats .mean_turns , stats .median_duration , stats .mean_duration , stats .wins , stats . win_percent ]
143146 csvwriter .writerow (row )
144147
145148
@@ -192,7 +195,7 @@ def run_simulation(iterations: int, output: str, sources: List[CharacterInputSou
192195 print ("%sstarting" % prefix , end = "\r " , flush = True )
193196 results = _run_scenario (prefix , iterations , engine )
194197 print ("%sanalyzing" % prefix , end = "\r " , flush = True )
195- analysis = _analyze_scenario (scenario , mode , players , sources , combination , results )
198+ analysis = _analyze_scenario (scenario , mode , iterations , players , sources , combination , results )
196199 print ("%swriting CSV" % prefix , end = "\r " , flush = True )
197200 _write_scenario (csvwriter , analysis )
198201 print ("%sdone" % prefix , end = "\r " , flush = True )
0 commit comments