
MSLP-PC

LINEAR PROGRAMMING SYSTEM

USER'S GUIDE



Copyright (c) 1984-1996 CompuEd


On behalf of student and faculty 
users, CompuEd wishes to thank 
industry users of MSLP-PC, whose 
support has been instrumental in 
bringing professional quality 
software to the classroom. 


------------------------------------------------------------------

MSLP-PC COPYRIGHT NOTICE

The MSLP-PC Linear Programming System software and manual are 
copyrighted (c) 1985-1996 by CompuEd. All rights reserved 
worldwide. No part of the system or manual may be reproduced, 
transmitted, transcribed, or translated into any language by any 
means except as provided for explicitly in a license agreement.

DISCLAIMER

CompuEd makes no warranties as to the contents of MSLP-PC and 
specifically disclaims any implied warranties or merchantability 
or fitness for any particular purpose.

------------------------------------------------------------------

 PREFACE

The usefulness of linear programming (LP) in marginal analysis has 
steadily gained wider recognition. At the same time, personal 
computers have increased in computational capacity to the point 
that it is practical for an individual or small firm to create and 
run their own LP models, and reap the benefits of their solution 
analysis.

Although MSLP-PC is a friendly linear programming system it 
features the same attention to detail and accuracy as is found in 
commercial systems many times its capacity. Small and large 
industrial users will find the system convenient for problems 
which fit within its size limitations. 

The MSLP-PC system is also designed to act as a stepping stone to 
commercially available programs commonly used for the solution of 
very large-scale LP problems. For instance, like many commercial 
and some academic LP systems, version 2.60 of MSLP-PC creates and 
reads input data files in the well-known MPS format, while, for 
even greater compatibility with other systems and with earlier 
versions of MSLP, version 2.60 still automatically accepts input 
in the SHARE file format common to many commercial systems. 

MSLP-PC is designed for the solution of practical problems, and 
the emphasis is on sensitivity analysis, the main source of 
information for decision making. Yet the simplicity of use 
desirable in the early learning stages of linear programming is 
provided through very user-friendly interactive procedures for 
model creation, execution, browsing of results, and printing 
output.

MSLP-PC is tailored for beginners and advanced users, for 
theoreticians and practitioners, and can be used with any linear 
programming textbook. MSLP-PC's capability to print the matrix 
tableau at each iteration is included as an aid for students in 
mathematically oriented courses, learning the simplex method. On 
the other hand, students and faculty in more practically oriented 
courses, as well as industry users, will appreciate the output 
format of MSLP-PC, and chapter 4 of this manual, which illustrates 
how advanced sensitivity analysis can be performed WITHOUT a 
prerequisite understanding of the simplex method.



TABLE OF CONTENTS
1. GETTING STARTED
1.1 DISKETTE FILES
1.2.1 Hard Disk:
1.2.2 Floppy Diskette:
1.2.3 Customizing MSLP-PC:
1.3 USING PATHNAMES WITH MSDOS
1.4 COMPATIBILITY WITH MAINFRAME MSLP
2. MAKING A RUN
2.1 FULL SCREEN EDITOR
2.1.1 Entering Data
2.1.2 Moving Around The Screen and Scrolling
2.1.3 Inserting and Deleting
2.1.4 Output Options
2.1.5 Saving a Data File
2.1.6 Selecting the Typecase
2.1.7 Quitting without Saving the Data File
2.2 OBTAINING A SOLUTION
2.3 BROWSING THROUGH THE RESULTS ON SCREEN
2.4 OBTAINING A PRINTOUT OF THE RESULTS
2.5 INSTRUCTIONS FOR FIRST TIME USERS
2.6 BROWSING OR PRINTING THE USER'S GUIDE
2.7 CHANGING THE DEFAULT OPTIONS AND DATA PATH
2.7.1 Changing the Data Path
2.7.2 Faster Screen Output
3. OUTPUT
3.1 COMPONENTS OF OUTPUT FILE
3.2 DIAGNOSTIC MESSAGES
4. SAMPLE PROBLEM
4.1 DESCRIPTION OF PROBLEM
4.2 PROBLEM FORMULATION
4.3 SAMPLE PROBLEM RUN
4.4 SAMPLE PROBLEM OUTPUT
4.5 INTERPRETATION OF SAMPLE PROBLEM OUTPUT
4.6 ADVANCED ANALYSIS
5. SYSTEM REQUIREMENTS
5.1 HARDWARE
5.2 MAXIMUM PROBLEM SIZE
6. METHOD
6.1 MAIN PROCEDURE
6.2 PRECISION AND ACCURACY
6.3 PROVISION AGAINST CYCLING
6.4 GENERATION OF SLACK, SURPLUS AND ARTIFICIAL VARIABLES
7. GLOSSARY


1. GETTING STARTED


1.1 DISKETTE FILES

Your MSLP-PC diskette should include the following files:


README.BAT 
README.TXT 
QSTART.TXT 
GUIDE.TXT 
MSLP.EXE 
MSMSG.EXE 
MSEDIT.EXE 
MSLPRUN.EXE 
MSOUTPUT.EXE 
SAMPLE.IN 
MSLP.DRV 


1.2 INSTALLATION

MSLP-PC, Version 2.60, requires minimum 256 K RAM and 2 floppy 
diskette drives or a hard disk on IBM compatibles. If you have 
more than 256K real memory (as opposed to expanded or extended 
memory), MSLP-PC, Version 2.60 will handle linear programming 
models ranging in size up to 200 rows by 400 columns. 

In the following instructions you will be asked to type commands 
at a PC keyboard. These commands are shown between quotes, e.g. 
"format b:". Do not type the quotation marks themselves.

MSLP-PC is not copy-protected, and may therefore be copied to hard 
disk and subsequently used without inserting the original diskette 
in drive A. It is also wise to make a backup copy immediately, and 
to store it in a safe place.

1.2.1 Hard Disk:

The following assumes your hard disk is drive C, and you have at 
least one floppy diskette drive A. If you are installing MSLP-PC 
on another hard disk, say D, substitute D for C in the following 
instructions.

Boot DOS (version 2.00 or later) from hard disk C or from floppy 
diskette drive A.

Make sure the default drive is your hard disk C (if necessary, 
type "c:" and hit return). 

Create a subdirectory MSLP, into which all MSLP files will be 
copied (type "md \mslp" and hit return).

Make the MSLP subdirectory the default directory (type "cd \mslp" 
and hit return).

Copy the file MSLP260.ZIP to the directory C:\MSLP. Use PKUNZIP.EXE 
to extract the MSLP program files (type <path>PKUNZIP MSLP260.ZIP, 
where <path> is the directory containing PKUNZIP.EXE).

MSLP-PC can be executed from the MSLP directory by typing "MSLP" 
and hitting the return key.

1.2.2 Floppy Diskette: 
(you will need two new double sided double density diskettes)

Boot DOS (version 2.00 or later) in drive A.

Prepare a data diskette:

In addition to your MSLP-PC program diskette, you will need a 
formatted data diskette. If you do not have one prepared, place a 
new double sided double density diskette in drive B and type 
"format b:" and hit the return or enter key.

When formatting is complete, remove the diskette from drive B and 
label it as your data diskette.

Make a working MSLP-PC program diskette:

With your DOS diskette still in drive A, insert another blank 
diskette in drive B, again type "format b:" and hit the return or 
enter key.

When formatting is complete, copy the MSLP260.ZIP file to the 
diskette in drive B and use PKUNZIP.EXE to extract the MSLP 
program files (type <path>PKUNZIP B:\MSLP260.ZIP, where <path> is the 
path to PKUNZIP.EXE, e.g. A:\ if PKUNIP.EXE is on drive A).

When all the files have been extracted to the diskette in drive B, 
label that diskette as your working MSLP-PC program diskette. 

To run, place your working MSLP-PC diskette in drive A and the 
formatted data diskette in drive B. Type "MSLP" and hit the return 
key to initiate MSLP-PC.

1.2.3 Customizing MSLP-PC:

If you have a color monitor, or if you wish to speed up the screen 
output, you should execute the CONFIGURE option from the main 
menu, then choose the MONITOR option on the next menu. You can 
then select COLOR or MONOCHROME operation from the subsequent 
menu, and BIOS or DIRECT screen writes from the next menu. As 
shipped, MSLP-PC uses BIOS screen writes to ensure trouble-free 
operation on all "compatibles." BIOS screen writes are slow, 
however, so you should experiment with the DIRECT screen writes 
which will work on all 100% compatibles and most others.



1.3 USING PATHNAMES WITH MSDOS

The current version of MSLP allows the user to keep MSLP data 
files in a separate sub-directory. To make use of this feature, 
the user simply changes the current data directory by accessing 
the CONFIGURE, then DATA PATH commands via the main menu. The new 
data directory path will remain in effect for the duration of the 
MSLP run.

