INITASKМХП · управління годівлі птиці · рецептури
Технічне завдання під погодження · 04.09.2026

Рецептури: пʼять пунктів управління годівлі птиці

Це ТЗ на те, що ви передали через Катю. Два пункти з пʼяти виявились помилками у нас, і вони вже виправлені у лабораторії: нижче написано не «зроблено», а що саме було причиною, щоб було видно, що ми знайшли корінь, а не замазали симптом. Три інші це нова функціональність, і на них тут повна постановка: що рахуємо, за якою формулою, що показуємо і за чим ви прийматимете роботу.

Що в цьому документі

Ваш пунктСтанСуть
1. Максимальний обсяг сировини по компаніїнова функціяспільна задача по всіх рецептах і заводах разом з обмеженням наявності, а не рецепт за рецептом
2. Розподіл компонента по фазах годівлінова функціячастка інгредієнта зростає від Предстарту до Фінішу 2 як обмеження всередині задачі, а не як ручна перевірка після неї
3. Допуск відхилення по кожному показникунова функціятаблиця допусків у налаштуваннях, окремо на сировину і окремо на норму готового корму
4. val, ile і взагалі будь-які ваші показникивиправленоперелік показників більше не заданий шаблоном, звʼязок з нормами іде за кодом показника
5. Сума часток у складі значно більша за 100%виправленосам оптимізатор такого дати не може, причина була у вхідних даних, і тепер вона називається вголос

Пункти 4 і 5 уже стоять на стенді, їх можна перевірити руками сьогодні. Пункти 1, 2 і 3 потребують від вас плану виробництва і кількох довідників, перелік у розділі «Що потрібно від вас».

1. Максимальний обсяг використання сировини по компанії

Зараз задача рахується по одному рецепту: сума часток дорівнює 100, норми виконані, межі включення дотримані. Питання «скільки макухи ми в принципі можемо зʼїсти по компанії» цією задачею не закривається, бо воно про всі рецепти і всі заводи одночасно і залежить від того, скільки чого виробляється.

Як це формулюється

Змінні. Частка кожного інгредієнта у кожному рецепті на кожному заводі, у відсотках.

Обмеження, які лишаються ті самі. Сума часток кожного рецепта дорівнює 100. Норми поживності кожного рецепта. Межі включення інгредієнта у цьому рецепті.

Нове обмеження. Сумарне споживання інгредієнта по всіх рецептах і заводах, помножене на план виробництва кожного рецепта у тоннах, не перевищує наявний обсяг цього інгредієнта за період.

Два запитання, дві задачі. Перша: мінімум вартості всього місячного випуску за наявної сировини. Друга: максимум споживання конкретного інгредієнта за тих самих норм. Друга задача рахується у двох варіантах, і обидва потрібні.

Технічний максимум

Скільки цієї сировини можна поставити у корми, якщо єдина мета це зʼїсти її, а норми і межі включення при цьому виконані. Це стеля для закупівлі: більше не має сенсу купувати за жодних умов.

Розумний максимум

Той самий максимум, але з умовою, що вартість місячного випуску не зростає більше ніж на заданий відсоток від оптимуму. Дефолт нуль з половиною відсотка, міняється у налаштуваннях. Саме це число має практичний сенс для перемовин з постачальником.

Чесно про залежність від плану

Максимум по компанії це не властивість сировини, а властивість сировини разом з планом виробництва. Той самий інгредієнт при 45 тис. т на місяць і при 60 тис. т дасть різні числа, а зміна структури фаз змінить його ще раз. Тому без файла плану агент цю цифру не покаже і не буде вигадувати середню.

Що ви побачите на екрані

Максимум по кожному інгредієнту у тоннах за період, обидва варіанти поруч
Розкладку, у якому рецепті і на якому заводі скільки відсотків це дає
Ціну рішення: наскільки зростає вартість тонни кожного рецепта і всього випуску
Обмеження, яке зупинило зростання: норма, межа включення, драбина по фазах або наявність іншої сировини
Вивантаження у CSV, щоб цифра пішла у закупівлю без переписування руками

2. Розподіл компонента по фазах годівлі

