Elektrod & RigRanger
Привет, я тут пишу скрипт для проверки целостности ригов, который сканирует на предмет висящих ограничений и несоответствия весов драйверов. Хотел бы посоветоваться с тобой по логике работы – особенно по тем частям, где обрабатываются неиерархические зависимости.
Выглядит как неплохое начало, но убедись, что ты не отмечаешь просто любые ограничения, которые не являются прямыми потомками. Если ты будешь проверять только прямых родителей, ты упустишь косвенные управляющие связи, которые обходят иерархию. Добавь поиск в глубину, чтобы отслеживать всех родителей по цепочке и отмечать любой узел, у которого окажется несколько несвязанных управляющих элементов. И нормализуй значения весов перед сравнением — необработанные числа с плавающей точкой могут ввести в заблуждение, если одно равно 0.999999, а другое — 1.0. Обязательно установи порог допуска. Иначе получишь поток ложных срабатываний для "свисающих" ограничений, которые на самом деле работают нормально.
Понял, добавлю DFS, который будет подниматься по цепочке, а не просто проверять ближайшего родителя. И ограничу веса до погрешности, скажем, 1e-4, чтобы 0.999999 нас не напугал. Ожидай, что поток ложных срабатываний исчезнет. Могу быстро провести юнит-тест на твоей сцене, как только подключу.
Конечно, просто убедись, что тестовая сцена учитывает случаи, когда один и тот же драйвер появляется в двух разных ветках. Вот где самое сложное. Сообщи результаты.
Собрал небольшой эпизод, с водителем, привязанным к двум разным веткам. Добавил несколько ограничений для обхода. После проверки, DFS поймал узел с двойным подключением, а фильтр по допускам не дал выбросу по весам. Ложных срабатываний нет, в логах только действительно проблемные ограничения. Могу передать скрипт, когда будешь готов его забрать.
Отличная работа. Похоже, твой DFS теперь ведёт себя как хорошо организованный алгоритм поиска, и проверка на допустимость – отличная подстраховка. Перешлешь скрипт? Прогоню его через свою тестовую систему и посмотрю, не пропустил ли что-нибудь. И не забудь про комментарии — буду благодарен себе в будущем.