| Initialization: k: = 0, f = 0, o = 0; LB: = −∞, UB: = ∞; set an initial feasible solution , and algorithm stop condition ε = 0. |
| Generate the initial solution by ant colony algorithm: |
| Let = 0.7, index = 1, Q = 104, m = 20, NCmax = 30; |
| Set : = ones (UBn − LBn + 1, n1 + n2)·(UBn − LBn + 1); |
| for i: = 1 ⟶ m do |
| Randomly obtained m solutions. |
| end for |
| Find local minimum solution fmin; |
| Update and . |
| while index < NCmax − 1 do |
| for i: = 1 ⟶ m − 1 do |
| Randomly obtained m − 1 new solutions. |
| end for |
| Add local minimum solution to the new solutions; |
| Update fmin, and ; |
| index = index + 1. |
| end while |
| Obtain the initial solution . |
| Obtain upper bound by Benders decomposition: |
| while UB − LB > ε do |
| Solve the PD. |
| if Infeasible then |
| Exit. |
| end if |
| if Unbounded then |
| Obtain an extreme ray ; |
| let f = f + 1; |
| let ; |
| Add a feasibility cut 0 to PFM. |
| end if |
| if Bounded then |
| Obtain an extreme ray ; |
| let o = o + 1; |
| let ; |
| Add an optimality cut to PFM; |
| Obtain a upper bound, UB: = Min{UB, }. |
| end if |
| Obtain feasible solution and lower bound by feasible adjustment rule: |
| Let maxiter: = 25, = , = 1, = 0.9; |
| Set UBFM: = ∞, and set the loop stop condition λ = 10 − 4; |
| Solve PFM and obtain the solution (x∗, θ∗); |
| Let x∗ = round(x∗), α1 = µα0; |
| Update UBFM: = Min{UBFM, ||x∗ − x0||2}; |
| for i: = 1 ⟶ maxiter − 1 do |
| if ||xi + 1 − xi||2 > λ then |
| Let xi = x∗; |
| Solve PFM; |
| Update the solution (x∗, θ∗); |
| if ||xi + 1 − xi||2 < UBFM then |
| Let UBFM: = ||xi + 1 − xi||2; |
| x∗ = round (xi + 1); |
| end if |
| end if |
| Update αi + 1: = µαi. |
| end for |
| Update the lower bound, LB: = Max{LB, c}; |
| k: = k + 1; |
| : = ; |
| end while |
| Return the optimum result |