Pull to refresh

Comments 40

Я более того скажу, вы ещё только верх копнули. Грубо говоря, реализовали управление складом там, где можно внедрять производственную ERP. Как насчет, например, сбора данных с установленных на полях метеостанций, и с провайдера прогноза погоды для расчёта даты и объемов внесения удобрений? А только эта задача влияет на доходность агрохолдинга куда больше, чем 10% ;)
Мы работаем с крупными холдингами, где сложно задавать дату внесения удобрений для каждого поля и потом по разным причинам выдерживать этот график, именно поэтому мы решаем оптимизационную задачу для всего холдинга.

Для расчета внесения удобрений можно применить другой кейс расчета необходимой дозы внесения с учетом плодородия почвы. Для этого нужны данные о химическом составе почвы, которые нужно собирать раз в 3-5 лет и не каждый Агрохолдинг может себе это позволить.

Погодные данные учитываются в задаче операционного планирования техники, операция может не выполняться из-за того, что не подходит температурный режим или идёт дождь, если трактор вышел из строя, или механизатор «заболел», все эти факторы учитываются на коротком периоде и создается план работ на неделю-две.
Вообще, подобная «математика» — это как раз и есть прерогатива крупных холдингов. Метеостанции, это штука дорогая, равно как и инфраструктура для них. У небольших агропредприятий, когда идёт посевная, утром агроном объезжает поля на УАЗиках, берёт пробы, и решает, что вот завтра надо садить, завтра надо вносить удобрения и т.д. У крупных это более автоматизировано (кто до этого дорос, естественно).
Для расчета внесения удобрений можно применить другой кейс расчета необходимой дозы внесения с учетом плодородия почвы.

Это не исключает, а дополняет внесение с учетом метеоданных. Способность молодых всходов усваивать удобрения из почвы сильно зависит от температуры и влажности.
Можно и нужно привлекать студентов биолого-почвенников. У них, обычно, практики не хватает.
Хех, потребность в разных удобрениях, в разных стадиях развития растения — это база, с которой знакомят студента на первом курсе.
Неправильным внесением урожай можно сильно испохабить.
Реально, необходимо разрабатывать схему внесения удобрений основываясь на фазе роста и текущей погоды, а так же, принимая в расчёт как прошедшую погоду (для корректировки негативных факторов), так и принимая в расчёт прогноз (для подготовки растения к неблагоприятным факторам).

По хим.составу плюс-минус лапоть, придумать можно. В общем случае проще держать небольшую лабораторию на постоянной основе.
Зашел на sas.com и про сельское хозяйство не нашел ни единой статьи :(
Плохо искали.
В 1966 году решения SAS еще не было. Но имелась потребность в компьютерной программе для статистического анализа огромного количества сельскохозяйственных данных, собранных благодаря грантам министерства сельского хозяйства США.

Вот ссылка на раздел про сельское хозяйство на нашем сайте: www.sas.com/ru_ru/industry/agriculture.html. А еще мы регулярно проводим агросекцию на SAS Forum Russia (уже два форума подряд в 2019 году и в 2017 году), а также отраслевые мероприятия, например, в прошлом году провели бизнес-завтрак и в этом году недавно провели бизнес-ужин.
Кажется, на сайте и не обещали ничего из аграрных проектов показывать. Желающим посмотреть на их продукт рекомендовали написать на почту.
Вот, чтобы понять задачу оперативного планирования, нужно взять СЛОЖНЫЙ объект. Иначе кажется, что задачу можно решить каким-нибудь линейным программированием или еще чем-то описанным в учебниках.
Я первый раз столкнулся с подобной задачей 40 леи назад. Это был цех механообработки, где узким местом мог быть то станок, то рабочий, то оснастка, то вообще энергопотребление цеха.
С тех пор усвоил:
1.Не должно быть ограничений по количеству ВИДОВ ресурсов.
2.Нет смысла выделять критерий оптимизации среди ограничений.
3.Должно быть три режима управления: по плану, с коррекцией плана и прямая диспетчеризация.
Насколько я понял, автору пришлось до всего этого дойти в процессе обследования агрохолдинга.
Дело в том, что в агрохолдингах узкое место — количество ресурсов, поэтому оптимизация строится таким образом, чтобы минимизировать потери при возможном несоблюдении технологии, это же является целевой функцией оптимизации.
Узкое место, по определению, нехватка какого-то ресурса :)
Вопрос в том, что есть простые (или, если хотите, несбалансированные) системы, где узкое место явное и неизменное. Там оптимизация всего остального не дает заметного выигрыша. А есть системы сложные (сбалансированные), в которых на каждом плановом периоде узким местом может оказаться ресурс любого вида. Более того, узкое место может меняться по мере составления плана. Вот тут автоматизация планирования позволяет получить принципиальный выигрыш.
У нас получилось поднять среднюю загрузку оборудования с 0.3 до 0.7-0.8. Второй аналогичный цех был попросту закрыт.
В агропроизводстве вполне может оказаться узким местом и земля, и техника, и семенной материал, и удобрения и еще что-то. Поэтому легко верю в 10% выигрыша, а может и больше.
В 2000 году на 3-ем курсе в курсовой по экономико-математическому моделированию примерно такие задачи решали. Только были еще коровы, свиньи и птица нужно было при планировании растениеводства учесть потребность в кормах и сбалансировать рацион.
И кстати ексель с этим прекрасно и тогда справлялся, там специальный инструмент для этого есть.
Что за специальный инструмент? VBA?
Возможно речь идет о SOLVER, но у него очень серьезные ограничения на количество оптимизируемых параметров в дефолтной версии.
Надстройка «Поиск решений»
мы делали матрицу в 60 переменных и 60 ограничений
и искали максимум прибыли
Не понимаю, почему минусуют коллегу. Все, что описано выше — классическая задача линейного программирования. В объеме, указанном в статье, эксель наверное не справится, но это задача вполне реализуется студентом 4 курса на питоне (или если он умный, то сам напишет на .Net симплекс метод).

