# Chapter 16. Linear Programming in Fish Diet Formulation 1/

1/ Lecture was presented by G.L. Rumsey

K. W. Chow
Food and Agriculture Organization

G. L. Rumsey
Tunison Laboratory of Fish Nutrition
Cortland, New York

P.W. Waldroup
University of Arkansas
Fayetteville, Arkansas

## 1. INTRODUCTION

Linear programming (LP) is a mathematical procedure by which limited resources are allocated, selected, scheduled, or evaluated to achieve an optimal solution to a particular objective. These resources may be capital, raw material, manpower, or production facilities and the objectives may be minimum cost or maximum profit. Linear programming, therefore, has wide application in industrial operations such as blending, mixing, and machine tooling; and in business activities such as purchasing, planning, bidding, transportation, and distribution.

Linear programming was first introduced to the animal compound feed industry in the mid fifties. Since then, its application in least cost formulation of feed for livestock and poultry has gained widespread acceptance in most countries with well-developed compound feed industries.

Least cost feed formulation for fish on the other hand is a recent innovation. There are still many gaps in our knowledge regarding fish nutrition and digestibility of common feedstuffs by cultured species of fish. Among the few species where such knowledge is more complete, LP techniques for diet formulation have been attempted.

It is not the intent of this chapter to discuss fish feed formulation in the context of specific nutrient requirements. Rather, an attempt is made to describe the mechanisms of linear programming using a highly popular and readily available standard software package (IBM MPSX) and the increasingly common computer hardware, the IBM 370. As illustrations, diets for carp and catfish are formulated using a limited selection of raw materials. To provide some perspective of price and raw material availability, the example given is for the Kingdom of Thailand where aquacultural development is proceeding at a rapid pace and where the availability of a fairly wide selection of feed ingredients permits the latitude for realistic demonstrations of parametric linear programming. This latter technique represents a prodigious innovation of mathematical optimization which has contributed significantly to rapid expansion of the feed industry in the last two decades.

## 2. LINEAR PROGRAMMING BASICS

### 2.1 The Linear Equation

Linear programming involves the simultaneous solution of a number of linear equations which consist of a left-hand side (LHS) and a right-hand side (RHS), as follows:

C + C2 + C3.....+Cn = R (1)

Where R is the row variable and C represents a column variable.

Formulation rules of the linear programming system, with respect to a linear equation, require that:

(a) only one variable may appear on the RHS. While row variables, if there are more than one, may appear on the LHS along with column variables, column variables may not appear on the RHS of any problem;

(b) the same variable may not appear on the RHS of more than one equation;

(c) the coefficient of the variable on the RHS of an equation must be 1.0.

In formulating feeds by LP, the nutritionist first lays down a set of constraints. He then lists all available raw materials which he wishes to be considered for selection by the computer to achieve his objective. This objective is a least-cost ration that will satisfy all the constraints.

### 2.2 The LP Matrix

To illustrate the use of the programme, consider first a single hypothetical feed mix problem: to formulate a catfish diet using limited available feeds tuffs while satisfying nutrient and feed ingredient constraints, as shown in Table 1.

Table 1. Feed Ingredient Analysis

 Ingredient Cost, Bahts/kg Protein, % Digestible energy (DE), Meal/kg Calcium, % Maize 2.15 9 1.10 0.02 Fishmeal 8.0 65 3.90 3.7 Soymeal 6.0 44 2.57 0.3 Ricebran 2.0 12 1.99 0.1 Limestone 0.4 0 0 38.0

Constraints:

(1) Total weight of mix = 100 kg
(2) Total protein, at least 30 kg
(3) Total digestible energy, at least 250 Meal
(4) Total calcium, at least 0.5 kg
(5) Total calcium, not more than 1.5 kg
(6) Amount of fishmeal, at least 8 kg
(7) Amount of ricebran, not more than 20 kg
(8) The total cost of the blend to be minimal.

Expressing these restrictions in a series of linear equations:

1.0 (MAIZE) + 1.0 (FISHMEAL) + 1.0 (SOYMEAL) + 1.0 (RICEBRAN) + 1.0 (LIMESTONE) = 100

0.09 (MAIZE) + 0.65 (FISHMEAL) + 0.44 (SOYMEAL) + 0.12 (RICEBRAN) + 0 (LIMESTONE) ³ 30

1.10 (MAIZE) + 3.90 (FISHMEAL) + 2.57 (SOYMEAL) + 1.99 (RICEBRAN) + 0 (LIMESTONE) ³ 250

0.000 (MAIZE) + 0.037 (FISHMEAL) + 0.003 (SOYMEAL) + 0.001 (RICEBRAN)+ 0.38 (LIMESTONE) ³ 0.5

0.000 (MAIZE) + 0.037 (FISHMEAL) + 0.003 (SOYMEAL) + 0.001 (RICEBRAN) + 0.38 (LIMESTONE) £ 1.5

1.0 (FISHMEAL) ³ 8
1.0 (RICEBRAN) ³ 20

[ 2.15 (MAIZE) - 8.0 (FISHMEAL) - 6.0 (SOYMEAL) - 2.0 (RICEBRAN) - 0.4 (LIMESTONE) ]

= MAX, where the names in parenthesis represent the amounts of maize, fishmeal, soymeal, ricebran and limestone, respectively, needed to make the feed.

Putting this into matrix form:

 MAIZE FISHMEAL SOYMEAL RICEBRAN LIMESTONE ROW TYPE RHS VALUE ROW NAME -2.15 -8.0 -6.0 -2.0 -0.4 COST 1.0 1.0 1.0 1.0 1.0 = 100 WEIGHT 0.09 0.65 0.44 0.12 0 ³ 30 PROTEIN 1.10 3.90 2.57 1.99 0 ³ 250 DE 0.000 0.037 0.003 0.001 0.38 ³ 0.5 CALCIUM 0.000 0.037 0.003 0.001 0.38 £ 1.5 CALCIUM 1.0 ³ 8 FISHMEAL 1.0 £ 20 RICEBRAN

It can be seen from the above tabulation that the rules described in subsection 2.1, governing the use of the linear programming systems for feed formulation, are fully met.

MAIZE, FISHMEAL, SOYMEAL, RICEBRAN and LIMESTONE are COLUMN NAMEs and the values tabulated under each represent the COLUMN coefficients which describe ROW NAME values for, each ingredient. COST, WEIGHT, PROTEIN, DE, CALCIUM, FISHMEAL and RICEBRAN appearing on the last column are ROW NAMEs and the RHS VALUES constitute ROW variables. ROW TYPEs together with the RHS VALUES define the bounds of the respective ROW variables.

Successful solution of the eight simultaneous linear equations leads to an OPTIMAL SOLUTION of the problem. In this process COLUMN variables of ACTIVITIES for each ingredient are determined. In ordinary language, these represent quantities of each ingredient making up the least cost diet (see Section 4).

Sometimes the formulator is informed by the computer that a SOLUTION is INFEASIBLE. This occurs when erroneous ingredient data are used or when unreasonable restrictions are placed on nutrient requirements or ingredient usage, but it rarely happens when input data and constraints are prepared by an experienced nutritionist. To avoid errors in data input it may be wise to lay the information out in a matrix form shown in the preceding matrix for easier checking and evaluation.

Data concerning the chemical composition of each feed ingredient must reflect as closely as possible the actual values obtained by laboratory analyses. In developing countries where it may not be feasible or possible to carry out sophisticated chemical determinations, such as amino acid analysis, the nutritionist has to rely on less specific information; e.g., crude protein values obtained by the more common Weende proximate analysis (see Chapter 26) and then referring to published sources for corresponding amino acid levels. There are attending risks in using this approach. Fortunately, protein quality among specific feedstuffs from different sources which have similar Weende analysis results generally do not differ much. The common practice of providing safety margins for critical nutrients further minimizes such risks.

## 3. PREPARATION OF DATA INPUT FOR LP

Before the computer will accept DATA for processing the data must be presented in a form that the computer can read. Data and formulation instructions presented for LP, using the MPSX software package, must first be punched on 80-column Hollerith cards (Figure 1) in a given fashion and order before they can be processed by the computer. Although the MPSX programme contains all the necessary instructions for carrying out LP computations, its multi-purpose use requires a specific CONTROL PROGRAMME for each JOB to be performed. Jobs presented to the computer are not restricted to the solution of just one problem at a time but may consist of a series of problems or modules which will be handled by the computer in the sequence they appear on the CONTROL PROGRAMME. The JOB control cards, which precede the CONTROL PROGRAMME, tell the computer which of the catalogued programmes is to be used (in this case, MPSX). Following the CONTROL PROGRAMME are the data cards (also known as the DATA DECK) which contain all the information represented in the LP matrix. The DATA DECK is then followed by one or more control cards which signal the end of the operation.

Whereas each JOB requires a separate CONTROL PROGRAMME, the DATA DECK is not changed unless new information on raw materials and/or new constraints (RHS values) make such changes necessary. As will be seen in Section 4, such changes may not be necessary if a REVISE control programme is presented, in which case the new information is added to the original data deck. In discussing LP techniques using the MPSX software package, a modular approach will be used beginning with an example involving the formulation of a least-cost feed based on a short list of available feed ingredients (to meet certain nutrient requirements and; observing limits in the use of certain ingredients). A discussion will be provided on each of the four PARAMETRIC methods offered by the MPSX system. Finally, the technique of combining different modules into one LP job will be demonstrated.

### 3.1 Card Punch Detail

Information for each LP job has to be encoded on 80-column punch cards (Figure 1). The MPSX system calls for such input to be presented in a distinct form and sequence, and strict adherence to these requirements is necessary.

To avoid loss of costly computing time due to errors, data input should be filled out by the formulator in a Card Punch Detail Form (Figure 2). After the cards are punched, they need to be verified for accuracy. This latter operation is usually carried out by another person on a verifying machine. If the services of a second operator are not available, the one who performed the key-punching may verify his or her own work after a lapse of one day to minimize the possibility of overlooking original errors in the card deck. Occasionally, the formulator performs this dual task himself, especially if he is working on diet development for research purposes.

### 3.2 The Job Deck

The Job Deck for linear programming of feeds consists of three main components. These are:

(i) Job Control Cards

calls upon the computer to execute the job using the appropriate programme package (in this case the MPSX);

(ii) Control Programme

sets up the model for execution by the programme package;

(iii) Data Deck

provides information for the LP matrix.

3.2.1 The Job Control Cards

The exampled first Job Deck is for the formulation of a catfish diet. The card punch detail is as shown in Figure 2. The first three cards, or STATEMENTS, in the Job Deck are Job Control Cards.

