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