По сути вся задача упирается в несколько справочников и обычный симплекс метод. Я конечно не знаю, сколько заплатил колхоз за это решение, но уверен, что лучше бы они наняли бы студента, а на сэкономленные деньги бы купили трактор нормальный вместо МТЗ-80, например от Ростсельмаша. Потому что нормальный трактор может использовать сеялки в 3 раза шире и нуждается в обслуживании в 2 раза реже. Соответственно, нужно меньше трактористов и механиков, а также эконом деньги на солярке.

Почти наверняка не линейного программирования. Иначе получится, что надо выделить 3,68 трактора на поле #1 :)

Совершенно справедливо. Значительная часть задачи относится к комбинаторному программированию. Еще в начале 70-х было доказано, что задача составления расписания в классической постановке относится к числу NP-полных. По сути решение сводится к полному перебору вариантов и на реальных размерностях невозможно.
Однако решать задачу надо и пришлось выдумывать другие подходы. Расписания сейчас составляют, кто с каким качеством — разговор отдельный.
Мне все-таки интересно, если бы авторы статьи не были ограниченны возможностями своего солвера, то насколько бы более эффективно решалась задача? Согласно моему опыту, в ограничения MIP упираешься очень быстро и дальше только нелинейные ограничения спасают, но их должен поддерживать движок…
Основное противоречие применения методов оптимизации в том, что они стремятся найти самое-самое лучшее решение с точки зрения критерия, выбранного достаточно случайно. Оптимизируем критерий, который умеем.
Нам удавалось строить очень сложные расписания при помощи принципиально другого подхода:
1. все ограничения делятся на обязательные и оптимизирующие. Если хотите на физические и психологические :)
2.оптимизирующие ограничения упорядочиваются по важности.
3.если алгоритм не находит ни одного решения, самое малозначимое ограничение отбрасывается и процесс повторяется.
Там много тонкостей, но главное, что удается добиться полиномиальной сложности алгоритма.
Можно пару уточнений?

1) Это в смысле, жесткие (ограничения области определения) и мягкие (штрафы)?

2) Вот это не совсем понял, как именно? Веса штрафов различаются? Но это балансировать надо очень долго…

3) Тоже не очень понял. Движок SAS вроде бы не умеет нарушать запрет на область определения и игнорировать границы?
В смысле общая электрическая мощность цеха ограничена и все оборудование одновременно включено быть не может физически. Сюда же ограничения производительности оборудования и т.п.
А вот «еще бы вот эту детальку сегодня сделать» и «Петрович просил его на полчасика раньше отпустить» это ограничения оптимизирующие. Учтем — хорошо, не сумеем — так сойдет.
И тут все просто. Без всяких штрафов. Скажите точно, что важнее сделать дополнительную деталь или пойти на встречу Петровичу?
Если окажется, что сможем составить расписание с обоими ограничениями, замечательно. Если не сможем, одно из них нужно просто отменить. Скажите заранее какое.
Фокус в том, что чем больше ограничений, тем быстрее получаем результат. Положительный или отрицательный. Если расписание не составилось, отменяем наименее значимое ограничение и пробуем снова. Работает очень быстро на реальных размерностях.
Да, это не SAS.
Фокус в том, что чем больше ограничений, тем быстрее получаем результат.