The first statement is usually provided by the computer operator and identifies the job for accounting purposes. A time limit is routinely set for computer jobs; for linear programming of feeds, one minute of computing time is usually adequate.

The second statement instructs the computer to execute the job using the MPSX programme package.

The third statement is a Data Definition card which signals the start of control programme compilation.

3.2.2 The Control Programme

The nineteen cards that follow constitute the Control Programme. The statements are explained as follows:

PROGRAMME

defines the beginning of the MPSX control programme.

TITLE

provides a heading for the solution output. Although optional, it is wise to include this statement.

The conditions governing its usage are as follows:

(a) can be written in both alphabetical or numerical characters,
(b) the first character must be alphabetical, but not the letter X, and
(c) may take up all eighty columns of the punch card.

INITIALZ

initializes demands and tolerances.

MØVE (XDATA, 'BETAGRØ')
MØVE (XPBNAME, 'RITA')
MØVE (XØBJ, 'CØST')
MØVE (XRHS, 'RHS1')

the MØVE statement sets or alters problem and system parameters. It reads data control cards that specify parameter changes for the current computation. Hence, the first MØVE statement would retrieve the problem file BETAGRØ for use in the optimization and for parametric processes; the second statement defines the problem name, in this case RITA; the third statement reads CØST as the problem objective; and; the last statement reads RHS1 values that specify the right-hand side of the problem file. Note: BETAGRØ and RITA are arbitrary names used to identify the data file and problem, respectively. Other names may also be used.

CØNVERT ('SUMMARY')

the CØNVERT statement reads the input file and converts the data to binary form. The SUMMARY statement (optional) causes the printout of non-zero elements by row and column order, respectively, for checking against the same elements appearing on the matrix work sheet mentioned earlier.

SETUP ('RANGE', 'NUTRIENT', 'BØUND', 'PRØDUCT')

this statement 'sets up' the system to solve the problem using the data provided by the preceding statement. It also specifies whether the objective function is to be maximized (i.e., SETUP('MAX')), or minimized (i.e., SETUP('MIN')). If neither is specified, the computer assumes that the objective is to minimize.

The optional components of the statement listed here alert the computer to additional constraints laid down. The presence of these components in the SETUP statement requires their inclusion in the Data Deck. Failure to observe this requirement will result in premature termination of the programme.

BCDØUT, PICTURE, TRANCØL

are all optional statements to cause printout for data input checking.

BCDØUT

lists the input data.

PICTURE

creates a pictorial representation of the problem matrix. Non-zero values are alphabetically coded according to magnitude (see Figure 3).

TRANCØL and TRANRØW

transform column and row data into matrix form and print them out.

PRIMAL

optimizes the problem by using the primal procedure and produces an optimal solution if one exists.

SØLUTION

causes the solution to be printed in an output report.

RANGE

causes the printout of information concerning price sensitivity of current ingredients. This information has great value in commercial milling operations because it provides guidance in raw material purchase as well as indicates when new formulations are necessary.

EXIT

returns control to the MPSX.

PEND

defines the end of the control programme.

The above control programme sets up only one model by which a problem is solved. It will be seen that by adding additional sets of instructions (statements), multiple solutions to the problem may be possible. Each set of statements will create a separate model from which unique solutions are found.

3.2.3 The Data Deck

The Data Deck contains all the information necessary for the set-up of the LP matrix and ultimately an optimal solution to the problem, if one is possible. The card punch detail for the Data Deck is shown following the Control Programme in Figure 2.

//MPSEXEC.SYSIN DD*

picks up the Data Deck.

NAME BETAGRØ

is the first card in the Data Deck and gives the user a specified name. It must be the same name as indicated in the Control Programme (Card 7).

RØWS

is an indicator card which specifies the cards that follow are the RØW names as described on the first matrix. Each RØW name is qualified by the RØW type appearing in code:

N - no restriction
E - equal to
G - greater than
L - less than

In our example these cards are specified as follows:

N CØST

since the objective here is to minimize cost, no restrictions or constraints are permitted.

E WEIGHT

it is desirable to formulate exactly a certain quantity (weight) of diet.

G PRØTEIN

the protein content of the diet must be at least, or greater than, a specified amount of the diet.

G DE

the digestible energy of the diet must equal, or exceed, a specified level.

N GE

no restriction is placed on the gross energy content of the diet.

C CALCIUM

the calcium content in the diet must equal, or exceed, a specified level.

G PHOS

the phosphorus content in the diet must equal, or exceed, a specified level.

G METH-CYS

the methionine plus cystine content in the diet must equal, or exceed, a specified level.

G LYSINE

the lysine content in the diet must equal, or exceed, a specified level.

N LIPID

no limit is set for lipid content.

N FIBRE

no restriction is placed on fibre levels.

COLUMNS

is an indicator card which specifies the cards that follow are the COLUMN names as described on the first matrix shown earlier. Since eight spaces are the maximum allowed for column names, some ingredient names have to be abbreviated; e.g., CØTTSEED and DICALPHS represent cottonseed meal and dicalcium phosphate, respectively. Values are given in kg per kg weight unless specified otherwise:

CØST - in Thai Baht (U.S.\$ 1 = Baht 20, approximately)

WEIGHT - 1 kg

PRØTEIN - crude protein

DE - digestible energy in megacalories

GE - gross energy in megacalories

CALCIUM - calcium

PHØS - total phosphorus

METH-CYS - methionine + cystine

LYSINE - lysine

LIPID - crude fat

FIBRE - crude fibre

RHS - is an indicator card which specifies the cards that follow list the right-hand-side values described on the matrix given earlier. These cards are headed as RHS1 to distinguish them from other RHS cards added to this section in connexion with certain parametric techniques which will be discussed later. RHS values have the same units as those of the column names described earlier.

RANGES - is an indicator card which specifies the cards that follow represent the range over which the NUTRIENTS vary from the lower limit (LO) for PRØDUCTs which are BØUNDed. Each of these cards, therefore, are headed NUTRIENT and the nutrients specified (in the example, calcium and phosphorus). Values are in the same units as those of the column names described earlier.

BØUNDS - is an indicator card which specifies the cards that follow describe the constraints or restrictions on ingredient usage. Values are given in kg.

As stated earlier, it is not the intent of this chapter to establish the nutrient requirements of species for which least cost formulations are sought. Rather, it is to demonstrate both the opportunities as well as the limits attending the use of linear programming techniques with proper consideration for established knowledge in fish nutrition and feed technology.

The sample catfish diet to be formulated is to contain the following:

 Protein ³ 30% Methionine + Cystine ³ 0.9% Lysine ³ 1.6% Digestible energy ³ 2500 kcal/kg Calcium ³ 0.5%, £ 1.5% Total phosphorus ³ 0.7%, £ 1.2%

Digestible energy (DE) is frequently used in feed formulation for fish. DE on a wide range of feedstuffs for catfish are available and in the sample diet these values are used. Gross energy (GE) levels are usually unnecessary. Its inclusion in the printout is to provide an indication of the overall digestibility of the diet.

LIPID and FIBRE levels are among dietary components required by law to be specified for poultry and pig feeds in most countries. Their stated levels are usually quite arbitrary and do not by themselves reflect digestibility of a feed. Their prominence in a feed, however, has some influence on the feed's texture and pelletability. Low fibre diets containing more than 6 percent total fat will not give good quality pellets.

In the example, total phosphorus is given instead of available phosphorus because the mandatory inclusion of 8 percent fish meal (which is a rich source of available, or mineral, phosphate) obviates the setting of a lower limit for available phosphorus. The adoption of a wide but reasonable range for total phosphorus is meant to promote the cost optimization process.

In setting the BØUNDS (constraints) on PRØDUCTS (ingredients), the feed formulator takes the following into consideration:

(a) Distinct requirement for inclusion of certain feedstuffs in the diet.

Despite efforts to find suitable substitutes in artificial fish diets, fish meal continues to play a central role in meeting protein requirements of most fish species under intensive culture. Also, the rapid growth rates expected under such cultivation methods call for supplemental nutrients, such as vitamins and trace minerals, in the diet.

(b) Availability of the ingredients despite cost.

In commercial operations, the objective is to produce a product consistent in quality at the lowest cost. Product consistency is desirable because organoleptic properties influence the acceptability of a feed by the animal consuming it. Frequent changes in smell or texture may also lead to doubts in the mind of the purchaser over the quality of the feed, even though nutrient composition is preserved,

In the initial model the stated high cost of soybean meal would have caused the exclusion of the ingredient from the diet had it not been for specific instruction for its usage at the 10 percent minimum level in the total diet. This decision may be precipitated by a desire to maintain consistency in the feed which contained the ingredient when it was lower priced, or, because of the necessity to use up an unusually large inventory of the ingredient.

(c) Presence of anti-growth and toxic factors.

Anti-growth and toxic factors are present in some feedstuffs, which when consumed in large amounts would lead to poor performance and occasionally increased mortality among the affected animals.

In the example the bounding of ingredients is rationalized as follows:

 BOUNDS (Limit) PRODUCT (Ingredient) AMOUNT (per 100 kg) Reason for BOUND (Hypothetical) LO (Lower) Soymeal 10.0 Inventory UP (Upper) Soymeal 20.0 Digestibility LO Fish meal 8.0 Nutritional UP Cottonseed 10.0 Toxicity UP Feather meal 10.0 Inventory UP Rice bran 20.0 Nutritional, processing UP Leaf meal 5.0 Nutritional, processing FX (Fixed) Premix 0.5 Nutritional UP Wheat bran 15.0 Nutritional, processing UP Blood meal 10.0 Inventory UP Distillers grain 10.0 Inventory

ENDATA - indicates the end of the data deck
*/- signals the end of the data input step
//- signals the end of the Job Deck

A proof-list of the Data Deck provided by the computer for the Initial Model appears in Figure 4.

## 4. SOLUTION OF INITIAL MODEL (CATFISH DIET)

Once the complete data deck is presented to the computer, it goes through a series of iterations and alternate solutions until a feasible or workable solution is realized. It then continues until an optimum solution is reached. One can trace the series of steps involved and the changes made by studying the iteration log printed out in the primal operation. These are not usually of much interest unless one is making a parametric analysis, which will be discussed later.

The output of the MPSX programme is printed out in several parts. Although primary interest is in the formula or diet composition which will be used to mix the feed, the serious reader will also be able to obtain a great deal of additional information from studying the data output.

