Понимание сообщения об ошибке алгебраического цикла - PullRequest
0 голосов
/ 12 июня 2018

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

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

или это только говорит о том, что циклобнаруженные в EA до D являются лишь дополнительным контекстом), то есть

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

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

1 Ответ

0 голосов
/ 13 июня 2018

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

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

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

...