 
               
 
               Consider the problem of diet optimization. There are six different foods: bread, milk, cheese, potato, fish, and yogurt. The cost and nutrition values per unit are displayed in Table 10.6.
Table 10.6: Cost and Nutrition Values
| Bread | Milk | Cheese | Potato | Fish | Yogurt | |
|---|---|---|---|---|---|---|
| Cost | 2.0 | 3.5 | 8.0 | 1.5 | 11.0 | 1.0 | 
| Protein, g | 4.0 | 8.0 | 7.0 | 1.3 | 8.0 | 9.2 | 
| Fat, g | 1.0 | 5.0 | 9.0 | 0.1 | 7.0 | 1.0 | 
| Carbohydrates, g | 15.0 | 11.7 | 0.4 | 22.6 | 0.0 | 17.0 | 
| Calories | 90 | 120 | 106 | 97 | 130 | 180 | 
The objective is to find a minimum-cost diet that contains at least 300 calories, not more than 10 grams of protein, not less than 10 grams of carbohydrates, and not less than 8 grams of fat. In addition, the diet should contain at least 0.5 unit of fish and no more than 1 unit of milk.
You can use the following SAS code to create the MPS-format input data set:
data ex3; input field1 $ field2 $ field3 $ field4 field5 $ field6; datalines; NAME . EX3 . . . ROWS . . . . . N diet . . . . G calories . . . . L protein . . . . G fat . . . . G carbs . . . . COLUMNS . . . . . . br diet 2 calories 90 . br protein 4 fat 1 . br carbs 15 . . . mi diet 3.5 calories 120 . mi protein 8 fat 5 . mi carbs 11.7 . . . ch diet 8 calories 106 . ch protein 7 fat 9 . ch carbs .4 . . . po diet 1.5 calories 97 . po protein 1.3 fat .1 . po carbs 22.6 . . . fi diet 11 calories 130 . fi protein 8 fat 7 . fi carbs 0 . . . yo diet 1 calories 180 . yo protein 9.2 fat 1 . yo carbs 17 . . RHS . . . . . . . calories 300 protein 10 . . fat 8 carbs 10 BOUNDS . . . . . UP . mi 1 . . LO . fi .5 . . ENDATA . . . . . ;
You can solve the diet problem by using PROC OPTLP as follows:
proc optlp data=ex3 presolver = none algorithm = ps primalout = ex3pout dualout = ex3dout logfreq = 1; run;
The solution summary and the optimal primal solution are displayed in Output 10.3.1.
Output 10.3.1: Diet Problem: Solution Summary and Optimal Primal Solution
| The OPTLP Procedure | 
| Solution Summary | 
| Obs | Label1 | cValue1 | nValue1 | 
|---|---|---|---|
| 1 | Solver | LP | . | 
| 2 | Algorithm | Primal Simplex | . | 
| 3 | Objective Function | diet | . | 
| 4 | Solution Status | Optimal | . | 
| 5 | Objective Value | 12.081337881 | 12.081338 | 
| 6 | . | ||
| 7 | Primal Infeasibility | 0 | 0 | 
| 8 | Dual Infeasibility | 0 | 0 | 
| 9 | Bound Infeasibility | 0 | 0 | 
| 10 | . | ||
| 11 | Iterations | 8 | 8.000000 | 
| 12 | Presolve Time | 0.00 | 0 | 
| 13 | Solution Time | 0.00 | 0 | 
| The OPTLP Procedure | 
| Primal Solution | 
| Obs | Objective Function ID | RHS ID | Variable Name | Variable Type | Objective Coefficient | Lower Bound | Upper Bound | Variable Value | Variable Status | Reduced Cost | 
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | diet | br | N | 2.0 | 0.0 | 1.7977E308 | 0.00000 | L | 1.19066 | |
| 2 | diet | mi | D | 3.5 | 0.0 | 1 | 0.05360 | B | 0.00000 | |
| 3 | diet | ch | N | 8.0 | 0.0 | 1.7977E308 | 0.44950 | B | 0.00000 | |
| 4 | diet | po | N | 1.5 | 0.0 | 1.7977E308 | 1.86517 | B | 0.00000 | |
| 5 | diet | fi | O | 11.0 | 0.5 | 1.7977E308 | 0.50000 | L | 5.15641 | |
| 6 | diet | yo | N | 1.0 | 0.0 | 1.7977E308 | 0.00000 | L | 1.10849 | 
The cost of the optimal diet is 12.08 units.