I am trying to implement benders decomposition for a simple two stage unit commitment problem. I implemented the classic Benders decomposition to add feasible cut and optimal cut to relax master problem by solving the dual of sub-problem. When I use a 6bus system it works fine, however when I change to a larger system (ex: 118bus) the coefficient of the cut started to become ill-conditioned and the result cannot be found. For example:
...13.6 onOff(gen30)(time22)#2291- 12 onOff(gen30)(time23)#2292+ 1.4210854715202e-14 onOff(gen30)(time24)#2293...
the coefficient of variable onOff(gen30)(time24)
should to zero and the variable should not be included into the constraints and the warning below is also given.
Detected nonzero <= CPX_MINBOUND at constraint 7878, variable 'onOff[gen30][time24]'
My questions are listed as follow:
- As far as I know cplex will treat the value below 1e-9 as zero. I wonder if the above problem will be the reason that my program fail or I need to look at different direction?
- The following warning also repeatedly appear but the coefficient seem to be normal
16.4799999999999 onOff(gen22)(time13)#2090
. I would be grateful if you could give some explanation regarding to the meaning of this warning!
Detected nonzero <= the maximum value of either CPX_PARAM_EPRHS or CPX_PARAM_EPOPT at constraint 7824, variable 'onOff[gen22][time13]'
- A large scale problem such as this one, is there any method to improve the numerical stability of the cut? I think the above coefficient should be
16.48
rather than16.4799999999999
and the coefficient such as1.4210854715202e-14
should not have happened in the first place. I should mention that I also useIloRound
to any master binary variable, but it does not seem to change anything.
I should note that I am using Cplex 12.9 and C++ technology concert.
I would be grateful if you could help me out !
Best regards,