Вимога зрозуміла і технологічно правильна: якщо інгредієнт дозволений молодняку обмежено, його частка не може у Старті бути більшою, ніж у Фініші. Сьогодні це перевіряє людина після розрахунку, і тому воно ловиться не завжди.

Порядок фаз задається один раз: Предстарт, Старт, Ріст, Фініш, Фініш 2. Він живе у налаштуваннях, тому нову фазу або інший ланцюг ви додасте самі.

Обмеження ставиться прямо у задачу: частка інгредієнта у наступній фазі не менша за частку у попередній. Оскільки всі фази рахуються однією задачею, оптимізатор шукає найдешевший набір рецептів, який цю драбину вже дотримує, а не підганяє її потім.

Налаштування на кожен інгредієнт: напрямок (зростає до фінішу, спадає до фінішу, без правила), мінімальний крок між сусідніми фазами, максимальний крок, стеля на конкретну фазу. Дефолт для всіх інгредієнтів це «без правила», перелік з драбиною задає технолог.

Коли драбина недосяжна

Драбина плюс норми плюс наявність можуть виявитись несумісними. У цьому випадку агент не підбирає компроміс мовчки: він каже, що задача несумісна, і показує, яке саме обмеження треба послабити і на скільки, у тому самому вигляді, що вже працює у розділі «Ціна обмежень». Рішення про послаблення завжди за технологом.

3. Допуск відхилення на кожен показник окремо

Зараз у лабораторії один допуск на всі показники, і це справді груба спрощеність: три відсотки на обмінну енергію і три відсотки на натрій це різні за змістом речі.

Важливо не змішати два різні допуски, вони працюють у різних місцях:

Допуск на сировину

Наскільки лабораторна проба може відхилятись від паспортного значення матриці, перш ніж це стане сигналом. Задається у відсотках або в абсолютних одиницях показника, на ваш вибір по кожному рядку.

Допуск на норму

Наскільки фактична поживність готового корму може не дотягувати до норми, перш ніж вважати норму порушеною. Задається в абсолютних одиницях показника. Дефолт це половина останнього знака, який ми показуємо, тобто округлення порушенням не вважається.

Колонка таблиці допусківЩо означає
показник, кодтой самий код, що у матриці і в нормах
одиницябереться з довідника показників
допуск сировинизначення плюс ознака, це відсотки чи абсолют
допуск нормиабсолютне значення в одиницях показника
хто змінив і колизміна допуску це рішення, тому воно з автором і датою, а не тихе налаштування

Таблиця редагується в інтерфейсі і завантажується файлом, щоб її можна було підготувати в Excel один раз на всі показники. Зміна допуску одразу перераховує сигнали і розділ якості сировини, без участі розробника.

4. Показники поживності без шаблону: val, ile і будь-які інші

Виправлено, стоїть на стенді

Ви маєте рацію, і причина була саме така, як ви описали. Перелік показників був заданий у коді фіксованим списком, тому стовпець, дописаний у файл руками, просто не читався. Далі виходило найгірше: норма на val існувала, а значення у всіх інгредієнтів дорівнювало нулю, і агент або оголошував задачу несумісною, або писав «нижче норми» на порожньому стовпці.

Тепер будь-який стовпець файла матриці, який не є службовим (код, назва, ціна, мін, макс, група, постачальник, одиниця, коментар), читається як показник поживності
Звʼязок з нормами іде за кодом показника: однаковий код у матриці і в нормах, і показник працює нарівні з рештою
Після завантаження файла агент прямо пише, які показники він побачив понад стандартний набір, тому одруку в назві стовпця видно одразу
Якщо норма є, а показника в матриці немає, він більше не рахується як нуль: агент називає цей показник і каже, що значень немає, а решту норм рахує далі

Перевірити можна так: додайте у файл матриці стовпці val і ile, а у файл норм рядки з тими самими кодами. Обидва показники підуть у розрахунок і зʼявляться у таблиці норм.

5. Сума часток компонентів значно більша за 100%

Це найважливіший пункт, тому спершу про сам розрахунок. У задачі, яку розвʼязує оптимізатор, рівність «сума часток дорівнює 100» стоїть окремим рядком і виконується точно. Ми прогнали 200 випадкових задач: максимальне відхилення суми становило 6,25 на десять у мінус тринадцятому степені, тобто похибка представлення числа. Дати склад на 169% оптимізатор не може, і тепер це перевіряється на кожному прогоні тестів.

