Hi all!

I am currently working on a Branch & Benders' Cut algorithm using Mosel. Based on the way that my original formulation is decomposed into the master and the sub problem, all variables in the objective function of the original formulation end up in the sub problem (those are the continuous variables). Hence, the master problem only contains a dummy variable in the objective function that is linked to the Benders' optimality cuts.

The problem I am facing is that whenever Xpress obtains an integer solution during the branch & bound algorithm (either as the result of an integer LP solution in a node or obtained through the heuristic), this solution obviously has the same value as the dummy variable. However, I would like this solution to have the "objective value of the original formulation".

If I don't change the objective value and let Xpress accept such a solution, then the search immediately terminates as the lower and upper bound are equal (in the root node, the dummy variable has an initial value of zero, i.e., before adding optimality cuts). If I reject this solution and just update the CUTOFF value, then Xpress will never find a feasible integer solution and terminate with the message integer infeasible.

So my question is, can I somehow change the objective value of an integer solution before it is accepted by Xpress (in the optnode or preintsol callback)?

I hope this makes sense.

Hi,

From what I understand you are applying a Benders decomposition method to a mathematical model in such a way that the master model ends up having an objective function which only contains the dummy variable. The dummy variable is an approximation of the objective function of the submodels and the cuts used to approximate its value are generated in the submodels and added to the master. The more cuts in the master, the better the approximation of the objective function is.

Because there is no cost on the variables of the original problem in the master model, the value of the dummy variable will converge to the optimal value of the original problem.

I don't understand why do you want to artificially force the value of the integer solution? If what you are looking for is an initial point to start the submodels solve, then I suggest you use an arbitrary objective function: you are just solving a decision problem (no objective function), so any arbitrary objective function can be used to provide an initial feasible point.

I would encourage you to share more details with us so we can provide a better answer to this post.

Note that you can find an example of a Benders decomposition algorithm implemented in Mosel at:

FICO Xpress Optimization Examples Repository: Benders decomposition: sequential solving of several different submodels .