From 8497eecd43dada711dd88c5ff97049ac1592e621 Mon Sep 17 00:00:00 2001 From: Wojtek Pietrucha Date: Thu, 13 Oct 2016 21:49:42 +0200 Subject: [PATCH 1/4] Example for standard max_calls based stages with x^2 function. --- grortir/main/pso/pso_algorithm.py | 10 +++- grortir/main/pso/velocity_calculator.py | 2 - .../scripts/case_when_sim_better_than_seq.py | 59 +++++++++++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 grortir/scripts/case_when_sim_better_than_seq.py diff --git a/grortir/main/pso/pso_algorithm.py b/grortir/main/pso/pso_algorithm.py index 0fc2a20..0847214 100644 --- a/grortir/main/pso/pso_algorithm.py +++ b/grortir/main/pso/pso_algorithm.py @@ -18,7 +18,7 @@ def __init__(self, process, grouping_strategy, optimization_startegy, def run(self): """Run algorithm.""" self.process_validator.validate(self.process) - self.process.optimizationStatus = OptimizationStatus.in_progress + self.process.optimization_status = OptimizationStatus.in_progress number_of_groups = self.grouping_strategy.get_actual_numbers_of_groups() for current_group_number in range(number_of_groups): current_stages = self.grouping_strategy.get_items_from_group( @@ -27,3 +27,11 @@ def run(self): get_group_optimization_strategy(current_stages) self.whole_group_pso.optimize(current_stages, group_optimization_strategy) + self._post_processing() + + def _post_processing(self): + final_status = OptimizationStatus.success + for stage in self.grouping_strategy.ordered_stages: + if stage.optimization_status != OptimizationStatus.success: + final_status = OptimizationStatus.failed + self.process.optimization_status = final_status diff --git a/grortir/main/pso/velocity_calculator.py b/grortir/main/pso/velocity_calculator.py index ae43198..b44b38a 100644 --- a/grortir/main/pso/velocity_calculator.py +++ b/grortir/main/pso/velocity_calculator.py @@ -32,8 +32,6 @@ def calculate(self, current_velocities, particle_best_positions, """Calculate velocity.""" rand_1 = np.random.rand() rand_2 = np.random.rand() - print("rand_1 = " + str(rand_1)) - print("rand_2 = " + str(rand_2)) velocities = {} for stage in control_params: s_0 = self._s0(current_velocities[stage]) diff --git a/grortir/scripts/case_when_sim_better_than_seq.py b/grortir/scripts/case_when_sim_better_than_seq.py new file mode 100644 index 0000000..1e3116a --- /dev/null +++ b/grortir/scripts/case_when_sim_better_than_seq.py @@ -0,0 +1,59 @@ +"""Example when Sim is better than sequential.""" +import networkx as nx + +from grortir.main.model.core.optimization_status import OptimizationStatus +from grortir.main.model.processes.factories.calls_process_factory import \ + CallsProcessFactory +from grortir.main.optimizers.grouping_strategy import GroupingStrategy +from grortir.main.pso.calls_optimization_strategy import \ + CallsOptimizationStrategy +from grortir.main.pso.pso_algorithm import PsoAlgorithm + + +def optimization(max_calls, how_many_nodes, method_type): + factory = CallsProcessFactory("linear", how_many_nodes, max_calls, (0.216,)) + process = factory.construct_process() + ordered_stages = nx.topological_sort(process) + grouping_strategy = GroupingStrategy(ordered_stages) + # in sim all stages are in the sam group: + if method_type == "SIM": + grouping_strategy.define_group(ordered_stages) + elif method_type == "SEQ": + for stage in ordered_stages: + grouping_strategy.define_group([stage]) + else: + raise NotImplementedError + calls_optimization_strategy = CallsOptimizationStrategy() + pso_algorithm = PsoAlgorithm(process, grouping_strategy, + calls_optimization_strategy) + pso_algorithm.run() + return process + + +# sim_optimization(MAX_CALLS, HOW_MANY_NODES) +def calculate_probability_of_success(max_calls, number_of_nodes, + number_of_tries, method_type): + results = {} + for how_many_nodes in number_of_nodes: + how_many_success = 0.0 + how_many_failed = 0.0 + probability = -1 + for nr_proby in range(number_of_tries): + optimized_process = optimization(max_calls, how_many_nodes, + method_type) + if optimized_process.optimization_status == OptimizationStatus.success: + how_many_success += 1 + else: + how_many_failed += 1 + probability = how_many_success / number_of_tries + results[how_many_nodes] = probability + return results + + +# key -dimension, value - probability of success +results_sim = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, + "SIM") +results_seq = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, + "SEQ") + +print("The End") From 224851fea18cbacf3f8bc7fcf619092ca9f381da Mon Sep 17 00:00:00 2001 From: Wojtek Pietrucha Date: Thu, 13 Oct 2016 21:56:47 +0200 Subject: [PATCH 2/4] Added results. --- grortir/scripts/case_when_sim_better_than_seq.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grortir/scripts/case_when_sim_better_than_seq.py b/grortir/scripts/case_when_sim_better_than_seq.py index 1e3116a..4e2790d 100644 --- a/grortir/scripts/case_when_sim_better_than_seq.py +++ b/grortir/scripts/case_when_sim_better_than_seq.py @@ -53,7 +53,9 @@ def calculate_probability_of_success(max_calls, number_of_nodes, # key -dimension, value - probability of success results_sim = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, "SIM") +# {1: 1.0, 2: 1.0, 3: 1.0, 5: 0.88, 7: 0.73, 10: 0.26} results_seq = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, "SEQ") +# {1: 1.0, 2: 1.0, 3: 1.0, 5: 1.0, 7: 1.0, 10: 1.0} print("The End") From 4289bf1389f7fd000448ae058ad9e5ad302eef5c Mon Sep 17 00:00:00 2001 From: Wojtek Pietrucha Date: Thu, 13 Oct 2016 22:18:36 +0200 Subject: [PATCH 3/4] Case when Sim is better. --- grortir/main/model/stages/calls_stage.py | 9 +++++---- grortir/scripts/case_when_sim_better_than_seq.py | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/grortir/main/model/stages/calls_stage.py b/grortir/main/model/stages/calls_stage.py index 327285c..91a6d70 100644 --- a/grortir/main/model/stages/calls_stage.py +++ b/grortir/main/model/stages/calls_stage.py @@ -1,4 +1,6 @@ """Module contains class CallsStage.""" +import math + from grortir.main.model.core.abstract_stage import AbstractStage @@ -17,7 +19,7 @@ class CallsStage(AbstractStage): """ def __init__(self, name, max_calls, input_vector=(), - maximum_acceptable_quality=0.01): + maximum_acceptable_quality=0.3): """Constructor.""" super().__init__(input_vector) self.max_calls = max_calls @@ -53,9 +55,8 @@ def calculate_quality(input_vector, control_params): """ assert len(control_params) == len(input_vector) quality = 0 - for i in enumerate(control_params): - quality += (control_params[i[0]] - input_vector[ - i[0]]) ** 2 + for i, param in enumerate(control_params): + quality += abs(10*input_vector[i] - 2.16) + math.cos(5 * math.pi * control_params[i]) * control_params[i] * (1 - control_params[i] * control_params[i]) + 0.4 return quality def get_cost(self): diff --git a/grortir/scripts/case_when_sim_better_than_seq.py b/grortir/scripts/case_when_sim_better_than_seq.py index 4e2790d..18b3a66 100644 --- a/grortir/scripts/case_when_sim_better_than_seq.py +++ b/grortir/scripts/case_when_sim_better_than_seq.py @@ -53,9 +53,9 @@ def calculate_probability_of_success(max_calls, number_of_nodes, # key -dimension, value - probability of success results_sim = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, "SIM") -# {1: 1.0, 2: 1.0, 3: 1.0, 5: 0.88, 7: 0.73, 10: 0.26} +# {1: 1.0, 2: 0.95, 3: 0.78, 5: 0.46, 7: 0.06, 10: 0.0} results_seq = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, "SEQ") -# {1: 1.0, 2: 1.0, 3: 1.0, 5: 1.0, 7: 1.0, 10: 1.0} +# {1: 1.0, 2: 0.0, 3: 0.0, 5: 0.0, 7: 0.0, 10: 0.0} print("The End") From 95ff256928a80862d2c565ac7f1f9a3e0d8a02ee Mon Sep 17 00:00:00 2001 From: Wojtek Pietrucha Date: Thu, 13 Oct 2016 23:30:54 +0200 Subject: [PATCH 4/4] Diagrams added. --- grortir/scripts/SEQ_diagram.png | Bin 0 -> 11923 bytes grortir/scripts/SIM_diagram.png | Bin 0 -> 12945 bytes .../scripts/case_when_sim_better_than_seq.py | 27 ++++++++++++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 grortir/scripts/SEQ_diagram.png create mode 100644 grortir/scripts/SIM_diagram.png diff --git a/grortir/scripts/SEQ_diagram.png b/grortir/scripts/SEQ_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..f851f7c3834d4389e97f2e551b6a7754f8827386 GIT binary patch literal 11923 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 literal 0 HcmV?d00001 diff --git a/grortir/scripts/SIM_diagram.png b/grortir/scripts/SIM_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..64d3531392604dfdbf045d717e1c06132bacc6b7 GIT binary patch literal 12945 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 ZN_1)mn@t4AL11Bq$4!37`P0Q;{sl&DzyJUM literal 0 HcmV?d00001 diff --git a/grortir/scripts/case_when_sim_better_than_seq.py b/grortir/scripts/case_when_sim_better_than_seq.py index 18b3a66..16ad6a4 100644 --- a/grortir/scripts/case_when_sim_better_than_seq.py +++ b/grortir/scripts/case_when_sim_better_than_seq.py @@ -1,4 +1,5 @@ """Example when Sim is better than sequential.""" +import matplotlib.pyplot as plt import networkx as nx from grortir.main.model.core.optimization_status import OptimizationStatus @@ -50,12 +51,34 @@ def calculate_probability_of_success(max_calls, number_of_nodes, return results +NUMBER_OF_STAGES = [1, 2, 3, 5, 7, 10] +HOW_MANY_TRIES = 100 +MAX_CALLS = 1000 + + +def draw_from_dict(dict_with_results, name="Undefined"): + x = [] + y = [] + for key, value in dict_with_results.items(): + x.append(key) + y.append(value) + plt.plot(x, y, 'ro') + plt.savefig(name) + plt.show() + + # key -dimension, value - probability of success -results_sim = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, +results_sim = calculate_probability_of_success(MAX_CALLS, NUMBER_OF_STAGES, + HOW_MANY_TRIES, "SIM") +draw_from_dict(results_sim, "SIM_diagram.png") # {1: 1.0, 2: 0.95, 3: 0.78, 5: 0.46, 7: 0.06, 10: 0.0} -results_seq = calculate_probability_of_success(1000, [1, 2, 3, 5, 7, 10], 100, + + +results_seq = calculate_probability_of_success(MAX_CALLS, NUMBER_OF_STAGES, + HOW_MANY_TRIES, "SEQ") +draw_from_dict(results_seq, "SEQ_diagram.png") # {1: 1.0, 2: 0.0, 3: 0.0, 5: 0.0, 7: 0.0, 10: 0.0} print("The End")