set SURFBOARDS; set MATERIALS; param Coefficient {SURFBOARDS}; param Exponent {SURFBOARDS}; param Supply {MATERIALS}; param Recipe {MATERIALS, SURFBOARDS}; var Price {SURFBOARDS}; var Production {SURFBOARDS} >= 0, integer; maximize TotalProfit: sum {s in SURFBOARDS} Price[s] * Production[s]; subject to MaterialSupply {m in MATERIALS} : sum {s in SURFBOARDS} Recipe[m, s] * Production[s] <= Supply[m]; subject to SurfboardDemand {s in SURFBOARDS} : Production[s] <= Coefficient[s] * (Price[s] ^ Exponent[s]);