Да, но только пока они линейные или целочисленные :)

А какой движок используете вместо САСа?
«Да, но только пока они линейные или целочисленные :)»
Все ограничения имеют вид логической функции на совместимость нескольких ресурсов разного вида. Можно ли назначить работу Петрову с 10 до 11? Встанет ли эта оснастка на этот станок? Внутреннее устройство ограничений влияет очень слабо.
«А какой движок»
Первый раз я участвовал в разработке такой системы в 1978 году. Какие еще движки? ЭВМ СМ-2 с 128к памяти. Для управления цехом на 30 станков хватало. Самым забавным техническим решением було оснащение рабочих мест дисковыми номеронаберателями :) Получил контейнер с работой, набрал 1; Установил оснастку на станок — 2 и т.д.
Но при этом данную задачу ежедневно решают во всех агрохолдингах и колхозах, опираясь на опыт и используя порой грубые допущения, пренебрегая оптимальностью конечного результата.

И это еще не учитывая тот факт, что сам эксель априори грешит грубыми допущениями и ошибочными округлениями…
сождалось впечатление что на карте оптимизация заключалась в том, что бы собрать поля с одной культурой в одном месте. Сомневаюсь, что агроному было недоступно это знание. На самом деле, в больших хозяйствах внутренняя логистика очень важна. Поля располагаются часто в привязке к стоянке МТС. Их может быть несколько и карта будет пестрая. Но самая большая проблема в том что такие инструменты предполагают высокий уровень входных данных. А в хозяйствах входные данные надо очень сильно фильтровать. Когда я вижу очередной проект, который все сам решает, я вспоминаю деревенские реалии: если данные не пляшут -думай, кому это выгодно. А так же датчики урожайности, внесение по норме — самое слабое место это агрегат в поле. А с математикой все в порядке.
Действительно, в агротехнологии много факторов, которые могу повлиять на урожайность и отследить каждый из них невозможно. Однако есть научные исследования, какие последовательности сева культур наиболее оптимальны при прочих равных, например на одном поле сеют последовательно пшеницу — кукурузу — ячмень — горох. Мы рассчитываем, как выбрать севообороты для каждого поля таким образом, чтобы соблюсти все условия и получить наибольшую прибыль. Например, на некоторые поля нельзя сеять определенные культуры, и часть севооборотов для них не подходит. В варианте на картинке была задача максимально близко расположить поля с одной культурой для того, чтобы оптимизировать уборку урожая. Есть ограничения по пропорциям культур, которые тоже нужно соблюсти. С учётом всех ограничений для каждого поля такую же задачу агроном будет выполнять месяц, затем требования менеджмента изменятся и ему придется рассчитывать все заново. В нашем интерфейсе можно быстро оптимизировать севооборот при заданных ограничениях, увидеть результат на карте и посмотреть, какую прибыль компания получит при этих вводных.

Спасибо за статью.
Скажите, какая была размерность модели и какой солвер Вы использовали?

