Originally posted by: Oskar Wigstrom
Thank you Philippe for your quick and detailed reply, I very much appreciate it!
First off, using the user defined constraint for handling the link between the booleans values and its effect on the start/end times of the model sounds like a good idea.
I realize I wasn't very clear in my problem description. I'm actually posing a NoOverlap constraint on the tasks and then the booleans are merly there to guide the search. The booleans are not strictly necessary, I simply want the solver to branch on the order of intervals subject to NoOverlap.
A couple of thoughts:
- Now that I think about it, is it possible for propagators to post/add additional constraints to the current branch being explored? That is, can a user defined propagation method which detects a change in the boolean variables post (or convert itself to) an EndBeforeStart constraint?
- Or alternatively (I think this might even be preferable), is it possible to create a 'search engine'/brancher which branches on the order of certain interval pairs? That is, the brancher itself adds EndBeforeStart constraints.
The problem described is indeed a generalization. I realize that I could have described the problem much better, I'll try to give more detail:
My project aims to solve scheduling problems with nonlinear costs (and possibly including dynamics), for example the energy use in a machine could be modeled as a function of the execution time of each operation.
Previously, I've modeled this problem using MINLP methods; scheduling constraints are mixed integer linear and the objective nonlinear. But there are several drawbacks with MINLP, amongst other things the scheduling relaxations are so weak that infeasabilities are detected much too deep in the branches.
What I want to do is to instead use Ilog CP to model the scheduling problem. Have the Ilog create a branch and bound tree on the discrete decisions. And for the partial/fully assigned discrete decisions, create an NLP to find a lower/upper bound on the cost.
In the case of a job shop style problem: (i) I would fix the order of tasks within a job, (ii) post NoOverlap on the tasks for each machine, (iii) have Ilog branch on the discrete decisions; (iv) solve NLPs for the partial and fully assigned booleans.
To answer your questions (some of which may already be clear from the text above):
- While there may exist tasks that overlap, the pairs of tasks associated with booleans should do not.
- Only a subset of all intervals/tasks are considered, those allready subject to a NoOverlap constraint.
- You are correct in assuming the cost is an increasing one, as discrete decisions/booleans are fixed, the problem is further restricted and the cost becomes higher.
- While everything in the function may be expressed algebraically, I don't think propagation will be nearly strong enough, also floating point variable precision is required for the formulation.
I'll check out your suggestions and also read up on search phases!
Thanks again for your help,
Oskar
#CPOptimizer#DecisionOptimization