Контур вероятности

Глава 1. Ночной объект

Игорь не любил ночные заявки.

Днём авария была аварией. Люди звонили, ругались, требовали, чтобы всё работало, и в этом была нормальная человеческая логика. Ночью всё становилось страннее. Даже обычный прорыв трубы выглядел так, будто город решил поговорить с тобой отдельно, без свидетелей.

В два часа семнадцать минут диспетчер позвонила второй раз.

— Игорь Сергеевич, вы точно смотрели заявку?

— Я на неё любуюсь уже пять минут, — сказал Игорь, не отрывая глаз от монитора. — Объект какой?

— В карточке написано: распределительный узел К-74.

— У нас нет К-74.

— Вот я поэтому и звоню.

На экране висела аварийная карточка. Красная, упрямая, с нормальным номером, нормальным временем, нормальной привязкой к району. Только сам объект отсутствовал во всех схемах, с которыми Игорь работал последние двенадцать лет.

Он открыл старую карту сетей. Потом архивную. Потом ту, которую никто не любил, потому что её вели ещё до нормального внедрения электронного учёта.

К-74 нигде не было.

— Может, ошибка телеметрии? — спросила диспетчер.

— Ошибка обычно врёт скромнее.

— Там ещё статус появился.

Игорь посмотрел ниже.

В строке состояния было написано:

ОЖИДАНИЕ СБОЯ

Он несколько секунд молчал.

— Это кто ввёл?

— Никто. Я журнал смотрела. Поле само обновилось.

— Поля сами не обновляются.

— Я тоже так думала до сегодняшней ночи.

Игорь потёр переносицу. Очень хотелось сказать что-нибудь простое, человеческое, про глюк сервера и кривые руки подрядчика. Но строка выглядела слишком аккуратно. Так пишет система, уверенная в своём праве портить людям ночь.

— Адрес есть?

— Есть координаты. Старый квартал у трамвайного кольца. За бывшей фабрикой.

— Там пустырь.

— По карте — да.

— А по заявке?

Диспетчер немного помолчала.

— По заявке там технический вход.

Игорь закрыл глаза.

Ночь обещала быть длинной.

Через двадцать минут он уже ехал по почти пустому проспекту. Город был мокрый после вечернего дождя. Асфальт ловил свет фонарей и отдавал его обратно длинными жёлтыми полосами. В такие часы Москва казалась не огромной, а глубокой. Будто под обычными дорогами, домами и остановками лежал второй город, терпеливый и старый.

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

Фабрику он помнил. Кирпичный корпус, выбитые окна, забор с рекламой дешёвых складов. За ней действительно был пустырь: трава, бетонные плиты, пара гаражей и вечная лужа, которая держалась даже в сухое лето.

Технического входа там быть не могло.

Он поставил машину у забора, взял фонарь, планшет и сумку с инструментами. Воздух пах мокрой травой, ржавчиной и чем-то сладковатым от старых цехов.

Координаты вели к дальнему углу пустыря.

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

Она стояла отдельно, прямо в бетонной стене, которой днём он бы поклялся здесь не было.

Над дверью висела табличка:

К-74

Краска на табличке была свежая. Болты — старые. Дверь выглядела так, словно простояла тут лет тридцать и появилась час назад одновременно.

Игорь тихо выдохнул.

— Ну здравствуй, красавица.

Он провёл фонарём по стене. Бетон уходил вправо и влево метров на десять, потом терялся в темноте. За стеной должен был быть пустырь. По ощущениям за ней было помещение.

Планшет коротко пискнул.

Заявка обновилась.

До сбоя: 00:17:00

Игорь посмотрел на таймер.

Потом на дверь.

— Вот теперь ты мне совсем не нравишься, — сказал он.

Замок открылся обычным техническим ключом.

Это почему-то напугало сильнее всего. Было бы легче, если бы дверь светилась, пела или требовала пароль на мёртвом языке. Но она открылась как сотни дверей до неё: туго, со скрежетом и с запахом сырой ржавчины.

За дверью вниз уходила лестница.

На стене горели старые лампы в защитных сетках. Где-то внизу работала вентиляция. Ровно, глухо и уверенно.

Игорь достал рацию.

— Центральная, я на месте. Объект найден.

Диспетчер ответила почти сразу:

— Как найден?

— Руками. Глазами. Ногами. Обычный метод.

— Его нет на карте.