Fig. 4 Proof list of data deck; boxed RHS values applicable to parametric modes

 .MPSX - PTF17 EXAMPLE OF A CATFISH FEED NAME BETAGRO ROWS N COST E HEIGHT G PROTEIN G DE N GE G CALCIUM G PHOS G METH-CYS G LYSINE N LIPID N FIBRE COLUMNS MAIZE COST 2.15000 WEIGHT 1.00000 MAIZE PROTEIN .09000 DE 1.10400 MAIZE GE 4.22800 CALCIUM .00020 MAIZE PHOS .00290 METH-CYS .00350 MAIZE LYSINE .00250 LIPID .03900 MAIZE FIBRE .02100 SOYMEAL COST 6.00000 WEIGHT 1.00000 SOYMEAL PROTEIN .44000 DE 2.57600 SOYMEAL GE 4.56800 CALCIUM .00280 SOYMEAL PHOS .00630 METH-CYS .01260 SOYMEAL LYSINE .02620 LIPID .01200 SOYMEAL FIBRE .05800 FISHMEAL COST 8.00000 WEIGHT 1.00000 FISHMEAL PROTEIN .65700 DE 3.90600 FISHMEAL GE 4.62200 CALCIUM .03760 FISHMEAL PHOS .02480 METH-CYS .02590 FISHMEAL LYSINE .05020 LIPID .05000 FISHMEAL FIBRE .01000 COTTSEED COST 4.00000 WEIGHT 1.00000 COTTSEED PROTEIN .40800 DE 2.55700 COTTSEED GE 4.54900 CALCIUM .00200 COTTSEED PHOS .01010 METH-CYS .01260 COTTSEED LYSINE .01560 LIPID .02300 COTTSEED FIBRE .12400 FEATHER COST 9.00000 WEIGHT 1.00000 FEATHER PROTEIN .85400 DE 3.41400 FEATHER GE 5.12500 CALCIUM .00280 FEATHER PHOS .00670 METH-CYS .04320 FEATHER LYSINE .01630 LIPID .03000 FEATHER FIBRE .01200 RICEBRAN COST 2.00000 WEIGHT 1.00000 RICEBRAN PROTEIN .12700 DE 1.99200 RICEBRAN GE 4.2300 CALCIUM .00080 RICEBRAN PHOS .01480 METH-CYS .00420 RICEBRAN LYSINE .00570 LIPID .13900 RICEBRAN FIBRE .11600 LEAFMEAL COST 2.50000 WEIGHT 1.00000 LEAFMEAL PROTEIN .15780 DE .50000 LEAFMEAL GE 3.50000 CALCIUM .01500 LEAFMEAL PHOS .00640 METH-CYS .03700 LEAFMEAL LYSINE .00600 LIPID .02300 LEAFMEAL FIBRE .25900 LIMESTON COST .40000 HEIGHT 1.00000 LIMESTON CALCIUM .38000 DICALPHS COST 3.00000 WEIGHT 1.00000 DICALPHS CALCIUM .26000 PHOS .18500 PREMIX COST 10.00000 WEIGHT 1.00000 COPRA COST 3.00000 WEIGHT 1.00000 COPRA PROTEIN .21200 DE 1.49100 COPRA GE 4.26800 CALCIUM .00220 COPRA PHOS .00620 METH-CYS .00510 COPRA LYSINE .00540 LIPID .00500 COPRA FIBRE .11500 WHEATBRN COST 2.50000 WEIGHT 1.00000 WHEATBRN PROTEIN .15100 DE 2.46400 WHEATBRN GE 4.42000 CALCIUM .00110 WHEATBRN PHOS .01270 METH-CYS .00560 WHEATBRN LYSINE .00600 LIPID .03900 WHEATBRN FIBRE .10300 BLOODML COST 5.00000 WEIGHT 1.00000 BLOODML PROTEIN .75300 DE 2.73300 BLOODML GE 5.22500 CALCIUM .00270 BLOODML PHOS .00260 METH-CYS .02220 BLOODML LYSINE .05990 LIPID .01600 BLOODML FIBRE .01000 DISTGRNS COST 4.00000 WEIGHT 1.00000 DISTGRNS PROTEIN .27000 DE 2.52200 DISTGRNS GE 4.54200 CALCIUM .00140 DISTGRNS PHOS .00720 METH-CYS .00770 DISTGRNS LYSINE .00730 LIPID .09900 DISTGRNS FIBRE .09400 BONEMEAL COST 3.00000 WEIGHT 1.00000 BONEMEAL PROTEIN .11200 CALCIUM .39390 BONEMEAL PHOS .12910 RHS RHS1 WEIGHT 100.00000 PROTEIN 30.00000 RHS1 CE 25.000000 CALCIUM .50000 RHS1 PHOS .70000 METH-CYS .90000 RHS1 LYSINE 1.60000 RHS2 DE 5.00000 RHS3 COST .02100 RHS4 DE .28500 RANGES NUTRIENT CALCIUM CALCIUM 1.00000 PHOS .50000 BOUNDS LO PRODUCT SOYMEAL 10.00000 UP PRODUCT SOYMEAL 20.00000 LO PRODUCT FISHMEAL 8.00000 UP PRODUCT COTTSEED 10.00000 UP PRODUCT FEATHER 10.00000 UP PRODUCT RICEBRAN 20.00000 UP PRODUCT LEAFMEAL 5.00000 FX PRODUCT PREMIX .50000 UP PRODUCT WHEATBRN 15.00000 UP PRODUCT BLOODML 10.00000 UP PRODUCT DISTGRNS 10.00000 ENDATA

### 4.1 RØWS Analysis

The solution is printed out in two sections. The first is the ROWS analysis, shown in Figure 5. The first column in this table lists the attributes which were wanted for consideration in the diet. The second column, headed by the symbol AT, indicates the status of the attribute in the diet; LL means at the Lower Limit, UL means that the row is at the Upper Limit, and EQ means the row is set at Equality. The symbol BS means "in the basis", meaning it is somewhere between its lower and upper limits and currently is not influencing the outcome of the diet. For example, calcium is currently at BS, meaning that the upper limit of 1.5 percent calcium has no effect at all on the solution. The column headed ACTIVITY provides the amount supplied by the solution. The column headed SLACK states the difference between the activity and the lower or upper limits (real or implied). The next two columns print out the lower and upper limits specified for the solution by the user.

The final column, headed DUAL ACTIVITY, provides valuable information regarding the cost of maintaining current restrictions. The amount given in this column indicates the cost associated with furnishing a unit of the row. It is assumed that these are independent and not related, although this is not completely true. From this portion of the printout, the range over which these variables are valid is not known, but this will be explored later.

As an example, a dual activity value of 2.08779 is associated with digestible energy (DE). This means that if one could reduce the lower limit of total DE by one unit (from 250.0 to 249.0 Meal), one would reduce the cost of the diet by this amount. Reducing the energy value from 250 to 245 Meal would result in a saving of 5 × 2.08779; a Baht 10.439 reduction in the cost of 100 kg diet.

Of course, one might not be able to reduce any of these restrictions, since it was indicated that these should represent the nutritionist's best estimates of the nutritional needs of the fish. It does, however, point out areas where research should be conducted. It will be seen that processing maize will affect the solution to this initial model when parametric methods are discussed.

As indicated earlier, these figures are based on the theory that the values are independent of one another. In actuality, this is not completely true, particularly for the costs associated with WEIGHT. Many of the ingredients are competing for space in the diet, and much of their cost is related to this. For example, much of the cost associated with meeting the calcium requirement is not related to the cost of the calcium supplement but to the fact that it competes for space in the diet.

### 4.2 CØLUMNS Analysis

The percentage of the ingredients used in the diet is also given in Figure 5. Again, there is a column which lists the ingredients to be considered, and a second column which gives their status in the diet (LL, UL, EQ, or BS). The column headed ACTIVITY indicates the amount used in the final solution while INPUT cost gives the prices assigned to the ingredient. The LOWER LIMIT and UPPER LIMIT columns indicate the limits imposed by the formulator.

The last column, REDUCED COST, provides information similar to that given by the Dual Activity in the RØWS section. For ingredients not presently used in the diet, such as feather meal or copra cakes, it tells how much the cost of the diet would change if one forced the use of one unit of these ingredients. The reduced cost represents. The difference between input cost and the actual feeding value of the nutrient. For example, there may be some feather meal on current inventory that should be used up. If it is decided to include 2 percent of this ingredient in the diet, the cost would be increased by 2 × 2.02719, or Baht 4.05 38 per, 100 kg of diet.

For soybean meal which is present at the imposed lower limit, the reduced cost also indicates that this ingredient is priced higher than its nutritional value and that savings could be implemented if the lower limits could be reduced. One would then have to balance the savings with the possible advantages of having these levels of ingredients present, such as for preserving product consistency or to reduce inventory on particular ingredients, as explained earlier.

Fig. 5 Solution of initial model

 SECTION 1 - ROWS NUMBER ...ROW.. AT ...ACTIVITY... SLACK ACTIVITY ..LOWER LIMIT. ..UPPER LIMIT. .DUAL ACTIVITY 1 COST BS 412.80391 412.80391- NONE NONE 1.00000 2 WEIGHT EQ 100.00000 . 100.00000 100.00000 .15493 3 PROTEIN BS 34.21326 4.21326- 30.00000 NONE . 4 DE LL 250.00000 . 250.00000 NONE 2.08779- 5 GE BS 449.26784 449.26784- NONE NONE . 6 CALCIUM BS -68663 .16663- .50000 1.50000 . 7 PHOS BS 1.14760 .44760- .70000 1.20000 . 8 METH-CYS BS 1.14029 .24029- .90000 NONE . 9 LYSINE BS 2.06S76 .46976- 1.60000 NONE . 10 LIPID BS 5.98527 5.98527- NONE NONE . 11 FIBRE BS 7.07473 7.07473- NONE NONE .

 .MPSX - PTF17. EXAMPLE OF A CATFISH FEED SECTION 2 - COLUMNS NUMBER .COLUMN. AT ...ACTIVITY... ..INPUT COST.. ..LOWER LIMIT. ..UPPER LIMIT. .REDUCED COST. 12 MAIZE BS 9.52070 2.15000 NONE 13 SOYMEAL LL 10.00000 6.00000 10.00000 20.00000 .77677 14 FISHMEAL BS 14.97930 8.00000 8.00000 NONE . 15 COTTSEED UL 10.00000 4.00000 . 10.00000 1.18357- 16 FEATHER LL . 9.00000 . 10.00000 2.02719 17 RICEBRAN UL 20.00000 2.00000 . 20.00000 2.00396- 18 LEAFMEAL LL . 2.50000 . 5.00000 1.61103 19 LIMESTON LL . .40000 . NONE .55493 20 DICALPHS LL . 3.00000 . NONE 3.15493 21 PREMIX EQ .50000 10.00000 .50000 .50000 10.15493 22 COPRA LL. . 3.00000 NONE .04202 23 WHEATBRN UL 15.00000 2.50000 . 15.00000 2.53116- 24 BLOODML UL 10.00000 5.00000 . 10.00000 .55102- 25 DISTGRNS UL 10.00000 4.00000 . 10.00000 1.11049- 26 BONEMEAL LL 3.00000 . NONE 3.15493

