0

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

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......

4

1 回答 1

0

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

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

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

于 2018-06-13T09:26:13.297 回答