# Defined the settings for a mode of evolving monsters # EvolutionMode.tz (c) 2010 Jacob Schrum. # See Simulation.tz for more copyright information @include "Abstract.tz" Abstract : EvolutionModeArbitrator { + variables: has-mode (int). evolution-mode (object). # evolution-mode has a dependency + to archive: return 1. + to dearchive: return 1. + to destroy: if evolution-mode: free evolution-mode. + to init: has-mode = 0. + to load-evolution-mode named mode (string): if has-mode: { print "You cannot load two evolution modes". controller end-simulation. return. } else { has-mode = 1. if mode == "homogeneous" : evolution-mode = new HomogeneousMode. else if mode == "assist-homogeneous" : evolution-mode = new HomogeneousAssistMode. else if mode == "heterogeneous" : evolution-mode = new HeterogeneousMode. else if mode == "classic" : evolution-mode = new ClassicMode. else if mode == "subpops" : evolution-mode = new SubpopsMode. else if mode == "assist-subpops" : evolution-mode = new SubpopsAssistMode. # Specific modes from GECCO 2010 paper else if mode == "OE-Homo" : evolution-mode = new OpenEnded-Homogeneous. # Control else if mode == "OE-Homo-TUG" : evolution-mode = new OE-Homo-TUG. # TUG else if mode == "OE-Homo-TUGLow" : evolution-mode = new OE-Homo-TUGLow. # TUGLow else if mode == "OE-Homo-BD" : evolution-mode = new OE-Homo-BD. # BD else if mode == "OE-Homo-BDObserve" : evolution-mode = new OE-Homo-BDObserve. # BDObserve # Since GECCO 2010 else if mode == "OE-Homo-MinBD" : evolution-mode = new OE-Homo-MinBD. # MinBD else if mode == "OE-Homo-TUGSmall" : evolution-mode = new OE-Homo-TUGSmall. # TUGSmall else if mode == "OE-Homo-CTUG" : evolution-mode = new OE-Homo-CTUG. # CTUGLow else if mode == "OE-Homo-SoftTUG" : evolution-mode = new OE-Homo-SoftTUG. # SoftTUGLow else if mode == "OE-Homo-LBTUG" : evolution-mode = new OE-Homo-LBTUG. # LBTUGLow else if mode == "OE-Homo-ATTUG" : evolution-mode = new OE-Homo-ATTUG. # AntiThrashTUGLow else if mode == "OE-Homo-PartTUG" : evolution-mode = new OE-Homo-PartTUG. # Partitioning TUG # For GECCO 2011 paper else if mode == "OE-Homo-MMP" : evolution-mode = new OE-Homo-MMP. # MM(P): Also from CIG 2009 else if mode == "OE-Homo-MMR" : evolution-mode = new OE-Homo-MMR. # MM(R) else if mode == "OE-Homo-Multitask" : evolution-mode = new OE-Homo-Multitask. # Multitask # Specific modes from PhD proposal else if mode == "Hetero-Z" : evolution-mode = new Hetero-Z. else if mode == "Homo-Z" : evolution-mode = new Homo-Z. else if mode == "Hetero-NSGA2" : evolution-mode = new Hetero-NSGA2. else if mode == "Homo-NSGA2" : evolution-mode = new Homo-NSGA2. else if mode == "Hetero-TUG" : evolution-mode = new Hetero-TUG. else if mode == "Homo-TUG" : evolution-mode = new Homo-TUG. else { print "\"$mode\" is not a valid evolution mode". controller end-simulation. return. } self add-dependency on evolution-mode. } + to ask-has-mode: return has-mode. + to get-name: if has-mode: return (evolution-mode get-name). else { print "Tried to get evolution mode when none was specified". controller end-simulation. return. } + to load-settings using commandline (object): if has-mode: (evolution-mode load-settings using commandline). else { print "Tried to load settings from evolution mode when none was specified". controller end-simulation. return. } } Abstract : EvolutionMode { + variables: name (string). description (string). num-settings (hash). bit-settings (hash). string-settings (hash). excluded-fitnesses (list). + to destroy: free num-settings. free bit-settings. free string-settings. free excluded-fitnesses. + to init: + to get-name: return name. + to load-settings using commandline (object): key (string). i (int). print "Using $name mode settings". print "($description)". print "---------------------------". foreach key in keys( num-settings ): { commandline assign-command-line-numeric-val of ( num-settings{key} ) to key. } foreach key in keys( bit-settings ): { commandline assign-command-line-on-off-val of ( bit-settings{key} ) to key. } foreach key in keys( string-settings ): { commandline assign-command-line-string-val of ( string-settings{key} ) to key. } #TODO: Add support for list settings for i = 0, i < |excluded-fitnesses|, i++ : { controller exclude-fitness named (excluded-fitnesses{i}). } print "---------------------------". } EvolutionMode : HomogeneousMode { + to init: name = "homogeneous". description = "evolve small Adaptive Teams of Agents - monsters share a brain". # Settings to have the same number of evals #num-settings{"sp"} = 20. # Settings to have the same number of brains per population #num-settings{"e"} = 4. #num-settings{"e"} = 3. num-settings{"e"} = 1. num-settings{"sp"} = 52. num-settings{"mfs"} = 4. num-settings{"ns"} = 1. num-settings{"max"} = 1000. num-settings{"s"} = 5. num-settings{"sd"} = 0.0. bit-settings{"homo"} = "on". bit-settings{"p"} = "on". bit-settings{"rs"} = "off". bit-settings{"ss"} = "on". bit-settings{"tp"} = "off". bit-settings{"ib"} = "on". bit-settings{"ac"} = "off". bit-settings{"cps"} = "off". bit-settings{"tw"} = "off". excluded-fitnesses = {}. push "PredAssist" onto excluded-fitnesses. push "FightAssist" onto excluded-fitnesses. push "PredInflicted" onto excluded-fitnesses. push "FightInflicted" onto excluded-fitnesses. } HomogeneousMode : HomogeneousAssistMode { + to init: name = "assist-homogeneous". description = "$description (assist fitnesses instead of group)". excluded-fitnesses = {}. push "PredGroup" onto excluded-fitnesses. push "FightGroup" onto excluded-fitnesses. push "PredInflicted" onto excluded-fitnesses. push "FightInflicted" onto excluded-fitnesses. } EvolutionMode : ClassicMode { + to init: name = "classic". description = "use settings from the 2008 AIIDE paper". num-settings{"e"} = 5. # 5 evals num-settings{"sp"} = 45. # Size of monster population num-settings{"mfs"} = 15. # Monsters to evaluate at a time num-settings{"s"} = 1. # Monsters start using strategy 1 num-settings{"sd"} = 1.0. # Bot moves at 100% speed num-settings{"ns"} = 1. # There is only 1 monster population num-settings{"max"} = 1000. # Max generations is 1000 num-settings{"dfgs"} = 100. # (Desired Fight Group Score) num-settings{"dfps"} = 10000. # (Desired Fight Player Score) So high, player is always below num-settings{"dfaa"} = 0. # (Desired Fight Ave Assist) So low the monsters always get it num-settings{"dpaa"} = 0. # (Desired Pred Ave Assist) So low the monsters always get it num-settings{"dfar"} = 20. # (Desired Fight Ave Received) num-settings{"dfpt"} = 0.85. # (Desired Fight Ave Time Portion) bit-settings{"p"} = "on". # Keep parents bit-settings{"ss"} = "off". # Do not start surrounding bit-settings{"tp"} = "on". # Progression by tasks bit-settings{"rs"} = "off". # No random selection bit-settings{"ib"} = "off". # No index-based senses bit-settings{"tw"} = "off". # No teamwork senses excluded-fitnesses = {}. push "PredGroup" onto excluded-fitnesses. push "FightGroup" onto excluded-fitnesses. push "PredInflicted" onto excluded-fitnesses. push "FightInflicted" onto excluded-fitnesses. } EvolutionMode : SubpopsMode { + to init: name = "subpops". description = "use settings to evolve distinct subpopulations". # Settings to have the same number of evals #num-settings{"sp"} = 20. # Settings to have the same number of brains per population num-settings{"e"} = 4. num-settings{"sp"} = 52. num-settings{"mfs"} = 1. num-settings{"s"} = 5. num-settings{"sd"} = 0.0. num-settings{"ns"} = 4. bit-settings{"homo"} = "off". bit-settings{"rs"} = "on". bit-settings{"p"} = "on". bit-settings{"ss"} = "on". bit-settings{"tp"} = "off". bit-settings{"ib"} = "on". bit-settings{"ac"} = "off". bit-settings{"cps"} = "off". bit-settings{"tw"} = "off". excluded-fitnesses = {}. push "PredAssist" onto excluded-fitnesses. push "FightAssist" onto excluded-fitnesses. push "PredInflicted" onto excluded-fitnesses. push "FightInflicted" onto excluded-fitnesses. } SubpopsMode : SubpopsAssistMode { + to init: name = "assist-subpops". description = "$description (assist fitnesses instead of group)". excluded-fitnesses = {}. push "PredGroup" onto excluded-fitnesses. push "FightGroup" onto excluded-fitnesses. push "PredInflicted" onto excluded-fitnesses. push "FightInflicted" onto excluded-fitnesses. } EvolutionMode : HeterogeneousMode { + to init: name = "heterogeneous". description = "Groups of 4 are evaluated at a time in a larger heterogeneous population". # Settings to have the same number of evals #num-settings{"sp"} = 64. # Settings to have the same number of brains per population num-settings{"e"} = 3. num-settings{"sp"} = 52. num-settings{"mfs"} = 4. num-settings{"ns"} = 1. num-settings{"s"} = 5. num-settings{"sd"} = 0.0. bit-settings{"homo"} = "off". bit-settings{"p"} = "on". bit-settings{"rs"} = "on". bit-settings{"ss"} = "on". bit-settings{"tp"} = "off". bit-settings{"ib"} = "on". bit-settings{"ac"} = "off". bit-settings{"cps"} = "off". bit-settings{"tw"} = "off". excluded-fitnesses = {}. push "PredAssist" onto excluded-fitnesses. push "FightAssist" onto excluded-fitnesses. push "PredInflicted" onto excluded-fitnesses. push "FightInflicted" onto excluded-fitnesses. } # Modes represented in the GECCO 2010 paper HomogeneousMode : OpenEnded-Homogeneous { + to init: name = "OE-Homo". description = "Homogeneous teams of size 4 evolved using NSGA-II for a set number of generations with no incremental evolution". num-settings{"sas"} = 5. num-settings{"nnnmr"} = 0.0. num-settings{"sd"} = 1.0. num-settings{"max"} = 500. num-settings{"we"} = 50. bit-settings{"oee"} = "on". bit-settings{"tug"} = "off". bit-settings{"sga"} = "off". bit-settings{"bd"} = "off". bit-settings{"fs"} = "on". bit-settings{"z"} = "off". # Goals used in GECCO 2010 paper num-settings{"dpgs"} = 100. num-settings{"dfgs"} = 50. num-settings{"dfar"} = 20. num-settings{"dfpt"} = 0.9. } OpenEnded-Homogeneous : OE-Homo-MMP { + to init: name = "OE-Homo-MMP". description = "Homogeneous teams using Mode Mutation Previous". num-settings{"nnnmr"} = 0.1. } OE-Homo-MMP : OE-Homo-MMR { + to init: name = "OE-Homo-MMR". description = "Homogeneous teams using Mode Mutation Random (plus delete-least-used-mode mutation)". bit-settings{"nmrs"} = "on". bit-settings{"dmrlu"} = "on". num-settings{"delmr"} = 0.1. } OpenEnded-Homogeneous : OE-Homo-Multitask { + to init: name = "OE-Homo-Multitask". description = "Homogeneous teams with one output mode per task". bit-settings{"pnm"} = "on". } OpenEnded-Homogeneous : OE-Homo-TUG { + to init: name = "OE-Homo-TUG". description = "Homogeneous teams of size 4 evolved using NSGA-II+TUG (increasing goals) for set number of gens, no incremental evolution". num-settings{"gia"} = 0.15. bit-settings{"tug"} = "on". bit-settings{"igwaa"} = "on". } OpenEnded-Homogeneous : OE-Homo-PartTUG { + to init: name = "OE-Homo-PartTUG". description = "TUG by partitioning objective space according to goal achievement". num-settings{"gia"} = 0.15. num-settings{"gapfi"} = 0.5. num-settings{"dpgs"} = 0. # 0 damage dealt to prey num-settings{"dfgs"} = 0. # 0 damage dealt to fighter num-settings{"dfar"} = 50. # -50 damage received num-settings{"dpar"} = 50. # -50 damage received in prey mode num-settings{"dfpt"} = 0.0. # 0% time alive num-settings{"dppt"} = 0.0. # 0% time alive as prey num-settings{"drgs"} = 0. # 0 damage dealt in ram mode num-settings{"drar"} = 50. # -50 damage received when ramming num-settings{"drpt"} = 0.0. # 0% time alive when ramming bit-settings{"parttug"} = "on". } OE-Homo-TUG : OE-Homo-TUGLow { + to init: name = "OE-Homo-TUGLow". description = "TUG starting with goals equal to the minimal values in each objective". num-settings{"dpgs"} = 0. # 0 damage dealt to prey num-settings{"dfgs"} = 0. # 0 damage dealt to fighter num-settings{"dfar"} = 50. # -50 damage received num-settings{"dpar"} = 50. # -50 damage received in prey mode num-settings{"dfpt"} = 0.0. # 0% time alive num-settings{"dppt"} = 0.0. # 0% time alive as prey num-settings{"drgs"} = 0. # 0 damage dealt in ram mode num-settings{"drar"} = 50. # -50 damage received when ramming num-settings{"drpt"} = 0.0. # 0% time alive when ramming } OE-Homo-TUG : OE-Homo-TUGSmall { + to init: name = "OE-Homo-TUGSmall". description = "TUG starting with small, easy to achieve goals". num-settings{"dpgs"} = 20. # 0 damage dealt to prey num-settings{"dfgs"} = 10. # 0 damage dealt to fighter num-settings{"dfar"} = 40. # -50 damage received num-settings{"dfpt"} = 0.2. # 0% time alive } OE-Homo-TUGLow : OE-Homo-CTUG { + to init: name = "OE-Homo-CTUG". description = "Constraint-based TUG". bit-settings{"tug"} = "off". bit-settings{"ctug"} = "on". } OE-Homo-TUGLow : OE-Homo-SoftTUG { + to init: name = "OE-Homo-SoftTUG". description = "TUG where goal increase happens according to a lesser goal than objective deactivation". bit-settings{"sga"} = "on". num-settings{"sgap"} = 0.95. } OE-Homo-TUGLow : OE-Homo-LBTUG { + to init: name = "OE-Homo-LBTUG". description = "TUG where goals are achieved when AVG - STD passes the goal". bit-settings{"lbca"} = "on". } OE-Homo-TUGLow : OE-Homo-ATTUG { + to init: name = "OE-Homo-ATTUG". description = "TUG where goals are increased whenever their objectives are reactivated". bit-settings{"igwto"} = "on". } OpenEnded-Homogeneous : OE-Homo-BD { + to init: name = "OE-Homo-BD". description = "Homogeneous teams of size 4 evolved using NSGA-II with behavioral diversity for set number of gens, no incremental evolution". bit-settings{"bd"} = "on". bit-settings{"rbs"} = "on". } OE-Homo-BD : OE-Homo-MinBD { + to init: name = "OE-Homo-MinBD". description = "Behavioral diversity compares minimum distance instead of average between behavior vectors". bit-settings{"minbd"} = "on". } OE-Homo-BD : OE-Homo-BDObserve { + to init: name = "OE-Homo-BDObserve". description = "Behavioral diversity is based on an input syllabus sampled from observed inputs". bit-settings{"rbs"} = "off". bit-settings{"obs"} = "on". } # Modes represented in the TCIAIG paper HeterogeneousMode : Hetero-Z { + to init: name = "Hetero-Z". description = "Heterogeneous teams of size 4 evolved using z-scores method (Battle Domain Only!)". num-settings{"sas"} = 5. num-settings{"nnnmr"} = 0.0. bit-settings{"tug"} = "off". bit-settings{"fs"} = "on". bit-settings{"z"} = "on". # Goals used in TCIAIG num-settings{"dpgs"} = 100. num-settings{"dfgs"} = 50. num-settings{"dfar"} = 20. num-settings{"dfpt"} = 0.9. } HeterogeneousMode : Hetero-NSGA2 { + to init: name = "Hetero-NSGA2". description = "Heterogeneous teams of size 4 evolved using NSGA-II". num-settings{"sas"} = 5. num-settings{"nnnmr"} = 0.0. #num-settings{"lf"} = LAST_FRONT_CROWDING_DISTANCE. bit-settings{"tug"} = "off". bit-settings{"fs"} = "on". bit-settings{"z"} = "off". # Goals used in TCIAIG num-settings{"dpgs"} = 100. num-settings{"dfgs"} = 50. num-settings{"dfar"} = 20. num-settings{"dfpt"} = 0.9. } Hetero-NSGA2 : Hetero-TUG { + to init: name = "Hetero-TUG". description = "Heterogeneous teams of size 4 evolved using NSGA-II combined with TUG". bit-settings{"tug"} = "on". } HomogeneousMode : Homo-Z { + to init: name = "Homo-Z". description = "Homogeneous teams of size 4 evolved using z-scores method (Battle Domain Only!)". num-settings{"sas"} = 5. num-settings{"nnnmr"} = 0.0. bit-settings{"tug"} = "off". bit-settings{"fs"} = "on". bit-settings{"z"} = "on". # Goals used in TCIAIG num-settings{"dpgs"} = 100. num-settings{"dfgs"} = 50. num-settings{"dfar"} = 20. num-settings{"dfpt"} = 0.9. } HomogeneousMode : Homo-NSGA2 { + to init: name = "Homo-NSGA2". description = "Homogeneous teams of size 4 evolved using NSGA-II". num-settings{"sas"} = 5. num-settings{"nnnmr"} = 0.0. bit-settings{"tug"} = "off". bit-settings{"fs"} = "on". bit-settings{"z"} = "off". # Goals used in TCIAIG num-settings{"dpgs"} = 100. num-settings{"dfgs"} = 50. num-settings{"dfar"} = 20. num-settings{"dfpt"} = 0.9. } Homo-NSGA2 : Homo-TUG { + to init: name = "Homo-TUG". description = "Homogeneous teams of size 4 evolved using NSGA-II combined with TUG". bit-settings{"tug"} = "on". }