4
4
import sys
5
5
import os
6
6
import time
7
- from optparse import OptionParser
7
+ from optparse import OptionParser , OptionGroup
8
8
import random
9
9
import cProfile
10
10
import visualizer .visualize_locally
@@ -133,21 +133,35 @@ def main(argv):
133
133
help = 'Player position for first bot specified' )
134
134
135
135
# ants specific game options
136
- parser .add_option ("--attack" , dest = "attack" ,
137
- default = "occupied" ,
138
- help = "Attack method to use for engine. (closest, occupied, support, damage)" )
139
- parser .add_option ("--food" , dest = "food" ,
140
- default = "symmetric" ,
141
- help = "Food spawning method. (none, random, sections, symmetric)" )
142
- parser .add_option ("--viewradius2" , dest = "viewradius2" ,
143
- default = 55 , type = "int" ,
144
- help = "Vision radius of ants squared" )
145
- parser .add_option ("--spawnradius2" , dest = "spawnradius2" ,
146
- default = 1 , type = "int" ,
147
- help = "Spawn radius of ants squared" )
148
- parser .add_option ("--attackradius2" , dest = "attackradius2" ,
149
- default = 5 , type = "int" ,
150
- help = "Attack radius of ants squared" )
136
+ game_group = OptionGroup (parser , "Game Options" , "Options that affect the game mechanics for ants" )
137
+ game_group .add_option ("--attack" , dest = "attack" ,
138
+ default = "focus" ,
139
+ help = "Attack method to use for engine. (closest, focus, support, damage)" )
140
+ game_group .add_option ("--food" , dest = "food" ,
141
+ default = "symmetric" ,
142
+ help = "Food spawning method. (none, random, sections, symmetric)" )
143
+ game_group .add_option ("--viewradius2" , dest = "viewradius2" ,
144
+ default = 55 , type = "int" ,
145
+ help = "Vision radius of ants squared" )
146
+ game_group .add_option ("--spawnradius2" , dest = "spawnradius2" ,
147
+ default = 1 , type = "int" ,
148
+ help = "Spawn radius of ants squared" )
149
+ game_group .add_option ("--attackradius2" , dest = "attackradius2" ,
150
+ default = 5 , type = "int" ,
151
+ help = "Attack radius of ants squared" )
152
+ game_group .add_option ("--food_rate" , dest = "food_rate" , nargs = 2 , type = "int" , default = (2 ,8 ),
153
+ help = "Numerator of food per turn per player rate" )
154
+ game_group .add_option ("--food_turn" , dest = "food_turn" , nargs = 2 , type = "int" , default = (12 ,30 ),
155
+ help = "Denominator of food per turn per player rate" )
156
+ game_group .add_option ("--food_start" , dest = "food_start" , nargs = 2 , type = "int" , default = (75 ,175 ),
157
+ help = "One over percentage of land area filled with food at start" )
158
+ game_group .add_option ("--food_visible" , dest = "food_visible" , nargs = 2 , type = "int" , default = (1 ,3 ),
159
+ help = "Amount of food guaranteed to be visible to starting ants" )
160
+ game_group .add_option ("--cutoff_turn" , dest = "cutoff_turn" , type = "int" , default = 100 ,
161
+ help = "Number of turns cutoff percentage is maintained to end game early" )
162
+ game_group .add_option ("--cutoff_percent" , dest = "cutoff_percent" , type = "float" , default = 0.90 ,
163
+ help = "Number of turns cutoff percentage is maintained to end game early" )
164
+ parser .add_option_group (game_group )
151
165
152
166
# the log directory must be specified for any logging to occur, except:
153
167
# bot errors to stderr
@@ -156,43 +170,45 @@ def main(argv):
156
170
# the log directory will contain
157
171
# the replay or stream file used by the visualizer, if requested
158
172
# the bot input/output/error logs, if requested
159
- parser .add_option ("-g" , "--game" , dest = "game_id" , default = 0 , type = 'int' ,
160
- help = "game id to start at when numbering log files" )
161
- parser .add_option ("-l" , "--log_dir" , dest = "log_dir" , default = None ,
162
- help = "Directory to dump replay files to." )
163
- parser .add_option ('-R' , '--log_replay' , dest = 'log_replay' ,
164
- action = 'store_true' , default = False ),
165
- parser .add_option ('-S' , '--log_stream' , dest = 'log_stream' ,
166
- action = 'store_true' , default = False ),
167
- parser .add_option ("-I" , "--log_input" , dest = "log_input" ,
168
- action = "store_true" , default = False ,
169
- help = "Log input streams sent to bots" )
170
- parser .add_option ("-O" , "--log_output" , dest = "log_output" ,
171
- action = "store_true" , default = False ,
172
- help = "Log output streams from bots" )
173
- parser .add_option ("-E" , "--log_error" , dest = "log_error" ,
174
- action = "store_true" , default = False ,
175
- help = "log error streams from bots" )
176
- parser .add_option ('-e' , '--log_stderr' , dest = 'log_stderr' ,
177
- action = 'store_true' , default = False ,
178
- help = 'additionally log bot errors to stderr' )
179
- parser .add_option ('-o' , '--log_stdout' , dest = 'log_stdout' ,
180
- action = 'store_true' , default = False ,
181
- help = 'additionally log replay/stream to stdout' )
173
+ log_group = OptionGroup (parser , "Logging Options" , "Options that control the logging" )
174
+ log_group .add_option ("-g" , "--game" , dest = "game_id" , default = 0 , type = 'int' ,
175
+ help = "game id to start at when numbering log files" )
176
+ log_group .add_option ("-l" , "--log_dir" , dest = "log_dir" , default = None ,
177
+ help = "Directory to dump replay files to." )
178
+ log_group .add_option ('-R' , '--log_replay' , dest = 'log_replay' ,
179
+ action = 'store_true' , default = False ),
180
+ log_group .add_option ('-S' , '--log_stream' , dest = 'log_stream' ,
181
+ action = 'store_true' , default = False ),
182
+ log_group .add_option ("-I" , "--log_input" , dest = "log_input" ,
183
+ action = "store_true" , default = False ,
184
+ help = "Log input streams sent to bots" )
185
+ log_group .add_option ("-O" , "--log_output" , dest = "log_output" ,
186
+ action = "store_true" , default = False ,
187
+ help = "Log output streams from bots" )
188
+ log_group .add_option ("-E" , "--log_error" , dest = "log_error" ,
189
+ action = "store_true" , default = False ,
190
+ help = "log error streams from bots" )
191
+ log_group .add_option ('-e' , '--log_stderr' , dest = 'log_stderr' ,
192
+ action = 'store_true' , default = False ,
193
+ help = 'additionally log bot errors to stderr' )
194
+ log_group .add_option ('-o' , '--log_stdout' , dest = 'log_stdout' ,
195
+ action = 'store_true' , default = False ,
196
+ help = 'additionally log replay/stream to stdout' )
182
197
# verbose will not print bot input/output/errors
183
198
# only info+debug will print bot error output
184
- parser .add_option ("-v" , "--verbose" , dest = "verbose" ,
185
- action = 'store_true' , default = False ,
186
- help = "Print out status as game goes." )
187
- parser .add_option ("--profile" , dest = "profile" ,
188
- action = "store_true" , default = False ,
189
- help = "Run under the python profiler" )
199
+ log_group .add_option ("-v" , "--verbose" , dest = "verbose" ,
200
+ action = 'store_true' , default = False ,
201
+ help = "Print out status as game goes." )
202
+ log_group .add_option ("--profile" , dest = "profile" ,
203
+ action = "store_true" , default = False ,
204
+ help = "Run under the python profiler" )
190
205
parser .add_option ("--nolaunch" , dest = "nolaunch" ,
191
206
action = 'store_true' , default = False ,
192
207
help = "Prevent visualizer from launching" )
193
- parser .add_option ("--html" , dest = "html_file" ,
194
- default = None ,
195
- help = "Output file name for an html replay" )
208
+ log_group .add_option ("--html" , dest = "html_file" ,
209
+ default = None ,
210
+ help = "Output file name for an html replay" )
211
+ parser .add_option_group (log_group )
196
212
197
213
(opts , args ) = parser .parse_args (argv )
198
214
if opts .map is None or not os .path .exists (opts .map ):
@@ -253,7 +269,13 @@ def get_cmd_name(cmd):
253
269
"turntime" : opts .turntime ,
254
270
"turns" : opts .turns ,
255
271
"player_seed" : opts .player_seed ,
256
- "engine_seed" : opts .engine_seed }
272
+ "engine_seed" : opts .engine_seed ,
273
+ "food_rate" : opts .food_rate ,
274
+ "food_turn" : opts .food_turn ,
275
+ "food_start" : opts .food_start ,
276
+ "food_visible" : opts .food_visible ,
277
+ "cutoff_turn" : opts .cutoff_turn ,
278
+ "cutoff_percent" : opts .cutoff_percent }
257
279
engine_options = {
258
280
"loadtime" : opts .loadtime ,
259
281
"turntime" : opts .turntime ,
0 commit comments