Понимание сообщения об ошибке алгебраического цикла

Когда моя программа выдает ошибку алгебраического цикла, такую ​​как приведенная ниже

terminate called after throwing an instance of 'std::runtime_error'
  what():  Algebraic loop detected in DiagramBuilder:
  A depends on
  B depends on
  C depends on
  D depends on
  E
Aborted (core dumped)

Означает ли это, что у меня есть следующий цикл

A --> B --> C --> D --> E --> A

или это только говорит о том, что петля обнаружена в E (а также A в D это просто дополнительный контекст), т.е.

A --> B --> C --> D --> E --> (any one of A to D)

Потому что нет абсолютно никакой ценности A зависит от значения E в моей системе...

1 ответ

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

https://github.com/RobotLocomotion/drake/blob/2b275fc6dd4c60ef72c9f4fa1d643a261e38125f/systems/framework/diagram_builder.h#L225

Если ваша круговая зависимость на диаграмме реальна (как и в любом цикле обратной связи), то вы должны убедиться, что по крайней мере один из узлов в цикле не является "прямой передачей". Обратите внимание, что большинство диаграмм с обратной связью нарушают алгебраический цикл, имея установку с состоянием (выходной сигнал зависит от состояния, а не напрямую от входного).

Другие вопросы по тегам