Done improvements: Define HyperEdge as set of in nodes and set of out nodes, and add Type alias for these things.
Conclusion/TODO: Make a different collections for edges and hyperedges in TrackGraph and a different set of variables in the Solver. Mostly, Constraints want to treat them the same, but Costs generally need to handle them separately. This is more explicit, since you need to check which kind of edge you have anyways usually when handling them.
Done improvements: Define HyperEdge as set of in nodes and set of out nodes, and add Type alias for these things.
Conclusion/TODO: Make a different collections for edges and hyperedges in TrackGraph and a different set of variables in the Solver. Mostly, Constraints want to treat them the same, but Costs generally need to handle them separately. This is more explicit, since you need to check which kind of edge you have anyways usually when handling them.