Я спросил у Рики:
— У вас возникли проблемы с обусловленным поведением роя?
— Именно.
— Оно непредсказуемо?
— Это еще мягко сказано.
В последние десятилетия наблюдения за обусловленным поведением стали причиной небольшой революции в компьютерной науке. Для программистов это означало, что они могли запрограммировать правила поведения отдельных агентов, но не агентов, действующих единой группой.
Отдельные агенты — будь то программные модули, или процессоры, или, как в данном случае, микророботы — могут быть запрограммированы на совместные действия в обоих случаях и на самостоятельное поведение в других случаях. Им могут быть заданы цели. Их можно запрограммировать так, чтобы они все усилия приложили к достижению поставленной цели или же чтобы всегда были готовы отвлечься и прийти на помощь другим агентам. Однако результаты всех этих взаимодействий запрограммировать невозможно. Они просто проявляются зачастую совершенно неожиданным образом.
В некотором смысле это очень увлекательно. Впервые в истории науки программа выдает результаты, непредсказуемые для программиста. По поведению такие программы больше похожи на живые существа, чем на созданные человеком автоматы. Это восхищало программистов, но и доставляло им массу неприятностей.
Потому что обусловленное поведение программ проявляется беспорядочно и странно. Иногда самостоятельные агенты начинали конкурировать друг с другом, и программа вообще не могла выполнить никакую задачу. Иногда агенты настолько сильно влияли друг на друга, что конечная цель совершенно забывалась и вместо этого система делала что-то совсем другое. В этом смысле такие программы были очень похожи на детей — непредсказуемостью поведения и повышенной отвлекаемостью. Один программист сказал про это так: «Программировать распределенный разум — это все равно что сказать пятилетнему ребенку, чтобы тот пошел в свою комнату и переоделся. Он может это сделать, а может сделать что-то совсем другое и не вернуться обратно».
Поскольку программы вели себя как живые, программисты начали проводить аналогии с поведением реальных живых существ в реальном мире. Собственно, для того, чтобы как-то прогнозировать поведение программы и влиять на конечный результат, подобные программы стали создавать на основе моделей поведения настоящих живых существ.
Поэтому программисты взялись изучать внутреннюю жизнь муравейника, или процесс строительства у термитов, или танцы у пчел — чтобы потом на основе этого создавать программы, регулирующие расписание посадки самолетов, или транспортировку багажа, или программы для перевода с одного языка на другой. Такие программы работали великолепно, но они тоже могли давать внезапные сбои — особенно если внешние условия резко менялись. Тогда программы забывали поставленную цель.
Именно поэтому пять лет назад я начал разрабатывать модель отношений «Хищник — Добыча» — для того, чтобы удержать программы от потери цели. Потому что голодного хищника ничто не отвлечет от поиска добычи. Обстоятельства могут заставить его действовать разными способами, он может пробовать неоднократно, прежде чем достигнет успеха, — однако хищник никогда не забудет о своей цели.
Так я стал экспертом по отношениям «хищник — добыча». Я знал все о стаях гиен, африканских диких собак, об охотящихся львицах и атакующих колоннах армии муравьев. Моя команда программистов изучила специальную литературу — отчеты полевых биологов-исследователей, и мы обобщили полученные сведения в программном модуле, который назвали «Хи-Доб» (сокращение от «Хищник-Добыча»). Этот программный модуль мог контролировать поведение любой мультиагентной системы и делать ее поведение целенаправленным. Модуль «Хи-Доб» заставлял программу искать цель.
Глядя на экран монитора перед Рики, где группа рабочих единиц упорядоченно и скоординированно разворачивалась в воздухе, я спросил:
— Вы использовали «Хи-Доб», когда программировали отдельные агенты?
— Да. Мы использовали эти правила.
— Признаться, по-моему, они ведут себя довольно неплохо, — сказал я, глядя на экран. — Почему у вас с ними что-то не так?
— Мы не совсем уверены.
— Что ты имеешь в виду?
— Я имею в виду вот что. Мы знаем, что проблема существует, но не знаем точно, в чем именно ее причина. В программировании или в чем-то другом.
— В чем-то другом? В чем это, например? — я нахмурился. — Я не понимаю, Рики. Это же всего лишь группа микророботов. Вы можете заставить их делать все, что угодно. Если программа неправильная — измените ее, и все. Чего я недопонимаю, Рики?
Рики посмотрел на меня как-то обеспокоенно. Потом оттолкнул стул от стола и встал.
— Давай я покажу тебе, как мы делаем эти агенты, — предложил он. — Тогда ты поймешь ситуацию лучше.
После просмотра демонстрационного ролика Джулии мне было ужасно интересно увидеть то, что собирался показать мне Рики. Поскольку очень многие уважаемые мною люди полагали, что создать производство на молекулярном уровне невозможно. Одним из главных теоретических возражений было время, которое понадобилось бы для того, чтобы создать действующую молекулу с заданными свойствами. Чтобы собрать наноцепочку, которая вообще может хоть что-то выполнять, требуются гораздо более эффективные технологии, чем все существовавшие прежде технологии производства, созданные человеком. В основном все человеческие линии сборки работают с примерно одинаковой скоростью — они добавляют по одной составляющей части за секунду. В автомобиле, например, несколько тысяч деталей. Значит, процесс полной сборки автомобиля занимает примерно несколько часов. Пассажирский самолет состоит из шести миллионов деталей, и, чтобы его построить, нужно несколько месяцев.
Но стандартная искусственная молекула состоит из десяти в двадцать пятой степени отдельных частей. Это 10.000.000.000.000.000.000.000.000 частей. В приложении к практике это число невообразимо велико. Человеческий мозг не в состоянии его даже осознать. Но расчеты показывают, что, если даже скорость сборки достигнет миллиона частей в секунду, время, которое понадобится для создания одной молекулы, будет больше, чем известное время существования мира, а именно — три тысячи триллионов лет. В этом и заключалась основная проблема. Ее назвали проблемой срока сборки.
Я сказал Рики:
— Если вы наладили промышленное производство…
— Мы сделали это.
— Значит, вы нашли решение проблемы срока сборки.
— Мы ее решили.
— Но как?
— Подожди, сейчас сам все поймешь.
Большинство ученых полагали, что эту проблему можно решить, если собирать конечную молекулу из относительно крупных составляющих частей — молекулярных фрагментов, содержащих миллиарды атомов. Таким образом время сборки, возможно, сократится до нескольких лет. Потом, при подключении частичной самосборки, можно было бы сократить общее время до нескольких часов или даже до одного часа. Но даже с учетом дальнейших усовершенствований производство коммерческих объемов продукции таким способом оставалось неразрешимой теоретической задачей. Потому что требовалось производить в час не одну молекулу, а несколько килограммов молекул.
Никто и никогда не мог представить, как такое можно сделать.
Мы прошли через несколько лабораторий, одна из которых выглядела как стандартная лаборатория для микробиологических или генетических исследований. В этой лаборатории я увидел Мае — она возилась с какими-то приборами. Я начал спрашивать у Рики, зачем им понадобилась здесь микробиологическая лаборатория, но он отмахнулся от моего вопроса. Он стал нетерпелив и явно спешил. Я заметил, как он посматривает на часы. Мы подошли к последнему воздушному шлюзу. На стеклянной перегородке было написано: «Микропроизводство». Рики жестом пригласил меня идти дальше.
— Только по одному, — сказал он. — Больше система не позволяет.
Я вошел внутрь шлюза. Прозрачная дверь закрылась у меня за спиной, рукоятки с уплотнителями прижались к стенкам, изолируя камеру. Снова ударили мощные потоки воздуха — снизу, с боков, сверху. Я уже начал привыкать к этой процедуре. Вторая дверь открылась, и я прошел вперед, в короткий коридор, за которым виднелось просторное помещение. Я увидел яркий, сияющий белый свет — такой яркий, что у меня заболели глаза.