I'm working on a project where a scheduling problem is combined with a special cost function. That is, the cost is a function of the precedences of the scheduling problem.
For example, if we have three tasks [A,B,C], which are all to be executed, then what I will call precedence indicators will in this case be are denoted [ab, ac, bc]. Each "precedence indicator" is a boolean variables expressing which task occurs first. In any case, the cost is expressed on the form: c = f(ab,ac,bc). For a partial solution, I can also get a lower bound on the cost, c >= f(ab,bc) for example.
I have a couple of questions related to my project, I plan on implementing the cost as a user defined constraint, but I'm not sure which way to go about this.
1. I could express an implication between booleans and precedences such as: (i) boolean <=> EndBeforeStart(a,b); (ii) not(boolean) <=> EndBeforeStart(b,a).
I could then have my user defined constraint subscribe to any changes in the boolean variables. However, I can't seem to get the implication expressions right in Ilog, any suggestions (using the C++ API)? How should I go about this?
2. Should I rather be using an IloSequenceVariable? Can I subscribe to an IloSequenceVariable instead? What will it look like at a partial solution?
3. Concerning branching, since the cost is only related to the precedences of operations, is it possible define the booleans in (1) as branching variables? If option (2) is preferable, can the search be directed as I'm suggesting?
Sorry if there's anything unclear, I appreciate any help I can get!