aboutsummaryrefslogtreecommitdiff
path: root/bestflags/example_algorithms.py
diff options
context:
space:
mode:
Diffstat (limited to 'bestflags/example_algorithms.py')
-rw-r--r--bestflags/example_algorithms.py272
1 files changed, 146 insertions, 126 deletions
diff --git a/bestflags/example_algorithms.py b/bestflags/example_algorithms.py
index 9775d491..c39b2943 100644
--- a/bestflags/example_algorithms.py
+++ b/bestflags/example_algorithms.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Copyright 2013 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""An example main file running the algorithms.
@@ -10,7 +10,7 @@ Then it initiates the variables of the generation. Finally, it sets up the
processes for different modules and runs the experiment.
"""
-__author__ = 'yuhenglong@google.com (Yuheng Long)'
+__author__ = "yuhenglong@google.com (Yuheng Long)"
import json
import multiprocessing
@@ -27,170 +27,190 @@ from task import Task
from task import TEST_STAGE
import testing_batch
+
parser = OptionParser()
-parser.add_option('-f',
- '--file',
- dest='filename',
- help='configuration file FILE input',
- metavar='FILE')
+parser.add_option(
+ "-f",
+ "--file",
+ dest="filename",
+ help="configuration file FILE input",
+ metavar="FILE",
+)
# The meta data for the genetic algorithm.
-BUILD_CMD = 'BUILD_CMD'
-TEST_CMD = 'TEST_CMD'
-OUTPUT = 'OUTPUT'
-DEFAULT_OUTPUT = 'output'
-CONF = 'CONF'
-DEFAULT_CONF = 'conf'
-NUM_BUILDER = 'NUM_BUILDER'
+BUILD_CMD = "BUILD_CMD"
+TEST_CMD = "TEST_CMD"
+OUTPUT = "OUTPUT"
+DEFAULT_OUTPUT = "output"
+CONF = "CONF"
+DEFAULT_CONF = "conf"
+NUM_BUILDER = "NUM_BUILDER"
DEFAULT_NUM_BUILDER = 1
-NUM_TESTER = 'NUM_TESTER'
+NUM_TESTER = "NUM_TESTER"
DEFAULT_NUM_TESTER = 1
-STOP_THRESHOLD = 'STOP_THRESHOLD'
+STOP_THRESHOLD = "STOP_THRESHOLD"
DEFAULT_STOP_THRESHOLD = 1
-NUM_CHROMOSOMES = 'NUM_CHROMOSOMES'
+NUM_CHROMOSOMES = "NUM_CHROMOSOMES"
DEFAULT_NUM_CHROMOSOMES = 20
-NUM_TRIALS = 'NUM_TRIALS'
+NUM_TRIALS = "NUM_TRIALS"
DEFAULT_NUM_TRIALS = 20
-MUTATION_RATE = 'MUTATION_RATE'
+MUTATION_RATE = "MUTATION_RATE"
DEFAULT_MUTATION_RATE = 0.01
def _ProcessGA(meta_data):
- """Set up the meta data for the genetic algorithm.
+ """Set up the meta data for the genetic algorithm.
- Args:
- meta_data: the meta data for the genetic algorithm.
- """
- assert BUILD_CMD in meta_data
- build_cmd = meta_data[BUILD_CMD]
+ Args:
+ meta_data: the meta data for the genetic algorithm.
+ """
+ assert BUILD_CMD in meta_data
+ build_cmd = meta_data[BUILD_CMD]
- assert TEST_CMD in meta_data
- test_cmd = meta_data[TEST_CMD]
+ assert TEST_CMD in meta_data
+ test_cmd = meta_data[TEST_CMD]
- if OUTPUT not in meta_data:
- output_file = DEFAULT_OUTPUT
- else:
- output_file = meta_data[OUTPUT]
+ if OUTPUT not in meta_data:
+ output_file = DEFAULT_OUTPUT
+ else:
+ output_file = meta_data[OUTPUT]
- if CONF not in meta_data:
- conf_file = DEFAULT_CONF
- else:
- conf_file = meta_data[CONF]
+ if CONF not in meta_data:
+ conf_file = DEFAULT_CONF
+ else:
+ conf_file = meta_data[CONF]
- if NUM_BUILDER not in meta_data:
- num_builders = DEFAULT_NUM_BUILDER
- else:
- num_builders = meta_data[NUM_BUILDER]
+ if NUM_BUILDER not in meta_data:
+ num_builders = DEFAULT_NUM_BUILDER
+ else:
+ num_builders = meta_data[NUM_BUILDER]
- if NUM_TESTER not in meta_data:
- num_testers = DEFAULT_NUM_TESTER
- else:
- num_testers = meta_data[NUM_TESTER]
+ if NUM_TESTER not in meta_data:
+ num_testers = DEFAULT_NUM_TESTER
+ else:
+ num_testers = meta_data[NUM_TESTER]
- if STOP_THRESHOLD not in meta_data:
- stop_threshold = DEFAULT_STOP_THRESHOLD
- else:
- stop_threshold = meta_data[STOP_THRESHOLD]
+ if STOP_THRESHOLD not in meta_data:
+ stop_threshold = DEFAULT_STOP_THRESHOLD
+ else:
+ stop_threshold = meta_data[STOP_THRESHOLD]
- if NUM_CHROMOSOMES not in meta_data:
- num_chromosomes = DEFAULT_NUM_CHROMOSOMES
- else:
- num_chromosomes = meta_data[NUM_CHROMOSOMES]
+ if NUM_CHROMOSOMES not in meta_data:
+ num_chromosomes = DEFAULT_NUM_CHROMOSOMES
+ else:
+ num_chromosomes = meta_data[NUM_CHROMOSOMES]
- if NUM_TRIALS not in meta_data:
- num_trials = DEFAULT_NUM_TRIALS
- else:
- num_trials = meta_data[NUM_TRIALS]
+ if NUM_TRIALS not in meta_data:
+ num_trials = DEFAULT_NUM_TRIALS
+ else:
+ num_trials = meta_data[NUM_TRIALS]
- if MUTATION_RATE not in meta_data:
- mutation_rate = DEFAULT_MUTATION_RATE
- else:
- mutation_rate = meta_data[MUTATION_RATE]
+ if MUTATION_RATE not in meta_data:
+ mutation_rate = DEFAULT_MUTATION_RATE
+ else:
+ mutation_rate = meta_data[MUTATION_RATE]
- specs = flags.ReadConf(conf_file)
+ specs = flags.ReadConf(conf_file)
- # Initiate the build/test command and the log directory.
- Task.InitLogCommand(build_cmd, test_cmd, output_file)
+ # Initiate the build/test command and the log directory.
+ Task.InitLogCommand(build_cmd, test_cmd, output_file)
- # Initiate the build/test command and the log directory.
- GAGeneration.InitMetaData(stop_threshold, num_chromosomes, num_trials, specs,
- mutation_rate)
+ # Initiate the build/test command and the log directory.
+ GAGeneration.InitMetaData(
+ stop_threshold, num_chromosomes, num_trials, specs, mutation_rate
+ )
- # Generate the initial generations.
- generation_tasks = testing_batch.GenerateRandomGATasks(specs, num_chromosomes,
- num_trials)
- generations = [GAGeneration(generation_tasks, set([]), 0)]
+ # Generate the initial generations.
+ generation_tasks = testing_batch.GenerateRandomGATasks(
+ specs, num_chromosomes, num_trials
+ )
+ generations = [GAGeneration(generation_tasks, set([]), 0)]
- # Execute the experiment.
- _StartExperiment(num_builders, num_testers, generations)
+ # Execute the experiment.
+ _StartExperiment(num_builders, num_testers, generations)
def _ParseJson(file_name):
- """Parse the input json file.
+ """Parse the input json file.
- Parse the input json file and call the proper function to perform the
- algorithms.
+ Parse the input json file and call the proper function to perform the
+ algorithms.
- Args:
- file_name: the input json file name.
- """
+ Args:
+ file_name: the input json file name.
+ """
- experiments = json.load(open(file_name))
+ experiments = json.load(open(file_name))
- for experiment in experiments:
- if experiment == 'GA':
- # An GA experiment
- _ProcessGA(experiments[experiment])
+ for experiment in experiments:
+ if experiment == "GA":
+ # An GA experiment
+ _ProcessGA(experiments[experiment])
def _StartExperiment(num_builders, num_testers, generations):
- """Set up the experiment environment and execute the framework.
-
- Args:
- num_builders: number of concurrent builders.
- num_testers: number of concurrent testers.
- generations: the initial generation for the framework.
- """
-
- manager = multiprocessing.Manager()
-
- # The queue between the steering algorithm and the builder.
- steering_build = manager.Queue()
- # The queue between the builder and the tester.
- build_test = manager.Queue()
- # The queue between the tester and the steering algorithm.
- test_steering = manager.Queue()
-
- # Set up the processes for the builder, tester and steering algorithm module.
- build_process = PipelineProcess(num_builders, 'builder', {}, BUILD_STAGE,
- steering_build, pipeline_worker.Helper,
- pipeline_worker.Worker, build_test)
-
- test_process = PipelineProcess(num_testers, 'tester', {}, TEST_STAGE,
- build_test, pipeline_worker.Helper,
- pipeline_worker.Worker, test_steering)
-
- steer_process = multiprocessing.Process(
- target=Steering,
- args=(set([]), generations, test_steering, steering_build))
-
- # Start the processes.
- build_process.start()
- test_process.start()
- steer_process.start()
-
- # Wait for the processes to finish.
- build_process.join()
- test_process.join()
- steer_process.join()
+ """Set up the experiment environment and execute the framework.
+
+ Args:
+ num_builders: number of concurrent builders.
+ num_testers: number of concurrent testers.
+ generations: the initial generation for the framework.
+ """
+
+ manager = multiprocessing.Manager()
+
+ # The queue between the steering algorithm and the builder.
+ steering_build = manager.Queue()
+ # The queue between the builder and the tester.
+ build_test = manager.Queue()
+ # The queue between the tester and the steering algorithm.
+ test_steering = manager.Queue()
+
+ # Set up the processes for the builder, tester and steering algorithm module.
+ build_process = PipelineProcess(
+ num_builders,
+ "builder",
+ {},
+ BUILD_STAGE,
+ steering_build,
+ pipeline_worker.Helper,
+ pipeline_worker.Worker,
+ build_test,
+ )
+
+ test_process = PipelineProcess(
+ num_testers,
+ "tester",
+ {},
+ TEST_STAGE,
+ build_test,
+ pipeline_worker.Helper,
+ pipeline_worker.Worker,
+ test_steering,
+ )
+
+ steer_process = multiprocessing.Process(
+ target=Steering,
+ args=(set([]), generations, test_steering, steering_build),
+ )
+
+ # Start the processes.
+ build_process.start()
+ test_process.start()
+ steer_process.start()
+
+ # Wait for the processes to finish.
+ build_process.join()
+ test_process.join()
+ steer_process.join()
def main(argv):
- (options, _) = parser.parse_args(argv)
- assert options.filename
- _ParseJson(options.filename)
+ (options, _) = parser.parse_args(argv)
+ assert options.filename
+ _ParseJson(options.filename)
-if __name__ == '__main__':
- main(sys.argv)
+if __name__ == "__main__":
+ main(sys.argv)