The user may optionally save the data path to disk, so that the 
new directory becomes the default directory and is automatically 
accessed each time MSLP is run. In this case, if the MSLP programs 
are being run from floppy diskette, the user will be required to 
remove any write-protection sticker from the MSLP-PC working 
diskette because MSLP-PC will try to save the new default path to 
the program diskette. Be sure to reinstall the write-protect 
sticker.

Unless you change the default MSLP will read/write data files 
from/to the current default directory. You will find this 
especially convenient if you have a hard disk drive. The advantage 
of this method is that you can then execute MSLP from any of 
several data directories by first typing the DOS command 
"PATH=c:\mslp". To make MSLP-PC assume a different path to your 
data (such as floppy drive B: if you have no hard disk), access 
the CONFIGURE and DATA PATH commands via the main menu. To change 
the data directory back to the current default one, access the 
CONFIGURE and DATA PATH commands again, then simply hit the return 
key when prompted for a drive and directory. The MSLP-PC default 
data directory will again be the current DOS directory on the DOS 
default drive.



1.4 COMPATIBILITY WITH MAINFRAME MSLP

MSLP-PC is designed to be compatible with the well proven MSLP 
mainframe system. In its editing phase, MSLP-PC reads and writes 
on files with extension ".IN". If you have an input file you 
previously used with an early version of MSLP-PC or with mainframe 
MSLP, try renaming it with extension .IN before executing MSLP-PC. 
You should be able to edit it and run it under MSLP-PC. Note that 
you may need to use the CASE option described in chapter 2 to 
switch to mixed case.

The input file required for a computer run of the mainframe 
version of MSLP consists of "control" information and "problem 
data" arranged according to the well known SHARE format. Details 
of this format are published in the MSLP LINEAR PROGRAMMING 
PACKAGE USER'S MANUAL, available from your campus bookstore if the 
mainframe version is supported by your computer centre.

----------------------------------------------------------------

2. MAKING A RUN



2.1 FULL SCREEN EDITOR

In this section, data which would be highlighted on the computer 
screen are surrounded by asterisks, e.g. *EDIT* indicates that the 
word EDIT appears highlighted relative to other data on the 
screen. Also, because certain special characters such as the 
"less-than-or-equal-to" character are displayed on the screen by 
MSLP-PC, but may not be reproducible on your printer, the 
following substitutions are made:

MSLP-PC character Substitute in this text
-----------------------------------------

less-than-or-equal-to <= or LE 
greater-than-or-equal-to >= or GE

2.1.1 Entering Data

Input into the PC version is much easier than into its mainframe 
predecessor. It is handled by a full screen editor with a moving 
cursor field such as that used by popular spreadsheet packages. 
The user is guided by menus at the top of the screen, and 
abbreviated descriptions of special key functions at the bottom of 
the screen. To provide this level of user friendliness yet 
maintain compatibility with the SHARE format, MSLP-PC creates a 
SHARE format input file from the user's screen input. MSLP-PC also 
reads SHARE input files which were previously created for use with 
the mainframe version of MSLP.

In the PC version of MSLP, the user types "MSLP" and hits return 
to initiate the program. Following the logo and a short 
information message, the user is presented with the main menu.

*EDIT* RUN OUTPUT QUICK START USER GUIDE CONFIGURE 
Edit a data file

The spreadsheet-like cursor is initially on the word EDIT. The 
user may hit the return key at this point to enter edit mode, or 
he may select one of the other options by moving the cursor with 
the left or right cursor keys on the keyboard. Alternatively, the 
user may execute a menu command by typing its first letter. For 
instance the CONFIGURE command could be executed at this point by 
simply typing the letter 'c' or 'C'. 

On entering EDIT mode, the user is prompted for an input filename. 
A list of all files with extension .IN on the default data 
directory is presented for the user's convenience.

If the program is being used for the first time, the SAMPLE 
PROBLEM is the default input file, which will be accessed 
automatically, even if it is not resident on the data disk. If the 
program is being used for the first time, and the user selects the 
SAMPLE PROBLEM (by pressing the return key) the file SAMPLE.IN is 
transferred to the data disk from the MSLP-PC program disk or 
directory.

If you access the SAMPLE PROBLEM, the screen would appear as 
follows:

 Enter problem title 
*CUSTOM, SUPER & LUXURY product choice*

profit: 
    +   16.00 CUSTOM      +     14.00 SUPER     +     17.25 LUXURY 
    =   Objective

mach.1: 
    +    1.0 CUSTOM       +      5.0 SUPER      +      1.0  LUXURY     
    <=  35.0

mach.2: 
    +    2.0 CUSTOM       +      4.0 SUPER      +      4.0 LUXURY 
    <=  32.0

mach.3: 
    +    5.0 CUSTOM       +      2.5 LUXURY     <=    40.0

You are being prompted to enter a new title.

 2.1.2 Moving Around The Screen and Scrolling

Try moving the cursor around by using the cursor keys with the 
arrows on the right hand side of the keyboard. If you are working 
with a large data file, you can also use the following keys to 
move around in your data:

 Home	Move to the top row of the current problem (the objective 
      function).

 End	Move to the bottom row of the current problem (the last 
      inequality).

 PgUp	Scroll up one screen.

 PgDn	Scroll down one screen.



2.1.3 Inserting and Deleting

With the cursor on a row name (such as mach.1: in the sample 
problem), try pressing the Ins (insert) key. Notice that the 
skeleton of a new inequality is added (inserted) ahead of the one 
the cursor had been on.

______: <= 0.0

Type a new constraint name, e.g. "sales", and hit the right arrow 
cursor control key. Now, with the cursor on the "<=" sign, hit the 
Ins key again. The new constraint should appear as follows:

sales : 
    +      0.0 ______      <=      0.0

You now have the skeleton for the addition of a coefficient and 
variable name to the constraint. To complete the constraint, 
position the cursor using the cursor keys (arrows), and type in 
the appropriate new symbols or values. Notice that MSLP-PC warns 
you of syntax errors as you type them. The final constraint might 
appear as follows, indicating that you have added a sales 
committment requiring the production of at least five units of the 
luxury model.

sales : 
    +      1.0 LUXURY      >=      5.0

Deletions work in the reverse manner. If you place the cursor on a 
row name and press the Del (delete) key, the entire constraint is 
removed.

If the cursor is placed on any of the three items describing a 
matrix coefficient entry (the sign, the coefficient, or the 
variable name), and the Del key is hit, that matrix coefficient is 
removed from the constraint.

If the cursor is placed on the right-hand-side of the constraint 
and the Del key is hit, the right-hand-side is set to zero (the 
right-hand-side cannot be removed).

2.1.4 Output Options

When you have completed your editing of the data, hit the Esc 
(escape) key to exit from EDIT mode. You will be presented with 
the following menu:

*OPTIONS*   SAVE   CASE   EDIT   QUIT 
Set up run time options

Selecting OPTIONS provides the user the ability to customize 
his/her output. The OPTIONS feature is also useful when one wants 
a printout of only a small portion of the output, especially when 
dealing with relatively large models. The user is presented with 
the default options shown in the following options menu (or the 
options chosen when the data file was last saved).

*MAXIMIZE*   EQLIST ON   FINAL MATRIX   ANALYSE ON 
Maximize the objective function

Here the cursor is on the MAXIMIZE option. Options can be toggled 
by hitting the space bar, allowing the user to choose between 
MAXIMIZE and MINIMIZE, EQuation LIST ON or OFF, sensitivity 
ANALYSIS ON or OFF. 

The FINAL MATRIX option results in the output of the final tableau 
of the matrix. The FINAL MATRIX option is especially useful in 
advanced sensitivity analysis (see section 4.6). This option can 
be toggled five ways, to request INITIAL, FINAL, INITIAL and 
FINAL, ALL, or NO matrix tableaux. 

The ALL MATRICES option will be of interest to users studying the 
simplex method, who may wish to see the complete tableau at every 
iteration. This option should be used sparingly since the output 
of such a run occupies much more disk space than that of a normal 
run. MSLP-PC will not recognize the ALL MATRICES option if the 
number of rows in the problem is greater than 10 or the number of 
explicit variables plus the number of >= type constraints exceeds 
16. In that case, only the initial and final tableaux will be 
output.

2.1.5 Saving a Data File

When the desired options have been selected, the user should 
select the SAVE menu choice by moving the cursor:

OPTIONS   *SAVE*   CASE   EDIT   QUIT 
Save edited input file

The SAVE command lists the names of input files on the current 
directory, and provides the user with an opportunity to enter a 
new name for the file about to be saved:

 Enter file name (no path, no extension). Default is sample.IN

Existing data files:

SAMPLE.IN

If the user does not type a new file name, MSLP-PC uses as its 
default the name of the file last accessed by the user in that 
directory or diskette. If no name has been specified previously, 
the default name is SAMPLE. It is possible for the user to develop 
several versions of a model without leaving MSLP-PC to copy files 
via DOS.

The edited data file is saved, but the problem is not solved. This 
feature is useful in case the model cannot be completed in one 
session. When the file has been saved, the user is returned to the 
main menu.

2.1.6 Selecting the Typecase

