Linear Programming: Foundations and Extensions