No project description provided
Project description
Matrix Optimization of Object Locations
Описание
Библиотека mlo-optimizer содержит класс-оптимизатор для решения разного рода задач на подбор оптимального расположения объектов в матрицах
Примеры таких задач:
- подбор оптимальной раскладки клавиатуры
- задача составления расписания
- поиск оптимальных маршрутов в графах
Преимущества
Для решения задачи достаточно только реализовать целевую функцию, получающую на вход индивида и возвращающую оценку приспособленности для данного индивида
В оптимизаторе реализован генетический алгоритм со всеми необходимыми компонентами:
- создание случайного индивида
- скрещивание (упорядоченное скрещивание)
- мутация (мутация перестановкой)
- отбор (турнирный)
- элитизм
Индивиды могут иметь любую размерность (вектор, матрица, 3-х мерные тензоры и т.д)
Для решения задач элементы можно разделать на 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()
Подбор оптимальной раскладки
Для задач из этой области можно использовать отдельный пайплайн, который состоит из нескольких шагов:
- Создание оптимизатора
- Вычисление весов биграмм
- Запуск оптимизатора
Первым делом создаем оптимизатор
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
928ad72f0b453cb055d20eeeb81ac7d5134936cdc0d3ea0272c087eb549e1455
|
|
| MD5 |
5b0d881a2bb913c1c04f02df31b88d42
|
|
| BLAKE2b-256 |
8edaa9fe5dff276d5f767d43310fdc7c2726de352f4286c277781273928417f7
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e5163d9dc09eccaba3cbaa465c0299299c74329bf28244cad715a684ccf9b24
|
|
| MD5 |
6f0b01e31183d9f5280f977aa234568c
|
|
| BLAKE2b-256 |
e6a5fea15f70a86669b7c4bb65a562076d8cccdb8c038b757645bbad05bf0915
|