OPTIONS   SAVE   *CASE*   EDIT   QUIT 
Choose Standard or Mixed case

The Standard typecase in the current version of MSLP-PC is lower 
case for row names and upper case for variable names. This 
minimizes the probability of an inadvertent use of the same name 
for a row and a variable. Users working with MSLP files created by 
the mainframe program or by earlier versions of MSLP-PC may wish 
to change to mixed case (leaving control to the user).

The EDIT option is provided in case the user changes his mind and 
wishes to return to further editing).

OPTIONS   SAVE   CASE   *EDIT*   QUIT 
Return to edit for further changes

2.1.7 Quitting without Saving the Data File

To abort all the changes you have made, select QUIT from the menu. 
Since you will lose any work you have done, MSLP-PC will prompt 
you to confirm your request. This is the only way the user can 
exit from edit mode without saving the current data file.

OPTIONS   SAVE   CASE   EDIT   *QUIT* 
Exit without saving file



2.2 OBTAINING A SOLUTION

To solve the problem, the RUN option on the main menu must be 
requested.

EDIT   *RUN*   OUTPUT   QUICK START   USER GUIDE   CONFIGURE 
Process an input file

Hitting the RETURN key at this point calls for the solution of the 
LP model. MSLP-PC will use the numeric coprocessor chip if it is 
installed in your computer.

Messages are displayed on the screen showing progress of the 
calculations. The screen layout which results from running the 
sample problem is as follows:

           PHASE: II

           PROCESS: Analysing

           ITERATION: 3

           OBJECTIVE FUNCTION: 184.000

           LAST MESSAGE: SOLUTION OPTIMAL

           End of process Strike any key..

The last message "SOLUTION OPTIMAL" indicates that the program 
successfully solved the problem. The sequence of messages you 
usually hope for is "SOLUTION FEASIBLE" followed by "SOLUTION 
OPTIMAL." These messages appear in quick succession when the 
problem being solved is small. Large problems can take a minute or 
more to arrive at an optimum solution. Progress can then be 
visually monitored since the screen is updated at every iteration.

The following screen indicates that there is no solution possible 
which satisfies all the constraints imposed by the user.

           PHASE: I

           PROCESS: Removing artificials

           ITERATION: 1

           NO. OF ARTIFICIALS: 1

           LAST MESSAGE: SOLUTION INFEASIBLE

           End of process Strike any key..

The "SOLUTION INFEASIBLE" message occurs if, in phase I, the 
program was unsuccessful in removing all artificial variables from 
the basis, indicating that one or more constraints remain 
violated. The screen above indicates that there is still one 
artificial variable remaining in the basis. Likely there is an 
error in the data. Return to EDIT mode and check your formulation 
of the model against the real problem data.



2.3 BROWSING THROUGH THE RESULTS ON SCREEN

On completion of the calculation phase, the user is returned once 
again to the main menu and, by selecting the OUTPUT option, can 
print the results or view them on the screen.

EDIT   RUN   *OUTPUT*   QUICK START   USER GUIDE   CONFIGURE 
View or print an output file

Selecting OUTPUT presents the user with the menu

*SCREEN*   PRINTER 
Browse through file on screen

In SCREEN mode, the user can browse through an output file, 
viewing it as it appears on disk ready to be printed. The 
operative keys and their functions in SCREEN mode are described 
below.

              Key      Function
              ---      --------

              PgDn     Scroll the screen down

              PgUp     Scroll the screen up

              Home     Top of file

              End      End of file

              Cursor   To scroll the screen up one line at a time,
              arrow    use the Down arrow to move the cursor to
              keys     the bottom of the screen, then press the 
                       Down arrow key once to scroll the screen up 
                       one line. Use the Up arrow in a similar 
                       fashion to scroll the screen down one  line 
                       at a time.



2.4 OBTAINING A PRINTOUT OF THE RESULTS

By choosing the PRINTER option of the OUTPUT menu, the user can 
request a hard copy of the file on the printer.

SCREEN   *PRINTER* 
Print hard copy of file

The PRINTER option currently supports printers such as the IBM and 
Epson dot-matrix printers which recognize Epson codes and Hewlett-
Packard Laserjet printers. The user is provided the option to 
request that the program not use Epson codes. In that case the 
program will count lines, for instance, instead of using the form 
feed code, to skip to the top of a new page. If you are using 
another printer, or if the print function does not work for you, 
remember that the output file (same name as the input file, but 
with extension .OUT) can also be manipulated by any text editor or 
word processor.



2.5 INSTRUCTIONS FOR FIRST TIME USERS

First time users can obtain easy installation instructions by 
accessing the QUICK START option on the main menu. They will be 
presented with a choice of viewing the instructions on screen or 
printing a hard copy, again via a SCREEN or PRINTER menu choice, 
as in OUTPUT:

EDIT   RUN   OUTPUT   *QUICK START*   USER GUIDE   CONFIGURE 
View or print information for first time users



2.6 BROWSING OR PRINTING THE USER'S GUIDE

The user may find it convenient to print the User's Guide, which 
is quite concise. However the Guide may be accessed at any time 
via the main menu and, through the SCREEN choice of the following 
menu, can be browsed through on screen.

EDIT   RUN   OUTPUT   QUICK START   *USER GUIDE*   CONFIGURE 
View or print MSLP-PC User's Guide


2.7 CHANGING THE DEFAULT OPTIONS AND DATA PATH

To change the data path or the screen handling method used by 
MSLP-PC, execute the CONFIGURE command from the main menu:

EDIT   RUN   OUTPUT   QUICK START   USER GUIDE   *CONFIGURE* 
Change default options and data path

You will then be given the choice of changing the data path or the 
monitor (screen) options.


2.7.1 Changing the Data Path

Change the current data directory by accessing the DATA PATH 
command from the CONFIGURE menu.

*DATA PATH*   MONITOR   SAVE 
Change the default data directory

You will then be prompted to enter a new path:

 Enter new data directory or disk drive [d:][path]

Current directory is: Current working directory on b:

If you simply hit the return key, the current directory on the 
current drive will become the default MSLP-PC data path, and the 
following message will be displayed:

Directory changed to: Current working directory on default drive 
Strike any key..


2.7.2 Faster Screen Output

Because some personal computers which claim to be compatible with 
the IBM family are not 100% compatible, MSLP-PC's default method 
of screen handling uses the BIOS (basic input/output system) 
routines, thus guaranteeing that virtually all IBM "compatibles" 
can run MSLP-PC.

These BIOS routines used to be notoriously slow, however, so you 
should try to use the direct screen writing option provided. It 
will work in most cases.

From the CONFIGURE command choose the MONITOR command on the next 
menu:

DATA PATH   *MONITOR*   SAVE 
Specify monitor type (color or monochrome)

You will be presented with a choice between MONOCHROME and COLOR 
mode, then between BIOS and DIRECT screen writes. Choose the 
DIRECT screen writes. If that does not work, you will still be 
able to see the basic menus on the screen so that you can change 
back to BIOS mode.

When you have made all your changes, you may save them to disk so 
that they become the default options in future runs:

DATA PATH   MONITOR   *SAVE* 
Write changes to disk

At this point, if you are running MSLP-PC from a floppy diskette, 
you will have to remove any write-protect sticker from the program 
diskette, since the options are saved to the program diskette.

If the user does not save the options to disk, they will remain in 
effect only for the duration of the current MSLP-PC run.

------------------------------------------------------------------


3. OUTPUT

3.1 COMPONENTS OF OUTPUT FILE

Output is in seven parts:

Part 1.	Error messages:
If there are errors in the problem data, various error 
messages may appear. An explanation of these is included 
in Section 3.2 DIAGNOSTIC MESSAGES.

Part 2. 	Equation list (optional):
A list of the equations, beginning with the objective 
function, will be printed if the EQLIST option was 
specified in the EDIT mode. Problem statistics are 
included with the equation list, indicating the number 
of rows in the problem, the number of columns, the 
number of explicit variables (variable names specified 
by the user), slack, surplus and artificial variables, 
the number of non-zero matrix elements, and non-zero 
right-hand-sides.

Part 3. 	Initial matrix (optional):
If the initial tableau was requested during the EDIT 
mode, or the ALL MATRICES option was specified, the 
initial tableau is printed in matrix form.

Part 4. 	Log of iterations:
The log indicates the variables entering and leaving the 
basis at each iteration and either the number of 
artificial variables remaining in the basis (in phase I) 
or the current value of the objective function (in phase 
II). If the ALL MATRICES option was specified in the 
input, and the problem is small enough (the number of 
equations in the problem, excluding the objective 
function, does not exceed 10, and the number of explicit 
variables plus the number of >= type rows does not 
exceed 16), the entire tableau will be printed at each 
iteration, otherwise only the initial and final tableaux 
are printed. When all artificial variables have been 
driven out of the basis, the message "SOLUTION FEASIBLE" 
is printed. When an optimum solution has been reached, 
the message "SOLUTION OPTIMAL" is printed. If it is not 
possible to drive all artificial variables from the 
basis (usually due to data or problem formulation 
errors), the message "SOLUTION INFEASIBLE" is printed.

