Почему оптимизатор иногда находит не лучший рацион — ДельтаКорм

Почему оптимизатор иногда находит не лучший рацион и что с этим делать

Оптимизация рациона — это не подбор одного числа. Это поиск лучшей комбинации из десятков параметров одновременно. Задача нелинейная, и у неё есть объективные математические сложности. Понимание этих сложностей поможет вам получать от «ДельтаКорм» максимум.

1. Простая задача: один параметр

Представьте, что в рационе можно менять только одну вещь — например, долю концентратов. Есть один показатель эффективности (ДельтаКорм), и он зависит от этой доли. График зависимости — плавная кривая с одной вершиной.

В такой задаче любой алгоритм справится. Двигайся в сторону роста — и ты обязательно придёшь к лучшему решению. Это как подниматься на холм в ясную погоду: вершина одна, и ты её видишь.

Реальность: задач с одним параметром в кормлении не бывает. Даже простейший рацион из трёх кормов — это уже три переменных, связанных между собой ограничениями.

1 переменная, 1 оптимум. Плавная кривая с единственной вершиной — алгоритм всегда найдёт решение.

2. Два параметра — и уже ловушки

Добавим второй параметр. Теперь ландшафт — не кривая, а поверхность. И на этой поверхности может быть несколько холмов разной высоты.

Алгоритм оптимизации — это, упрощённо, альпинист в тумане. Он не видит весь ландшафт целиком. Он чувствует наклон под ногами и идёт вверх. Проблема в том, что он может забраться на ближайший холм — и остановиться, не зная, что за долиной есть холм выше.

Аналогия

Вы оптимизируете рацион и получили ДельтаКорм 450 руб./гол./день. Хороший результат? Да. Лучший? Не факт. Возможно, при другой комбинации кормов — с другой «стартовой точки» — алгоритм нашёл бы 480 руб./гол./день.

Те 30 рублей разницы — это 30 × 1000 голов × 365 дней = 10,9 млн рублей в год. Стоит попробовать ещё раз.

Холм, на котором алгоритм остановился, называется локальный максимум. Самый высокий холм на всём ландшафте — глобальный максимум. Цель — найти глобальный, но гарантировать это в сложной задаче математически невозможно.

2 переменные, несколько пиков. Поверхность с локальными ловушками. Перетащите мышью для вращения.

3. А теперь — реальный рацион

В реальном рационе «ДельтаКорм» оптимизирует одновременно десятки параметров: доли каждого корма, баланс по сухому веществу, НДК, КДК, крахмалу, сахару, жиру, протеину, аминокислотам, минералам, витаминам, DCAD, RUFAL, физНДК и так далее.

Это уже не поверхность, которую можно нарисовать. Это 30-мерное пространство. Человек не может его представить — и нарисовать тоже нельзя. Но можно понять главное: в таком пространстве локальных максимумов не единицы, а тысячи.

Чем сложнее задача — тем выше шанс попасть в локальный максимум.

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

30 параметров — «турбина». Каждая лопасть — отдельный параметр рациона со своим ландшафтом. Общая ось — IOFC. Оптимизатор ищет точку, хорошую одновременно во всех 30 плоскостях. Перетащите мышью для вращения.

Что повышает риск локального максимума

Много кормов 15–20 компонентов — это 15–20 переменных. Пространство поиска растёт экспоненциально.
Жёсткие ограничения Узкие коридоры по НДК, крахмалу, DCAD сужают «проходимую» зону — алгоритм может застрять в тупике.
Много критериев сразу Оптимизация одновременно по ДельтаКорму, надою, жиру, белку — критерии конкурируют между собой.
Похожие корма Три вида силоса с близким составом — алгоритму сложнее различать комбинации, он «буксует».

4. Что делать: практические приёмы

Локальные максимумы — не баг программы. Это объективное свойство нелинейных задач. Но есть проверенные способы повысить шансы найти глобальный оптимум.

Приём 1. Измените стартовые условия и запустите заново

Оптимизатор стартует с текущего рациона — того, что вы задали как начальную точку. Если изменить стартовые доли кормов (даже случайно) и запустить оптимизацию заново, алгоритм может пойти по другому маршруту и прийти к другой вершине.

Практика: запустите оптимизацию 2–3 раза с разными начальными рационами. Если результаты совпадают — с высокой вероятностью это глобальный оптимум. Если различаются — берите лучший.

Приём 2. Смените целевую функцию для сравнения

Попробуйте запустить оптимизацию не на максимум ДельтаКорма, а на максимум надоя. Сравните получившиеся рационы. Если рацион «на максимальный надой» даёт ДельтаКорм выше, чем рацион «на максимальный ДельтаКорм» — значит, первый запуск застрял в локальном максимуме.

Почему это работает: разные целевые функции создают разные ландшафты оптимизации. Алгоритм ищет по разным «картам» — и может найти область, которую пропустил при прямом поиске.

Приём 3. Упростите задачу, потом усложните

Уберите часть кормов или ослабьте ограничения. Найдите оптимум в упрощённой задаче. Затем верните убранное и запустите оптимизацию с найденной точки. Иногда «грубый» оптимум оказывается ближе к глобальному, чем «точный, но локальный».

Приём 4. Проверяйте результат здравым смыслом

Если оптимизатор выдал рацион, в котором один корм занимает 0% или забит в потолок ограничения — это может быть признаком локального решения. Алгоритм «упёрся» в стенку и не нашёл обхода. Попробуйте слегка сдвинуть границы и запустить снова.

5. Итого

Оптимизация рациона — математически сложная задача. Чем больше кормов, показателей и ограничений — тем сложнее ландшафт и тем выше риск остановиться в локальном максимуме, который выглядит хорошо, но не является лучшим.

«ДельтаКорм» использует нелинейные алгоритмы, которые справляются с этим лучше, чем линейное программирование или ручной перебор. Но ни один алгоритм не гарантирует глобальный оптимум в задаче с 30 переменными — это доказанное ограничение математики, а не программы.

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

Попробуйте запустить оптимизацию вашего рациона с разными стартовыми условиями — и сравните результаты.

Открыть ДельтаКорм