了解代数环错误消息

Understanding Algebraic loop error message

当我的程序抛出如下所示的代数环错误时

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 处检测到循环(并且 AD 只是一些额外的上下文),即

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

因为在我的系统中 A 的值绝对不可能受 E 的值影响...

很难知道你的抽象系统名称,但代数环检查逻辑在这里:

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

如果您在图中的循环依赖是真实的(就像在任何反馈循环中一样),那么您必须确保循环中至少有一个节点不是 "direct feedthrough"。请注意,大多数带有反馈的图通过具有状态的工厂(输出取决于状态,而不是直接取决于输入)来打破代数环。