Originally posted by: SystemAdmin
>
>
> I have a network where i control the flow of the edges, Vi using binary variables, say Yi. So I have indicator constraints as such
>
> Yi = 0 -> Vi = 0
>
> but i realised that my problem has solutions which have edges with no flow but the binary variable controlling it is set to 1. So to eliminate this i added the constraints:
>
> -10000*Vi + Yi <= 0
>
> but this made the originally feasible problem infeasible...
>
> I'm not sure why it is so?
You have precluded the possibility of 0 < Vi < 0.00001. In the original model, did the optimal solution have nonzero flows that small?
AFAIK, to preclude Vi = 0 and Yi = 1, you must either penalize Yi = 1 in the objective or accept a formulation like what you tried, one that rules out 0 < Vi < epsilon for some small epsilon (but not too small, lest it look like 0 to within rounding tolerance). You may also want to explore relaxing EpRHS, the rounding tolerance in constraints, and/or EpInt, the integrality tolerance. Relaxing one or both might make your second formulation look feasible.
If Yi does not "naturally" occur in the constraint (there is no contextually motivated penalty for it), another possibility is to leave the original formulation alone and just manually adjust any Yi to 0 if Vi = 0 in the final solution.
If flows less than 1e-5 should not realistically occur, yet another possibility is that your model is legitimately infeasible and the "feasible" solution you got before was an artifact of rounding error.
/Paul
Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. (Goethe)
#CPLEXOptimizers#DecisionOptimization