Тугая упаковка, или Бизнес-роман о роботах, алгоритмах и о складе без людей — страница 21 из 53

Три дня тестов полностью подтвердили потенциал моего алгоритма. Построенные по его первой версии палеты не были идеальными, и положение части коробок казалось неустойчивым. Но контраст между моими геометрическими структурами (стеками и слоями) и теми, что строились по нынешнему рабочему коду, был очевиден в каждой палете, вышедшей из ячейки и выставленной на полу для сравнения. Любая из моих палет по качеству превосходила лучшую построенную по алгоритму «ТОПС».

* * *

Итак, менее чем через четыре месяца с тех пор, как я впервые попытался решить труднейшую математическую задачу построения палет, у нас уже имелся пусть пока и не рабочий код, но хорошо работающий алгоритм. Это была фантастика. Для меня самого этот период стал чем-то вроде «болдинской осени», невероятного всплеска продуктивности и результатов. Это было намного круче всего, что я сделал за прошлый год. И за два с половиной года на предыдущей работе. Такое, конечно, случается очень редко, и было понятно, что подобного не следует ожидать каждые следующие четыре месяца. Но таким результатом, достигнутым хотя бы раз в жизни, не могли похвастаться большинство даже самых именитых профессоров прикладной и вычислительной математики.

В начале апреля «Проект KP» с таким названием был официально утвержден и профинансирован. Это потребовало свыше $1,5 млн, не заложенных прежде в бюджет «Кейс-Пика», тогда еще скромной по размерам компании, насчитывающей всего полсотни сотрудников. Бóльшая часть денег шла не на собственно имплементацию моего алгоритма, а на «обвязку» – вспомогательные программные сервисы, от баз данных до графических интерфейсов: их все равно пришлось бы когда-нибудь переделывать независимо от моего алгоритма, но до сих пор это не было приоритетом. В моем же распоряжении, помимо Дэвида, оказались два программиста из «Фолиэдж» (им предстояло работать над самим алгоритмом), а также тестировщица Аманда, недавно нанятая «КейсПиком» и самая симпатичная из женской части коллектива – неглупая, но все-таки больше выделявшаяся яркими цветами ногтей, чем компьютерными умениями.

* * *

Работа по переводу алгоритма в рабочий код вовсю кипела еще до официального утверждения проекта. Дэвид Эренберг оказался очень способным для этой роли: мало кто мог так хорошо ориентироваться в чудовищных хитросплетениях отдельных частей алгоритма. Мы кропотливо разбирали детали – многие из них я уже забывал сам, хоть и придумал их всего пару месяцев назад. Особенно трудным был невероятно закрученный алгоритм двумерной упаковки прямоугольников (стеков) – с двойной рекурсией[13], сложными промежуточными структурами данных, ворохом исключений и особых случаев. Его имплементация выродилась в тысячи строк плохо структурированного рабочего кода. Но это все же было лучшим вариантом из тех, что можно было создать за короткое запланированное время. И главное – это работало, хотя и чуть хуже (по качеству упаковки), чем в матлабовском прототипе.

* * *

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

Логика построения слоя в этом случае отличалась от той, что я придумал для типичной ситуации, когда почти все прямоугольники разные. Нужно было строить регулярные, симметричные структуры вместо ситуативных паттернов, характерных для разных коробок. Оптимальные структуры различались в зависимости от длины и ширины одной коробки. Иногда это была однородная сетка – каждый прямоугольник в одной и той же ориентации (либо длинной, либо короткой стороной вдоль длинной стороны палеты). Иногда это была комбинация из двух регулярных сеток – одна в длину, одна в ширину. Сами пары сеток могли быть расположены либо вдоль длинной, либо вдоль короткой стороны палеты. Нужно было прокрутить через алгоритм все подобные паттерны, чтобы выбрать оптимальный вариант.

Большинство палет от производителей товаров (то есть состоящих из одинаковых коробок) уже использовали автоматические палетайзеры и заложенные в их программы шаблоны укладки в зависимости от размеров упаковок. Существуют коммерческие программы (весьма недешевые), оптимизирующие подобные укладки. Для меня же это была всего лишь одна из многочисленных ветвей неизмеримо более сложного алгоритма укладки коробок произвольного размера. Примерно за две недели работы алгоритм такой функции был создан.

* * *

