AMPL
is a an algebraic modeling language for linear and nonlinear
optimization problems, in discrete or continuous variables.
It allows to solve and analyze optimization problems with
up to 300 variables and constraints. Developed at Bell Laboratories, AMPL lets you use common notation and familiar concepts to formulate optimization models and examine solutions, while the computer manages communication with an appropriate solver like CPLEX. AMPL's flexibility and convenience render it ideal for rapid prototyping and model development, while its speed and control options make it an especially efficient choice for repeated production runs. Getting the programs
ExampleAssume, you have steel3.dat, steel3.mod and steel3.run which contains the ampl commands, you can run it from the commandline asampl < steel3.runIt will give you the optimal solution 194828.5714 which is the maximal total profits from all products. It uses the constraint total of hours used by all products may not exceed the available hours. 
file steel3.dat  file steel3.mod  file steel3.run 

set PROD := bands coils plate; param: rate profit commit market := bands 200 25 1000 6000 coils 140 30 500 4000 plate 160 29 750 3500 ; param avail := 40; 
set PROD; param rate {PROD} > 0; param avail >= 0; param profit {PROD}; param commit {PROD} >= 0; param market {PROD} >= 0; var Make {p in PROD} >= commit[p], <= market[p]; maximize total_profit: sum {p in PROD} profit[p] * Make[p]; subject to Time: sum {p in PROD} (1/rate[p]) * Make[p] <= avail; 
model steel3.mod; data steel3.dat; option solver cplex; solve; exit; 
Simplicity, Clarity, Generality
B.W. Kernighan, R. Pike, in "The Practice of Programming".
