54#ifndef __EVOLVE_OPTIMIZER_H_
55#define __EVOLVE_OPTIMIZER_H_
61#ifdef ENABLE_EVOLVE_OPTIMIZATION
63#define Q16_MUL(a,b) ((int32_t)(((int64_t)(a) * (int64_t)(b)) >> 16))
68#define PARAM_SCALE_Q16(x, min_val, max_val) \
69((int32_t)((((float)(x) - (float)(min_val)) / ((float)(max_val) - (float)(min_val))) * 65536.0f))
74#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) \
75(((float)(q16_val) / 65536.0f) * ((float)(max_val) - (float)(min_val)) + (float)(min_val))
105 uint16_t iq_mutation,
106 int32_t* start_params)
116 for (uint16_t i = 0; i < n_cand; i++) {
117 for (uint16_t j = 0; j < n_params; j++) {
145 uint16_t n_cand = opt->
n_cand;
146 uint16_t n_best = opt->
n_best;
156 for (uint16_t i = 0; i < n_cand - 1; i++) {
157 for (uint16_t j = i + 1; j < n_cand; j++) {
159 int32_t tmp_loss = opt->
loss[i];
161 opt->
loss[j] = tmp_loss;
163 for (uint16_t k = 0; k < n_params; k++) {
173 uint16_t n_elite = 2;
174 for (uint16_t c = 0; c < n_cand; c++) {
177 for (uint16_t i = 0; i < n_params; i++) {
183 for (uint16_t i = 0; i < n_params; i++) {
184 int32_t noise = (rand() % (2 * mut)) - mut;
185 uint16_t parent = rand() % n_best;
195 for (uint16_t i = 0; i < opt->
n_params; i++)
204 uint16_t iq_mutation;
206 int32_t candidates[0][0];
208#define EvolveOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params)
209#define EvolveOptimizer_Step(opt, params, LossFunc)
210#define PARAM_SCALE_Q16(x, min_val, max_val) (x)
211#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) (q16_val) (q16_val)
#define check_null_ptr_2(p1, p2)
Проверить два указателя на NULL.
#define EVOLVE_MAX_CANDIDATES
Максимальное количество кандидатов для обучения
#define EVOLVE_MAX_PARAMS
Максимальное количество параметров
__STATIC_INLINE void EvolveOptimizer_Step(EvolveOptimizer_t *opt, int32_t *params, int32_t loss)
Один шаг эволюционного оптимизатора.
__STATIC_INLINE void EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, uint16_t iq_mutation, int32_t *start_params)
Инициализация эволюционного оптимизатора.
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
Структура эволюционного оптимизатора
uint16_t cand_index
Индекс кандидата для обработки
uint16_t n_params
Количество параметров
uint16_t iq_mutation
Амплитуда мутации в Q16.16.
int32_t candidates[100][20]
Параметры кандидатов
uint16_t n_best
Количество лучших, усредняемых
uint16_t n_cand
Количество кандидатов
int32_t loss[100]
Loss для каждого кандидата