Semi-Infinite Programming and Applications