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