Разработать Java программу оптимизации приема БАД Timefold/Optaplanner
Общее описание
Алгоритм нужен для того чтобы распределить прием БАДов, назначенных нутрициологом/врачом с учетом ограничений (будут предоставлены):- Совместимости между собой
- Количество приемов в день (их может быть 1-4)
- Приема относительно еды: ДО / ВО ВРЕМЯ / ПОСЛЕ еды (сразу) / МЕЖДУ приемами пищи
- Прием относительно времени суток: утро/ обед/ вечер
- Стандартное время приема пиши: Завтрак, Второй_Завтрак, Обед, Полдник, Ужин, Второй_Ужин
Ограничения
Ограничение 1 - Совместимость БАДов между собой
Совместимость определяется исходя из таблицы в Приложении 1 (лист 1)Ограничение 2 - Количество приемов в день
Задается Пользователем (ограничение на минимальное количество приемов в день). Данной ограничение обусловлено тем, что «большую порцию БАДа» нельзя принять за один раз. Например, необходимо принимать БАД ХХХ 1000мг в сутки, за один раз нельзя принимать более 300мг, значит минимальное количество приемов = 4раза. Количество приемов Пользователь определяет сам и вводит как ограничение.Ограничение 3- Прием относительно еды
Данное ограничение определено заранее (Пользователь не участвует). Ограничение также представлено в Приложении 1 (лист 2)Ограничение 4- Прием относительно времени суток
Данное ограничение определено заранее (Пользователь не участвует). Ограничение также представлено в Приложении 1 (лист 2)Ограничение 5 -Стандартное время приема пищи
Основное время приема пищи: Завтрак, Обед, УжинДополнительное время приема пищи: Второй_Завтрак, Полдник, Второй_Ужин. Дополнительное время приема пищи используется в том случае если не возможно распределить БАДы по основным.
Избыточные ограничения. Невозможность подготовки приема (решения)
В случае большого числа БАДов возможна ситуация при которой все действующие ограничения не позволят найти решение (план приема БАДов). В таком случае необходимо указать перечень «взаимомешающих» БАДов, которые препятствуют, для того чтобы Пользователь мог выбрать какой БАД «оставить», а какой «исключить»Техническое задание
Необходимо реализовать алгоритм оптимизации приема БАДов с использованием Timefold.ai (Optaplanner.org) на Java.В результате должен получится алгоритм, который
- на входе получает задачу - список БАДов с кол-вом приемов в день
- выполняет оптимизацию с учет ограничений
- на выходе выдает решение - список БАДов, распределенных по временным слотам, с указанием “конфликтующих” БАДов, при наличии