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(x, min_val, max_val)
| Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)
#define | PARAM_UNSCALE(val, min_val, max_val)
| Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val].
#define | EVOLVE_MUTATION_MIN_PCT 10
| Минимальная мутация (в процентах от Loss)
#define | EVOLVE_MUTATION_MAX_PCT 100
| Максимальная мутация (в процентах от Loss)
#define | ELOVLE_N_ELITE_CANDIDATE 2
| Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)

## Functions

__STATIC_INLINE int | EvolveOptimizer_Init (EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
| Инициализация эволюционного оптимизатора.
__STATIC_INLINE int | EvolveOptimizer_Step (EvolveOptimizer_t *opt, float *params, float loss)
| Один шаг эволюционного оптимизатора.

## Detailed Description

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

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

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

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

- ENABLE_EVOLVE_OPTIMIZATION - Включить оптимизацию параметров Если библиотека отключена ENABLE_EVOLVE_OPTIMIZATION, то вставляются заглушки, никак не влияющие на параметры и остальную программу
- EVOLVE_MAX_PARAMS - Максимальное количество параметров
- EVOLVE_MAX_CANDIDATES - Максимальное количество кандидатов для обучения
- (опционально) EVOLVE_MUTATION_MIN_PCT - Минимальная мутация в процентах от Loss (по умолчанию 10%)
- (опционально) EVOLVE_MUTATION_MAX_PCT - Максимальная мутация в процентах от Loss (по умолчанию 100%)
- (опционально) ELOVLE_N_ELITE_CANDIDATE - Количество кандидатов, которые проходят в поколение без изменений

Пример использования:
  #include "evolve_optimizer.h"
  #define N_PARAMS 4
  #define N_CANDIDATES 100
  #define N_BEST 10
  #define MUTATION 0.1f
  float 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(param_u16, 0.0f, 1000.0f);
  params[1] = PARAM_SCALE(param_f, 0.001f, 0.1f);
  params[2] = PARAM_SCALE(param_u8, 10.0f, 100.0f);
  params[3] = PARAM_SCALE(param_i16, 500.0f, 5000.0f);
  // Инициалиазция
  EvolveOptimizer_Init(&optimizer, N_PARAMS, N_CANDIDATES, N_BEST, MUTATION, params);
  // Шаг эволюции
  float loss = calc_loss(); // расчет эффективности параметров (от 0 до 1)
  EvolveOptimizer_Step(&optimizer, params, loss);
  // Взятие следующих для эволюции параметров
  param_u16 = PARAM_UNSCALE(params[0], 0.0f, 1000.0f);
  param_f = PARAM_UNSCALE(params[1], 0.001f, 0.1f);
  param_u8 = PARAM_UNSCALE(params[2], 10.0f, 100.0f);
  param_i16 = PARAM_UNSCALE(params[3], 500.0f, 5000.0f);
  evolve_optimizer.h
  Заголовочный файл для адаптивного подбора параметров
  EvolveOptimizer_Init
  __STATIC_INLINE int EvolveOptimizer_Init(EvolveOptimizer_t *opt, uint16_t n_params, uint16_t n_cand, uint16_t n_best, float mutation_amp, float *start_params)
  Инициализация эволюционного оптимизатора.
  Definition evolve_optimizer.h:155
  PARAM_SCALE
  #define PARAM_SCALE(x, min_val, max_val)
  Линейное масштабирование x из диапазона [min_val, max_val] в диапазон [0, 1)
  Definition evolve_optimizer.h:73
  PARAM_UNSCALE
  #define PARAM_UNSCALE(val, min_val, max_val)
  Обратное линейное масштабирование значения из [0, 1) в диапазон [min_val, max_val].
  Definition evolve_optimizer.h:79
  EvolveOptimizer_Step
  __STATIC_INLINE int EvolveOptimizer_Step(EvolveOptimizer_t *opt, float *params, float loss)
  Один шаг эволюционного оптимизатора.
  Definition evolve_optimizer.h:225
  EvolveOptimizer_t
  Структура эволюционного оптимизатора
  Definition evolve_optimizer.h:102

## Macro Definition Documentation

## PARAM_SCALE

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

Value:
(((float)(x) - (float)(min_val)) / ((float)(max_val) - (float)(min_val)))

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

Definition at line 73 of file evolve_optimizer.h.

## PARAM_UNSCALE

#define PARAM_UNSCALE | ( |  | val,
|  |  | min_val,
|  |  | max_val )

Value:
(((float)(val)) * ((float)(max_val) - (float)(min_val)) + (float)(min_val))

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

Definition at line 79 of file evolve_optimizer.h.

## EVOLVE_MUTATION_MIN_PCT

#define EVOLVE_MUTATION_MIN_PCT 10

Минимальная мутация (в процентах от Loss)

Definition at line 89 of file evolve_optimizer.h.

## EVOLVE_MUTATION_MAX_PCT

#define EVOLVE_MUTATION_MAX_PCT 100

Максимальная мутация (в процентах от Loss)

Definition at line 92 of file evolve_optimizer.h.

## ELOVLE_N_ELITE_CANDIDATE

#define ELOVLE_N_ELITE_CANDIDATE 2

Количество кандидатов, которые проходят в поколение без изменений (по умолчанию 2)

Definition at line 95 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,
|  | float | mutation_amp,
|  | float * | start_params )

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

Parameters

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

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

Definition at line 155 of file evolve_optimizer.h.

## EvolveOptimizer_Step()

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

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

Parameters

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

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

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

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

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

Definition at line 225 of file evolve_optimizer.h.