Hi,
Q: Which means, that by using the classic approach in my case, the benders decomposition revisits many times the same nodes?
A: That is correct.
Q: Changing the AddTighteningConstraint didnt make such a difference in my solution time.
A: It only has an effect if the model has some special structure. See section 21.5.5 of the Language Reference (AIMMS 4).
Q: Is there any explanation why these options work best? It seems obvious to me that using feasibility and optimality cuts is always better than only using feasibility cuts, but i'm surprised that this is not the standard option in AIMMS when using benders?
A: FeasibilityOnly means that AIMMS will first reformulate the model such that the objective coefficients of the continuous variables are moved from the objective to the constraints (see section 21.5.2 of the Language Reference). That way the subproblem becomes a pure feasibility problem and therefore only feasibility cuts are added. The main advantage of this approach is that the feasibility cuts can be normalized according to M. Fischetti, D. Salvagni, and A. Zanette (2010). This normalization cannot be used if optimality cuts are added. In our experiments the approach using normalized feasibilty cuts was the most effective, and therefore that was made the default approach.
Q: What does it mean not to use the Dual of the Subproblem? Does Aimms solve the primal problem then and uses the dual variables only for generating the cuts? If yes, then i assume that it has no effect wheter using the dual oder primal subproblem for generating the cuts, because of the duality theory we get the same solution anyway? The only difference in my case is, that the primal subproblem is easier to solve than the dual one?
A: If UseDual equals 0 then AIMMS uses the primal subproblem and the dual variables to generate the cuts. If one of the subproblems has multiple optimal dual solutions (as is often the case in practice) then the solutions paths will be different. If the primal problem is easier to solve you should set UseDual to 0 and otherwise to 1.
Q: In addition to that, in my specific case the performance of the Benders Decomposition really depends on some constraints in my problem. So if i generate a tighter upper bound for one specific constraint in my problem, then CPLEX Solver is faster than the Benders Decomposition. If i generate a higher upper bound, then benders decomposition is much faster. Does the benders decomposition really depend so much on the specific problem that even the change of one parameter can influence the solving so much?
A: You do not mention the influence of setting this upper bound on CPLEX (only the relative influence compared to Benders). One possible explanation could be the following. CPLEX will do preprocessing using the complete model, including "relations" between integer and continuous variables. That last part Benders misses as it separates the integer part from the continuous part. You could try using the function GMP::Instance::CreatePresolved to create a preprocessed GMP using the AIMMS presolver, and use that GMP for Benders. However, the AIMMS preprocessor is much less powerful than the CPLEX preprocessor, at least for linear models, so probably this will not improve the performance.
Q: Do you have any suggestions for further reading about the performance of benders? I already read in this forum, that only the l-structure of the problem doesnt gurantee the successfull perfomance of benders and "if you take a random MIP problem then the chance that Benders' Decomposition module will be more efficient than CPLEX or Gurobi is small. The MIP problem has to "lend" itself to Benders' Decomposition.".
A: The Benders' cuts that are generated use the solution of the complete subproblem. In case of 2-stage stochastic programming the subproblems are independent. It might be that you would get better Benders' cuts by solving the subproblems separately, but that is currently not supported by the Benders' Decomposition module.
Best regards,
Marcel Hunting
AIMMS Optimization Specialist