For ingredients present at the upper limits, the reduced cost value represents savings that could be attained if additional amounts could be utilized, such as are realized for cottonseed meal or distillers grains. The negative costs mean that the actual nutritive value for these ingredients is greater than their current input cost. For example, the cost of the diet could be reduced if the upper limits of these two ingredients could be raised. These decisions would, of course, have to be balanced against the reasons for applying the upper limits in the first place, such as possible limitations in supply (distillers grains) or variability in nutrient content (cottonseed meal).

Reduced cost values are given for the premix since for this item no RHS specifications were included but merely its level of usage was fixed. So far as the computer knows, premix is contributing nothing and is only taking up valuable space. Should it contain nutrients such as methionine or lysine incorporated as supplements, the appropriate row values for these nutrients should be assigned to the premix for proper least costing of the diet.

The limitations of the DUAL ACTIVITY and REDUCED COST information are that it is not known over what range the values will remain valid. For example, does the cost of a calorie change remain at Baht 2.08779 all the way from 245 to 250 megacalories? This information can be extended by use of the RANGE programme, discussed in the next section.

### 4.3 Interpreting the RANGE Option

The RANGE option provides additional information to the user of the MPSX programme. Basically, it indicates the range over which the DUAL ACTIVITY and REDUCED COST figures are valid. It also provides information as to the price sensitivity of current ingredients so that one will be able to determine when new formulas need to be run.

To call for this option one only has to insert a single card into the Control Programme, with RANGE punched starting in column 10. It is inserted after the SØLUTION card.

The data obtained from the RANGE programme appear, in Figures 6 and 7. Figure 7 shows the analysis of RØWS at limit level. It is seen here that the unit cost of WEIGHT of Baht 0.l5493 is valid from a range of 93.17 to 112.84 kg. The DE unit cost of Baht, 2.08779 is valid from 236.02 to 256.70 Meal. In this model, WEIGHT and DE represent the only RØW attributes at limit level.

The last columns, LIMITING PRØCESS and AT give some information as to what would happen to the diet if the RØW§§were changed to its lower or upper activity values. For example, it is seen that if the lower limit on DE were reduced to 236.02 Meal, calcium would move to the lower limit.

The analysis of CØLUMNS at limit level is also shown in Figure 6. Here examples are seen of negative or meaningless values. For example, feather meal at Baht 9.0 per kg is not currently used. The LØWER CØST for its use would be 6.97281 and its upper activity or use level at this new cost would be 6.61 percent. If used at this level, calcium would go to the lower limit. The negative value of -3.67624 in lower activity indicates that if the cost of feather meal went to infinity, the computer would subtract 3.67 percent which it obviously cannot do in this situation. Therefore, infinite or negative values should be ignored.

It was indicated earlier that soybean meal was apparently priced too high and the computer used it only because it was forced to do so. The actual value of this ingredient is Baht 5.22324, At this price, the computer would voluntarily use 20.95 percent with calcium at the lower limit. At a price of Baht 2.95798, copra will be used at 11.05 percent, removing maize entirely from the diet.

The RANGE analysis of RØWS at intermediate level (those "in the basis") shown in Figure 7 is of very little use and the data will not be discussed, but the output of CØLUMNS at the intermediate level in the same figure provides some valuable information. Basically, one is informed of (1) the cost range over which the diets will remain constant, and (2) the amount of the ingredient which would be used if the price were to be changed. Again, examples are shown of negative or unrealistic values which must be ignored. For example, maize at the current cost of Baht 2.15 is used at 9.52 percent. If the cost increases to Baht) 2.19876 the amount used will decrease to -34.03 percent, which is quite meaningless. However, cost decrease to Baht 0.83376 will result in increase usage of up to 11.20 percent, partially replacing blood meal.

Fig. 7 Analysis at intermediate level

 .MPSX-PTF17. EXAMPLE OF A CAT SECTION 3 - ROWS AT INTERMEDIATE LEVEL NUMBER ROW AT ACTIVITY SLACK ACTIVITY ..LOWER LIMIT. LOWER ACTIVITY ...UNIT COST... ...UPPER COST LIMITING PROCESS. AT ..UPPER LIMIT. UPPER ACTIVITY ...UNIT COST... ...LOWER COST.. AT 3 PROTEIN BS 34.21326 4.21326- 29.9999 29.9999 1.65290 BLOODML UL NONE NONE .96189 COPRA LL 6 CALCIUM BS .68663 .18663- .50000 .50000 13.27538 COPRA LL 1.50000 1.50000 1.40653 LIMESTON LL 7 PHOS BS 1.14760 .44760- .70000 .70000 95.83883 SOYMEAL LL 1.20000 1.20000 16.54143 DICALPHS LL 8 METH-CYS BS 1.14025 .24029- .90000 .90000 32.48095 COPRA LL NONE NONE 42.03202 LEAFMEAL LL 9 LYSINE BS 2.06976 .46976- 1.60000 1.60000 11.39430 COPRA LL NONE NONE 34.05701 LIMESTON LL

 SECTION 4 - COLUMNS AT INTERMEDIATE NUMBER COLUMN AT ACTIVITY INPUT COST LOWER LIMIT LOWER ACTIVITY UNIT COST UPPER COST LIMITING PROCESS AT UPPER LIMIT UPPER ACTIVITY UNIT COST LOWER COST AT 12 MAIZE BS 9.52065 2.15000 34.03229- .04876 2.19876 COPRA LL NONE 11.20405 1.31624 .83376 BLOODML UL 14 FISHMEAL BS 14.97925 8.00000 8.00000 13.45362 .30426 8.30427 COPRA LL NONE 17.31705 .94779 7.05221 BLOODML UL

Fish meal prices can vary between Baht 7.05221 and Baht 8.30427 before changes in the diet would be necessary. At the lower price, usage will be at 17.32 percent, partially replacing blood meal; at the higher price, usage will be reduced to 13.45 percent, with copra taking up the difference.

These price changes are based on independent changes, assuming that only one ingredient at a time will change in cost. This is not a realistic assumption but it does provide a reasonable estimate of the frequency of times one must reformulate feeds.

The RANGE option can thus provide a great deal of information beyond that furnished by the original solution. This can be accomplished with the addition of only a single card into the control deck, and requires only a small amount of extra computer time.

## 5. MODIFYING THE DATA DECK BY THE REVISE PROGRAMME

Occasionally, the formulator may want to run a series of diets in which certain elements of the data input are changed or modified. This is often done in formulating different types of research diets or when diets for several different types of age groups of animals are run consecutively. These modifications can be made by using the REVISE programme.

Essentially, the REVISE data deck is quite similar to the original data deck. It comprises the same five sections of data: RØWS, CØLUMNS, RHS, RANGES, and BØUNDS. Only those sections that need to be modified or changed are actually included.

Within each of the sections, four types of revisions are possible. These are MØDIFY, DELETE, BEFØRE, and AFTER. These revisions are stated on data cards similar to those used in the original data deck. The section to be revised is first identified by a section indicator card (RØWS, CØLUMNS, etc.). The kinds of changes to be made are then specified by REVISE control cards (MØDIFY, DELETE, BEFØRE, and AFTER) and by the actual data cards indicating the changes. For each section to be revised, the sequence is repeated. The functions of each of the REVISE operations will be discussed briefly.

(i) MØDIFY this revision modifies any previously defined information by) simply re-entering the new information in the same format as that in which the original information was given. The control card for this type of change is set up as follows:

Card columns

 3-8 MØDIFY

MØDIFY data cards, which follow the MØDIFY control card, may be any of the five types of data cards. RØW cards may modify the type of constraint that was specified in the original deck, such as changing a G value to an N. CØLUMN modification cards may change the matrix elements in any column group, such as changing the energy content of a fat. RHS cards may be used to increase or decrease the specifications for any of the nutrients. RANGE cards may be used to modify the allowable range for any nutrient and BØUND cards may be used to modify any product control. In short, the user can change any information previously entered by the MØDIFY programme. Card formats for the new information remain the same as for the original data.

(ii) DELETE

this revision completely removes any defined information from the original data. The control card for this type of change is set up as follows:

Card columns

 3-8 DELETE

The DELETE data cards may also be of any of the five types of original data cards (RØWS, CØLUMNS, etc.). However, all that need be done is to indicate the name of the information to be deleted. This entire vector will then be deleted from the data deck. If it is desired to delete only segments of the information, this can be specified.

(iii) BEFØRE and AFTER

these revisions are used to add new information to the original deck. The only difference between the two is the location where the new information will be added. In using these cards, the new information is added to the data deck BEFØRE and AFTER some specified location currently existing in the DATA Deck. The control card for these modifications thus will contain some information which will indicate the location where the new information is to be inserted. The control cards for the BEFØRE and AFTER modifications are shown below.

Card columns

 3-8 15-22 BEFØRE Name of old vector

Card columns

 3-8 15-22 AFTER Name of old vector

Card columns 15-22 contain the name of some previous information presently in the data deck. New information is then added before or after this. The name of the old vector can be omitted and the new information will be added as the first information in the revised section (BEFØRE) or the last information in the revised section (AFTER).

### 5.1 Organization of the REVISE Data Deck

The REVISE Data Deck is set up in an order similar to that of the original Data Deck. It begins with a NAME card and ends with an ENDATA card. It is inserted into the original deck immediately after the ENDATA card for the original deck and before the final DD cards. The REVISE deck is split into five sections: RØWS, CØLUMNS, RHS, RANGES, and BØUNDS, each headed by an appropriate indicator card. The sections must appear in the above order, but if a section contains no revisions it does not have to be included.

There are certain rules which must be followed when using the REVISE programme. They will be outlined and examples given of how these apply to the revision of the original data deck.

Rules for REVISE section.

(1) Within each section (RØWS, CØLUMNS, etc.) there are revision control cards (MØDIFY, DELETE, BEFØRE, or AFTER) followed by appropriate revision data cards. Any one or all four of these types of§§revisions may take place. However, once a revision to a particular vector is made in a section, all revisions to that vector must be given before any other vector is mentioned. Revisions to different vectors are not grouped By the type of revision.

(2) Subject to the rule above, modifications may be made in any order.

(3) If a currently existing non-zero value is to be changed to zero, it must be defined with the value of zero in the REVISE Data Deck. This is an exception to the earlier statement about the addition of zero values.

