Разработать Java программу оптимизации приема БАД Timefold/Optaplanner

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

Алгоритм нужен для того чтобы распределить прием БАДов, назначенных нутрициологом/врачом с учетом ограничений (будут предоставлены):
  • Совместимости между собой
  • Количество приемов в день (их может быть 1-4)
  • Приема относительно еды: ДО / ВО ВРЕМЯ / ПОСЛЕ еды (сразу) / МЕЖДУ приемами пищи
  • Прием относительно времени суток: утро/ обед/ вечер
  • Стандартное время приема пиши: Завтрак, Второй_Завтрак, Обед, Полдник, Ужин, Второй_Ужин
Обычно в назначении может быть от 5 до 30 различных БАДов.

Ограничения

Ограничение 1 - Совместимость БАДов между собой

Совместимость определяется исходя из таблицы в Приложении 1 (лист 1)

Ограничение 2 - Количество приемов в день

Задается Пользователем (ограничение на минимальное количество приемов в день). Данной ограничение обусловлено тем, что «большую порцию БАДа» нельзя принять за один раз. Например, необходимо принимать БАД ХХХ 1000мг в сутки, за один раз нельзя принимать более 300мг, значит минимальное количество приемов = 4раза. Количество приемов Пользователь определяет сам и вводит как ограничение.

Ограничение 3- Прием относительно еды

Данное ограничение определено заранее (Пользователь не участвует). Ограничение также представлено в Приложении 1 (лист 2)

Ограничение 4- Прием относительно времени суток

Данное ограничение определено заранее (Пользователь не участвует). Ограничение также представлено в Приложении 1 (лист 2)

Ограничение 5 -Стандартное время приема пищи

Основное время приема пищи: Завтрак, Обед, Ужин

Дополнительное время приема пищи: Второй_Завтрак, Полдник, Второй_Ужин. Дополнительное время приема пищи используется в том случае если не возможно распределить БАДы по основным.

Избыточные ограничения. Невозможность подготовки приема (решения)

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

Техническое задание

Необходимо реализовать алгоритм оптимизации приема БАДов с использованием Timefold.ai (Optaplanner.org) на Java.

В результате должен получится алгоритм, который
  • на входе получает задачу - список БАДов с кол-вом приемов в день
  • выполняет оптимизацию с учет ограничений
  • на выходе выдает решение - список БАДов, распределенных по временным слотам, с указанием “конфликтующих” БАДов, при наличии
Реализовать в виде простой java программы без лишних зависимостей. Должна быть возможность протестировать работу программы (можно просто в коде).

Читайте на 123ru.net