Skip to content

Commit c8973c7

Browse files
committed
[Optimizer] improve optimizer settings
1 parent c839f13 commit c8973c7

File tree

2 files changed

+62
-43
lines changed

2 files changed

+62
-43
lines changed

octobot/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@
203203
OPTIMIZER_DEFAULT_MIN_MUTATION_PROBABILITY_PERCENT = decimal.Decimal(10)
204204
OPTIMIZER_DEFAULT_MAX_MUTATION_NUMBER_MULTIPLIER = 3
205205
OPTIMIZER_DEFAULT_DB_UPDATE_PERIOD = 15
206+
OPTIMIZER_DEFAULT_TARGET_FITNESS_SCORE = None
206207

207208
# Databases
208209
DEFAULT_MAX_TOTAL_RUN_DATABASES_SIZE = 1000000000 # 1GB

octobot/strategy_optimizer/optimizer_settings.py

Lines changed: 61 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -21,72 +21,90 @@
2121
import octobot.strategy_optimizer.fitness_parameter as fitness_parameter
2222
import octobot.strategy_optimizer.optimizer_filter as optimizer_filter
2323
import octobot.strategy_optimizer.optimizer_constraint as optimizer_constraint
24+
import octobot_evaluators.constants as evaluators_constants
2425

2526

