I'm currently trying to solve a problem involving a complex mixture of a routing and a scheduling problem.
Some (but not all) features of my problem are:
-heterogeneous fleet of vehicles
-split deliveries (i.e. customer is visited by multiple vehicles, a single vehicle may visit the same customer more than once)
-time windows, time lags and sequence dependent setup times
One of our solution approaches utilizes a Mixed Integer Programming (MIP) model. I would like to strengthen the model by tightening bounds and adding a number of valid inequalities. For example:
-The number of required deliveries to a single customer are unknown and depend on the capacity of the vehicles. A weak upper bound on the number of required deliveries is the demand of the customer divided by the capacity of the smallest vehicle.
-A time window is associated with each customer. Currently, each individual delivery for a customer inherits this time window. It would however be better to tighten the time windows associated with individual deliveries. E.g. setting the time windows of deliveries d1, d2 for customer c1 (time window [0,10]) to d1=[0,5], d2=[5,10] is better than setting d1=d2=[0,10].
-Certain customers are incompatible with each other, i.e. it is not possible to satisfy the demand of all customers due to capacity and time constraints. For two incompatible customers c1, c2, this could lead to a cut like: c1+c2 <= 1
Reasoning about the variable domains in the context of my problem is notoriously difficult. Hence I was wondering whether I could use constraint programming to do the job for me. Would it be possible to do the following:
a. model my problem using Ilog constraint programming (java interface)
b. apply constraint propagation (but NO branching)
c. query the domains of the variables after all constraints have been propagated and adjust the variable domains of my MIP model accordingly
1. Are steps b, c possible using IloCP+Java? Is there a way to query the variable domains after constraint propagation?
2. Does this make sense, or is this a rather ridiculous idea (I'm for example not sure whether or not Cplex already implements domain reductions or whether cplex would benefit from the strengthened domains)? As I'm not an expert in constraint programming, it would take me a considerable amount of time to implement my problem, so basically I'm trying to determine whether it is worth the effort :)