Отже, ефект справжній, а джерело у вхідних даних. Ми відтворили всі три випадки, які дають рівно те, що ви бачили.

Дубль коду інгредієнта

Той самий код двома рядками у матриці або в рецептурі. Оптимізатор рахує їх як дві різні позиції, а на екрані частки складаються, і замість 69,17 плюс 29,43 плюс 1,41 виходить 169,17. Це саме та картина, яку описали ви.

Кілограми замість відсотків

Склад заданий у кілограмах на тонну, тобто сума дорівнює 1000. Поживність порахується правильно, а склад читається як десятикратний.

Код, якого немає в матриці

Частка входить у суму складу, але не має ані ціни, ані поживності, тому у вартість і в норми не потрапляє. Раніше вона зникала мовчки.

Що зроблено

Дубль коду більше не приймається: файл відбивається з номерами обох рядків, тому виправити його займає секунди
Якщо сума часток не дорівнює 100, екран прямо це пише і називає ймовірну причину, включно з розпізнаванням кілограмів на тонну
Поруч кнопка «звести до 100% пропорційно»: множник показується до натискання, дію виконує людина, ваш файл при цьому не змінюється
Коди складу, яких немає в матриці, перелічені окремим блоком
Усі чотири випадки закриті регресійними перевірками, тому повторно вони не зʼявляться

Якщо у вас зберігся конкретний прогін, після якого зʼявилась сума понад 100, пришліть рецепт і файл, і ми звіримо по ньому окремо. Якщо ні, перелічені три причини покривають усе, що може дати такий ефект.

Чи можуть ці агенти повністю замінити вашу програму розрахунку рецептів

Відповідаємо прямо, бо на такому питанні обережна відповідь нікому не допомагає.

Що вже є і працює на ваших файлах

Ядро це не обгортка над чужим рушієм, а власна лінійна оптимізація: мінімум вартості тонни за обмежень поживності і меж включення. Воно звірене з еталонним розвʼязувачем на 120 випадкових задачах і рахує на ваших матрицях, нормах і цінах. Плюс те, чого у типовій програмі рецептури немає: затверджений склад перевіряється на РЕАЛЬНІЙ сировині за протоколами лабораторії, рахується ціна кожного обмеження, історія по місяцях і сигнали.

Чого бракує, щоб замінити повністю

БлокЩо це означаєСкладність
Спільна задача по всіх рецептах і заводахпункт 1 цього ТЗ, разом з обмеженнями наявностісередня, ядро вже це вміє
Обмеження на співвідношення показниківлізин до сирого протеїну, кальцій до фосфору, енергія до протеїну і подібнінизька, це лінійні обмеження
Обмеження на групи сировинисумарна частка зернових, сумарна частка шротів, стеля на побічні продуктинизька
Драбина по фазахпункт 2 цього ТЗнизька
Премікси, носії і мікродозуваннярозрахунок дозування, крок дозатора, мінімальна навіска змішувачасередня, частина обмежень стає цілочисельною
Довідники як робочий обʼєктпоказники, сировина, постачальники і версії матриці всередині програми, а не файламисередня, це вже кабінет, а не лабораторія
Версії рецепта і погодженняхто затвердив, коли, що змінилось проти попередньої версії, вивантаження у 1С і Лібрусередня, експорт у CSV уже є
Сценарії замінисировини немає, чим замінити і що це коштуєнизька, це та сама задача з іншими межами

Що ми свідомо не забираємо у людини

Зоотехнічна норма і рішення про рецепт лишаються за технологом. Агент рахує, показує, з чого склалась цифра, і сигналить про розбіжність, а затверджує рецепт людина. Автозатвердження ми не пропонуємо навіть тоді, коли розрахунок сходиться ідеально.

Як ми пропонуємо вирішувати це питання

Замінити програму можливо, але це не пілот, а продукт на кілька етапів, і вирішувати наперед немає сенсу. Розумний шлях це паралельний місяць: агент рахує поруч з чинною програмою на тих самих даних, кожна розбіжність розбирається по рядках, і на виході є протокол, за яким видно, чи можна довіряти. Поки паралельний місяць не пройдено, ми не рекомендуємо вимикати чинну програму, і в жодному документі не будемо стверджувати, що заміна вже можлива.