NOTE: 
A user's row name which appears in the log of 
iterations, basic solution, or matrix tableau indicates 
a slack or surplus variable generated by the program. In 
the PC version of MSLP, row names are forced to lower 
case while variable names are forced to upper case, to 
assist the user in distinguishing between them. The 
letter "A" appearing as the seventh character of a name 
indicates an artificial variable generated by the 
program (see chapter 6).

Part 5. 	Final matrix (optional):
If the final tableau was requested during the EDIT mode, 
or the ALL MATRICES option was specified, the final 
tableau is printed in matrix form.

Part 6. 	Basic solution:
This section includes the current value of the objective 
function, a list of all the variables in the basis and, 
for each variable, the quantity (activity) of the 
variable and the unit contribution (value of that 
variable in the original objective function). Slack 
quantities associated with non-constraining rows 
together with the original right-hand-side of the row, 
are listed separately to avoid confusion between slack 
and explicit variables (note that an artificial variable 
will only appear in the basic solution if the problem is 
infeasible--see also the note under part 4, above).

Part 7. 	Sensitivity analysis:
The following sensitivity analysis results are printed 
if a feasible solution has been found:

(1) Effects of deviating from the optimum solution: 
Together with the basic solution, the amount by which 
the objective function would change per unit decrease or 
increase in the quantity of each basic variable and in 
the slack quantity of each non-constraining row. In 
addition, cost/contribution ranging (the amount by which 
the costs or contributions of variables can change 
without altering the optimal mix of variables) is 
provided. To assist the user in explaining the results, 
MSLP-PC also provides the name of the entering variable 
associated with the basis quantity changes. For an 
example of how to use this information, see notes 17 and 
19 in the SAMPLE problem, described in chapter 4.

(2) Reduced cost analysis: A list of each non-basic 
variable and the amount by which the objective function 
would change, provided no other data were changed, per 
unit of that variable entering the basis.

(3) Shadow price analysis: A list of each row 
constraining the solution, and the amount by which the 
objective function would change per unit decrease or 
increase in the right-hand-side of that row.

Range of validity: In all sensitivity analysis output, 
results include figures showing the range of validity of 
the analysis.



3.2 DIAGNOSTIC MESSAGES

Most of the following error messages will never occur if you are 
using the PC version of MSLP. They are included here for users 
converting from mainframe MSLP.

If an error is encountered during the reading of a problem data 
file, the remaining data records are read without being processed.

Message                  Possible cause


"TITLE RECORD ERROR"     The problem title record is not  blank 
                         in column 1, or the records are not in 
                         the correct sequence.  This error 
                         message is unlikely to occur in the PC 
                         version unless a mainframe file is 
                         being processed.

"TOO MANY ROWS" OR       The problem does not fit (see chapter
"TOO MANY COLUMNS"       5, SYSTEM REQUIREMENTS).

"ROW ID HEADER           The header record for row names is
   INCORRECT"            incorrectly entered, or the records 
                         are not in the correct sequence.  
                         Unlikely to occur in PC version.

"NO ROW NAME FOR         A matrix element or a right-hand-side
   XXXXXX"               has been specified for a row name not 
                         listed under the row name section of 
                         data. Unlikely to occur in PC version.

"INVALID RHS RECORD"     A record following the RHS header 
                         record contains invalid information.  
                         Unlikely to occur in PC version.

"VARIABLE XXXXXX         Due to problem formulation or data
   UNBOUNDED"            errors, there is no limit on the 
                         quantity of this variable in the 
                         solution.

"REDUNDANT ROW XXXXXX    In an attempt to solve a problem in
   ELIMINATED"           which the constraints have been over-
                         specified, a row has been determined 
                         to be dependent and redundant and has 
                         been eliminated. 

"SOLUTION INFEASIBLE"    Due to problem formulation or data 
                         errors, it is not possible to drive 
                         all artificial variables from the 
                         basis, i.e. there is no feasible 
                         region.

"SOLUTION FEASIBLE"      This message is generated when all 
                         artificial variables have been driven 
                         out of the basis. At this stage the 
                         solution is within the constraints 
                         but not necessarily optimal.

"SOLUTION OPTIMAL"       This message indicates that the 
                         iteration which has just been 
                         completed, resulted in an optimum 
                         solution.



------------------------------------------------------------------



4. SAMPLE PROBLEM

4.1 DESCRIPTION OF PROBLEM

To illustrate the use of the program, the solution of a simple 
problem follows.

A company uses three machines, mach.1, mach.2, and mach.3 to make 
its CUSTOM product. The company is considering production of 
products SUPER and LUXURY. The number of hours required for each 
product on each of the machines, the revenue, cost and estimated 
unit contribution of each product to profit are:

                                     CUSTOM    SUPER   LUXURY
                                     ------    -----   ------
    Machine time required
    (hours per unit)

             Machine 1                  1        5        1

             Machine 2                  2        4        4

             Machine 3                  5        0      2.5

    Revenue per unit               $69.00   $68.00   $70.00

    Variable cost per unit         $53.00   $54.00   $52.75
      (including raw materials
      and labour)

    Contribution to profit         $16.00   $14.00   $17.25

There are 35 hours of operating time available on machine 1, 32 
hours on machine 2, and 40 hours on machine 3.

Thus one unit of product SUPER, for instance, requires 5 hours on 
machine 1 and 4 hours on machine 2, is not processed through 
machine 3, and contributes $14.00 to profit.



4.2 PROBLEM FORMULATION

To find the mix of products which maximizes the total contribution 
to profit, the problem is first stated in linear programming 
terms:

Maximize the objective function


         16CUSTOM + 14SUPER + 17.25LUXURY            (row profit)

Subject to the constraints

           CUSTOM +  5SUPER +     LUXURY <= 35       (row mach.1)
          2CUSTOM +  4SUPER +    4LUXURY <= 32       (row mach.2)
          5CUSTOM           +  2.5LUXURY <= 40       (row mach.3)



4.3 SAMPLE PROBLEM RUN

The user types MSLP to initiate the program and hits the return 
key when the cursor appears on the word EDIT in the screen menu. 
For convenience, a completed input file for the SAMPLE problem is 
provided on the program diskette. If the program is being used for 
the first time, the SAMPLE problem is the default input file, 
which will be accessed automatically. The user may run the SAMPLE 
problem as is, or input the problem from scratch. For instructions 
on how to input the problem from scratch, see the section entitled 
"INPUT".

On completion of input, the screen should appear as follows:

Enter rhs value

                   CUSTOM, SUPER & LUXURY product choice

profit:    +    16.00 CUSTOM  +    14.00 SUPER   +    17.25 LUXURY
           =   Objective

mach.1:    +      1.0 CUSTOM  +      5.0 SUPER   +      1.0 LUXURY
           <=    35.0

mach.2:    +      2.0 CUSTOM  +      4.0 SUPER   +      4.0 LUXURY
           <=    32.0

mach.3:    +      5.0 CUSTOM  +      2.5 LUXURY  <=   *40.0*

This screen is what the user would see if he had just entered the 
right-hand-side 40.0 of the inequality "mach.3". The message at 
the top of the screen "Enter rhs value" is prompting the user for 
another entry at the cursor location. At the bottom of the screen 
(not shown here) a line appears indicating which keys control the 
cursor, and the effect of other special keys. If the user is 
satisfied with the input, the Escape key should be pressed to 
escape from the editing mode. The following menu will appear at 
the top of the screen.

*OPTIONS*   SAVE   CASE   EDIT   QUIT 
Set up run time options

Selecting OPTIONS provides the user the ability to customize 
his/her output. The OPTIONS feature is also useful when one wants 
a printout of only a small portion of the output, especially when 
dealing with relatively large models. The user is presented with 
the default options shown in the following options menu (or the 
options chosen when the data file was last saved).

*MAXIMIZE*   EQLIST ON   FINAL MATRIX   ANALYSE ON 
Maximize the objective function

Options can be toggled by hitting the space bar, allowing the user 
to choose between MAXIMIZE and MINIMIZE, EQuation LIST ON or OFF, 
sensitivity ANALYSIS ON or OFF, and various combinations of 
INITIAL, FINAL and ALL or NO tableaux or MATRICES, depending on 
the cursor position. 

We will assume here that the user is satisfied with the options 
provided in the sample problem, so the user can hit the return 
key, which brings back the previous menu.

Next, the user selects the SAVE menu choice by moving the cursor:

OPTIONS   *SAVE*   CASE   EDIT   QUIT 
Save edited input file

The SAVE command lists the names of input files on the current 
directory, and provides the user with an opportunity to enter a 
new name for the file about to be saved:

 Enter file name (no path, no extension). Default is sample.IN

Existing data files:

SAMPLE.IN

At this point, the user may accept the default name SAMPLE, or 
type in a new name, say TEST, in which case the data file is saved 
under the name TEST.IN, and the original file SAMPLE.IN remains 
intact. The edited data file has now been saved, but the problem 
has not yet been solved.

