|
21 | 21 | import octobot.strategy_optimizer.fitness_parameter as fitness_parameter
|
22 | 22 | import octobot.strategy_optimizer.optimizer_filter as optimizer_filter
|
23 | 23 | import octobot.strategy_optimizer.optimizer_constraint as optimizer_constraint
|
| 24 | +import octobot_evaluators.constants as evaluators_constants |
24 | 25 |
|
25 | 26 |
|
26 | 27 | class OptimizerSettings:
|
27 | 28 | def __init__(self, settings_dict=None):
|
28 | 29 | if settings_dict is None:
|
29 | 30 | settings_dict = {}
|
30 | 31 | # 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 |
34 | 39 | 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 |
41 | 50 | self.optimizer_mode = settings_dict.get(enums.OptimizerConfig.MODE.value,
|
42 | 51 | enums.OptimizerModes.NORMAL.value)
|
43 | 52 | optimizer_id = settings_dict.get(enums.OptimizerConfig.OPTIMIZER_ID.value, 1)
|
44 | 53 | 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) |
46 | 56 | self.optimizer_mode = settings_dict.get(enums.OptimizerConfig.MODE.value,
|
47 | 57 | enums.OptimizerModes.NORMAL.value)
|
48 | 58 | self.queue_size = int(settings_dict.get(enums.OptimizerConfig.QUEUE_SIZE.value,
|
49 | 59 | 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) |
51 | 62 | # 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) |
54 | 66 | # 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 |
63 | 79 | 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 | + |
67 | 83 | 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 | + |
71 | 87 | 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 | + |
75 | 91 | 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) |
78 | 94 | 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 |
90 | 108 |
|
91 | 109 | def get_constraint(self, constraint_key):
|
92 | 110 | if constraint_key in self.constraints_by_key:
|
|
0 commit comments