### Example 6.1 Diet Problem

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 6.5.

Table 6.5: 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 following SAS code creates the data set `fooddata` of Table 6.5:

```data fooddata;
infile datalines;
input name \$  cost  prot  fat  carb  cal;
datalines;
Bread   2     4     1    15    90
Milk    3.5   8     5    11.7  120
Cheese  8     7     9    0.4   106
Potato  1.5   1.3   0.1  22.6  97
Fish    11    8     7    0     130
Yogurt  1     9.2   1    17    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 model the problem and solve it by using PROC OPTMODEL as follows:

```proc optmodel;
/* declare index set */
set<str> FOOD;

/* declare variables */
var diet{FOOD} >= 0;

/* objective function */
num cost{FOOD};
min f=sum{i in FOOD}cost[i]*diet[i];

/* constraints */
num prot{FOOD};
num fat{FOOD};
num carb{FOOD};
num cal{FOOD};
num min_cal, max_prot, min_carb, min_fat;
con cal_con: sum{i in FOOD}cal[i]*diet[i] >= 300;
con prot_con: sum{i in FOOD}prot[i]*diet[i] <= 10;
con carb_con: sum{i in FOOD}carb[i]*diet[i] >= 10;
con fat_con: sum{i in FOOD}fat[i]*diet[i] >= 8;

/* read parameters */
read data fooddata into FOOD=[name] cost prot fat carb cal;

/* bounds on variables */
diet['Fish'].lb = 0.5;
diet['Milk'].ub = 1.0;

/* solve and print the optimal solution */
solve with lp/logfreq=1; /* print each iteration to log */
print diet;

```

The optimal solution and the optimal objective value are displayed in Output 6.1.1.

Output 6.1.1: Optimal Solution to the Diet Problem

The OPTMODEL Procedure

Problem Summary
Objective Sense Minimization
Objective Function f
Objective Type Linear

Number of Variables 6
Bounded Above 0
Bounded Below 5
Bounded Below and Above 1
Free 0
Fixed 0

Number of Constraints 4
Linear LE (<=) 1
Linear EQ (=) 0
Linear GE (>=) 3
Linear Range 0

Constraint Coefficients 23

Performance Information
Execution Mode Single-Machine
Number of Threads 1

Solution Summary
Solver LP
Algorithm Dual Simplex
Objective Function f
Solution Status Optimal
Objective Value 12.081337881

Primal Infeasibility 0
Dual Infeasibility 0
Bound Infeasibility 0

Iterations 7
Presolve Time 0.00
Solution Time 0.03

 diet
Bread 0.000000
Cheese 0.449499
Fish 0.500000
Milk 0.053599
Potato 1.865168
Yogurt 0.000000