К концу сентября первая фаза проекта KP подходила к концу. Мы устраняли баги, тестировали интерфейсы и передачу данных от одной компоненты к другой. Команда готовилась к многодневному тестированию нового софта палетизации в Ньюбурге – уже встроенного во всю систему, так чтобы в один день полностью переключить процесс планирования палет с софта «ТОПС Инжиниринг» на KP. В начале октября большая группа разработчиков и тестировщиков почти две недели безвылазно сидела на складе в Ньюбурге и с утра до ночи прогоняла разные тесты, моделировала редкие и экзотические заказы, регистрировала и сортировала проблемы. На полу было расставлено множество палет – построенных как по софту «ТОПС», так и по новому. К новым палетам были прилеплены распечатки с их основными характеристиками и крупными инициалами KP. Но и без этих букв легко было увидеть разницу в качестве упаковки – четкая слоистая структура «моих» палет против хаотичных башен палет «ТОПС». Тесты в целом прошли успешно. Новый софт, готовый к производству, планировалось запустить в течение следующих двух недель.

* * *

В один из дней этих тестов в гостиничном телевизоре я увидел новость про поимку и жестокое убийство полковника Каддафи, еще недавно – лидера Ливии. Разрушительная «арабская весна» развивалась практически одновременно с моим проектом: самое начало пришлось на конец декабря 2010 г., а основные промежуточные результаты уже проявились к октябрю 2011-го. Параллельные, но такие разные процессы. Примерно тогда же начались серьезные военные действия в Сирии – кровавая рана, окрасившая все 2010-е и ставшая одним из разломов, вызвавших резкое ухудшение отношений между Россией и Америкой в течение этого времени.

Параллельно активизировались и другие процессы, определившие общее направление 2010-х. В середине сентября 2011 г. несколько тысяч молодых людей собрались на улицах Нижнего Манхэттена – и не на пару часов, как случалось раньше, а на много дней, с палатками и запасами еды, с плакатами, речевками и музыкой. Это была первая демонстрация «Оккупай Уолл-стрит», движения, быстро распространившегося на множество других американских (и не только) городов. Это были протесты против резко сузившихся возможностей для молодежи после «великой рецессии» 2008 г., против социальной несправедливости и плутократии, только укрепившейся во время кризиса. Эти демонстрации в течение нескольких недель полностью игнорировали в американских новостях – хотя, уже зная о происходящем, можно было нагуглить малую толику информации об этом движении. Интересно, что первое упоминание о протестах «Оккупай Уолл-стрит» я увидел в передаче «Раша Тудэй».

Это не значило, что американские медиа игнорировали любые виды протестов. В последние десятилетия они с удовольствием смаковали кривляния отдельных борцунов за какие-нибудь экзотические права, но панически боялись любого упоминания о выступлениях на социально-экономической почве, способных поставить под сомнение власть и легитимность существующей плутократии. С начала 1990-х американские СМИ почти всегда избегали любой тематики, напоминающей классовую борьбу (а также антивоенные выступления).

Когда реальность все-таки уже невозможно было игнорировать, сюжеты про «Оккупай Уолл-стрит» стали появляться в регулярных передачах американского телевидения. Век палаток «Оккупай» в крупных американских городах был недолог, и к концу года почти всех разогнали и всё демонтировали.

В конце октября я видел такой палаточный лагерь «Оккупай» в центре Лос-Анджелеса, около здания городского управления.

Это было во время отпуска в Калифорнии и Неваде, куда мы с Жанной отправились после успешного тестирования моего алгоритма в Ньюбурге. Я очень люблю американские национальные парки, в особенности юго-западного региона. Это настоящее чудо природы, а также человеческих рук: здесь не только бережно сохраняют природу, но и делают всю эту красоту доступной для миллионов посетителей – предусмотрели удобные тропинки и ступеньки, ведущие к вершинам скал, по уму разместили указатели и знаки ориентирования. Песчаным пляжам с пальмами я почти всегда предпочту тянущиеся вверх сосны на угрюмых гранитных скалах, синие озера в горных ложбинах или суровые пустыни с высоким безоблачным небом и колючим кустарником под ногами, где из ровной земли вырастают, будто сказочные башни, крутые месы с почти вертикальными склонами. В ту поездку мы посетили парки Йосемити, Секвойя, Кингс-Каньон и Долину Смерти.

А еще мы впервые побывали в одном из немногих мест, куда у меня нет желания возвращаться никогда. Как ни странно, это один из самых посещаемых приезжими городов США – Лас-Вегас, штат Невада. Я нигде не видел такого контраста между сияющим медийным образом и реальными ощущениями. На улицах, заваленных мусором из флаеров с рекламой проституток и залоговых поручителей, помогающих вызволить из каталажек арестованных несчастливцев, продувших последние доллары, а также с уставившимис