(4) Any new vector (new ingredient, attribute, etc.) to be added must be given a different name from that given to an old vector, even if the old vector is deleted.

(5) If E, L, or G-type RØWS are modified into an N-type row, the RANGE elements of this row are automatically removed.

(6) A modified row or bound element must be entirely re-defined. That is, a modified row must have its type of constraint specified and a bound element must have both its upper and lower limits specified, even if only one is modified.

(7) If a new row is added by using BEFØRE or AFTER in the RØWS section, then values for this row in existing columns are added by using MØDIFY for the appropriate columns.

As an example of how this type of information may be used, the data for the original solution will be revised as shown in Figure 8. A brief statement about the different modifications or revisions will be made as most are self-explanatory.

In the RØWS section, the constraint on PRØTEIN will be changed from a G to an N value by MØDIFY. A new row, MEATPRØT (meat protein) is added after the existing GE row. This new row will have a value, with the value to be given in the RHS section. The FIBRE row has been completely deleted.

In the CØLUMNS section some current data are modified. The cost of maize is added and MEATPRØT values are added to the animal protein sources. According to rule 7, MØDIFY will be used to§§add information on new rows to existing columns. Distillers grains are deleted from consideration.

Two new ingredients are added. DLMETH98 (dl-methionine, 98%) is added along with its, ingredient values after the currently existing bone meal. DEFLPHØS (defluorinated rock phosphate) is added along with its ingredient values before the currently existing DICALPHS.

In the RHS section values are also added for a newly-inserted row, MEATPRØT, following rule 7.

No modifications are given in the RANGES section, but in the BØUNDS section the lower limit of the soybean meal was changed from 10.0 to 0. Here, rule 3 is followed to change a non-zero value to zero, and rule 6, to completely re-define bound elements. Thus, although the old upper limit of 20.0 percent is retained, this again must be specified in the REVISE programme. The product has been reset in fish meal from its lower limit of 8 to a new limit of zero. This is necessary because of the addition of meat protein and the setting of an RHS value for this new row element.

In addition to the new information in the Data Deck, new§§information must be added to the CØNTRØL PRØGRAMME. Following the SØLUTIØN statement of the original programme, the following new cards must be inserted, again starting in card column 10:

MØVE (XDATA, 'BETAGRØ2')

a name for the new data deck, subject to the same rules outlined previously, must be specified.

MØVE (XØLDNAME, 'RITA')

this gives the XPBNAME of the old data deck to be revised, which in the sampled problem was 'RITA'.

MØVE (XPBNAME, 'GINA')

establishes the name to be assigned to this problem on the problem file, and subject to the same rules as outlined previously.

REVISE ('SUMMARY')

indicates that a revised programme is to be run.

SET-UP

as outlined previously.

PRIMAL

as outlined previously.

SØLUTIØN

as outlined previously.

CØNTINUE

this statement returns control to a statement that was interrupted to service the revise programme.

These cards are then followed by the original EXIT and PEND statement cards. An example of a computer control programme for a REVISE run may be seen in Figure 9.

Several different REVISE runs may be made in succession. However, it is suggested that if extensive modifications are to be made, some other approach to the problem should be used. If several consecutive REVISE programmes are run, it should be kept in mind that REVISE vectors refer back to the original data and successive REVISE programmes must be completely and independently re-defined.

### 5.2 Results of the REVISE Programme

Revising the initial model results in solutions as summarized in Figure 10. Compared to the original solution in Figure 5, energy remains the limiting factor influencing cost. Despite a reduction in the cost of maize and replacement of the bound on fish meal usage by the more flexible meat-protein bound diet, cost is actually increased. This probably results from the removal of distillers grains from the ingredient list. We also see a further increase in the protein content which, in the original model, already exceeds the 30 percent minimum set. This represents a waste and points to opportunities for research in the area of energy utilization in catfish. Some of these ramifications will be explored in the discussion of parametric methods in the next section.

Numerous types of changes in the basic format of the original data deck can be made by proper use of the REVISE programme. One would not normally make as many changes as have been made in this example, but these are given to illustrate the different types of changes available. It is pointed out, again, that if extensive modifications are to be made, the user might be advised to make changes in the original data deck rather than using the REVISE programme.

## 6. PARAMETRIC LINEAR PROGRAMMING

The use of parametric linear programming (PLP) adds a new dimension to least-cost linear programming. This technique is extremely versatile and in the hands of a creative and imaginative nutritionist can be valuable in many aspects of feed formulation. Some of the areas in which PLP can be used to advantage are:

(a) planning and formulating diets for experimental purposes,
(b) evaluating the potential sales value and usage level of new or improved feeds tuffs,
(c) determining the economic benefit of improved feed processing techniques, and
(d) determining costs and benefits of modifications in nutrient requirements.

Parametric programming is a technique for investigating the effects of a sequence of proportionate or incremental changes in the elements of a row, column, or right-hand-side. A selected factor is parametrized; i.e., examined at increasing or decreasing increments, and the effect on the least-cost solution is examined.

Several different parametric procedures can be used in feed formulation. First, the value of the objective function of the solution (in this example the cost) may be varied. This is often called parametric cost ranging and utilizes the PARAØBJ programme. The nutrient specifications set forth in the right-hand-side section may be varied by use of the PARARHS programme. This is also§§known as parametric restriction ranging. The effects of altering the amounts of one or more attributes of a specified feedstuff by the PARACØL programme may be studied (also known as parametric nutrient ranging). The effects of changing values of a specified attribute, such as the available phosphate content, in one or more feedstuffs simultaneously can be studied by the PARARØW programme. Thus PARAØBJ parametrizes the objective function, PARARHS parametrizes the right-hand-side values, PARACØL parametrizes one or more elements in a specified column, and PARARØW parametrizes one or more elements in a given row.

These different methods will be discussed as to their application to feed formulation, and some examples will be given which will guide the reader to consider how PLP may be used to advantage under his own conditions.

Fig. 9 Control programme for a REVISE run

 PROGRAMTITLE ('EXAMPLE OF A CATFISH FEED')INITIALZMOVE (XDATA, 'BETAGRO')MOVE (XPBNAME, 'RITA')MOVE (XOBJ, 'COST')MOVE (XRHS, 'RHS1')CONVERT ('SUMMARY')SETUP ('RANGE' , 'NUTRIENT', 'BOUND', 'PRODUCT')PRIMALSOLUTIONTITLE ('REVISED CATFISH FEED')MOVE (XDATA, 'BETAGRO2')MOVE (XOLDNAME, 'RITA')MOVE (XPBNAME, 'GINA')REVISE ('SUMMARY')SETUP ('RANGE', 'NUTRIENT', 'BOUND', 'PRODUCT')PRIMALSOLUTIONCONTINUEEXITPEND

Fig. 10 Solution of revised model

 .MPSX-PTF17. REVISED CATFISH FEEDSECTION 1-ROWS NUMBER ...ROW... AT ...ACTIVITY... SLACK ACTIVITY ..LOWER LIMIT. ..UPPER LIMIT. .DUAL ACTIVITY 1 COST BS 410.32142 410.32142- NONE NONE 1.00000 2 WEIGHT EQ 100.00000 . 100.00000 100.00000 .79043 3 PROTEIN BS 34.11874 4.11874- NONE NONE . 4 MEATPROT BS 29.78871 19.78871- 10.00000 NONE . 5 DE LL 245.00000 . 245.00000 NONE 2.087759- 6 GE BS 447.03048 447.03048- NONE NONE . 7 CALCIUM BS .84691 .34691- .50000 1.50000 . 8 PHOS UL 1.20000 .50000- .70000 1.20000 98.76706 9 METH-CYS BS 1.17946 .27946- .90000 NONE . 10 LYSINE BS 2.18200 .58200- 1.60000 NONE .

 SECTION 2 - COLUMNS NUMBER COLUMN AT ACTIVITY INPUT COST LOWER LIMIT UPPER LIMIT REDUCED COST 11 MAIZE BS 17.62974 2.10000 . NONE . 12 SORGHUM LL . 2.07000 . NONE .13527 13 SOYMEAL BS 7.08155 6.00000 . 20.00000 . 14 FISHMEAL BS 19.78871 8.00000 . NONE . 15 COTTSEED UL 10.00000 4.00000 . 10.00000 1.57001- 16 FEATHER LL . 9.00000 . 10.00000 .62809 17 RICEBRAN UL 20.00000 2.00000 . 20.00000 1.47997 18 LEAFMEAL LL . 2.500000 . 5.00000 2.48375 19 LIMESTON LL . .40000 . NONE 1.19043 20 DEFLPHOS LL . 3.00000 . NONE 21.56850 21 DICALPHS LL . 3.00000 . NONE 22.06234 22 PREMIX EQ .50000 10.00000 .50000 .50000 10.79043 23 COPRA LL . 3.00000 . NONE .11231 24 WHEATBRN UL 15.00000 2.50000 . 15.00000 2.60315- 25 BLOODML UL 10.00000 5.00000 . 10.00000 1.81722- 26 BONEMEAL LL . 3.00000 . NONE 16.54126 27 DLMETH98 LL . 50.00000 . NONE 37.84129

### 6.1 Parametric Restriction Ranging - PARARHS

This option can be one of the most valuable and powerful formulation tools a nutritionist may have at his disposal. By proper use of this programme one can quickly establish a series of linear changes in his nutritional specifications and examine their effects on the diet composition and costs. The changes may be either positive or negative; i.e., the specified level of the nutrient may be increased or decreased. Changes in the level of more than one nutrient at a time may be examined simultaneously with the specified change in each nutrient independent of changes in other nutrients, either in direction or magnitude. For example, one could increase calcium while at the same time decrease phosphorus requirements. One may increase lysine requirements by a factor of two while increasing methionine requirements by a factor of four, as another example.

In the given initial model of a catfish feed, it was noted that DE was the only limiting nutrient in the optimal solution. Therefore, one will study the effects of reducing the DE requirement of the initial diet. This diet was formulated with an initial request for a minimum of 2 450 kcal/kg. The use of levels of down to 2 200 kcal/kg will be considered below.

To repeat, additional information must be included in both the data deck and the control programme. First, add a new card to the RHS section of the data deck. This card, designated as RHS2, specifies the nutrient to be changed and the amount by which it is to be changed. It is to be punched as are other RHS cards in the original data deck. Thus, the digestible energy requirement will be decreased by 50 kcal/kg (or 5 Meal for the total diet) for each time specified. A negative sign immediately preceding the value denotes such a reduction. This card must" be placed in the deck after the end of all the RHS1 cards. It must not be placed before any of the original RHS cards.

