So I've started using the CP Optimizer Extensions. Some details of my project are described in https://www.ibm.com/developerworks/community/forums/html/topic?id=0c976a32-d78c-4c76-a1ec-45694fed104b&ps=25, but I think you'll be able to answer my question without looking there.
In any case, I would like to know if it is possible to influence the order in which constraints are scheduled for propagation. The details are as follows:
There are three types of variables:
- An integer variable cost, which is the cost to minimize
- Boolean array boolArray, these are key decision variables which are branched upon
- Interval array intervalArray, some scheduling variables
The constraints are:
- Set of standard scheduling constraints acting on boolArray and intervalArray, if these have not failed once all the variables in boolArray have been assigned, then everything is fine.
- A user defined constraint which updates the domain of cost based on boolArray, this constraint will reduce and finally fix the domain of cost based on the assignment to boolArray.
I've defined a search phase which branches on the variables boolArray, and every time a value in boolArray is modified, the user defined constraint is scheduled for propagation.
My problem is, performing propagation on the custom constraint is highly computationally costly, and many times, CP optimizer will schedule it for propagation several times in each node. This is because the scheduling constraints may fix the values of the decision variables in boolArray.
Is there some way to have the user defined constraint be propagated last (and by doing so only once) in each node?
Thank you for your help!