DAG and Invariants

The Directed Acyclic Graph (DAG) is the core structure in JuLS that represents constraints and objectives of your optimization problem.

What is an Invariant?

An invariant is a fixed relation between a set of input variables and a single output variable.

As a pedagogical example, an invariant I can represent the constraint z = x+ y, where the set of input variables would {x, y} and the output variable would be z.

An invariant can as well be a far more complex or even black-box relation.

What is a DAG?

A DAG is a Directed Acyclic Graph of invariants. Through this graph, the optimization objective and constraints are represented.

To see how a DAG of invariants is constructed, you are encouraged to read the source code of our toy examples (for example the Knapsack).

The DAG uses message passing to:

  • Propagate changes efficiently
  • Maintain constraint consistency
  • Compute objective values incrementally