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 details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

File details

Details for the file mlo_optimizer-1.0.0.tar.gz.

File metadata

  • Download URL: mlo_optimizer-1.0.0.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.9.18 Linux/6.2.0-36-generic

File hashes

Hashes for mlo_optimizer-1.0.0.tar.gz
Algorithm Hash digest
SHA256 928ad72f0b453cb055d20eeeb81ac7d5134936cdc0d3ea0272c087eb549e1455
MD5 5b0d881a2bb913c1c04f02df31b88d42
BLAKE2b-256 8edaa9fe5dff276d5f767d43310fdc7c2726de352f4286c277781273928417f7

See more details on using hashes here.

File details

Details for the file mlo_optimizer-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: mlo_optimizer-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.9.18 Linux/6.2.0-36-generic

File hashes

Hashes for mlo_optimizer-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e5163d9dc09eccaba3cbaa465c0299299c74329bf28244cad715a684ccf9b24
MD5 6f0b01e31183d9f5280f977aa234568c
BLAKE2b-256 e6a5fea15f70a86669b7c4bb65a562076d8cccdb8c038b757645bbad05bf0915

See more details on using hashes here.

Supported by

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