— На карте много чего нет. Иногда даже здравого смысла.

— Что внутри?

Игорь посветил вниз.

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

Контур...

Связь в рации треснула.

— Повторите, — сказала диспетчер.

— Спускаюсь. Держите канал открытым.

Он сделал первый шаг вниз.

В это же время в другом конце города Вера Соколова смотрела на экран и пыталась понять, почему её программа врёт слишком правдоподобно.

Она работала в небольшой аналитической компании, которая делала скучные вещи для крупных клиентов: маршруты доставки, прогнозы нагрузки, модели складских остатков. Скучные вещи Вера любила. В них был порядок. Машина приезжает туда, где её ждут. Склад пустеет тогда, когда товар забрали. Цифры могут ошибаться, но обычно признаются в этом через логи, графики и матерящегося менеджера.

Сегодня модель городского трафика показывала улицу, которой не было.

Вера уже час пыталась найти источник ошибки. Проверила свежие данные, архивы, импорт из открытых карт, кеш, тестовый контур, старый дамп, который кто-то когда-то назвал final_final_true и тем самым навсегда испортил себе карму.

Улица всё равно оставалась.

Она шла за бывшей фабрикой, пересекала пустырь и упиралась в маленький прямоугольник с подписью:

К-74

Вера сняла очки и посмотрела на монитор усталым взглядом человека, которому компьютер только что предложил поверить в домового.

— Ты откуда вылез? — спросила она.

Компьютер не ответил. Он был воспитанный.

Она открыла слой исходных координат. Объект К-74 не был загружен из карты. Он появился в прогнозе, как узел маршрута, через который система почему-то начала прокладывать оптимальные пути.

Странность была тонкая. Обычный пользователь бы её не заметил. Машины по этому маршруту всё равно не ездили. Система просто учитывала невидимый поворот, словно в городе существовала короткая дорога, доступная только математике.

Вера запустила пересчёт.

Модель выдала предупреждение:

Исключение узла К-74 повышает риск события на 18%.

Она медленно наклонилась к экрану.

— Какого события?

Ниже появилась строка, которой в интерфейсе быть не должно было:

Основного.

Вера не испугалась сразу. Сначала она разозлилась. Это было гораздо полезнее.

Она полезла в код, включила подробный вывод, подняла историю изменений. Никаких шуток от коллег. Никакого чужого коммита. Никакой странной библиотеки, скачанной ночью с репозитория имени “потом разберёмся”.

К-74 возникал в расчётах из пустоты.

Потом на телефоне пришло уведомление от старого приложения городского транспорта. Вера давно им не пользовалась, но удалить всё забывала.

Маршрут построен. Пешком 23 минуты.

Она открыла уведомление.

На карте была точка старта — её офис.

Конечная точка — К-74.

Внизу горела подпись:

Прибыть до 02:48.

Вера посмотрела на время.

02:25.

За окном висело мокрое майское небо. В офисе гудел серверный шкаф, на кухне капала вода из плохо закрытого крана. Нормальные люди в такое время спали, дежурили или писали странные сообщения бывшим. Вера же сидела перед картой с объектом, который сам попросил к нему прийти.

Она открыла поиск по открытым городским базам. Ничего.

По архивам зданий. Ничего.

По форумам диггеров. Один старый пост пятнадцатилетней давности: “У фабрики есть вход вниз, но он появляется только на старых снимках”. Без фотографий. Без продолжения. С тремя комментариями, где автора послали отдыхать.

Вера ещё раз посмотрела на маршрут.

Потом на строку про риск события.

Её работа состояла в том, чтобы замечать плохие вероятности до того, как они становятся чужими убытками. Обычно это касалось фур, складов и опоздавших поставок. Сейчас всё выглядело так, будто город подкинул ей задачу из другой системы.

Она закрыла ноутбук, потом открыла снова и сохранила копию всех логов на флэшку.

На всякий случай.

Через минуту она уже натягивала куртку.

У проходной охранник поднял глаза от телефона.

— Домой?

— Почти.

— Такси вызвать?

Вера на секунду задумалась.

Маршрут на телефоне показывал только пеший путь. Машину он не предлагал.

— Пройдусь.

Охранник посмотрел на дождь за стеклом.

— Романтика.

— Диагностика, — сказала Вера и вышла на улицу.

На пятой ступени Игорь потерял связь с диспетчерской.

