# whiskas.mod
#
# Written by Mike O'Sullivan & Cameron Walker 2004
#
# This file contains the linear programming model for
# determing the optimal recipe for 100g of Whiskas cat food.
#
# Last modified: 8/2/2004
model;
# The set of all possible ingredients for the cat food
set INGREDIENTS;
# The set of requirements for a can of cat food
set REQUIREMENTS;
# The data for the linear programme
# The weight of the can
param CanWeight;
# The cost (per gram) of the ingredients
param Cost {INGREDIENTS};
# The contribution per g of ingredients to requirements
param Contributes {REQUIREMENTS, INGREDIENTS};
param Lower {REQUIREMENTS} default -Infinity;
param Upper {r in REQUIREMENTS} >= Upper[r], default Infinity;
# The linear programme
# Decision variables: amount (g) of each ingredient used
var Amount {INGREDIENTS} >= 0;
# Objective: minimise the cost per can
minimize TotalCost: sum {i in INGREDIENTS} Cost[i] * Amount[i];
# Constraints: Meet the nutritional requirements
subject to MeetRequirements {r in REQUIREMENTS} :
Lower[r] <= sum {i in INGREDIENTS} Contributes[r, i] * Amount[i] <= Upper[r];