Skip to main content

No project description provided

Project description

Matrix Optimization of Object Locations

Описание

Библиотека mlo-optimizer содержит класс-оптимизатор для решения разного рода задач на подбор оптимального расположения объектов в матрицах

Примеры таких задач:

  • подбор оптимальной раскладки клавиатуры
  • задача составления расписания
  • поиск оптимальных маршрутов в графах

Преимущества

Для решения задачи достаточно только реализовать целевую функцию, получающую на вход индивида и возвращающую оценку приспособленности для данного индивида

В оптимизаторе реализован генетический алгоритм со всеми необходимыми компонентами:

  • создание случайного индивида
  • скрещивание (упорядоченное скрещивание)
  • мутация (мутация перестановкой)
  • отбор (турнирный)
  • элитизм

Индивиды могут иметь любую размерность (вектор, матрица, 3-х мерные тензоры и т.д)

Для решения задач элементы можно разделать на 2 множества:

  1. Множество учитываемых элементов (учитываются в целевой функции)
  2. Множество переставляемых элементов (меняют матричные положения в скрещивании и мутации)

Для задач подбора оптимальных раскладок реализован пайплайн, решающий данную задачу (см. раздел 'Подбор оптимальной раскладки')

Установка

pip install mlo-optimizer

Использование

Все действия происходят из класса Optimizer

from mlo_optimizer.optimizer import Optimizer

Создаем экземпляр класса с некоторыми обязательными значениями

optimizer = Optimizer(
    init_matrix,
    counted_elems,
    permutable_elems,
    fitness_func,
)

init_matrix - начальная матрица с любыми элементами, например:

[
    ['inv', 'lang', None, None, None, None, '?123'],
    ['settings', None, None, None, None, None, 'backspace'],
    ['inv', None, None, None, None, None, None],
    [None, None, None, 'space', None, None, 'enter'],
    ['inv', None, None, None, None, None, None],
    ['move', None, None, None, None, None, 'capslock'],
    ['inv', 'exit', None, None, None, None, 'shift'],
]

Места None займут элементы из permutable_elems

counted_elems - учитываемые элементы, например:

['a', 'b', 'c', 'd', 'e', 'f', 'space', 'enter']

permutable_elems - переставляемые элементы, например:

['a', 'b', 'c', 'd', 'e', 'f']

fitness_func - целевая функция, получающая на вход матрицу-индивида и возвращающую кортеж из оценок приспособленности, например:

def test_fitness_func(individual):
    if individual[0][0] == 'a':
        return (2.5,)
    return (-2.5,)

Также можно прописать именованные аргументы в fitness_func_kwargs

В конце выполняем оптимизацию

best_matrix = optimizer.optimize()

Подбор оптимальной раскладки

Для задач из этой области можно использовать отдельный пайплайн, который состоит из нескольких шагов:

  1. Создание оптимизатора
  2. Вычисление весов биграмм
  3. Запуск оптимизатора

Первым делом создаем оптимизатор

optimizer = Optimizer(
        INIT_HEX_KEYBOARD,
        EN_COUNTED_ELEMS,
        EN_PERMUTABLE_ELEMS,
        fitness_func='square',
)

Для этой задачи возможно получить решения для клавиатур с квадратными клавишами (fitness_func='square') и с гексагональными (fitness_func='hex')

Также можно указать размеры клавиш с помощью следующих параметров:

  • a_s (по-умолчанию 0.5): половина стороны квадратной клавиши
  • a_h (по-умолчанию 0.537634): расстояние от середины гексагональной клавиши до середины ее стороны
  • b_h (по-умолчанию 0.930605): расстояния от середины гексагональной клавиши до середины стороны нижестоящей клавиши

Далее запускаем fit_bigrams с указанием пути до папки с файлами формата .txt. Это необходимо для оценки важности близкого расположения одних пар клавиш по отношению к другим

lang_base_part = '../data/en/'

optimizer.fit_bigrams(lang_base_part)

И оптимизируем

best_matrix = optimizer.optimize()

Параметры

При создании экземпляра класса Optimizer можно прописать следующие параметры:

  • minimization (по-умолчанию True): минимизация или максимизация оценки приспособленности
  • population_size (по-умолчанию 50): размер популяции в одном поколении
  • max_generation (по умолчанию 50): максимальное количество поколений
  • p_crossover (по-умолчанию 0.9): вероятность скрещивания
  • p_mutation (по-умолчанию 0.2): вероятность мутации
  • tourn_size (по-умолчанию 3): размер выборки для турнирного отбора
  • hall_of_fame_size (по-умолчанию 1): количество лучших индивидов, полученных после завершения оптимизации

Лицензия

Прям тут: LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlo_optimizer-1.0.0.tar.gz (17.1 kB view hashes)

Uploaded Source

Built Distribution

mlo_optimizer-1.0.0-py3-none-any.whl (19.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page