Some additional cards must be added to the control programme to initiate the PARARHS programme. These are outlined in Figure 11. Since this is a post-optimal operation, the computer first solves the original solution and then proceeds to parametrize the right-hand-side factor indicated. The TITLE statement is optional and purely descriptive. The MØVE statement reads the specified parameter changes for the new model. The XPARAM=0.0 card represents the initial value of the parametric multiplier, and the XPARMAX=5.0 specifies that the increment (negative) given in RHS2 will be added to the original RHS up to a total of five times. This value can be changed by the user to fit his problem but must always be a positive number and contain a decimal point. The XPARDELT=1.0 specifies the parametric intervals at which the new solutions are to be printed; it must also be positive and contain a decimal. It is indicated here that the solution desired is to be printed out at each 50 kcal/kg decrease of digestible energy. The name of the RHS value to be parametrized is indicated by the MØVE (XCHCØL, 'RHS2') statement. This is followed by PARARHS, which calls forth the particular programme, SØLUTIØN, CØNTINUE, EXIT, and PEND.

Fig. 11 Control programme for PARARHS Restriction Ranging

 PROGRAMTITLE ('EXAMPLE OF A CATFISH FEED')INITIALZMOVE (XDATA. 'BETAGRO')MOVE (XPBNAME, 'RITA')MOVE (XOBJ, 'COST')MOVE (XRHS, 'RHS1')CONVERT ('SUMMARY')SETUP('RANGE', 'NUTRIENT', 'BOUND', 'PRODUCT')BODOUTPICTURETRANCOLTRANROWPRIMALSOLUTIONTITLE ('PARARHS-CHANGING ENERGY REQUIREMENT OF FEED')MOVE (XCHCOL, 'RHS2')XPARAM=0.XPARMAX=5.XPARDELT=1.PARARHSSOLUTIONCONTINUEEXITPEND

The effects of the changes in diet formulation are shown in Table 2. The first column represents the solution of the initial model. As the minimum DE requirement is decreased by the PARARHS programme, a decrease in the cost of the diet is seen, as well as a progressive decrease in the protein level until a minimum for the nutrient (30 percent) is reached.

The savings per unit decrease of DE requirement is constant up to the point where protein level becomes limiting; at this time the savings fall off sharply, reflecting the new cost of maintaining minimum protein level. The dual role of fish meal is also seen as a supplier of both protein and energy when energy cost is high. From the table, it can also be seen that as a protein source, copra meal is less expensive than distillers grains, whereas the latter ingredient is more cost effective in an energy-limiting diet.

Table 2 - Parametric RHS Ranging (PARARHS) - Results of Decreasing Dietary DE Requirement - Model Catfish Diet

 Item DE, Mcal/100 kg Feed 245 240 235 230 225 220 Rows CØST, Baht/100 kg 402.36494 391.92596 381.50610 371.23392 365.39187 361.88912 PRØTEIN, kg 33.20149 32.18971 31.18253 30.14601 30.0 30.0 GE, Meal 448.56478 447.86171 447.01837 445.54113 433.90940 432.51182 CALCIUM, kg 0.61989 0.55315 0.50 0.50 1.50 1.50 PHØS, kg 1.10852 1.06944 1.03056 0.99422 0.98808 0.99146 METH-CYS, kg 1.10031 1.06034 1.02056 0.98066 0.96981 0.96072 LYSINE, kg 1.98464 1.89953 1.81497 1.72837 1.72832 1.72524 Diet Composition (%) Columns MAIZE 11.30514 13.08958 14.82601 16.44237 12.39850 9.62692 SØYMEAL 10.0 10.0 10.0 10.0 10.0 10.0 FISHMEAL 13.19486 11.41042 9.63955 8.0 8.0 8.0 CØTTSEED 10.0 10.0 10.0 10.0 10.0 10.0 FEATHER - - - - - - RICEBRAN 20.00 20.00 20.00 20.00 20.00 20.00 LEAFMEAL - - - - - - LIMESTON - - 0.03444 0.19681 2.81630 2.78908 DICALPHS PREMIX 0.50 0.50 0.50 0.50 0.50 0.50 COPRA - - - - 4.03221 12.76040 WHEATBRN 15.0 15.0 15.0. 15.0 15.0 15.0 BLOODML 10.0 10.0 10.0 9.86082 10.0 10.0 DISTGRNS 10.0 10.0 10.0 10.0 7.25298 1.32360 BONEMEAL - - - - - -

### 6.2 Parametric Column Ranging - PARACØL

This option is used to direct the parametric ranging of elements within a specified column. A certain ingredient is selected (only one ingredient at a time can be considered). One, several, or all of the row values within this column may be increased or decreased.

It is often possible to change the nutritive value of an ingredient by some processing method, enzyme addition, etc., with some control on the degree of change. For example, it has been established that fully gelatinized maize has almost twice the DE value as uncooked maize for catfish. This can be partially realized by the pelleting process and completely realized by extruding maize under pressurized heat. Either process, however, involves some additional processing cost. Should it be desirable to know the cost effectiveness of the gelatinization process on maize, then PARACØL programming should be employed.

Again, additional information should be added to the data deck and the control programme. First, RHS values must be added into the data deck to indicate the magnitude of the change in DE value of the maize and the additional cost associated with each increment of gelatinization. These values will be designated as RHS3. The RHS3 values represent the new values added to the respective old values. Assume that 0.285 represents additional DE (Mcal/kg) available with each processing phase (5 in all). Assume, further, for simplicity, that each such step will produce 20 percent gelatinization, and that by the end of the fifth step, the gelatinization process is complete. Suppose each processing step results in a constant cost increment of Baht 0.021 per kg. The RHS3 cards are added after the RHS1 cards. Keep in mind that any or all of the attributes in the selected ingredient could be changed with the direction on magnitude of change for each attribute independent of the others. For example, it might also be found that for each increase in the DE value due to the processing, there would be a decrease in lysine content. The user would then add another RHS card indicating this change. However, proceed on the assumption that the energy and cost values represent the only changes. A control programme for the PARACØL option is shown in Figure 12. The initial least-cost solution is obtained and the PARACØL is done post-optimally. Note that some familiar statements as well as some new ones are added. First specify which column is to be changed in MØVE (XCOLUMN, 'MAIZE'). A stipulation is that this ingredient must not be bounded in any way (FX, LO§§or UP). Then, indicate the change column, MØVE(XCHCØL, 'RHS3'). Again, the initial value is established by XPARAM=0.0, and the maximum value in this case will be XPARMAX=5.0, which means that an increase in the digestible§§energy level in 5 steps will be examined. The printing out of values at each interval change by XPARDELT=1 is then ordered. PARACOL calls for the specific programme, followed by SØLUTIØN, CØNTINUE, EXIT, and PEND - as§§before.

The change in the diets as a result of increases in the DE value of the maize is shown in Table 3. As demonstrated in the preceding sections, DE constitutes not only the limiting nutrient in the initial diet but meeting its minimal requirement is at some cost to unwanted protein as well. The increasing DE values of maize, made available through gelatinization, more than off-set the added cost involved. Again, sharp drops in cost of the diet occur just before the lower limit for protein is reached. The largest drop occurs with the greatest increase in usage of processed maize when it has a DE value of 1 959 kcal/kg. If diet cost is plotted against percent gelatinization, a sigmoid curve is obtained (Figure 13) which shows the sharpest reduction in diet cost occurring at around 58 percent gelatinization coinciding with the highest level of maize usage. Incidentally, this is also the level at which the total cost of the diet is least sensitive to increase in cost of gelatinization.

The PARACØL programme, therefore, can be very valuable in determining the economic feasibility of ingredient processing and suggests possible areas of research on factors known to influence the nutritive value of an ingredient.

