Replies: 2 comments 1 reply
-
Predecessors are incredibly complicated to implement. The primary issue is that predecessors can form a cycle, causing their start time to be invalid. For instance, consider this scenario:
This forms a cycle, since A start time depends on B end time (as A comes after B) and B start time depends on A end time (as B requires A). The proper solution to this involves finding a topological order of the variables. We are currently working on a preview feature to make this significantly easier: declarative shadow variables (final naming to be determined). With it, you can say the start time depends on all its predecessors' end times (and do a different calculation if there are no predecessors). You also check if a particular Job is involved in a cycle. |
Beta Was this translation helpful? Give feedback.
-
Thank you! @Christopher-Chianelli excellent! Looking forward to the new features that can handle the scenario with the predecessor, Yes, dealing with the predecessor problem often encounters cycles. I‘m trying a Move Filter to filter out the solutions that have cycles, but I think it may hurt the optimization, such as getting stuck in local optimization. The approach I have come up with now is to define two shadow variables for the task instead of startTime - predecessorEndTime and prevoiusEndTime, and startTime = max (predecessorEndTime, previousEndTime). In the method with @CascadingUpdatingShadowVariable, update the predecessorEndTime and previousEndTime. For predecessorEndTime, I also need to update the predecessorEndTime of all successor tasks. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I have a question in Stackoverflow:
A Listener corruption with PlanningListVariable
I think I get the cause for this Listener Corruption exception. The shadow variable startTime changed without any change of its source - the PlanningListVariable in ProductionLine - ProductionLine.taskList. Because when a task's predecessor changed, its the shadow variable - startTime will be changed, but its genuine planning variable - ProductionLine.taskList never changed.
I have no idea how to mention timefold, when the predecessor changed. Does anyone have a suggestion? Thank you in advance!
Beta Was this translation helpful? Give feedback.
All reactions