The user is returned to the main menu:

*EDIT*   RUN   OUTPUT   QUICK START   USER GUIDE   CONFIGURE 
Edit a data file

Moving the cursor one position to the right results in:

EDIT   *RUN*   OUTPUT   QUICK START   USER GUIDE   CONFIGURE 
Process an input file

Hitting the RETURN key at this point calls for the solution of the 
LP model.

On completion of the calculation phase, the user is returned once 
again to the main menu and, by selecting the OUTPUT option,

EDIT   RUN   *OUTPUT*   QUICK START   USER GUIDE   CONFIGURE 
View or print an output file

can browse through the results on the screen,

*SCREEN*   PRINTER 
Browse through file on screen

or print a hard copy of the results:

SCREEN   *PRINTER* 
Print hard copy of file

The PRINTER option currently supports printers such as the IBM and 
Epson dot-matrix printers which recognize Epson codes and Hewlett-
Packard Laserjet printers. The user is provided the option to 
request that the program not use Epson codes. In that case the 
program will count lines, for instance, instead of using the form 
feed code, to skip to the top of a new page. If you are using 
another printer, or if the print function does not work for you, 
remember that the output file (same name as the input file, but 
with extension .OUT) can also be manipulated by any text editor or 
word processor.

Descriptions of the QUICK START, USERGUIDE, and CONFIGURE options 
are given in sections 2.5, 2.6, and 2.7, respectively. 


4.4 SAMPLE PROBLEM OUTPUT

In the following computer output, {A} indicates that note A, in 
section 4.5 or 4.6, below, explains the item at which it appears.

`              MSLP-PC LINEAR PROGRAMMING SYSTEM

`       IBM COMPATIBLE VERSION 2.60: 200 ROWS, 400 COLS

`

`          CUSTOM, SUPER & LUXURY product choice   

`

`          PROBLEM STATISTICS

