Блок задач

6. Зимние проекты

Сложность 8

Задача «Дизайн-агентство»

Суть задачи состоит в генерации и селекции изображений посредством генетического алгоритма.

Общее описание

Предположим, у нас есть N изображений. Мы можем оценить их по некоторым критериям (цветность, симметричность, пустота/заполненность и т.д.). Предположим, даны M критериев оценки, а общая оценка равна взвешенной сумме отдельных оценок. Оценив все изображения, можно отобрать из них наилучшие (дающие максимальную общую оценку).

Далее, можно комбинировать изображения друг с другом. Для этого подходят операции попиксельного сложения (возможно с коэффициентами), умножения, функции «исключающего ИЛИ». В качестве некоторого ориентира можно использовать набор режимов наложения слоёв в графических редакторах. Также можно видоизменять отдельные изображения: трансляция (сдвиг изображения в любую сторону), кадрирование (выбор некоторого фрагмента, который останется, а остальные пикселы будут заполнены фоном), изменение цветности (поменять местами R, G и B-каналы) и т. д.

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

На старте выборка формируется случайным путём. К новой выборке также можно добавлять одно или несколько случайных изображений с целью не дать системе «залипнуть» в локальном максимуме.

Задание

Смоделировать описанную выше систему. Создать иерархию классов-оценщиков и классов-модификаторов, запрограммировать общий алгоритм. Реализовать возможность сохранения изображений в файл.