На восьмой планшет перестал показывать карту.

На двенадцатой таймер на экране замер.

00:15:42

Он остановился.

Снизу донёсся звук.

Щелчок реле.

Потом ещё один.

Потом десятки маленьких щелчков, будто в темноте просыпалась старая аппаратная.

Лампы мигнули. По стенам пробежала слабая дрожь.

Игорь пошёл дальше.

Внизу оказался круглый зал с бетонными стенами и металлическими шкафами по периметру. На полу была нарисована схема города. Улицы, кварталы, мосты, тоннели. В некоторых местах линии расходились, будто город пробовали чертить несколько раз и не выбрали окончательный вариант.

В центре стоял пульт.

На нём горел один экран.

ОЖИДАНИЕ СБОЯ

Ниже шёл таймер.

00:14:09

Под таймером мигала строка:

Вероятность основного события: 73%

Игорь медленно поставил сумку на пол.

— Так, — сказал он. — Вот с этого места поподробнее.

Экран послушно изменился.

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

Одна линия светилась красным.

Игорь узнал её сразу. Старый кабельный канал, который давно собирались вывести из эксплуатации.

Через четырнадцать минут в нём должен был случиться перегрев.

Через шестнадцать — отключение подстанции.

Через двадцать три — остановка насосной станции.

Через сорок — подтопление тоннеля под проспектом.

Цепочка была неприятная, но понятная. Так город и ломается: одна мелочь толкает другую, без злого умысла и красивой драматургии.

Потом экран показал вторую цепочку.

Она шла рядом с первой, тонкой серой линией.

Там перегрева не было. Подстанция работала. Насосная станция держала давление. Тоннель оставался сухим.

Зато через час сорок семь минут в другом районе падала опора временного перекрытия на стройке.

Без жертв. С разрушением. С перекрытием дороги. С крупным скандалом.

Игорь нахмурился.

— Это ещё что за выбор без выбора?

На пульте щёлкнула кнопка. Сама.

Рядом с ней загорелась надпись:

ПЕРЕВЕСТИ СОБЫТИЕ ВО ВТОРОЙ КОНТУР

Игорь не стал нажимать.

Он просто смотрел на кнопку и чувствовал, как в голове очень медленно собирается нехорошая мысль.

Система не предупреждала об аварии.

Она предлагала перенести её.

Вера шла быстро.

Город ночью был совсем не тем, который она видела из окна офиса. Днём он спорил, толкался, мигал витринами и мешал думать. Сейчас он работал почти бесшумно. Где-то вдалеке проходил трамвай. По мокрому асфальту шуршала редкая машина. Светофоры меняли цвета для пустых перекрёстков с такой дисциплиной, будто не хотели никого разочаровать.

Телефон вёл её через дворы.

Пару раз Вера пыталась свернуть удобнее, но маршрут перестраивался и упрямо возвращал её к прежней линии. Это раздражало. Хороший алгоритм должен объяснять, почему он упрямится.

На экране оставалось семь минут.

Возле бывшей фабрики связь стала хуже. Карта дёрнулась, на секунду показала другой район, потом вернулась.

Вера остановилась у забора.

Перед ней был пустырь.

По карте она уже должна была стоять у входа.

Она подняла телефон выше, как будто спутникам от этого становилось стыдно и они начинали работать лучше.

Маршрут мигнул.

Пройти прямо 34 метра.

Вера посмотрела на мокрую траву, бетонные плиты и темноту между ними.

— Конечно, — сказала она. — Куда же ещё.

Она прошла вперёд.

На двадцатом метре телефон погас.

Он не разрядился,а просто стал чёрным, как выключенный экран. Вера нажала кнопку питания. Ничего.

Тогда она увидела свет.

Тонкая полоска пробивалась из-за бетонной стены в дальнем углу пустыря. Стены там тоже не должно было быть, но к этому моменту Вера уже перестала спорить с реальностью вслух.

У стены была металлическая дверь.

Над ней висела табличка:

К-74

Дверь была приоткрыта.

Изнутри тянуло холодным воздухом и запахом старой электрики.

Вера постояла несколько секунд, прислушиваясь.

Снизу донёсся мужской голос:

— Да я понял, что тебе хочется. Только я не подписывался быть городским хирургом.

Вера осторожно шагнула внутрь.

И где-то глубоко под землёй Контур вероятности впервые получил не одного свидетеля, а двух.