`

`   4 ROWS   6 COLUMNS
` VARIABLES:   3 EXPLICIT  3 SLACK OR SURPLUS  0 ARTIFICIAL
`    11 NON-ZERO MATRIX ELEMENTS  3 NON-ZERO RHS.
`
`          EQUATION LIST
`
` profit  OBJECTIVE FUNCTION
`
` +    16.000000(CUSTOM)  +    14.000000(SUPER )  +    17.250000(LUXURY) 
`
`
` mach.1  RHS:     35.000000      ROW TYPE: LE
`
` +     1.000000(CUSTOM)  +     5.000000(SUPER )  +     1.000000(LUXURY) 
`
`
` mach.2  RHS:     32.000000      ROW TYPE: LE
`
` +     2.000000(CUSTOM)  +     4.000000(SUPER )  +     4.000000(LUXURY) 
`
`
` mach.3  RHS:     40.000000      ROW TYPE: LE
`
` +     5.000000(CUSTOM)  +     2.500000(LUXURY) 
`-----------------------------------------------------------------------
`              MSLP-PC LINEAR PROGRAMMING SYSTEM
`       IBM COMPATIBLE VERSION 2.60: 200 ROWS, 400 COLS
`
`          CUSTOM, SUPER & LUXURY product choice   
`
`          LOG OF ITERATIONS
`
`  SOLUTION FEASIBLE
`
`  ITERATION    VAR IN      VAR OUT          OBJ FN
`        1       LUXURY      mach.2         138.000
`        2       CUSTOM      mach.3         177.333
`        3       SUPER       LUXURY         184.000
`
`  SOLUTION OPTIMAL
`
`
`
`---------------------------------------------------------------------------



`                  FINAL TABLEAU
`
`             NON BASIS VAR--->    mach.3     LUXURY     mach.2 
`             REDUCED COSTS--->      1.800      1.250      3.500
`profit       OBJECTIVE------->      0.000     17.250      0.000
`
`BAS. VAR    CONTR.    QUANTITY
`mach.1       0.000       7.000      0.300{R}  -3.250{T}  -1.250{W}
`SUPER       14.000       4.000     -0.100{R}   0.750{T}   0.250{W}
`CUSTOM      16.000       8.000      0.200{R}   0.500{T}   0.000{W}
`---------------------------------------------------------------------------
`              MSLP-PC LINEAR PROGRAMMING SYSTEM
`       IBM COMPATIBLE VERSION 2.60: 200 ROWS, 400 COLS
`
`          CUSTOM, SUPER & LUXURY product choice   
`
`          BASIC SOLUTION
`
`
`          OBJ. FUNCTION, profit =        184.000
`
`|-EXPLICIT VARIABLES--| |-----EFFECTS OF BASIS QTY OR CONTR. CHANGES------|
`
`BASIC     BASIS QTY=q/   OBJ. CHANGE      VALID UNTIL     CONTR.   ENTER-
`VAR       UNIT CONTR=c   PER UNIT QTY     QTY REACHES     RANGE    ING VAR
`                          INCR=i/DECR=d
`
` SUPER      4.00000=q{A}  -18.00000=i{D}  6.33333{F}  32.00000{E} mach.3{Q}
`           14.00000=c      -1.66667=d{G}  0.00000{I}  12.33333{H} LUXURY{S}
`
` CUSTOM     8.00000=q{B} not feasible=i{J} 8.00000   + infinity{K} *none*
`             16.00000=c      -2.50000=d    5.33333    13.50000     LUXURY
`
`
`|-NON-CONSTRAINING ROWS--||-EFFECTS OF SLACK/SURPLUS QTY CHANGES-|
`
`ROW          SLACK OR         OBJ. CHANGE     VALID UNTIL  ENTER-
`NAME        SURPLUS QTY=s/    PER UNIT QTY     s REACHES   ING VAR
`            CURRENT RHS=r     INCR=i/DECR=d
`
` mach.1         7.00000=s{C}     -0.38462=i{L}   24.33333{L} LUXURY{L}
`               35.00000=r        -6.00000=d{L}    0.00000{L} mach.3{L}
`
`---------------------------------------------------------------------------
`
`              MSLP-PC LINEAR PROGRAMMING SYSTEM
`       IBM COMPATIBLE VERSION 2.60: 200 ROWS, 400 COLS
`
`          CUSTOM, SUPER & LUXURY product choice   
`
`   |----------------REDUCED COST ANALYSIS-----------------|
`
`   NON-BASIS    UNIT CONTR.      OBJ. CHANGE    VALID UNTIL
`   VARIABLE                       PER UNIT      QTY REACHES
`                                 INTRODUCED
`
`     LUXURY        17.25000        -1.25000{M,U}    5.33333{N,U}
`
`
`   |----------------SHADOW PRICE ANALYSIS-----------------|
`
`   CONSTRAIN-      CURRENT      OBJ. CHANGE     VALID UNTIL
`   ING ROW           RHS        PER UNIT RHS    RHS REACHES
`                                INCR=i/DECR=d
`
`     mach.3        40.00000         1.80000=i      80.00000
`                                   -1.80000=d      16.66667
`
`     mach.2        32.00000         3.50000=i{O,V} 37.60000{P,V}
`                                   -3.50000=d      16.00000



4.5 INTERPRETATION OF SAMPLE PROBLEM OUTPUT

The following explanations refer to annotated results in the 
sample problem output shown above.

 {A} {B} {C} The basic solution (in this case also the optimum 
solution as indicated by the message "SOLUTION OPTIMAL" following 
the log of iterations) consists of 4 units of product SUPER, 8 
units of product CUSTOM, and 7 hours of slack time on machine 1. 
Note that the "14.00000=c" below item (A) is the $14.00 
contribution to profit, from the objective function, while the 
"35.00000=r" below item (C) is the original right-hand-side of the 
mach.1 constraint.

 {D} Increasing (indicated by the "=i") the quantity of SUPER by 
one unit would result in an $18.00 reduction in the objective 
function. An alternative interpretation of this number is that it 
is the amount by which the unit contribution would have to be 
increased (or cost decreased) to make it profitable to increase 
the level of production of SUPER, provided no other data are 
changed (see also {E}, {F}, {Q} and {R}, below). 

 {E} $32.00 ($14.00 current unit contribution of SUPER plus the 
$18.00 discussed in {D}, above) is the upper limit of the range 
within which the unit contribution of SUPER may vary without 
affecting the optimality of the current solution, provided no 
other data are changed. If the unit contribution of SUPER were to 
rise above $32.00, it would be profitable to increase its 
production quantity to at least 6.33333 units (see also {F}, 
below). This interpretation is referred to as COST or CONTRIBUTION 
RANGING. For the lower limit of the "contribution range," which is 
$12.33, see {H}, below.

 {F} The $18.00 reduction (see {D}, above) in the objective 
function per unit increase in the quantity of product SUPER 
remains constant for an increase of 2-1/3 units, or up to a 
quantity of 6-1/3 units of SUPER, assuming no other data are 
changed. Further increases in production of SUPER may not be 
possible without violating a constraint of the model. If feasible, 
further increases will reduce the objective function by at least 
$18.00 per unit increase. Alternatively, referring to the cost 
ranging interpretation in {E}, above, if the unit contribution of 
SUPER were increased by more than $18.00 to a contribution greater 
than $32.00, it would be profitable to increase production of 
SUPER to at least 6-1/3 units.

 {G} Decreasing (indicated by the "=d") the quantity of product 
SUPER from the optimum quantity would cost $1.67 per unit 
reduction. An alternative interpretation of this number is that 
the unit contribution of product SUPER would have to decrease by 
$1.67 (from its current level of $14.00 to $12.33) before it 
became profitable to reduce the level of production of SUPER (see 
also {H}, {I}, {S} and {T}, below).

 {H} $12.33 ($14.00 current unit contribution of SUPER less the 
$1.67 discussed in {G}, above) is the lower limit of the range 
within which the unit contribution of SUPER may vary without 
affecting the optimality of the current solution, provided no 
other data are changed. If the unit contribution of SUPER were to 
drop below $12.33, it would be profitable to decrease its 
production quantity to zero (see {I}, below). This interpretation 
is referred to as COST or CONTRIBUTION RANGING. For the upper 
limit of the "contribution range," which is $32.00, see {E}, 
above.

 {I} The $1.67 reduction (see {G}, above) in the objective 
function per unit decrease in the quantity of product SUPER 
remains constant for a decrease of 9 units, all the way down to 
zero quantity of SUPER, assuming no other data are changed. 
Alternatively, referring to the contribution ranging in {H}, 
above, if the unit contribution of SUPER were decreased by more 
than $1.67 to a contribution less than $12.33, it would be 
profitable to decrease production of SUPER to zero units.

 {J} The message "not feasible=i" indicates that the objective 
function change per unit increase in CUSTOM is not applicable 
since the quantity of CUSTOM cannot be increased without violating 
one of the constraints of the model (see also {K}, below).

 {K} The message "+ infinity" indicates that the unit contribution 
of CUSTOM can increase infinitely without affecting the optimality 
of the current solution. This is because it is not possible to 
increase the quantity of CUSTOM without violating a constraint of 
the model.

 {L} Note that the basic solution quantities printed under "Non- 
constraining Rows" are slack or surplus quantities and these 
sensitivity analysis figures are related to decrease or increase 
in the slack time, as opposed to production time, on machine 1 
(see also {C} above).

 {M} {N} Although one might expect the LUXURY model to be worth 
producing because it has the highest revenue per unit, the lowest 
cost, the highest unit contribution to profit, and uses the least 
machine time, the -1.25 labeled with the {M} indicates that the 
objective function would decrease by $1.25 per unit of LUXURY 
introduced, up to a total of $6.67 for 5-1/3 units. Introduction 
of further units may be more expensive per unit (certainly not 
cheaper), or may not be possible without violating the constraints 
of the model. In the cost/contribution ranging interpretation, the 
unit contribution of LUXURY could increase by up to $1.25 without 
causing a change in the optimal product mix. If the unit 
contribution of LUXURY were increased by more than $1.25, it would 
be profitable to introduce at least 5-1/3 units of LUXURY into the 
product mix, assuming no other data were changed. For further 
details, see {U}, below.

 {O} {P} An increase in the right-hand-side of row mach.2 would 
increase the objective function by $3.50 for each unit (hour) from 
32 to 37.6 hours, assuming labour costs for the additional hours 
are the same as for the first 32. It is important, here, to keep 
track of the fact that labour costs were included as a variable 
cost in the objective function (by deducting labour cost from 
revenue). This implies that the firm would gain $3.50 from an 
extra hour of time on machine 2 after paying for labour at the 
same rate as for the first 32 hours. If the labour had not been 
considered in the objective function (implying that it was a fixed 
or sunk cost), one would conclude that the firm would have to pay 
the additional labour cost out of the $3.50 gained from the extra 
hour of time. For further details, see {V}, below. 



4.6 ADVANCED ANALYSIS

To obtain action on the results of a LP model, it is often 
necessary to back up figures with detailed explanations expressed 
in the language of the end user. Even if the end user is familiar 
with LP models and jargon, interpreting the results into real 
terms will uncover many slips and errors which would otherwise go 
undetected. Such further analysis often requires a great deal of 
effort, but it is not difficult, and it usually leads to 
successful implementation of recommendations arising from the 
analysis. The following detailed analyses support the relatively 
simple interpretations given in notes {A} to {P}, above. They will 
require an analysis of the final matrix tableau resulting from the 
LP run.

It is often assumed that in order to analyse the final tableau it 
is necessary to understand the simplex method. On the contrary, 
all that is necessary is an understanding of a fundamental and 
very simple concept of linear algebra. To illustrate, consider the 
equation below:

 x + 2y = 6.

We have here one equation with two unknowns (LP involves the 
solution of a system of simultaneous equations with more unknowns 
than equations).

One possible solution to this equation is x = 6, y = 0.

Now consider what happens to x if we introduce one unit of y (i.e. 
we allow y to take on the value 1). x would have to be reduced by 
2 in order to keep the equation balanced. Thus the +2 coefficient 
of y in the equation implies a reduction in x of 2 units.

Similarly, in the equation

 x - 2y = 6

with x = 6, y = 0, the coefficient -2 of y implies an increase in 
x of 2 units for every unit of y introduced.

But each row of the final tableau represents an equation whose 
right-hand-side is the quantity of a basic variable (represented 
by x in the simple example above). Also, each column of the 
tableau represents a non-basic variable such as y in the simple 
example above. Therefore we should be able to apply this simple 
concept in analysing the final tableau. Note that in the tableau, 
the appearance of a row name, usually in lower case in MSLP-PC, 
should be interpreted as the slack or surplus variable associated 
with that constraint (the row name with an appended "A" indicates 
an artificial variable).

 {Q} Refer again to {D}, {E} and {F}, above. In practice, 
explaining that $18.00 will be lost if production of SUPER is 
increased beyond 4 units may not be sufficient to obtain action. 
To assist us in finding further explanation, the variable name 
"mach.3" indicates that the effects described in notes {D}, {E} 
and {F} are associated with variable "mach.3" entering the 
solution. Examine the column headed mach.3 in the final tableau 
(labeled {R}). Using our simple method, we interpret the -0.1 
opposite the variable SUPER to mean that if we introduce one unit 
of mach.3 (a slack hour) into the solution, SUPER would be 
increased by 0.1 units. Similarly, we note that CUSTOM would be 
decreased by 0.2 units and, less important, mach.1 slack time 
would be decreased by 0.3 hours. To increase SUPER by a whole 
unit, we would have to introduce 10 units of mach.3 slack, and 
CUSTOM would have to be decreased by 2 units. Thus, indirectly via 
entering variable mach.3, we have obtained the explanation that 
the quantity of CUSTOM must be reduced by two units to make room 
for the extra unit production of SUPER. The objective function 
would therefore change as follows:

 1 extra unit of SUPER @ $14.00 ........... + $14.00 
2 less units of CUSTOM @ $16.00 ........... - $32.00 
                                            -------- 
                                            - $18.00

Suppose now that still further explanation is necessary, i.e. why 
does the increase of one unit of SUPER require a decrease of two 
units of CUSTOM? To answer this we must do a little sleuthing, 
making use of the fact that the LP would only recommend such an 
unprofitable exchange if it were required due to limited 
availability of scarce resources. The scarce resources in this 
problem, the times on machines 2 and 3, can be identified by their 
appearance in the SHADOW PRICE ANALYSIS. Since, while making this 
exchange, we are introducing slack time on machine 3, the only 
remaining limit on production will be due to the scarcity of time 
on machine 2. We easily verify this by examining the original data 
where we find that each unit of SUPER requires 4 hours on machine 
2, whereas a unit of CUSTOM requires only 2 hours on that machine.

 {R} See {Q}, above.

 {S} To assist us in deriving supporting explanations for notes 
{G}, {H} and {I}, above, the information that the entering 
variable is "LUXURY" steers us to the LUXURY column in the final 
tableau (labelled {T}). The +0.75 coefficient opposite SUPER, and 
the +0.5 coefficient opposite CUSTOM indicate that one unit of 
LUXURY entering the solution would require us to reduce SUPER and 
CUSTOM by 0.75 and 0.5 units respectively. To reduce SUPER by one 
whole unit instead of 0.75, we have to introduce 1-1/3 units of 
LUXURY. Thus the cheapest way to reduce the quantity of SUPER by 
one unit without violating the constraints imposed by the 
available machine time is to produce 1-1/3 units of LUXURY and 
reduce the production of CUSTOM by 2/3 unit. The objective 
function change is then:

 1-1/3 units of LUXURY @ $17.25 ............ + $23.00
2/3 less unit of CUSTOM @ $16.00 ........... - $10.67 
 1 less unit of SUPER @ $14.00 ............. - $14.00 
                                             -------- 
                                             - $ 1.67

The user is encouraged to verify from the original data that this 
product exchange makes use of all the available time on machines 2 
and 3, as indicated by the fact that this exchange takes place in 
the final tableau without introducing the slack variables 
associated with either machine.

 {T} See {S}, above, and {U}, below.

 {U} To assist us in deriving supporting explanations for notes 
{M} and {N}, above, we can find the detailed effects of 
introducing non-basic variable LUXURY in the LUXURY column in the 
final tableau (labeled {T}). The +0.75 coefficient opposite SUPER, 
and the +0.5 coefficient opposite CUSTOM indicate that one unit of 
LUXURY entering the solution would require us to reduce SUPER and 
CUSTOM by 0.75 and 0.5 units respectively. The objective function 
change would then be:

 1 unit of LUXURY @ $17.25 .................. + $17.25 
 0.5 less unit of CUSTOM @ $16.00 ........... - $ 8.00 
 0.75 less unit of SUPER @ $14.00 ........... - $10.50 
                                              -------- 
                                              - $ 1.25

Again, the user is encouraged to verify from the original data 
that this product exchange makes use of all the available time on 
machines 2 and 3, as indicated by the fact that this exchange 
takes place in the final tableau without introducing the slack 
variables associated with either machine.

 {V} Supporting explanations for notes {O} and {P}, above, can be 
obtained by examining the column "mach.2" in the final tableau 
(labeled {W}). From the +0.25 coefficient opposite the basic 
variable SUPER, we note that the introduction of one unit of slack 
(time) on machine 2 would require the reduction of 0.25 units of 
SUPER. The 0.0 opposite CUSTOM indicates that no change need take 
place in the production of CUSTOM units, while the -1.25 
coefficient opposite basic variable mach.1 indicates that the 
slack time on machine 1 would increase by 1.25 hours. In notes {O} 
and {P}, however, we are interested in the effects of an increase 
in usable time on machine 2. This is equivalent to introducing 
negative slack on machine 2. So we must reverse the signs in the 
mach.2 column. Thus we conclude that if we had an extra hour of 
time on machine 2 we would produce 0.25 additional units of SUPER. 
The 0.25 unit increase in SUPER clearly accounts for the $3.50 
mentioned in note {O}. The user is encouraged to verify from the 
original data that the increased production would use an extra 
hour of time on machine 2, but no extra time on machine 3 which 
had no slack available.

 {W} See {V}, above.

------------------------------------------------------------------
-

5. SYSTEM REQUIREMENTS

5.1 HARDWARE

MSLP-PC Professional Version requires 256K bytes of random access 
memory, and either two floppy diskette drives or hard disk, on IBM 
PC or compatible running under MSDOS or PCDOS. The professional 
version makes use of additional memory beyond 256K to 640K to 
allow processing of models with up to 200 rows and 400 columns.



5.2 MAXIMUM PROBLEM SIZE

Maximum number of rows 200 (constraints plus objective function)

Maximum number of columns 400 (explicit variables plus slack and 
surplus variables)

The EDIT module of MSLP-PC will not allow the user to build a 
model which exceeds these limits. Attempting to process a SHARE 
format file which exceeds these limits (a file possibly created by 
the mainframe version of MSLP), using the RUN module of MSLP-PC, 
will cause one of the following messages to be printed: "TOO MANY 
ROWS" or "TOO MANY COLUMNS" and the optimization of that problem 
will be aborted.

6. METHOD

6.1 MAIN PROCEDURE

To provide compatibility with the mainframe version, the EDIT 
module of MSLP-PC creates an input file which can be read by the 
mainframe version. Similarly, files created for the mainframe 
version can be read, edited and processed by the PC version.

The RUN module of MSLP-PC reads a data file created by the EDIT 
module and solves the problem while maintaining the data in random 
access memory (RAM) using the contracted tableau form of the 
simplex method. Efficiency is achieved through the use of variable 
length arrays and indirect addressing via pointers.  Problem 
solution can be divided into four parts:

Part 1. 	The program reads input data and generates the necessary 
slack, surplus and artificial variables as explained in 
section 6.4.

Part 2. 	An attempt is made to drive the artificial variables out 
of the basis. This is done by attaching a unit cost to 
artificial variables, temporarily setting the objective 
value of other variables to zero, then minimizing the 
cost of artificials. This is Phase I of the simplex 
method. If it is not possible to drive out all 
artificial variables, the message "SOLUTION INFEASIBLE" 
is displayed and the program proceeds directly to part 
4. If part 2 is successful in driving out all 
artificials, the message "SOLUTION FEASIBLE" is 
displayed and the program goes on to part 3.

Part 3. 	The objective function as set up by the user is either 
maximized or minimized according to the user's 
specification as set in the EDIT module (Phase II of 
the simplex method). When no further im-provement can be 
made in the objective function, the message "SOLUTION 
OPTIMAL" is displayed and the program proceeds to part 
4.

Part 4. 	The current basic solution is written to disk. If the 
solution is feasible, sensitivity analysis results are 
also written, including the effects of deviating from 
the optimal solution (see chapter 3, OUTPUT).

6.2 PRECISION AND ACCURACY

Calculations are performed using double precision (64 bit) 
floating point arithmetic. The PC version checks for the presence 
of a Numeric Coprocessor, and automatically uses it if it is 
installed.

To date, no difficulties have been encountered with accuracy. It 
is possible, however, that attempts to solve large or poorly 
scaled problems may cause a rapid build-up of truncation errors. 
Four parameters which may have a significant effect on error 
build-up are included in the program. These are:

 (1) An absolute magnitude screen applied to matrix elements.

 (2) A tolerance for the optimality criterion.

 (3) A minimum tolerance for accepting a pivot.

 (4) A negativity tolerance applied to the basis vector.

These parameters are not available for adjustment by the user. 
Nevertheless, careful adjustments to suit a particular problem can 
be made. If such adjustments are necessary, please contact Michael 
Scriabin by e-mail at Mscriabin@Compuserve.com.


6.3 PROVISION AGAINST CYCLING

MSLP-PC includes a very efficient procedure which eliminates the 
possibility of cycling due to degeneracy. The method does not 
involve direct perturbation of the right-hand-sides, and requires 
a minimum of searching and calculation.


6.4 GENERATION OF SLACK, SURPLUS AND ARTIFICIAL VARIABLES

The user inputs his problem in the form of an objective function 
and a set of inequalities, or constraints. He specifies a name for 
each constraint and for the objective function, the type of 
constraint (<=, >=, or =), the matrix elements or coefficients 
associated with explicit variables, and the right-hand-side value 
associated with each constraint or row.

Slack, surplus, and artificial variables are generated as follows: 
------------------------------------------------------------------
| ROW   | TYPE OF    | NAME GIVEN     |   MATRIX     | INITIALLY |
| TYPE  | VARIABLE   | TO VARIABLE    | COEFFICIENT  | BASIC OR  |
|       | GENERATED  |                |              | NON-BASIC |
------------------------------------------------------------------
|       |            |                |              |           |
|  <=   | Slack      | Row name       |     + 1.0    | Basic     |
|       |            |                |              |           |
------------------------------------------------------------------
|       |            |                |              |           |
|  =    | Artificial | Row name       |     + 1.0    | Basic     |
|       |            | followed by    |              |           |
|       |            | the letter "A" |              |           |
|       |            |                |              |           |
------------------------------------------------------------------
|       |            |                |              |           |
|  >=   | Surplus    | Row name       |     - 1.0    | Non-basic |
|       |            |                |              |           |
|       | Artificial | Row name       |     + 1.0    | Basic     |
|       |            | followed by    |              |           |
|       |            | the letter "A" |              |           |
|       |            |                |              |           |
------------------------------------------------------------------

Objective function values cannot be attached by the user to slack, 
surplus or artificial variables.

------------------------------------------------------------------

7. GLOSSARY

ACTIVE CONSTRAINT: A constraint which is currently limiting the 
quantity of one or more variables in the basic solution. The 
slack or surplus associated with an active constraint is non- 
basic and therefore zero.

ACTIVITY: A term often used interchangeably with "quantity". Some 
computer programs incorrectly use the term "value" to describe 
the activity or quantity of a variable in the solution.

ARTIFICIAL VARIABLE: A variable generated by the computer system 
representing the amount by which the RHS of a >= or = type 
constraint exceeds the left-hand-side. The computer program 
introduces artificial variables for computational convenience 
only. An artificial variable thus represents the amount by which 
a constraint is NOT met. As long as the basis includes one or 
more artificial variables, that basis or solution is infeasible.  

BASIC VARIABLE: An explicit, slack, surplus or artificial variable 
which is included in the solution of the problem. Basic 
variables are usually at a non-zero quantity or activity level 
in the solution.  

BASIS: The list of variables included in the current solution of 
the problem.

BIG M METHOD: An impractical early method for eliminating 
infeasibilities (artificial variables) from a problem, in which 
artificial variables are given a large penalty (cost) 
represented by an upper case M. This big M, rather than an 
actual number, is used because the appropriate size of M is 
difficult to determine in practice and depends on the magnitude 
of the numbers in the problem formulation. Too big an M may 
cause truncation errors to build up, while too small an M may be 
ineffective in removing the artificial variables. The Big M 
method is often described in textbooks because it appears to be 
simpler than the more practical Phase I - Phase II method used 
in MSLP-PC.

CORNER SOLUTION: A solution at the intersection of n constraints 
or n-1 constraints and an axis in an n-dimensional problem (a 
problem with n explicit variables). It can be demonstrated that 
an optimal solution to any linear program can be found by 
looking only at corner solutions.

DUAL PRICE: A term sometimes incorrectly used as a synonym for 
shadow price.

ENTERING VARIABLE: An explicit, slack or surplus non-basic 
variable which enters the basis during the search for an optimum 
solution, taking on some non-negative, usually positive quantity 
(artificial variables are never allowed to enter the basis once 
they have left it).

EXPLICIT VARIABLE: Variable defined by the user, e.g. SUPER in the 
sample problem.  

FEASIBLE SOLUTION: A solution in which all constraints are 
satisfied.

INFEASIBLE SOLUTION: A solution in which one or more constraints 
are violated. The computer program recognizes this by the 
presence of an artificial variable in the basis.

ITERATION: In an iterative process a procedure is performed 
repeatedly. Each time the procedure is performed, an iteration 
is said to have taken place. In linear programming, the 
iterative procedure involves replacing one of the currently 
basic variables with a more profitable one (in terms of the 
objective function). Thus at each iteration there will be an 
entering and an exiting variable, and the value of the objective 
function should normally increase if maximizing or decrease if 
minimizing. The mathematical term "to pivot" is sometimes used 
to refer to a linear programming iteration.  

MATRIX ELEMENT: A coefficient of an explicit variable in a 
constraint or in the objective function.  

NON-BASIC VARIABLE: An explicit, slack, surplus or artificial 
variable excluded from the solution (basis), and therefore at 
zero quantity or activity level.

NON-CONSTRAINING ROW: A constraint which is not currently limiting 
the quantity of one or more variables in the basic solution. The 
slack or surplus associated with a non-constraining row is in 
the basic solution at a non-negative quantity or activity level.

OBJECTIVE FUNCTION: When a set of simultaneous equations has more 
unknowns than equations, there are multiple solutions possible 
or "feasible." In linear programming, the computer searches 
through the feasible "corner" solutions for that one which 
maximizes or minimizes an "objective function" specified by the 
user. The user's objective function is a linear function of the 
explicit variables. In Phase I of the Phase I - Phase II method 
the computer program creates its own temporary objective 
function (see PHASE I - PHASE II METHOD, below).

OPTIMAL SOLUTION: Same as optimum solution. A feasible solution 
which maximizes or minimizes the objective function defined by 
the user. To the LP neophyte this may appear to be the objective 
of building an LP model, but it is in fact only a starting point 
for further analysis as to how one could improve on the 
"optimal" solution by relaxing those constraints, for instance, 
that have the highest shadow prices.

PHASE I - PHASE II METHOD: When a linear programming formulation 
of a problem contains one or more >= or = type constraints, the 
initial "all slack" solution is infeasible. The method most 
frequently described in textbooks for eliminating 
infeasibilities is to attach a high penalty in the objective 
function to artificial variables. This method, often called the 
"Big M" method, has the disadvantage that it is difficult to 
pick an appropriate penalty size (see BIG M METHOD, above). A 
more practical and more widely used method is the Phase I - 
Phase II method used in MSLP-PC. In Phase I the user-defined 
objective function is ignored and the computer program instead 
makes up its own objective function with zero coefficients 
against explicit, slack and surplus variables and unity 
coefficients against all artificial variables. This objective 
function is minimized. When the optimum solution to Phase I has 
been reached, if any artificial variables are still in the basis 
the problem has no feasible solution. Otherwise solution 
continues with Phase II, in which the user's objective function 
is maximized or minimized, as requested by the user. See also 
ARTIFICIAL VARIABLES and BIG M METHOD.

PIVOT: See ITERATION, above.

RANGING: Right-hand-side ranging and cost or contribution ranging 
are an important part of sensitivity analysis. RHS range refers 
to the range within which the RHS of a constraint can be changed 
without altering the shadow price of the constraint. In MSLP-PC 
the RHS range of a binding constraint (which would have no slack 
or surplus) can be found in the SHADOW PRICES section of the 
output under the heading "VALID UNTIL RHS REACHES." The RHS 
range of a non-constraining row or non-binding constraint is 
not usually of much interest, but it always has as one limit the 
current RHS of the constraint and as the other the current RHS 
less the slack or plus the surplus. Cost or contribution ranges 
provide the limits within which the objective function 
coefficients can be changed without altering the optimality of 
the current solution (i.e. the quantity of each variable in the 
solution. The value of the objective function will change, of 
course, if the cost or contribution of a basic variable is 
changed). The cost/contribution range of a basic variable can be 
found in MSLP-PC under the heading "COST RANGE" or "CONTR. 
RANGE." When minimizing the objective function, the cost range 
of a non-basic variable is always +INFINITY at one extreme and 
the current cost of the variable less the "OBJ. CHANGE/UNIT 
INTRODUCED." When maximizing, the contribution range of a non- 
basic variable is always -INFINITY at one extreme and the 
current contribution plus the magnitude of the "OBJ. CHANGE/UNIT 
INTRODUCED."  

REDUCED COST: The amount by which the cost of a non-basic variable 
must be reduced, or its revenue increased, to make it enter the 
basis. This term stems from early applications of linear 
programming which involved cost minimization.  

REDUNDANT CONSTRAINT: A constraint whose removal from the model 
would not cause any change in the optimal solution, no matter 
how the objective function is formulated. The presence of a 
redundant constraint in a model normally causes no difficulty, 
and it is unwise in practice to remove it, since subsequent data 
changes may make the constraint active. It is possible, however, 
to overstate the constraints in a model in such a way that they 
are not all mathematically independent. MSLP-PC detects such a 
situation and automatically removes one of the dependent 
constraints.

RELAX: Relaxing a constraint refers to changing the RHS in such a 
way as to increase, if possible, the feasible region of 
solutions. Thus relaxing a <= constraint would mean to increase 
the RHS, while relaxing a >= constraint would mean decreasing 
its RHS. Before relaxing an equality constraint one would have 
to determine which way the LP solution would have gone in the 
absence of the constraint, then move the RHS in that direction.

RHS: The right-hand-side of a constraint. In linear programming, 
constraints are usually required to have all the variables on 
the left-hand-side of the equality or inequality sign, and only 
a numerical constant on the RHS.

SENSITIVITY ANALYSIS: The process of analysing the results of a LP 
run to determine the sensitivity of the optimal solution to 
changes in the data, i.e. if we change one number in the data, 
how should the optimal solution be changed so that it remains 
optimal, and how is the objective function affected? Sensitivity 
analysis is based on answers to questions such as "what if a 
certain non-basic variable were to enter the basis?" or "what if 
the RHS of a certain binding constraint were relaxed?"

SHADOW PRICE: The amount to be gained by relaxing a constraint, 
per unit RHS increase or decrease. In the case of an inequality 
constraint, the shadow price equals in magnitude the reduced 
cost of the associated slack or surplus variable, but has 
opposite sign. In the case of an equality constraint, the shadow 
price equals the reduced cost of the associated artificial 
variable.

SIMPLEX METHOD: The simplex method of solving linear programming 
problems was invented by G. B. Dantzig and his associates in the 
U.S. Air Force in 1947. It is an iterative procedure which is 
quite efficient for problems with hundreds, even thousands, of 
constraints. The basic approach is to start with an "all slack" 
solution (at the origin in a graph of the problem) and move to 
an adjacent corner point (intersection of constraints or 
constraints and axis) which is more profitable in terms of the 
objective function. When no further improvement is possible, an 
optimum solution has been reached. Most computer programs based 
on the simplex algorithm use the PHASE I - PHASE II method (see 
above).  

SLACK VARIABLE: A variable generated by the MSLP-PC computer 
system representing the amount by which the right-hand-side of a 
constraint exceeds the left-hand-side, e.g. slack variable 
mach.1 representing unused time on machine 1 in the sample 
problem.  

SURPLUS VARIABLE: A variable generated by the MSLP-PC computer 
system representing the amount by which the left-hand-side of a 
constraint exceeds the right-hand-side. The computer system 
generates a surplus variable for every >= type constraint in the 
user's model.

TIGHTEN: Tightening a constraint is the opposite of relaxing it 
(see RELAX, above).  

UNBOUNDED VARIABLE: A variable which the program finds profitable 
to include in the basis, but whose quantity is not limited by 
any constraint. This usually indicates one or more data or 
problem formulation errors.

VALUE: Usually refers to the value of a variable in terms of the 
objective function, but some programs incorrectly use "value" 
when referring to the level of activity of a variable (see 
ACTIVITY, above).
