Оптимизация рациона — это не подбор одного числа. Это поиск лучшей комбинации из десятков параметров одновременно. Задача нелинейная, и у неё есть объективные математические сложности. Понимание этих сложностей поможет вам получать от «ДельтаКорм» максимум.
Представьте, что в рационе можно менять только одну вещь — например, долю концентратов. Есть один показатель эффективности (ДельтаКорм), и он зависит от этой доли. График зависимости — плавная кривая с одной вершиной.
В такой задаче любой алгоритм справится. Двигайся в сторону роста — и ты обязательно придёшь к лучшему решению. Это как подниматься на холм в ясную погоду: вершина одна, и ты её видишь.
Реальность: задач с одним параметром в кормлении не бывает. Даже простейший рацион из трёх кормов — это уже три переменных, связанных между собой ограничениями.
Добавим второй параметр. Теперь ландшафт — не кривая, а поверхность. И на этой поверхности может быть несколько холмов разной высоты.
Алгоритм оптимизации — это, упрощённо, альпинист в тумане. Он не видит весь ландшафт целиком. Он чувствует наклон под ногами и идёт вверх. Проблема в том, что он может забраться на ближайший холм — и остановиться, не зная, что за долиной есть холм выше.
Вы оптимизируете рацион и получили ДельтаКорм 450 руб./гол./день. Хороший результат? Да. Лучший? Не факт. Возможно, при другой комбинации кормов — с другой «стартовой точки» — алгоритм нашёл бы 480 руб./гол./день.
Те 30 рублей разницы — это 30 × 1000 голов × 365 дней = 10,9 млн рублей в год. Стоит попробовать ещё раз.
Холм, на котором алгоритм остановился, называется локальный максимум. Самый высокий холм на всём ландшафте — глобальный максимум. Цель — найти глобальный, но гарантировать это в сложной задаче математически невозможно.
В реальном рационе «ДельтаКорм» оптимизирует одновременно десятки параметров: доли каждого корма, баланс по сухому веществу, НДК, КДК, крахмалу, сахару, жиру, протеину, аминокислотам, минералам, витаминам, DCAD, RUFAL, физНДК и так далее.
Это уже не поверхность, которую можно нарисовать. Это 30-мерное пространство. Человек не может его представить — и нарисовать тоже нельзя. Но можно понять главное: в таком пространстве локальных максимумов не единицы, а тысячи.
Чем сложнее задача — тем выше шанс попасть в локальный максимум.
Сложность растёт, когда вы добавляете больше кормов в рацион, задаёте больше показателей для оптимизации, ужесточаете ограничения (мин/макс по каждому показателю).
Локальные максимумы — не баг программы. Это объективное свойство нелинейных задач. Но есть проверенные способы повысить шансы найти глобальный оптимум.
Оптимизатор стартует с текущего рациона — того, что вы задали как начальную точку. Если изменить стартовые доли кормов (даже случайно) и запустить оптимизацию заново, алгоритм может пойти по другому маршруту и прийти к другой вершине.
Практика: запустите оптимизацию 2–3 раза с разными начальными рационами. Если результаты совпадают — с высокой вероятностью это глобальный оптимум. Если различаются — берите лучший.
Попробуйте запустить оптимизацию не на максимум ДельтаКорма, а на максимум надоя. Сравните получившиеся рационы. Если рацион «на максимальный надой» даёт ДельтаКорм выше, чем рацион «на максимальный ДельтаКорм» — значит, первый запуск застрял в локальном максимуме.
Почему это работает: разные целевые функции создают разные ландшафты оптимизации. Алгоритм ищет по разным «картам» — и может найти область, которую пропустил при прямом поиске.
Уберите часть кормов или ослабьте ограничения. Найдите оптимум в упрощённой задаче. Затем верните убранное и запустите оптимизацию с найденной точки. Иногда «грубый» оптимум оказывается ближе к глобальному, чем «точный, но локальный».
Если оптимизатор выдал рацион, в котором один корм занимает 0% или забит в потолок ограничения — это может быть признаком локального решения. Алгоритм «упёрся» в стенку и не нашёл обхода. Попробуйте слегка сдвинуть границы и запустить снова.
Оптимизация рациона — математически сложная задача. Чем больше кормов, показателей и ограничений — тем сложнее ландшафт и тем выше риск остановиться в локальном максимуме, который выглядит хорошо, но не является лучшим.
«ДельтаКорм» использует нелинейные алгоритмы, которые справляются с этим лучше, чем линейное программирование или ручной перебор. Но ни один алгоритм не гарантирует глобальный оптимум в задаче с 30 переменными — это доказанное ограничение математики, а не программы.
Ваша задача — помочь алгоритму: запускать с разных стартов, сравнивать целевые функции, упрощать и усложнять. Два-три дополнительных запуска занимают минуты, а разница в результате может стоить миллионы рублей в год.
Попробуйте запустить оптимизацию вашего рациона с разными стартовыми условиями — и сравните результаты.
Открыть ДельтаКорм