Що потрібно від вас

Формати ті самі, що вже приймає лабораторія, тому нічого готувати заново не треба. Позначено, без чого конкретний пункт ТЗ не порахується.

ЩоНавіщоБез цього
Матриця з цінами, з усіма вашими показниками, включно з val і ileоснова розрахункуне рахується нічого
Рецептури по всіх фазах з позначкою фази і заводупункти 1 і 2максимум по компанії і драбина
Норми по кожній фазіоснова розрахункуне рахується нічого
План виробництва по рецептах і заводах на період, у тоннахпункт 1максимум по компанії, це не оцінюється приблизно
Наявність і законтрактовані обсяги сировини на періодпункт 1обмеження наявності
Перелік інгредієнтів з драбиною: напрямок, мінімальний і максимальний крокпункт 2драбина лишається вимкненою
Таблиця допусків або підтвердження наших дефолтівпункт 3працює один спільний допуск, як зараз
Один закритий місяць з розрахунком чинної програмипаралельна звірканемає з чим порівнювати

Дефолти, які ми ставимо самі

Щоб не тримати роботу через дрібниці, там де ви не назвали значення, стоїть робочий дефолт, і кожен міняється у налаштуваннях: порядок фаз Предстарт, Старт, Ріст, Фініш, Фініш 2; драбина вимкнена для всіх інгредієнтів, поки технолог не назве перелік; допуск сировини три відсотки на всі показники; допуск норми половина останнього показаного знака; запас вартості для розумного максимуму нуль з половиною відсотка; період розрахунку місяць.

Критерії приймання

Це те, за чим ви прийматимете роботу. Кожен пункт перевіряється на ваших файлах, а не на прикладі.

1
Максимум по компанії

Рахується на ваших рецептурах і плані. Сумарне споживання кожного інгредієнта по всіх рецептах не перевищує заявлену наявність, обидва варіанти максимуму показані поруч, і названо обмеження, яке зупинило зростання.

2
Драбина по фазах

У кожному рецепті, для якого вона задана, порядок часток дотримано. Якщо драбина недосяжна, агент каже про несумісність і називає обмеження, а не підганяє результат.

3
Допуски

Змінюються у налаштуваннях без розробника, окремо на сировину і на норму, і одразу перераховують сигнали та розділ якості сировини.

4
Ваші показники

Норма на будь-який показник з вашої матриці рахується нарівні з рештою. Якщо показника в матриці немає, він названий окремо і не оголошується порушеним.

5
Сума часток

У кожному розрахунку рівно 100%. Будь-яке відхилення у вхідному файлі назване з номером рядка і причиною.

6
Паралельний місяць

Розбіжність з чинною програмою по кожній позиції або дорівнює нулю, або пояснена конкретним рядком вхідних даних. Це головний критерій, решта пʼять це умови, без яких він не має сенсу.

Етапи

Пункти 4 і 5 уже у проді, окремого часу не потребують. Відлік іде від дня, коли ми отримали файли.

ТижденьЩо робимоЩо ви бачите в кінці
1довідник фаз, драбина і таблиця допусків у налаштуваннях, контрольний прогін на одному заводіпункти 2 і 3 працюють на ваших рецептурах
2спільна задача по всіх рецептах і заводах з обмеженнями наявності, максимум по кожній сировині у двох варіантахпункт 1 з розкладкою по рецептах і ціною рішення
3паралельний місяць проти чинної програми, розбір розбіжностейпротокол розбіжностей і рішення про приймання

Питання про повну заміну програми розрахунку рецептів ми пропонуємо винести за межі цього етапу і повернутись до нього з результатами паралельного місяця на руках.

Уточнення

Якщо десь ми зрозуміли неточно або якийсь пункт треба сформулювати інакше, напишіть тут, і ми переробимо саме цей пункт, а не весь документ.

Initask · управління годівлі птиці МХП · ТЗ від 04.09.2026. Розрахунки, про які тут ідеться, можна перевірити руками на робочому стенді: він рахує на ваших файлах, а не на прикладі.