[bug] Разведка ПУ получает азимут и дальность из скрытой позиции базы вместо истории радарных измерений #107

Open
opened 2026-10-30 23:49:10 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Ревью 38e515dea90158879d28b8d1de963f66c7d5690d (31 октября 2026).

Причина

В airdef-mod/src/sim/strike.rs:456 после появления своего трека вычисляется truth = site.pos, затем away = truth - track.pos. Из этого истинного вектора берутся bearing и distance для шумного Obs; баллистике выдаётся point вокруг истинной позиции ПУ. track.vel для обратной оценки не используется; время now-f.at проверяется как срок хранения, но заявленная в комментарии дальность «по времени полёта» рассчитывается из истинного расстояния, а не elapsed time.

Для реального непосредственного наблюдения самого старта модель «truth + noise» допустима. Здесь речь о другом пути: пуск не наблюдали, цель впервые засекли позже на изогнутом маршруте. Из такой текущей отметки РЛС не может измерить истинный вектор к невидимой исходной базе.

Подтверждено тестом

Два Sim с одним seed, одинаковыми ID, временем, позицией РЛС и треком дрона (0,100,1000), velocity=-Z. Единственная разница — скрытая x-координата стартовой ПУ: 0 и 1500. После step_strikes оценки получились:

  • (-35.85, 299.78);
  • (1464.38, 223.08).

Оценка скачет вслед за скрытой правдой при идентичных входных наблюдениях. Тест выполнен на отдельной копии. Это не просто придирка к использованию truth внутри сенсора, а отсутствие наблюдаемой величины/истории, из которой декларируемый алгоритм мог бы получить результат.

Исправление и приёмка

Хранить реальные наблюдения старта и измеренные участки траекторий. Для позднего обнаружения использовать историю pos/vel/time и модель возможного манёвра; при недостатке данных оставлять область/азимут с честной неопределённостью. Не пользоваться известным симулятору site ID как готовым точным измерением origin или временем невидимого старта. Коррелированные наблюдения не должны давать ложное уменьшение ошибки.

Регрессия: при одинаковых наблюдениях оценка одинакова независимо от скрытого origin. Маневрирующий дрон после обхода горы не раскрывает точную базу одной отметкой; наблюдённый старт и несколько независимых измерений действительно помогают. Связано с открытой архитектурной #93, но это конкретный баг реализованной разведки #101.

🤖 Filed by Codex, AI-агент Владимира (chexit). Ревью `38e515dea90158879d28b8d1de963f66c7d5690d` (31 октября 2026). ### Причина В [airdef-mod/src/sim/strike.rs:456](https://gitea.maoniao.team/chexit/airdef/src/commit/38e515dea90158879d28b8d1de963f66c7d5690d/airdef-mod/src/sim/strike.rs#L456) после появления своего трека вычисляется `truth = site.pos`, затем `away = truth - track.pos`. Из **этого истинного вектора** берутся bearing и distance для шумного Obs; баллистике выдаётся point вокруг истинной позиции ПУ. `track.vel` для обратной оценки не используется; время `now-f.at` проверяется как срок хранения, но заявленная в комментарии дальность «по времени полёта» рассчитывается из истинного расстояния, а не elapsed time. Для реального непосредственного наблюдения самого старта модель «truth + noise» допустима. Здесь речь о другом пути: **пуск не наблюдали, цель впервые засекли позже на изогнутом маршруте**. Из такой текущей отметки РЛС не может измерить истинный вектор к невидимой исходной базе. ### Подтверждено тестом Два Sim с одним seed, одинаковыми ID, временем, позицией РЛС и треком дрона `(0,100,1000), velocity=-Z`. Единственная разница — скрытая x-координата стартовой ПУ: 0 и 1500. После `step_strikes` оценки получились: - `(-35.85, 299.78)`; - `(1464.38, 223.08)`. Оценка скачет вслед за скрытой правдой при идентичных входных наблюдениях. Тест выполнен на отдельной копии. Это не просто придирка к использованию truth внутри сенсора, а отсутствие наблюдаемой величины/истории, из которой декларируемый алгоритм мог бы получить результат. ### Исправление и приёмка Хранить реальные наблюдения старта и измеренные участки траекторий. Для позднего обнаружения использовать историю pos/vel/time и модель возможного манёвра; при недостатке данных оставлять область/азимут с честной неопределённостью. Не пользоваться известным симулятору site ID как готовым точным измерением origin или временем невидимого старта. Коррелированные наблюдения не должны давать ложное уменьшение ошибки. Регрессия: при одинаковых наблюдениях оценка одинакова независимо от скрытого origin. Маневрирующий дрон после обхода горы не раскрывает точную базу одной отметкой; наблюдённый старт и несколько независимых измерений действительно помогают. Связано с открытой архитектурной #93, но это конкретный баг реализованной разведки #101.
chexit added the type:bugarea:simulationpriority:P2area:ui labels 2026-10-30 23:49:10 +00:00
Author
Owner

🤖 Agent: Codex — работа Владимира (chexit).

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

Проверены инварианты к изменению скрытой позиции/времени и повторным измерениям; strike-набор 20/20, полный core 151/151 (7 ignored).

Issue оставлен открытым согласно просьбе автора.

🤖 Agent: Codex — работа Владимира (chexit). [Исправление](https://gitea.maoniao.team/chexit/airdef/commit/5f07027): позднее обнаружение использует два фактических измерения одного радара, без позиции ПУ и невидимого времени старта. Неизвестный манёвр до обнаружения не превращается в точный fix: направление широкое, место старта неизвестно. Повторные коррелированные треки не уточняют его. Наблюдённый сам пуск по-прежнему даёт измеренную позицию с ошибкой. Проверены инварианты к изменению скрытой позиции/времени и повторным измерениям; strike-набор 20/20, полный core 151/151 (7 ignored). Issue оставлен открытым согласно просьбе автора.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#107