Fig. 12 Control programme for PARACØL Nutrient Ranging

 PROGRAMTITLE (EXAMPLE OF A CATFISH FEED)INITIALZMOVE (XDATA, 'BETAGRO')MOVE (XPBNAME. 'RITA')MOVE (XOBJ, 'COST')MOVE (XRHS ,'RHS1')CONVERT ('SUMMARY')SETUP ('RANGE', 'NUTRIENT', 'BOUND', PRODUCT')BODOUTPICTURETRANCOLTRANROWPRIMALSOLUTIONRANGETITLE('PARACOL-CHANGING ENERGY VALUES OF MAIZE')MOVE(XCOLUMN, 'MAIZE')MOVE(XCHCOL, 'RHS3')XPARAM=0.XPARMAX=5.XPARDELT=1.PRIMALPARACOLSOLUTIONCONTINUEEXITPEND

Table 3 - Results from increasing the DE and COST Values of Maize by 207, Increments in Gelatinization by the PARACØL Programme

 % Gelatinization 0 20 40 60 80 100 Cost Baht/kg 2150 2171 2192 2213 2234 2215 DE, Meal/kg 1104 1389 1674 1959 2244 2529 Rows CØST, Baht/100 kg 402.36 395.14 385.86 372.95 367.48 365.77 WEIGHT, kg 100.00 100.00 100.00 100.00 100.00 100.00 PRØTEIN, kg 33.20 32.48 30.00 30.00 30.00 30.00 DE, Meal 245.00 245.00 245.00 245.00 245.00 245 00 GE, Meal 448.56 448.06 444.21 444.17 437.67 433.17 CALCIUM, kg 0.62 0.57 0.57 0.53 1.11 1.50 PHØS, kg 1.11 1.08 1.09 1.02 0.95 0.96 METH-CYS, kg 1.10 1.07 1.00 1.00 1.02 1.01 LYSINE, kg 1.98 1.92 1.71 1.81 1.71 1.71 LIPID, kg 5.97 5.95 6.04 5.35 5.21 5.26 FIBRE, kg 7.09 7.11 7.15 6.39 6.36 6.66 Diet Composition (%) Columns MAIZE 11.30 12.58 16.28 23.69 22.44 18.50 SOYMEAL 10.00 10.00 10.00 10.00 10.00 10.00 FISHMEAL 13.19 11.91 12.19 11.33 8.00 8.00 CØTTSEED 10.00 10.00 10.00 10.00 10.00 10.00 FEATHER - - - - 2.24 1.82 RICEBRAN 20.00 20.00 20.00 20.00 20.00 20.00 LEAFMEAL - - - - - - LIMESTØN - - - - 1.82 2.83 DICALPHS - - - - - - PREMIX 0.50 0.50 0.50 0.50 0.50 0.50 CØPRA - - - - - 3.35 WHEATBRN 15.00 15.00 15.00 15.00 15.00 15.00 BLØØDML 10.00 10.00 6.03 9.48 10.00 10.00 DISTGRNS 10.00 10.00 10.00 - - - BØNEMEAL - - - - - -

### 6.3 Parametric Row Ranging - PARARØW

The PARARØW option is similar in set-up and operation to the other parametric operations. In this programme, a specific row is selected and the value of this row, in one or more feed-stuffs, is altered by a specified amount.

Assume, in this example, that the digestible energy content of feed grains, normally low for catfish, can be increased by processing. Assume, further, that stepwise processing of the grains will result in corresponding increases in digestible energy. Thus, five such additions would result in maximum DE values which are further assumed to be 2529 and 2450 kcal/kg for maize and sorghum, respectively. Sorghum is a new column which is added for the demonstration of this parametric technique (it was absent in the initial model). Since there is a restriction to select only one row for ranging, it is not possible to consider increased cost with each increase in DE content as was rationalized in the earlier example of parametric column ranging. This is one limitation of the method.

Fig. 13 Effects of maize gelatinization on diet cost

The control programme for the PARARØW example is shown in Figure 14. Indicate the row to be changed as MØVE(XRØW, 'DE'). This must be a restraint row and can be ranged. Each ingredient for which the specified row is to be changed is then given a CHRØW2 value in the CØLUMNS section of the data deck. The values which will be given represent increments of the DE content in each of the five steps. This change row is designated in the control programme as MØVE(XCHRØW, 'CHRØW2') and is assigned an N value in the RØWS section of the data deck. The XPARAM, XPARMAX, and XPARDELT values follow the rules set forth previously. It is noted that a total of 5 additions of the change row value are called for to the original DE value of the specified feedstuffs, with the solution to be printed out at each increment. Thus, at each increment, the original value will be replaced with the original value plus a multiple of the change row value.

The PARARØW results are summarized in Table 4. Once again, the high cost of meeting the minimum requirement of digestible energy in the sample diet is demonstrated. As in the PARACØL example, the increasing use of maize as this ingredient's digestible energy increases as a result of the gelatinization process is attended by reductions in the overall cost of the diet. At 40 percent grain starch gelatinization, the total DE needs can be met without sacrifice of unwanted excess of protein,. As further gelatinization of grain starch takes place, the cost of energy becomes subordinate to the cost of protein, and the choice of maize as the energy source gives way to sorghum - the latter having a higher protein content. As a result of the higher cost of protein too, the greater utilization of feather meal at the expense of fishmeal is seen.

Table 4 - Parametric Row Ranging - PARARØW - Results of Increasing Feed. Grain DE Values through Starch Gelatinization

 % Gelatinization 0 20 40 60 80 100 MAIZE, Meal DE/kg 1104 1389 1674 1959 2244 2529 SORGHUM, Meal DE/kg 1050 1330 1610 1890 2170 2450 CØST, Baht/100 kg 402.36 394.87 385.18 371.46 360.40 358.19 PRØTEIN, kg 33.20 32.47 30.00 30.00 30.00 30.00 DE, Meal 245.00 245.00 245.00 245.00 245.00 245.00 CALCIUM, kg 0.61 0.57 0.57 0.53 0.65 1.50 PHØS, kg 1.10 1.08 1.08 1.024 0.95 0.81 METH-CYS, kg 1.10 1.07 1.00 1.00 0.99 0.99 LYSINE, kg 1.98 1.92 1.70 1.81 1.70 1.66 Diet Composition (%) MAIZE 11.30 12.59 16.28 23.69 SØRGHUM - - - - 24.44 34.50 SØYMEAL 10.00 10.00 10.00 10.00 10.00 10.00 FISHMEAL 13.20 11.91 12.19 11.33 8.00 8.00 CØTTSEED 10.00 10.00 10.00 10.00 10.00 10.00 FEATHER - - - - 1.45 2.27 RICEBRAN 20.00 20.00 20.00 20.00 20.00 20.00 LEAFMEAL - - - - - - LIMESTØN - - - - 0.61 2.86 DICALPHS - - - - - - PREMIX 0.50 0.50 0.50 0.50 0.50 0.50 CØPRA - - - - - 1.77 WHEATBRN 15.00 15.00 15.00 15.00 15.00 - BLØØDML 10.00 10.00 6.03 9.48 10.00 10.00 DISTGRNS 10.00 10.00 10.00 - - - BØNEMEAL - - - - - -

Fig. 14 Control programme for PARARØW

 PROGRAMTITLE ('EXAMPLE OF A CATFISH FEED')INITIALZMOVE (XDATA, 'BETAGRO')MOVE (XPBNAME, 'RITA')MOVE (XOBJ, 'COST')MOVE (XRHS, 'RHS1')CONVERT ('SUMMARY')SETUP ('RANGE', 'NUTRIENT', 'BOUND', 'PRODUCT')PRIMALSOLUTIONRANGETITLE ('PARAROW - IMPROVING ENERGY VALUES OF FEED GRAINS')MOVE (XROW, 'DE')MOVE (XCHROW, 'CHROW2')XPARAM=0XPARMAX=5.XPARDELT=1.PRIMALPARAROWSOLUTIONCONTINUEEXITPEND

### 6.4 Parametric Cost Ranging - PARAØBJ

Parametric cost ranging involves changing the value of the objective row (CØST in the model) for a specified ingredient, while the price of other ingredients remains constant. While it is technically possible to range the price of several ingredients simultaneously, it would be difficult to interpret the output. The data output or solutions of the PARAØBJ programme will trace the usage level of the selected ingredient at different cost levels. The usage level will generally be a step-like function rather than a straight line with the width and height of the steps varying in relation to the competition from other feedstuffs.

Several uses can be made of the PARAØBJ programme. The most common use is to estimate the economic or nutritive worth of an ingredient in relation to other ingredients and given an estimate of the market demand (use level) at different price ranges. One should be aware that the economic value of a particular feedstuff depends not only upon its nutrient content and biological availability, but also upon the type of diet in which it is fed, the limitation or bounds imposed upon the feedstuffs, and the nutrient composition and cost of other feed-stuffs. Therefore, the PARAØBJ programme is particularly useful when evaluating a new or improved feed product, evaluating a feedstuff in different types of diets or for different species, evaluating an ingredient on the basis of cost relationships at; different market locations, and for examining competitive relationship among ingredients.

As an example, a parametric cost ranging study of soybean meal, an ingredient that was not selected for use by the computer in the second least-cost model, will be made. The usage level of this material at different cost levels in the BETAGRØ carp diet will be examined.

The control programme which directs the PARAØBJ operation is shown in Figure 15. This programme first solves the basic least-cost solution as described earlier, and then post-optimally considers the cost ranging of the chosen feedstuff. During the solving of the basic least-cost solution, the test ingredient is usually assigned a high artificial price so as to prevent its use in the(diet.

Certain additional information needs to be added to the data deck. The new data deck information for the PARAØBJ is given in Figure 16. The name of the objective function is changed from CØST to CØST2. A CØST2 value of zero is assigned to the test ingredient (it need not be punched), while the same values used for CØST in the original solution are assigned to the remaining ingredients as CØST2 in the CØLUMNS section. A MØVE (XØBJ, 'CØST2') statement in the control programme, an N value for CØST2 in RØWS, and CØST2 values for all ingredients in CØLUMNS must be added. Keep in mind that CØST and CØST2 are arbitrary terms selected by the user to describe his objective function. Other objective functions may also be chosen.

A series of related problems is then created by replacing the original objective row CØST with the new objective row plus a multiple of a "change" row. This multiple, XPARAM, is the parameter and its value must be stated in the control programme. It is the initial value of the ingredient to be parametrized and it must be a zero and must contain a decimal (XPARAM=0.).

The ingredient to be parametrized is designated as the range row by placing the term CHRØW1 in the CØLUMNS section with the rest of the nutrient values for feathermeal with a CHRØW1 value of 1. This instructs the computer to increase the cost of the test ingredient by 1 each time it goes through the cycle. In the control programme, the name of this specific change row must be indicated as MØVE(XCHRØW, 'CHRØW1'). There must be an N value assigned to CHRØW1 in the RØWS section of the data deck.

The maximum value which the ingredient will attain is set by the XPARMAX statement in the control programme. It must be a positive number and contain a decimal point (XPARMAX=10.). The intervals at which the solution is to be printed out may be specified in two ways. The first of these is an XPARDELT statement which indicates specific increments at which the solution is to be printed out. For example, if XPARDELT is equal to 1.0, the output would be printed out at soybean meal values of 0, 0.6, 1.2, and so forth to Baht 6.0. This type of interval specification is best adapted to the other types of parametric operations but can be used in PARAØBJ if desired. The most effective means of interval specifications for PARAØBJ is by use of the XFREQ1=1 statement shown in the control programme. Note that this statement does not contain a decimal. This directs the computer to print out a new solution only when a price level is reached resulting in a new solution. In other words, the output is printed§§out at basic changes. When we use the XFREQ1=1 statement we must also include the move address statement, MVADR (XDOFREQ1, SØL) shown in the control programme. The move address statement moves the address of a control programme statement into a specified storage area, SØL. The statement SØL then calls for the statement to be executed when a demand occurs.

Fig. 15 Control programme for PARAØBJ Cost Ranging of soybean meal in sample carp feed

 PROGRAMTITLE ('EXAMPLE OF A CARP FEED')INITIALZMOVE (XDATA, 'BETAGRO')MOVE (XPBNAME, 'RINA')MOVE (XOBJ, 'COST')MOVE (XRHS, 'RHS1')CONVERT ('SUMMARY')SETUP ('RANGE', 'NUTRIENT', 'BOUND', 'PRODUCT')BCDOUTPICTURETRANCOLTRANROWPRIMALSOLUTIONRANGETITLE ('PARAMETRIC COST RANGING OF SOYMEAL')MOVE (XOBJ, 'COST2')MOVE (XCHROW, 'CHROW1')XPARAM=0XPARMAX=10XFREQ1=1MVADR (XDOFRQ1,SOL)PARAOBJSOL SOLUTIONCONTINUEEXITPEND

Fig. 16 Proof list of job deck for PARAØBJ Cost Ranging of soyabean meal in sample carp feed

 NAME BETAGRO ROWS N COST N COST2 N CHROW1 E WEIGHT G PROTEIN G DE N GE G CALCIUM G PHOS G METH-CYS G LYSINE COLUMNS MAIZE COST 2.25000 COST2 2.25000 MAIZE WEIGHT 1.00000 PROTEIN .09000 MAIZE DE 3.42500 GE 4.22800 MAIZE CALCIUM .00020 PHOS .00250 MAIZE METH-CYS .0350 LYSINE .00250 SOYMEAL CHROW1 1.00000 COST 6.00000 SOYMEAL WEIGHT 1.00000 PROTEIN .44000 SOYMEAL DE 2.62300 GE 4.56800 SOYMEAL CALCIUM .00280 PHOS .00630 SOYMEAL METH-CYS .01260 LYSINE .02620 FISHMEAL COST 8.00000 COST2 8.00000 FISHMEAL WEIGHT 1.00000 PROTEIN .65700 FISHMEAL DE 3.46500 GE 4.62200 FISHMEAL CALCIUM .03760 PHOS .02480 FISHMEAL METH-CYS .02590 LYSINE .05020 COTTSEED COST 4.00000 COST2 4.00000 COTTSEED WEIGHT 1.00000 PROTEIN .40600 COTTSEED DE 2.62300 GE 4.54500 COTTSEED CALCIUM .00200 PHOS .01010 COTTSEED METH-CYS .01260 LYSINE .01560 FEATHER COST 9.00000 COST2 9.00000 FEATHER WEIGHT 1.00000 PROTEIN .85400 FEATHER DE 2.87100 GE 5.12500 FEATHER CALCIUM .00280 PHOS .00670 FEATHER METH-CYS .04320 LYSINE .01630 RICE-BRAN COST 2.00000 COST2 2.00000 RICE-BRAN WEIGHT 1.00000 PROTEIN .12700 RICE-BRAN DE 2.41500 GE 4.23200 RICE-BRAN CALCIUM .00080 PHOS .01460 RICE-BRAN METH-CYS .00420 LYSINE .00570 LEAFMEAL COST 2.50000 COST2 2.50000 LEAFMEAL WEIGHT 1.00000 PROTEIN .15760 LEAFMEAL DE 1.16200 GE 3.50000 LEAFMEAL CALCIUM .01500 PHOS .00640 LEAFMEAL METH-CYS .03700 LYSINE .00600 LIMESTON COST .40000 COST2 .40000 LIMESTON WEIGHT 1.00000 CALCIUM .38000 DICALPHS COST 3.00000 COST2 3.00000 DICALPHS WEIGHT 1.00000 CALCIUM .26000 DICALPHS PHOS .18500 PREMIX COST 10.00000 COST2 10.00000 PREMIX WEIGHT 1.00000 COPRA COST 3.00000 COST2 3.00000 COPRA WEIGHT 1.00000 PROTEIN .21200 COPRA DE 1.0300 GE 4.26800 COPRA CALCIUM .00220 PHOS .00620 COPRA METH-CYS .00530 LYSINE .00540 WHEATBRN COST 2.50000 COST2 2.50000 WHEATBRN WEIGHT 1.00000 PROTEIN .15100 WHEATBRN DE 5.00000 GE 4.42000 WHEATBRN CALCIUM .00110 PHOS .01270 WHEATBRN METH-CYS .00560 LYSINE .00600 BLOODML COST 5.00000 COST2 5.00000 BLOODML WEIGHT 1.00000 PROTEIN .15300 BLOODML DE 3.06900 GE 5.22500 BLOODML CALCIUM .00270 PHOS .00260 BLOODML METH-CYS .02220 LYSINE .05990 DISTRGRNS COST 4.00000 COST2 4.00000 DISTRGRNS WEIGHT 1.00000 PROTEIN .27000 DISTRGRNS DE 2.52200 GE 4.54200 DISTRGRNS CALCIUM .00140 PHOS .00720 DISTRGRNS METH-CYS .00770 LYSINE .00730 BONEMEAL COST 3.00000 COST2 3.00000 BONEMEAL WEIGHT 1.00000 PROTEIN .11200 BONEMEAL CALCIUM .39390 PHOS .12910 RHS RHS1 WEIGHT 100.00000 PROTEIN .50000 RHS1 DE 300.00000 CALCIUM 25.00000 RHS1 PHOS .10000 METH-CYS .75000 RHS1 LYSINE 1.30000 RANGES NUTRIENT CALCIUM 1.00000 PHOS .50000 BOUNDS LO PRODUCT FISHMEAL 8.00000 UP PRODUCT COTTSEED 10.00000 UP PRODUCT FEATHER 10.00000 UP PRODUCT RICEBRAN 20.00000 UP PRODUCT LEAFMEAL 5.00000 FX PRODUCT PREMIX .50000 UP PRODUCT WHEATBRN 15.00000 UP PRODUCT BLOODML 10.00000 UP PRODUCT DISTGRNS 10.00000 ENDATA

The PARAØBJ statement then indicates that this programme is to be called for and the SØL SØLUTION statement calls it out of storage. The SØL statement is punched in columns 6-8, an exception to the column 10 rule used for beginning, the other statements in the control programme. The SØLUTION portion, however, is punched starting in(column 10. We follow this with CØNTINUE, EXIT and PEND.

The computer will first solve the least cost solution without using the test ingredient. It will then initiate the PARAØBJ programme. Since it prints out at each iteration using the XFREQ1=1 demand, one will first get a series of non-optimal solutions, so labeled by the computer. These are to be ignored by the user. An optimal solution will then be reached which provides RØW and CØLUMN values of the solution beginning at a zero cost for the test ingredient. It then selects the upper cost level at which a new solution will be needed and inserts this new cost for the test ingredient, resulting in a new solution. This continues until the maximum value for the test ingredient, specified in XPARMAX, is reached. The user can examine the iteration log, printed with each new output, and gain some information as to why specific changes were made.

It will not be necessary for this example to print out the different diets which result from the PARAØBJ solution for soybean meal. Instead, these will be condensed and the use levels of the ingredient will be examined at different cost values, as shown in Table 5.

Thus, at a cost level of zero, one could theoretically use 49.68 percent soybean meal in the diet and still retain feasibility. This quantity would be used until the price of the ingredient reached a cost of Baht=1.8741/kg, at which the use level would decrease to 38.26 percent. This operation would continue until a price level of Baht=5.1766/kg was reached, at which point the ingredient would completely leave the solution.

These solutions can then be examined with respect to the particular objective of the study. If it were established, for example, that a sufficient quantity of soybean meal was available to provide for a 12 percent use level in the diet, one would require a cost of Baht=3.5428/kg to allow for this use level. A cost of Baht=1.87413/kg or lower will make soybean meal the least expensive energy source as evidenced by the higher than minimum protein levels in the total diet. Other studies may be designed with different goals in mind, and differences in interpretation may be made as adapted to the needs of the researcher.

Table 5 Cost Ranging of Soybean Meal for Carp Feed (PARAØBJ)

 Cost, Baht/kg 0.0000 1.8741 1.9685 2.5532 3.4462 3.5428 4.2060 5.1766 Rows CØST, Baht/100 kg 163.37 184.78 194.68 197.70 263.76 265.50 303.9 320.73 PRØTEIN, kg 30.84 26.60 25.00 25.00 25.00 25.00 25.00 25.00 DE, Meal 300.00 300.00 300.00 300.00 300.00 300.00 300.00 300.00 GE, Meal 439.16 423.97 422.39 429.47 426.00 428.94 429-89 428,02 CALCIUM, kg 0.54 1.50 1.50 0.88 1.48 1.21 1.12 1.31 PHØS, kg 0.70 0.70 0.70 0.70 0.70 0.73 0.77 0.76 METH-CYS, kg 0.97 0.86 0.82 0.82 0.83 0.83 0.84 0.87 LYSINE, kg 1.80 1.52 1.42 1.42 1.55 1.55 1.47 1.41 Diet Composition (%) Columns MAIZE 41.45 50.20 51.17 47.20 48.60 46.95 46.29 47.48 SØYMEAL 49.68 38.26 33.23 32.04 12.87 12.38 3.25 - FISHMEAL 8.00 8.00 8.00 8.00 8.00 8.00 9.00 8.00 CØTTSEED - - - - - - 10.00 10.00 FEATHER - - - - - - - 1.55 RICE BRAN - - 4.08 11.00 17.13 20.00 20.00 20.00 LEAFMEAL - - - - - - - - LIMESTØN - 2.42 2.57 1.26 2.90 2.17 1.96 2.47 DICALPHS 0.37 0.62 0.45 - - - - - PREMIX 0.50 0.50 0.50 0.50 0.50 0.50 0.50 0.50 CØPRA - - - - - - - - WHEATBRN - - - - - - - - BLØØDML - - - - 10.00 10.00 10.00 10.00 DISTGRNS - - - - - - - - BØNEMEAL - - - - - - - -

### 6.5 Multimode Linear Programming

To save time, two or more parametric problems can be handled by setting up a multimode control programme. The problem models may all be of the same parametric type, or they may be any combination of the four different PLP types described earlier. The only requirements for successfully carrying out a multimode operation are that additional data be furnished in the data deck and that such data be compatible and identifiable with statements describing them in the control programme.

A REVISE mode may be included in any multimode operation. In the event a REVISE mode precedes some other mode, or modes, the new data introduced by the REVISE mode-will automatically replace the corresponding pre-existing data. Any reference statements in subsequent modes to the data deck must be identifiable with the newly revised data.

An example of a multimode control programme appears in Figure 17.

Fig. 17 Example of a multimode control programme

 PRØGRAMMETITLE ('EXAMPLE 0F A CATFISH FEED')INITIALZMØVE (XDATA, 'BETAGRØ')MØVE (XPBNAME, 'RITA')MØVE (XØBJ, 'CØST')MØVE (XRHS, 'RHS1')CØNVERT ('SUMMARY')SETUP ('RANGE', 'NUTRIENT', 'BØUND', 'PRØDUCT')PRIMALSØLUTIØNRANGETITLE ('PARARHS' - CHANGING ENERGY REQUIREMENT ØF FEED')MØVE (XCHCØL, 'RHS2')XPARAM=0.XPARMAX=5.XPARDELT=1.PARARHSSØLUTIØNTITLE ('PARACØL - CHANGING ENERGY VALUES OF MAIZE')MØVE (XCØLUMN, 'MAIZE')MØVE (XCHCØL, 'RHS3')XPARAM=0.XPARMAX=5.XPARDELT=1.PRIMALPARACØLSØLUTIØNTITLE('REVISED CATFISH FEED')MØVE(XDATA, 'BETAGRØ2')MØVE(XØLDNAME, 'RITA')MØVE(XPBNAME, 'GINA')REVISE('SUMMARY')SETUP(RANGE', 'NUTRIENT', 'BØUND', 'PRØDUCT')PRIMALSØLUTIØNTITLE ('PARAMETRIC CØST RANGING 0F SØYMEAL')MØVE (XØBJ, 'CØST2')MØVE (XCHRØW, 'CHRØW2')XPARAM=0.XPARMAX=10.XFREQ1=1MVADR (XDØFREQ1, SØL)PARAØBJSØLUTIØNCØNTINUEEXITPEND