Originally posted by: sjayaswal
Thanks a lot Paul for your detailed response, and my apologies for the delay in getting back:
I was trying a few ideas before I could get back. Below are my responses:
1.] So the objective function of your modified problem will be the same function that would have been the objective of the dual to the subproblem (i.e., the RHS of the primal subproblem, based on the current master problem solution)?
Ans.] The objective function of the modified problem may be the same but need not be.
The extreme ray is just any feasible (and not necessarily optimal) solution to the modification of the dual of the subproblem.
2.] Do you intend to solve the unhacked dual first, and solve the hacked one only if the unhacked dual is unbounded? Or go the other way, solve the hacked version first and, if its objective value is zero (signaling that the primal subproblem is feasible), then solve the unhacked dual? Or (third possibility) are you doing a problem where all you need to know is feasibility of the subproblem (there are no optimality cuts), in which case you only need to solve the hacked dual?
Ans.] I use option 1: solve the unhacked dual first, and solve the hacked one only if the unhacked dual is unbounded.
3.] You seem to be motivated here by avoiding the mapping necessary to work with getRay. If your problem is large (and assuming things are sparse), that mapping might actually work to your advantage. The call to getRay will return only a hopefully small number of nonzero terms, and those are the only terms you need in your feasibility cut. With your modified approach you have to fetch and then loop through all the dual variables to construct your cut.
Ans.] Very true. I was initially scared to try the mapping of variables as it looked complicated, but after implementing it, I realize it is a better way to do it. Moreover, with the "hacked" problem, I was running into some problems. Let me explain this problem using an example. Let say the dual of the subproblem is as below:
Min aX + bY
s.t.: AX + BY >= C
where X = x1, x2 and Y = y1, y2, y3.
x1, x2, y1, y2, y3 >= 0
If this turns out to be unbounded, then the dual of the hacked problems we solve is:
Min aX + bY (or any arbitrary objective)
s.t.: AX + BY >= 0
x1+x2+y1+y2+y3 = 1
x1, x2, y1, y2, y3 >= 0
This works fine. But, I have the dual of the subproblem in which some of the variables are negative/free, i.e.,
Min aX + bY
s.t.: AX + BY >= C
where X = x1, x2 and Y = y1, y2, y3.
x1 >=0, x2<=0, y1 free, y2<=0, y3 >= 0
In such cases, adding the normalization constraint (x1+x2+y1+y2+y3 = 1) occasionally makes the problem infeasible. In such cases, for some problems, I was still able to solve them by using a slightly different normalization constraint (x1+x2+y1+y2+y3 = -1). This worked purely by chance, and I am never sure apriori what constant to use in the RHS of the normalization constraint. All such problems get circumvented by using getRay().
Thanks a lot!
Sachin
#CPLEXOptimizers#DecisionOptimization