Для каждого кейса решаем смешанную целочисленную линейную задачу, алгоритм решения branch-and-bound, почитать про него можно тут: support.sas.com/documentation/cdl/en/ormpug/66851/HTML/default/viewer.htm#ormpug_milpsolver_details01.htm.
Размерность задачи расчета структуры посевных площадей порядка 1e6 переменных и такого же порядка количество линейных же ограничений (1e7 коэффициентов линейных ограничений). Кроме выбора оптимальных севооборотов рассчитывается план работ техники в периоды сева и уборки, площади культур ограничены количеством своей техники. Задача операционного планирования включает распределение техники по полям (трактор + прицепное устройство) и расчет логистики перемещения каждой единицы техники. Для типичного среднего хозяйства (200 полей, 100 единиц техники и 2000 вариантов пар техники) размерность задачи составляет 1 млн. переменных и 20 млн. линейных коэффициентов в ограничениях. Сложности чаще возникают не столько из-за размерности модели (решается расширением используемой памяти), а в сложности сходимости задачи, либо поиска начального решения. Часто помогает декомпозиция задачи.
Оптимизация по испоьзованию техники и обработке земель- вижу.
Сбор однотипных культур на ограниченном пространстве для усиления скорости поражения грибками/болезнями/насекомыми, усиления межвидового опыления и получения непонятных и неплодородных гибридов — тоже вижу. Как быть с этим?
В оптимизационной модели фиксируется параметр укрупнения севооборотов (http://uchebnikirus.com/geografia/zemlerobstvo_-_gudz_vp/polovi_sivozmini.htm), который можно регулировать по условиям заказчика. В одних холдингах важнее близкое расположение полей с одной культурой для оптимизации затрат на уборку, в этом случае параметр будет максимальным и поля будут объединять в кластеры. В больших холдингах, где ресурсы на проведение работ по защите полей ограничены и важно более хаотичное расположение полей, этот параметр будет меньше.
Эм… И Вам удалось все ограничения выразить на уровне MILP? Только линейные зависимости в колхозе? :)
Учитываем назначение техники на поле (бинарный индикатор), выручка и затраты линейно зависят от урожайности. Учитывается влияние на урожайность того, была или не была проведена операция на поле, через линейный коэффициент. Есть много факторов, которые влияют на урожайность, но пока в агрокомпаниях нет такого массива данных, чтобы создать нелинейную модель.
Спасибо за пояснения!

А вот эта связь из примера в статье, когда не то было засеяно на поле и урожайность упала катастрофически — ее тоже удалось выразить в линейных терминах?
мне кажется что в случае болезней/вредителей/непогоды сведение посевов в один кластер чревато потерей всего урожая культуры, при чередовании полей этого можно избежать. но это не точно.
имхо противоречивая концепция: у нас есть плохой агроном, плохой механизатор наверное такие же плохие рядовые работники но вот пришли люди с «новыми технологиями» и стало лучше? это проблемы разных уровней и если в хозяйстве плохие работники то никакая оптимизация не поможет.
единственное что ваша оптимизация реально может сделать это освободить время агронома на планировании полей, механизатора на планирование ремонтов-подготовку техники, обернуть это в быстрые и красивые отчёты для начальства НО не более того.
если у вас есть супер агроном и супер механизатор то они в екселе и с помощью распечатанных скринов с гугл мапс сделают ничуть не хуже всю эту работу а в 99% даже и лучше ибо они учтут процессы выветривания, воровства(садить скажем клевер впритык к населённому пункту ну такое себе) и прочие прелести о которых парни в очках и с компами даже не подозревают.
наверное это распространенная среді погромістов болезнь — кодіть не разбіраясь в суті вопроса.
Не про агротехнику (но в остальном мире все то же):

Оптимизация — это про процессы. Оптимальные процессы помогают выжать максимум даже не из самого надежных работников, а неоптимальные процессы ограничивают потенциал даже самых крутых сотрудников (ресурсов).

Это как 0.5 (так себе работник) на 0.5 (так себе процессы) умножить — на выходе будет еще меньше, чем на входе (0.25 — так себе результат). Подтянули процессы — 0.5 умножили на 1 — уже что-то, на 0.25 больше прежнего. И наоборот: даже если есть крутой агроном (1) на неоптимальное планирование (0.5) — будут те же 0.5 результата. Даем крутому сотруднику возможность вместо ковыряния в экселе и переваривания кучи факторов в голове возможность заниматься своей работой и влиять на процессы в организации в лучшую сторону — и получаем 1*1
не нужно ставить параллель между автоматизацией и эффективностью
автоматизация работы агронома или механизатора влияет на работу этих должностей, возможно исправляет ошибки связанные с человеческим фактором(работает как органайзер) возможно более явно показывает изъяны скажем если нам нужно 3 комбайна а у нас их два то знать об этом нужно заранее, а не в момент уборочной бегать по соседям брать в долг и платить в тридорога НО так или иначе автоматизация освобождает-разгружает определённые должности на предприятии и единственный прямой экономический эффект это когда вместо механизатора и 3х его помощников останется только один работник, аналогично с агрономом.
и я уверен что этот эффект не будет иметь 10% рентабельности сельхозпредприятия.
вся эта лабуда действительно нравится хозяевам предприятий ибо отчётики, графики, таблички внушают им чувство контроля, независимости от агронома-механика-механизатора… и в коей то мере это даже правда и это даже полезно ибо это позволяет людям без аврала болеть, хоронить, ездить в отпуск «без телефона» но это не % рентабельности это скорее «культура организации производства»
Sign up to leave a comment.