Bi-Level Strategies in Semi-Infinite Programming