# MyLibs: Evolve optimizer

Loading...
Searching...
No Matches
Evolve optimizer
My Libs » General Tools

Библиотека для эволюционного подбора параметров More...

Collaboration diagram for Evolve optimizer:

## Classes

struct | EvolveOptimizer_t
| Структура эволюционного оптимизатора More...

## Macros

#define | PARAM_SCALE_Q16(x, min_val, max_val)
| Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536)
#define | PARAM_UNSCALE_Q16(q16_val, min_val, max_val)
| Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val].
#define | local_time()
| Локальное время

## Functions

__STATIC_INLINE int | 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)
| Инициализация эволюционного оптимизатора.
__STATIC_INLINE int | EvolveOptimizer_Step (EvolveOptimizer_t *opt, int32_t *params, int32_t loss)
| Один шаг эволюционного оптимизатора.

## Detailed Description

Библиотека для эволюционного подбора параметров

Поддерживает:

- Любое количество параметров
- Генерацию новых параметров на основе лучших кандидатов
- Мутацию для поиска оптимальных параметров
- Несколько независимых оптимизаторов в одной программе

Параметры для конфигурации:

- ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров Если библиотека отключена ENABLE_EVOLVE_OPTIMIZATION, то вставляются заглушки, никак не влияющие на параметры и остальную программу
- EVOLVE_MAX_PARAMS - Максимальное количество параметров
- EVOLVE_MAX_CANDIDATES - Максимальное количество кандидатов для обучения

Пример использования:
  #include "evolve_optimizer.h"
  #define N_PARAMS 4
  #define N_CANDIDATES 100
  #define N_BEST 10
  #define IQ_MUTATION (PARAM_SCALE_Q16(0.1, 0, 1))
  int32_t params[N_PARAMS];
  EvolveOptimizer_t optimizer;
  // Формирование параметров
  uint16_t param_u16 = 800;
  float param_f = 0.01f;
  uint8_t param_u8 = 40;
  int16_t param_i16 = 1600;
  params[0] = PARAM_SCALE_Q16(param_u16, 0, 1000);
  params[1] = PARAM_SCALE_Q16(param_f, 0.001f, 0.1f);
  params[2] = PARAM_SCALE_Q16(param_u8, 10, 100);
  params[3] = PARAM_SCALE_Q16(param_i16, 500, 5000);
  // Инициалиазция
  EvolveOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, IQ_MUTATION, params);
  // Шаг эволюции
  int32_t loss = calc_iq_loss(); // расчет эффективности параметров
  EvolveOptimizer_Step(&optimizer, params, loss);
  // Взятие следующих для эволюции параметров
  param_u16 = PARAM_UNSCALE_Q16(params[0], 0, 1000);
  param_f = PARAM_UNSCALE_Q16(params[1], 0.001f, 0.1f);
  param_u8 = PARAM_UNSCALE_Q16(params[2], 10, 100);
  param_i16 = PARAM_UNSCALE_Q16(params[3], 500, 5000);
  evolve_optimizer.h
  Заголовочный файл для адаптивного подбора параметров
  PARAM_UNSCALE_Q16
  #define PARAM_UNSCALE_Q16(q16_val, min_val, max_val)
  Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val].
  Definition evolve_optimizer.h:77
  EvolveOptimizer_Step
  __STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t *opt, int32_t *params, int32_t loss)
  Один шаг эволюционного оптимизатора.
  Definition evolve_optimizer.h:187
  EvolveOptimizer_Init
  __STATIC_INLINE int 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)
  Инициализация эволюционного оптимизатора.
  Definition evolve_optimizer.h:132
  PARAM_SCALE_Q16
  #define PARAM_SCALE_Q16(x, min_val, max_val)
  Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536)
  Definition evolve_optimizer.h:71
  EvolveOptimizer_t
  Структура эволюционного оптимизатора
  Definition evolve_optimizer.h:87

## Macro Definition Documentation

## PARAM_SCALE_Q16

#define PARAM_SCALE_Q16 | ( |  | x,
|  |  | min_val,
|  |  | max_val )

Value:
((int32_t)((((float)(x) - (float)(min_val)) / ((float)(max_val) - (float)(min_val))) * 65536.0f))

Линейное масштабирование x из диапазона [min_val, max_val] в Q16.16 [0, 65536)

Definition at line 71 of file evolve_optimizer.h.

## PARAM_UNSCALE_Q16

#define PARAM_UNSCALE_Q16 | ( |  | q16_val,
|  |  | min_val,
|  |  | max_val )

Value:
(((float)(q16_val) / 65536.0f) * ((float)(max_val) - (float)(min_val)) + (float)(min_val))

Обратное линейное масштабирование Q16.16 значения в диапазон [min_val, max_val].

Definition at line 77 of file evolve_optimizer.h.

## local_time

#define local_time | ( |  | ) |

Value:
HAL_GetTick()

Локальное время

Definition at line 81 of file evolve_optimizer.h.

## Function Documentation

## EvolveOptimizer_Init()

__STATIC_INLINE int 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 )

Инициализация эволюционного оптимизатора.

Parameters

  opt | Указатель на структуру оптимизатора
  n_params | Количество параметров в одном кандидате
  n_cand | Количество кандидатов
  n_best | Количество лучших, усредняемых
  iq_mutation | Амплитуда мутации в Q16.16
  start_params | Начальные параметры (Q16.16)

Returns
  0 — если окей, -1 — если ошибка

Definition at line 132 of file evolve_optimizer.h.

## EvolveOptimizer_Step()

__STATIC_INLINE int EvolveOptimizer_Step | ( | EvolveOptimizer_t * | opt,
|  | int32_t * | params,
|  | int32_t | loss )

Один шаг эволюционного оптимизатора.

Parameters

  opt | Указатель на структуру оптимизатора
  params | Массив параметров, которые будут обновлены (на выходе — новые параметры)
  loss | Loss текущего кандидата (Q16.16)

Returns
  0 — если окей, -1 — если ошибка

Сохраняет loss текущего кандидата и формирует параметры следующего кандидата. Если накоплено n_cand кандидатов, генерируется новое поколение. Новое поколение формируется случайным выбором из n_best лучших с добавлением мутации.

На выходе params содержит параметры следующего кандидата для измерений.

Note
  Функция использует глобальную внутреннюю переменную для сортировки. Надо убедится что только один экземпляр функции запущен в момент времени

Definition at line 187 of file evolve_optimizer.h.