2627
class OptimizerSettings:
2728
def __init__(self, settings_dict=None):
2829
if settings_dict is None:
2930
settings_dict = {}
3031
# generic
31-
self.optimizer_config = settings_dict.get(enums.OptimizerConfig.OPTIMIZER_CONFIG.value, None)
32-
self.randomly_chose_runs = settings_dict.get(enums.OptimizerConfig.RANDOMLY_CHOSE_RUNS.value,
33-
constants.OPTIMIZER_DEFAULT_RANDOMLY_CHOSE_RUNS)
32+
self.exchange_id = settings_dict.get(
33+
evaluators_constants.EVALUATOR_CHANNEL_DATA_EXCHANGE_ID)
34+
self.optimizer_config = settings_dict.get(
35+
enums.OptimizerConfig.OPTIMIZER_CONFIG.value) or None
36+
self.randomly_chose_runs = settings_dict.get(
37+
enums.OptimizerConfig.RANDOMLY_CHOSE_RUNS.value) \
38+
or constants.OPTIMIZER_DEFAULT_RANDOMLY_CHOSE_RUNS
3439
self.data_files = settings_dict.get(enums.OptimizerConfig.DATA_FILES.value)
35-
self.start_timestamp = settings_dict.get(enums.OptimizerConfig.START_TIMESTAMP.value, None)
36-
self.end_timestamp = settings_dict.get(enums.OptimizerConfig.END_TIMESTAMP.value, None)
37-
self.required_idle_cores = int(settings_dict.get(enums.OptimizerConfig.IDLE_CORES.value,
38-
constants.OPTIMIZER_DEFAULT_REQUIRED_IDLE_CORES))
39-
self.notify_when_complete = settings_dict.get(enums.OptimizerConfig.NOTIFY_WHEN_COMPLETE.value,
40-
constants.OPTIMIZER_DEFAULT_NOTIFY_WHEN_COMPLETE)
40+
self.start_timestamp = settings_dict.get(
41+
enums.OptimizerConfig.START_TIMESTAMP.value, None)
42+
self.end_timestamp = settings_dict.get(
43+
enums.OptimizerConfig.END_TIMESTAMP.value, None)
44+
self.required_idle_cores = int(
45+
settings_dict.get(enums.OptimizerConfig.IDLE_CORES.value)
46+
or constants.OPTIMIZER_DEFAULT_REQUIRED_IDLE_CORES)
47+
self.notify_when_complete = settings_dict.get(
48+
enums.OptimizerConfig.NOTIFY_WHEN_COMPLETE.value) \
49+
or constants.OPTIMIZER_DEFAULT_NOTIFY_WHEN_COMPLETE
4150
self.optimizer_mode = settings_dict.get(enums.OptimizerConfig.MODE.value,
4251
enums.OptimizerModes.NORMAL.value)
4352
optimizer_id = settings_dict.get(enums.OptimizerConfig.OPTIMIZER_ID.value, 1)
4453
self.optimizer_id = optimizer_id if optimizer_id is None else int(optimizer_id)
45-
self.optimizer_ids = settings_dict.get(enums.OptimizerConfig.OPTIMIZER_IDS.value)
54+
self.optimizer_ids = settings_dict.get(
55+
enums.OptimizerConfig.OPTIMIZER_IDS.value)
4656
self.optimizer_mode = settings_dict.get(enums.OptimizerConfig.MODE.value,
4757
enums.OptimizerModes.NORMAL.value)
4858
self.queue_size = int(settings_dict.get(enums.OptimizerConfig.QUEUE_SIZE.value,
4959
constants.OPTIMIZER_DEFAULT_QUEUE_SIZE))
50-
self.empty_the_queue = settings_dict.get(enums.OptimizerConfig.EMPTY_THE_QUEUE.value, False)
60+
self.empty_the_queue = settings_dict.get(
61+
enums.OptimizerConfig.EMPTY_THE_QUEUE.value, False)
5162
# update run database at the end of each period
52-
self.db_update_period = int(settings_dict.get(enums.OptimizerConfig.DB_UPDATE_PERIOD.value,
53-
constants.OPTIMIZER_DEFAULT_DB_UPDATE_PERIOD))
63+
self.db_update_period = int(
64+
settings_dict.get(enums.OptimizerConfig.DB_UPDATE_PERIOD.value)
65+
or constants.OPTIMIZER_DEFAULT_DB_UPDATE_PERIOD)
5466
# AI / genetic
55-
self.max_optimizer_runs = settings_dict.get(enums.OptimizerConfig.MAX_OPTIMIZER_RUNS.value,
56-
constants.OPTIMIZER_DEFAULT_MAX_OPTIMIZER_RUNS)
57-
self.generations_count = settings_dict.get(enums.OptimizerConfig.DEFAULT_GENERATIONS_COUNT.value,
58-
constants.OPTIMIZER_DEFAULT_GENERATIONS_COUNT)
59-
self.initial_generation_count = settings_dict.get(enums.OptimizerConfig.INITIAL_GENERATION_COUNT.value,
60-
constants.OPTIMIZER_DEFAULT_INITIAL_GENERATION_COUNT)
61-
self.run_per_generation = settings_dict.get(enums.OptimizerConfig.DEFAULT_RUN_PER_GENERATION.value,
62-
constants.OPTIMIZER_DEFAULT_RUN_PER_GENERATION)
67+
self.max_optimizer_runs = settings_dict.get(
68+
enums.OptimizerConfig.MAX_OPTIMIZER_RUNS.value) \
69+
or constants.OPTIMIZER_DEFAULT_MAX_OPTIMIZER_RUNS
70+
self.generations_count = settings_dict.get(
71+
enums.OptimizerConfig.DEFAULT_GENERATIONS_COUNT.value) \
72+
or constants.OPTIMIZER_DEFAULT_GENERATIONS_COUNT
73+
self.initial_generation_count = settings_dict.get(
74+
enums.OptimizerConfig.INITIAL_GENERATION_COUNT.value) \
75+
or constants.OPTIMIZER_DEFAULT_INITIAL_GENERATION_COUNT
76+
self.run_per_generation = settings_dict.get(
77+
enums.OptimizerConfig.DEFAULT_RUN_PER_GENERATION.value) \
78+
or constants.OPTIMIZER_DEFAULT_RUN_PER_GENERATION
6379
self.fitness_parameters = self.parse_fitness_parameters(
64-
settings_dict.get(enums.OptimizerConfig.DEFAULT_SCORING_PARAMETERS.value,
65-
self.get_default_fitness_parameters())
66-
)
80+
settings_dict.get(enums.OptimizerConfig.DEFAULT_SCORING_PARAMETERS.value)
81+
or self.get_default_fitness_parameters())
82+
6783
self.exclude_filters = self.parse_optimizer_filter(
68-
settings_dict.get(enums.OptimizerConfig.DEFAULT_OPTIMIZER_FILTERS.value,
69-
self.get_default_optimizer_filters())
70-
)
84+
settings_dict.get(enums.OptimizerConfig.DEFAULT_OPTIMIZER_FILTERS.value)
85+
or self.get_default_optimizer_filters())
86+
7187
self.constraints_by_key = self.parse_optimizer_constraint(
72-
settings_dict.get(enums.OptimizerConfig.DEFAULT_OPTIMIZER_CONSTRAINTS.value,
73-
self.get_default_optimizer_constraints())
74-
)
88+
settings_dict.get(enums.OptimizerConfig.DEFAULT_OPTIMIZER_CONSTRAINTS.value)
89+
or self.get_default_optimizer_constraints())
90+
7591
self.mutation_percent = float(settings_dict.get(
76-
enums.OptimizerConfig.DEFAULT_MUTATION_PERCENT.value,
77-
constants.OPTIMIZER_DEFAULT_MUTATION_PERCENT))
92+
enums.OptimizerConfig.DEFAULT_MUTATION_PERCENT.value) \
93+
or constants.OPTIMIZER_DEFAULT_MUTATION_PERCENT)
7894
self.max_mutation_probability_percent = decimal.Decimal(settings_dict.get(
79-
enums.OptimizerConfig.MAX_MUTATION_PROBABILITY_PERCENT.value,
80-
constants.OPTIMIZER_DEFAULT_MAX_MUTATION_PROBABILITY_PERCENT))
81-
self.min_mutation_probability_percent = decimal.Decimal(settings_dict.get(
82-
enums.OptimizerConfig.MIN_MUTATION_PROBABILITY_PERCENT.value,
83-
constants.OPTIMIZER_DEFAULT_MIN_MUTATION_PROBABILITY_PERCENT))
84-
self.max_mutation_number_multiplier = decimal.Decimal(settings_dict.get(
85-
enums.OptimizerConfig.DEFAULT_MAX_MUTATION_NUMBER_MULTIPLIER.value,
86-
constants.OPTIMIZER_DEFAULT_MAX_MUTATION_NUMBER_MULTIPLIER))
87-
self.target_fitness_score = settings_dict.get(enums.OptimizerConfig.TARGET_FITNESS_SCORE.value)
88-
self.stay_within_boundaries = settings_dict.get(enums.OptimizerConfig.STAY_WITHIN_BOUNDARIES.value,
89-
False)
95+
enums.OptimizerConfig.MAX_MUTATION_PROBABILITY_PERCENT.value) \
96+
or constants.OPTIMIZER_DEFAULT_MAX_MUTATION_PROBABILITY_PERCENT)
97+
self.min_mutation_probability_percent = decimal.Decimal(
98+
settings_dict.get(enums.OptimizerConfig.MIN_MUTATION_PROBABILITY_PERCENT.value)
99+
or constants.OPTIMIZER_DEFAULT_MIN_MUTATION_PROBABILITY_PERCENT)
100+
self.max_mutation_number_multiplier = decimal.Decimal(
101+
settings_dict.get(enums.OptimizerConfig.DEFAULT_MAX_MUTATION_NUMBER_MULTIPLIER.value)
102+
or constants.OPTIMIZER_DEFAULT_MAX_MUTATION_NUMBER_MULTIPLIER)
103+
self.target_fitness_score = settings_dict.get(
104+
enums.OptimizerConfig.TARGET_FITNESS_SCORE.value) \
105+
or constants.OPTIMIZER_DEFAULT_TARGET_FITNESS_SCORE
106+
self.stay_within_boundaries = settings_dict.get(
107+
enums.OptimizerConfig.STAY_WITHIN_BOUNDARIES.value) or False
90108

91109
def get_constraint(self, constraint_key):
92110
if constraint_key in self.constraints_by_key:

0 commit comments

Comments
 (0)