 LP100

    LP100 is a linear programming optimizer developed for either maximizing
    or minimizing small to medium sized mathematical programming problems
    in which all the relationships between variables are linear.  It finds
    a BEST feasible solution to any continuous or all-integer constrained
    optimization problem of this type and reports on the activities and levels
    required to maximize profit or minimize cost.  LP100 also reports on
    alternate optima, shadow prices, and ranges over which the shadow prices
    are valid and also ranges over which profit/cost inputs and right-hand-side
    (RHS) values can vary without altering the solution.

    LP100 can use either LOTUS 1-2-3/Symphony spreadsheet files or ASCII
    files for data input.

    Output may consist of useful model debugging information such as
    objective function and constraint listings, a condensed matrix map,
    the initial and last tableaux, or all tableaux.

    Output can be sent to a printer or to a disk file.  Registered versions
    allow the analysis and solution to be read directly by LOTUS spreadsheets.
 INPUT FILE

    LP100 uses an ASCII file for data input.  Any text editor or word processor
    that can output unformatted ASCII text may be used.  LOTUS 1-2-3 or
    Symphony (or any 1-2-3 compatible spreadsheet such as VP-Planner) can be
    used for creating the data file, as well.

    NOTE: The length of any line should not exceed 2,300 characters.  This is
          approximately 256 spreadsheet columns per row.

    A demonstration program, LPDEMO.EXE, is included.

    A batch facility is available in LP100.  This allows LP100 to solve up to
    six LP problems per run without the need of using DOS's COMMAND batch
    facility.  Such a file is to include only the LP filenames followed by any
    command line options and should contain no blank lines.  To specify a
    batch file to LP100, precede the filename with an @ on the command line.
    E.g., if the batch file is named BATCHRUN.BLP, use C>LP100 @BATCHRUN.BLP.

    NOTE: The @ is not part of the filename.

    SEE ALSO: EXAMPLE, SPREADSHEET, LPEDIT.COM, LINE OPTIONS, LPDEMO.EXE
 - EXAMPLE

    TITLE: An example of an LP100 data file.
    OUTPUT: EXAMPLE.OUT
    LISTING: YES
    MAP: YES
    TABLEAU: YES
    ANALYSIS: YES               * anything after a '*' on a line is a comment

    VAR: 3  LTE: 2  GTE: 0  EQU: 1
    FUNCTION: MAX: .185 stock + .090 bond -.150 loan

    MxLoan  loan <= 5000        * no coefficient implies coefficient of 1.00
    MxStk   stock <= 4000
    MxCash  stock + bond - loan = 10000
    END:

    NOTE: It is not neccesary to use + operators between variables, e.g.,
         ...MAX:  .185 stock  .090 bond   -.150 loan is acceptable, as is
         ...MAX: +.185 stock +.090 bond + -.150 loan.

    SEE ALSO: OBJECTIVE FUNCTION, VARIABLES, CONSTRAINTS, SPREADSHEET
 STARTING LP100

    To give LP100 a go, have LP100.EXE in your PATH and EXAMPLE.LP in the
    current directory, then type:
    C>LP100 EXAMPLE.LP

    In just a few seconds it's finished.  Now do (printer on?):
    C>COPY EXAMPLE.LP PRN

    ... then do (you may want to advance the printer to the top-of-page):
    C>COPY EXAMPLE.OUT PRN

    The file EXAMPLE.LP is the data file that LP100 used and EXAMPLE.OUT is the
    file that LP100 created for the output.

    If you do not have a printer, have LPEDIT.COM in your PATH and EXAMPLE.OUT
    in the current directory, then type:
    C>LPEDIT EXAMPLE.OUT



    SEE ALSO: LPEDIT.COM
 LINE OPTIONS

    LP100 allows the user to override specific switches that may have been
    specified in the LP100 data file by using command line options after the
    LP100 input data file specification.  These command line options are:

    /O:filename  specify the output destination
    /I:nn        specify all-integer solution max of nn cutplanes (nn=0 to 99)
    /Z:nn        specify tolerance of zero (nn=.000000000001 to .9)
    /PL:OFF      suppress printer page length codes (page length from 88 to 66)
    /PW:OFF      suppress printer page width code (page width remains 132)
    /FF:OFF      suppress all form feeds except at end of report
    /L or /NL    turn listing on or off (/Nx turns switch off)
    /M or /NM    turn map on or off
    /T or /NT    turn tableaux on (I&L) or off
    /A or /NA    turn analysis on or off

    C>LP100 EXAMPLE.LP /O:PRN /NL /NM /NT /NA would send output to the printer
    and turn off the switches regardless of the declarations in EXAMPLE.LP.


    SEE ALSO: OUTPUT:, INTEGER:, TZERO:, LISTING:, MAP:, TABLEAU:, ANALYSIS:
 COMMENTS

    COMMENTS are used in LP100's input file when circumstances dictate that
    an explanation should be used to describe an item that is not readily
    apparent.  They may appear anywhere except on the TITLE: line.

    To include comments in the input file, begin the comment with an asterisk.
    All characters following the * to the end of that line are skipped.
    E.g.,

    * LP data file for BUDGETING 1990 MODEL A1B.

    VAR: 233    * the constraints & variables were developed
    LTE: 35     *   jointly by the OR & MIS departments
    GTE: 55     *
    EQU: 22





    SEE ALSO: END:
 KEYWORDS

    Keywords are the means by which the user declares the problem to LP100.
    Some keywords, such as those that instruct LP100 on the specifications
    of the problem, are required while some are optional.  Optional keywords
    instruct LP100 to alter its programmed procedures to user specifications.

    All keywords in LP100 end with a colon.

    TITLE: Trial MX01                           * this is optional
     and,
    VAR: 52  LTE: 22  GTE: 44  EQU:  0          * these are required
     and,
    FUNCTION: MAX:  59.03 VAR1 + 35.57 VAR2     * these are required

    The part up to MAX: (or MIN:) is the declarative portion.  The
    part after is the problem definition portion.
 - TITLE:

    TITLE: is an optional keyword.  Its purpose is to allow the user to
    specify the title used for each page heading.

    NOTE: Only the first 48 characters following TITLE: will be used.

    The keyword NAME: may be used interchangably with TITLE:, e.g.,

    TITLE: Operations Research Planning Model 20A
     or,
    NAME: Operations Research Planning Model 20A

    If TITLE: or NAME: is not used, the input filename is used by default.







    SEE ALSO: KEYWORDS
 - OUTPUT:

    OUTPUT: is an optional keyword.  Its purpose is to allow the user to
    specify which device the output is to be sent.

    To send the output to disk, indicate the filename after OUTPUT:, e.g.,
    OUTPUT: C:\OR\B90\MODEL20A.OUT

    In registered versions, output in LOTUS 1-2-3 format is done by specifying
    a filename extension of WKS, e.g., OUTPUT: C:\123\MODEL20A.WKS

    NOTE: Only the analysis and solution sections are in 1-2-3 format; the
          listings, map, and tableaux are in ASCII format and will be
          overwritten if there are no errors in the data file.

    To send the output directly to the printer use PRN.  PRN is a
    device name that DOS recognizes as the printer, e.g., OUTPUT: PRN

    If OUTPUT: is not used, the input filename.OUT is used by default.


    SEE ALSO: KEYWORDS, LINE OPTIONS
 - LISTING:

    LISTING: is an optional keyword.  Its purpose is to allow the user to
    specify if listings of the objective function and constraints are to be
    output.

    The listing numbers each objective function variable, showing its name
    and coefficient and whether the objective is to maximize or minimize the
    function.  For each constraint, its name, matrix row position, and the
    coefficient and name of the non-zero variables and the value of the RHS
    is given.

    If the RHS of a constraint is negative, an N precedes its name.  It will
    have been multiplied through by -1 and the type changed if an inequality.

    To activate the listing, use YES.  For no listing use NO.  E.g.,

    LISTING: YES    * If LISTING: is not used, NO is used by default.



    SEE ALSO: KEYWORDS, LISTING SECTION, LINE OPTIONS
 - MAP:

    MAP: is an optional keyword.  Its purpose is to allow the user to specify
    if a mapping of the initial matrix is to be output.

    The map is shown in condensed form with variable names output vertically
    and the constraint names along the left.  For each matrix position a
    symbol is used to indicate in which range that value is.  For instance,
    all zero elements show as blanks, all one elements as 1, greater than 1
    but less than 10 as W, and so on.  Atop each map page a legend is
    displayed for easy interpretation of the map symbols.

    To activate the mapping, use YES.  For no mapping use NO.  E.g.,

    MAP: YES    * If MAP: is not used, NO is used by default.






    SEE ALSO: KEYWORDS, MAP SECTION, LINE OPTIONS
 - TABLEAU:

    TABLEAU: is an optional keyword.  Its purpose is to allow the user to
    specify if tableaux are to be output.

    The tableau that is output is of the last iteration completed.  The
    objective function variables and values are listed.  The variables in the
    current basis along with their row elements and RHSs follow.  A Z follows
    the objective function evaluation and an R follows each of the RHS values.

    To activate tableau output of the initial and last tableaux only,
    use YES, or I&L.  To output all tableaux, use ALL.  E.g.,

    TABLEAU: YES    * or TABLEAU: I&L
     or, for all,
    TABLEAU: ALL    * If TABLEAU: is not used, NO is used by default.





    SEE ALSO: KEYWORDS, TABLEAU SECTION, LINE OPTIONS
 - ANALYSIS:

    ANALYSIS: is an optional keyword.  Its purpose is to allow the user to
    specify if an analysis of the solution is to be output.

    The analysis is divided into two summaries.

    In the variable summary, each variable name, alternate optima check,
    activity level, shadow price, input coefficient, and range over which the
    input coefficient may vary without altering the solution set is given.
    Also shown is the variable ENTERING the basis when this range is exceeded.

    In the constraint summary, each name, type, unused capacity/excess
    demand, shadow price, input RHS, and range over which the RHS may
    vary without altering the solution set is given.  Also shown is the
    variable EXITING the basis when this range is exceeded.

    To activate analysis output, use YES.  For no analysis, use NO.  E.g.,

    ANALYSIS: YES   * If ANALYSIS: is not used, YES is used by default.

    SEE ALSO: KEYWORDS, ANALYSIS SECTION, LINE OPTIONS
 - BIG-M:

    BIG-M: is an optional keyword.  Its purpose is to allow the user to
    specify the objective function coefficient given to artificial variables.

    LP100 uses the BIG-M improved SIMPLEX algorithm.  Starting the SIMPLEX
    algorithm requires an artificial variable for the GTE: with the
    largest RHS and one for each EQU: constraint.  To ensure that the
    algorithm removes these as quickly as possible from the basis, a very
    large value is given it.  BIG-M: allows the user to specify this value.

    NOTE: In minimization problems, values in the objective function are
          interpreted as contributions to cost.  Thus, absolute values should
          be used, i.e., 37.6667 MAT123 for the contribution to cost of MAT123.

    To specify BIG-M: use the absolute value after the keyword. E.g.,

    BIG-M: 1000000  * If BIG-M: is not used, 1,000,000 is used by default.
                    * 1D+006 may be used instead of 1000000.


    SEE ALSO: KEYWORDS, VARIABLES, ARTIFICIAL
 - TZERO:

    TZERO: is an optional keyword.  Its purpose is to allow the user to
    specify a tolerance value for zero.

    LP100, like most computer software, deals with numbers in a finite
    precision.  In repeated manipulations of numbers that have been truncated
    to a specific precision, round-off errors may occur.  TZERO: allows for
    this somewhat in critical areas by forcing the algorithms to interpret
    very small values near 0.00 as 0.00.

    LP100 uses IEEE double precision floating-point numbers.  With an 80x87
    math coprocessor, very fast and precise computations are made.  If an
    80x87 is not installed, software emulation is used.

    To specify TZERO: use the absolute value after the keyword.  E.g.,

    TZERO: 1D-012   * If TZERO: is not used, 1D-012 is used by default.
                    * .000000000001 may be used instead of 1D-012.
                    * If INTEGER: is on, .000001 is used unless /Z: is used.

    SEE ALSO: KEYWORDS, INTEGER:, LINE OPTIONS
 - INTEGER:

    INTEGER: is an optional keyword.  Its purpose is to allow the user to
    specify that an all-integer solution is to be sought.

    LP100 uses the cutplane algorithm to solve an all-integer problem.  This
    requires all RHS values to be integer. The maximum number of cutplanes that
    will be used to find a solution is to follow the keyword INTEGER:. The
    range is from 0 to 99. If the maximum number of cutplanes is reached, LP100
    exits and uses the current solution.
  
    NOTE: If the cutplane technique is going to find a solution, it generally
           does so quickly.
          The range analysis will not be valid since it is calculated for
           continuous ranges.  EQU constraints cannot be analyzed.
          The memory requirement increases by one constraint and variable
           for each cutplane requested.
          Because rounding errors are more pronounced, TZERO: is set to .00001.
           This can be changed only with /Z:.  Solution cannot be guaranteed.
          This feature should be used only for small problems.

    SEE ALSO: KEYWORDS, TZERO:, LINE OPTIONS
 - VAR:LTE:GTE:EQU:

    VAR:, LTE:, GTE:, EQU: are all required keywords.  VAR: declares the
    number of decision variables in the model.  LTE:, GTE:, and EQU: declare
    the number of less-than-equal-to, greater-than-equal-to, and equal-to
    constraints, respectively.  E.g.,

    VAR: 22
    LTE: 5      * 3 of these LTE: constraints have negative RHS's
    GTE: 3
    EQU: 2

    NOTE: If the RHS of an LTE: or GTE: is negative, the LTE: or GTE: number
          will be adjusted by LP100, e.g., there are 5 LTE:'s and 3 GTE:'s,
          yet 3 LTE:'s have negative RHS's.  LP100 will transform those 3
          LTE:'s to GTE:'s and adjust the LTE: number to 2 and GTE: to 6.





    SEE ALSO: KEYWORDS, OBJECTIVE FUNCTION, VARIABLES, CONSTRAINTS
 - FUNCTION:

    FUNCTION: is a required keyword.  Its purpose is to mark the start of
    the problem definition portion of the model.

    You may optionally precede FUNCTION: with OBJECTIVE, e.g.,
    OBJECTIVE FUNCTION:.

    NOTE: MAX: or MIN: must immediately follow FUNCTION:.












    SEE ALSO: KEYWORDS, MIN:MAX:, OBJECTIVE FUNCTION, END:
 - MIN:MAX:

    MIN: and MAX: are required keywords, though only one may be specified.
    MIN: indicates to LP100 that the objective function following is a cost
    function that is to be minimized, MAX: indicates that the function is a
    profit function that is to be maximized.















    SEE ALSO: KEYWORDS, OBJECTIVE FUNCTION
 - END:

    END: is an optional keyword.  Its purpose is to indicate the end of the
    problem definition portion of the model.  Any data following END: is not
    used.

    This keyword is useful if the model is to be extensively documented.  All
    comments that appear before END: will slow the parsing process.
    Therefore, extensive comments should appear after the END: keyword.

    NOTE: END: must have nothing else on its line.










    SEE ALSO: KEYWORDS, COMMENTS
 OBJECTIVE FUNCTION

    The objective function contains variables and coefficients to those
    variables representing its profit or cost.  The coefficients used
    normally should be positive for both profit and cost problems; the values
    are interpreted accordingly by specifing MIN: or MAX:.  If, however, in a
    profit function a cost is associated with a variable, then that variable's
    coefficient should be negative.  Likewise in a cost function, if a profit
    is associated with a variable, its coefficient should be negative.

    All decision variables (number following VAR:) in the problem must
    be in the objective function, including those with coefficients
    equal to zero, so that LP100 can later recognize them.  E.g.,

    FUNCTION:  MAX:  10 VAR01 + 15.59 VAR02 + 0 VAR03 - VAR04 +...






    SEE ALSO: VAR:, VARIABLES, FUNCTION:
 VARIABLES

    Variables are used in linear programming problems to represent an
    activity of an operation.

    Only decision variables (number following VAR:) are to be input to LP100.
    Slack, surplus, and artificial variables of the constraints are created
    by LP100, as needed.  These variables take the name of their constraint
    and are preceded by a - for slack, + for surplus, and ! for artificial
    variables.

    Each variable may be up to six characters, the first being a letter, and
    must be unique, as must variables within constraints, i.e., don't have
    two of the same variables in the same constraint.  LP100 has excellent
    error detection and reporting schemes to indicate these type errors.

    Any variable not preceded by a coefficient is given a value of 1.00.

    NOTE: Do not use + or - in a variable name nor use E or D alone
          as a variable name (it would then be interpreted as a number).

    SEE ALSO: OBJECTIVE FUNCTION, SLACK, SURPLUS, ARTIFICIAL, ERRORS
 CONSTRAINTS

    Constraints are used in linear programming problems to represent
    limitations to the objective function.

    For each less-than-equal-to (LTE) constraint, LP100 adds to the objective
    function a slack variable that is named as the constraint, preceded by
    a -, and has a coefficient of 0.  For each GTE constraint, a surplus
    variable is added, preceded by a +, with a coefficient of 0.  In addition,
    one artificial variable is added for the GTE with the largest RHS,
    preceded by a ! and a coefficient of BIG-M.  For each EQU, an artificial
    variable, preceded by a ! and a coefficient of BIG-M, is added.

    The number of each type of constraint is indicated in the declaration
    portion (LTE:, GTE:, EQU:).  Constraints may be entered in any order, but
    LTE, GTE, EQU is recommended.  Each constraint is named (as the variables
    are), needs to include only the non-zero variables, and end with the RHS
    value preceded by the corresponding relational operator (<=, >=, =).
    E.g., CON029  5X11 -X22 <= 5000.


    SEE ALSO: VARIABLES, SLACK, SURPLUS, ARTIFICIAL
 - SLACK

    For each LTE constraint in the linear programming problem, LP100 adds a
    slack variable.  This slack variable is to represent the amount of unused
    capacity.  If, for instance, the total number of hours available for use
    of a machine is 280 per month, then if in the optimal solution the total
    hours for that machine is 260, then 20 hours is unused, or slack.

    This slack capacity has an associated shadow price which indicates the
    rate of change of the value of the objective function when the available
    resource (capacity) varies.  This shadow price is valid only over the
    range of optimality for that variable.  If one unit more were available,
    profit would increase (cost would decrease) by the shadow price; if one
    less unit were available, then profit would decrease (cost increase).  A
    shadow price of zero is given to a slack variable in the final solution
    and also to any alternate optima.

    A slack variable is named for its constraint, is preceded by a -, and has
    an objective function coefficient of 0.


    SEE ALSO: CONSTRAINTS, SHADOW PRICE
 - SURPLUS

    For each GTE constraint in the linear programming problem, LP100 adds a
    surplus variable.  This surplus variable is to represent the amount in
    excess of demand.  If, for instance, the total number of desks needed by
    contract is 100 per month, then if in the optimal solution, the total
    desks to be produced that month is 105, an excess, or surplus, or 5 desks
    exists, relative to the contract constraint.

    This surplus demand has an associated shadow price which indicates the
    rate of change of the value of the objective function when the requirement
    (demand) varies.  This shadow price is valid only over the range of
    optimality for that variable.  If one unit more were required, profit
    would increase (cost would decrease) by the shadow price; if one less unit
    were required, then profit would decrease (cost increase).  A shadow price
    of zero is given to a surplus variable in the final solution and also to
    any alternate optima.

    A surplus variable is named for its constraint, is preceded by a +, and
    has an objective function coefficient of 0.

    SEE ALSO: CONSTRAINTS, SHADOW PRICE
 - ARTIFICIAL

    For each EQU constraint in the linear programming problem, LP100 adds an
    artificial variable.  For the GTE constraint with the largest RHS, LP100
    adds an artificial variable.  The other GTE constraints are temporarily
    transformed into LTE constraints by multipling through by -1.  This is a
    requirement for starting the SIMPLEX algorithm.  If there are no GTE
    constraints, a dummy artificial variable is added, nonetheless.

    An artificial variable is named for its constraint, is preceded by a !,
    has an objective function coefficient of BIG-M and, if in the final
    solution, must have an activity level of zero.

    NOTE: If an artificial variable of a redundant equality constraint occurs
          in the solution with an activity level of zero, the sensitivity
          analysis and shadow prices may have been grossly misstated.
          Therefore, it is suggested that those equality constraints with
          artificial variables in the final solution (indicated by a !) be
          removed from the model or changed to a GTE and the model run again.


    SEE ALSO: DEGENERATE, ALTERNATE OPTIMA, CONSTRAINTS, BIG-M:
 DISPLAY SCREEN

    Date, time, coprocessor status(87 or mu)/speed index(PC=1.0), and
    available memory remaining are shown on top line.

    The FILES In/Out display the rightmost 20 characters of the filenames.

    OPTIONS display the status of the output switches.  If degeneracy is
    detected, DEGENERATE is displayed to the right of BIG-M.

    INTEGER, BIG-M, and TZERO are displayed.

    Constraint and variable counts are displayed.

    The SIMPLEX STATUS indicates the time the SIMPLEX algorithm was entered
    and its estimated finish.  Iterations equals SIMPLEX pivots.  Elapsed time
    is actual time spent in SIMPLEX (which excludes tableau output and cutplane
    formulation).  PROFIT EVALUATION is the function value at the current
    iteration.

    FILE DISPOSITION lists files in queue.  The status of the current file is
    continually displayed.
 OUTPUT

    The output may be sent either to a disk file or directly to a printer.
    Output may include the problem definition listings, a condensed matrix
    map, tableaux, and solution analysis in addition to the final solution.

    ASCII output is formatted to 132 columns and a page break is generated
    for each page with appropriate section headings.  Beginning each output
    are the necessary printer control codes for the 132 column output and 88
    lines/page.  Ending each output are the codes to restore the printer to
    normal.  These codes are EPSON compatible printer codes and work with the
    vast majority of dot-matrix printers. (Not the IBM Graphics Printer - the
    page length command differs.  Use line option /PL:OFF for 66 lines/page.)

    Disk output may be edited by any ASCII text editor, or imported to word
    processor programs.  Registered versions of LP100 can directly output
    the analysis and solution sections in LOTUS 1-2-3 WKS format.

    NOTE: Make sure that sufficient disk space is available if output is
          directed to disk - especially a 360Kb floppy.

    SEE ALSO: KEYWORDS, SPREADSHEET, LPEDIT.COM, LINE OPTIONS
 - LISTING SECTION

    The listing section is the LP100 interpretation of the data file.  The
    data in this section is the actual data used by the program.  This
    ensures that the correct data has been received by LP100.

    If LISTING: has been requested then the objective type (maximization
    or minimization), the number of variables, and then the variables and
    coefficients are displayed, 4 per line.  The constraints follow.  For
    each of the constraints, the name, row position in the initial tableau,
    coefficient and name for non-zero variables is output as is the relational
    operator (<=, >=, =) and RHS.  If the RHS was negative, an N precedes this.

    If LP100 detects an error, such as a duplicate variable name, and listing
    has been requested, then the error message is output at the point of the
    error.  If no listing has been requested, the error message alone is
    output.




    SEE ALSO: LISTING:, ERRORS
 - MAP SECTION

    The map section contains a condensed listing of the initial matrix
    including the decision variables and constraints.  Atop each map section
    page, a legend of the symbols used is shown.  The map heading which
    displays vertically the variable names follows.  The objective function
    and variable symbols are next, and for each constraint, its type, name,
    and initial variable coefficients, plus RHS value, are shown.

    The map is useful for debugging.  At a glance it can show most wildly-off
    data entries, as well as positional type errors.

    NOTE: If output to a printer, the map should extend no more than the
          columns available with the printer.  Printers with 132 columns can
          print up to 60 variables/line before the following data wraps to
          the next line.  Many text editors allow column widths of 512
          characters or more.  With such an editor, the map can be displayed
          without the confusing wrap-around.



    SEE ALSO: MAP:, TABLEAU SECTION
 - TABLEAU SECTION

    The tableau section contains the objective function, its evaluation, the
    basic variables, and the matrix coefficients at that particular tableau.
    Either the initial and last tableaux, or all tableaux, may be output,
    depending on TABLEAU:.  The tableaux can be used for debugging.  It is a
    detailed version of the matrix map, and is available at every iteration,
    whereas the map is available for the initial tableau only.  It also can
    display all the variables without wrap-around problems since it formats
    the output for 8 variables per line, using as many lines as are necessary.

    For ease of spotting, a Z follows the objective function evaluation, and
    an R follows every RHS.

    The SIMPLEX algorithm as implemented in LP100 always solves the problem
    as a maximization type.  Minimization problems have the original objective
    function multiplied through by -1.  This will in no way affect the outcome.
    It is mentioned here so that the user understands the label MAXIMIZE at
    the beginning of each tableau.


    SEE ALSO: TABLEAU:, MAP SECTION
 - ANALYSIS SECTION

    The analysis section contains a wealth of information that the user will
    find extremely useful.  This section is divided into two sections, the
    variable summary, and the constraint summary.

    Within the variable summary for each variable, an indication is given if
    that variable is an alternate optima, the activity level of that variable
    (blank if not in the solution), its shadow price, and a sensitivity
    analysis (or range of optimality) of the input coefficient.  This ranging
    indicates the lower and upper values that the input coefficient may take,
    everything else remaining the same, and not alter the solution set
    (activities and levels of the solution).  Where a range is exceeded, the
    name of the variable ENTERING the basis is given.  Further iterations may
    be necessary.

    In the constraint summary for each constraint, its type, amount of slack
    (surplus), shadow price, and range of optimality for the RHS value is
    given.  Where a range is exceeded, the name of the variable EXITING the
    basis is given.  Further iterations may be needed.

    SEE ALSO: ALTERNATE OPTIMA, ACTIVITY LEVEL, SHADOW PRICE, UNUSED CAPACITY,
              EXCESS DEMAND, RANGE ANALYSIS, ARTIFICIAL
 - SOLUTION SECTION

    The solution section is the bottom line of the linear programming problem.
    It indicates a set of variables and activity levels that optimizes the
    objective function given the constraints.

    The evaluation of the objective function evaluation is the first entry in
    this section and equals the optimal profit or cost.  Each of the solution
    variables, its associated activity level, input coefficient, and extended
    amount (of profit or cost) follow.

    NOTE: The objective function activity level represents the optimal value
          of the profit function (maximize) or cost function (minimize).  It
          will normally have a positive value - a cost function should be
          interpreted as having this much cost.  Each of the extended amounts
          are likewise representing profit or cost.

    NOTE: There should be no artificial variables (!) in the solution set
          unless the activity level of that variable is zero.  If positive,
          the problem is considered infeasible.

    SEE ALSO: ARTIFICIAL, OBJECTIVE FUNCTION
 ALTERNATE OPTIMA

    ALTERNATE OPTIMA, or ALT OPT, indicates that a variable not in the
    solution set was qualified to be so.  Its shadow price will necessarily be
    zero.  To force this variable into the solution set, scan over to the
    range analysis for that variable.  Altering that variable's input to
    exceed that range by a small amount will cause the alternate variable to
    most likely enter the solution (solve the problem again).  Additionally,
    rearranging variable or constraint order may cause the alternate to enter
    the solution.  Best, though, is to use a GTE inequality at the level
    required for that variable.

    If the LP problem is found to be unbounded, the variable that is
    responsible is indicated by UNB in the ALT OPT column.

    NOTE: If after the first run, you wish to FORCE an alternate optimum into
          the solution, DO NOT use an equality constraint.  Instead, use a >=
          inequality.  E.g., X22 is ALT OPT - use CONADD X22 >= 50 as a new
          constraint, not CONADD X22 = 50.


    SEE ALSO: DEGENERATE, SHADOW PRICE, RANGE ANALYSIS, ARTIFICIAL
 ACTIVITY LEVEL

    Activity level is the value that a variable is to take in order to achieve
    the optimal profit (or cost).  Blank activity levels should be interpreted
    as being zero.

    The activity level of FUNCTION in the solution section should be
    interpreted as the optimal profit or cost evaluation of the objective
    function.  It is normally positive.
 











    SEE ALSO: VARIABLE SECTION, SOLUTION SECTION, OBJECTIVE FUNCTION
 SHADOW PRICE

    Shadow prices fall into two categories.

    One category indicates the rate of change in the objective function
    evaluation if an activity that is not in the solution set is introduced in
    the solution anyway.  This marginal cost represents the amount by which
    that activity, or variable, is 'too expensive' to be included in the
    solution set.  This category is attributable to the decision variables
    in the VARIABLE SUMMARY.

    The other category indicates the rate of change in the objective function
    evaluation when the RHS value of a constraint changes.  This marginal cost
    represents the amount by which the objective function value will vary with
    changes in the RHS.  This category is attributable to the constraints
    (and the slack and surplus variables in the VARIABLE SUMMARY) in the
    CONSTRAINT SUMMARY.

    Shadow prices are valid only over that variable/constraint's range of
    optimality.

    SEE ALSO: ANALYSIS SECTION, RANGE ANALYSIS, ARTIFICIAL
 UNUSED CAPACITY

    The unused capacity in the constraint summary of the analysis section
    represents the amount of left-over resource for that LTE constraint.  It
    is included in the solution set as a slack variable.
















    SEE ALSO: EXCESS DEMAND, SLACK
 EXCESS DEMAND

    The excess demand in the constraint summary of the analysis section
    represents the amount of over-produced requirement for that GTE
    constraint.  It is included in the solution set as a surplus variable.
















    SEE ALSO: UNUSED CAPACITY, SURPLUS
 RANGE ANALYSIS

    Range analysis, also called sensitivity analysis, gives the user useful
    information on the sensitivity of the data used in the problem.  Since
    accurate data may be expensive to obtain, a model using the best available
    data can be used initially.  The analysis section can then be used to
    determine which data are the most sensitive.  These can then be further
    researched.

    Range analysis is performed on each of the variables and constraints.  For
    each variable, its input coefficient is analyzed to see over which range
    of values it may take while not altering the solution set, everything else
    remaining the same.  Likewise for each constraint, except its RHS value is
    analyzed.

    Additionally, the variable ENTERING (variable EXITING for constraints) the
    basis (solution set) when a range is exceeded is shown.  This variable may
    or may not be part of the final solution set, since additional iterations
    of the simplex algorithm may be needed.


    SEE ALSO: SOLUTION SECTION, ARTIFICIAL
 DEGENERATE

    If there are redundant constraints in a problem, it is possible that a
    degenerate solution may develop (if so, DEGENERATE will be displayed on
    the screen.)  Degeneracy in itself does not pose any problems, usually.
    It may, however, lead to a problem known as cycling.  Cycling, once
    developed, causes the computer code to endlessly cycle with no
    improvement in the objective function.  Fortunately, this seldom
    occurs with real-world problems.  Altering the order of constraints
    or variables usually corrects this problem, should it ever occur.

    Another problem associated with degeneracy is when an ALT OPT variable
    is forced into a succesive LP100 solution set by using an equality (=)
    constraint.  This constraint will necessarily be redundant.  Rather,
    use an inequality (>=).  Otherwise, the sensitivity analysis and shadow
    prices may be grossly misstated.  This problem is easily identified:
    one, an artificial(!) variable(s) will be in the solution set (at zero)
    and two, a shadow price(s) will be grossly misstated (by BIG-M).  At
    this point, the equality constraint(s) with its artificial (!) in the
    solution should be removed or changed to an inequality (>=), and rerun.

    SEE ALSO: DISPLAY SCREEN, ARTIFICIAL, ALTERNATE OPTIMA
 ABORTING

    Pressing Esc will have the following effect on LP100.  If LP100 is:

    PARSING DECLARATIONS, or
    PARSING OBJECTIVE FUNCTION, or
    PARSING CONSTRAINTS, or
    OUTPUTING SOLUTION then pressing Esc will end the current problem, or if:

    OUTPUTING MAP, or
    OUTPUTING TABLEAU, or
    OUTPUTING ANALYSIS then pressing Esc will skip that particular section and
    continue, otherwise, if LP100 is:

    FINDING FEASIBLE SOLUTION, or
    ADDING CUTPLANE, or
    OPTIMIZING then pressing Esc will cause LP100 to complete the current
    simplex iteration as if it had found an optimal solution.

    Also available is an immediate abort key: <Ctrl><F1>.  Upon pressing this
    key combination, the entire LP100 session is immediately aborted to DOS.
    SEE ALSO: ERRORS
 SPREADSHEET

    LP100 allows the user to use LOTUS 1-2-3 or Symphony as a tool to create
    LP100 data files.  1-2-3 versions through 2.01 and Symphony through 1.1
    can be directly read by LP100.  Future versions of these spreadsheets may
    or may not produce compatible file formats.  If a version later than those
    above is used and LP100 reports an unknown LOTUS file format, then try
    changing the filename extension from WKS, WK1, WRK or WR1 to WKX.  This
    instructs LP100 to disregard the format code of the file.  If this should
    not produce correct results, then 'print' the spreadsheet to an ASCII file.

    If the OUTPUT: specifies that output should be sent to a file with an
    extension of WKS, then LP100 will format the analysis and solution sections
    in LOTUS 1-2-3 version 1A format.  This file can be read by many
    spreadsheet programs, not just those of LOTUS.  The listings, matrix map,
    and tableaux will also be output, but in ASCII format.  If there are no
    errors, this ASCII output will be overwritten by the analysis and solution
    sections in WKS format.

    NOTE: LOTUS 1-2-3 WKS output is functional only in registered versions.

    SEE ALSO: EXAMPLE, LPEDIT.COM
 LPEDIT.COM

    To put a linear program in LP100 compatible form requires an ASCII text
    editor.  Many word processors also allow their output to be in ASCII and
    even some spreadsheets programs can 'print' to an ASCII file.

    Included with the LP100 package is a full-screen text editor that allows
    basic text editing.  To edit a new file, include the new filename on the
    command line after LPEDIT, or, use an existing one to edit an old file.
    E.g., C>LPEDIT EXAMPLE.LP

    Commands are issued via the F keys and are displayed on the last line.
    The maximum file size is 64Kb.  Maximum width of a line is 248 characters.
    The keypad keys are used to position the cursor and <Ctrl> left/right-arrow
    is used to pan left and right.  A minimum of 131K of free RAM is needed by
    the editor.

    NOTE: The F3-PRINT key is used to print marked text only.



    SEE ALSO: LPDEMO.EXE, SPREADSHEET
 LPDEMO.EXE

    This program will guide you step-by-step in the creation and solution
    of EXAMPLE.LP.  Just type C>LPDEMO.

    The program is set to advance to the next step after specific time
    intervals indicated by a countdown timer at the lower-right of the
    LPEDIT screen, but may be user-stepped by pressing a key.

    Pressing <Esc> in the first two screens only will exit the program
    early.

    The program requires that COMSPEC (usually COMMAND.COM) be accessible, &
    that LP100.EXE be in PATH or the current directory, and that EXAMPLE.LP
    be in the current directory.  If these conditions are not met then a
    limited demo is executed.
 ERRORS

    See the following screens for error information.
 - FILE

    File errors occur when LP100 is unable to access either the input data
    file or create the output file.  These type errors cause LP100 to abort
    to the next file in the queue.

    FILE NOT FOUND indicated file was not found
    CANNOT OPEN INPUT indicated file cannot be opened (bad name)
    CANNOT OPEN OUTPUT indicated file cannot be opened (bad name)
 - DECLARATION

    Declaration errors occur when LP100 is unable to properly format the model
    as given.  Since an output channel may not have been assigned, error
    reporting is done on the disposition line of the display screen.  If a
    single error was detected, the error itself, followed by its code, is
    listed on this line.  If, however, more than one error was detected, the
    error message *** MULTIPLE DECLARATION ERRORS is listed followed by a code
    indicating the errors.  LP100 then aborts to the next file in the queue.
    The error codes are:

    00000001 VAR: NOT FOUND          In the case of multiple errors,
    00000010 LTE: NOT FOUND          combinations of these codes will
    00000100 GTE: NOT FOUND          be output, e.g., 00001001 means
    00001000 EQU: NOT FOUND          that VAR: and EQU: were not found
    00010000 FUNCTION: NOT FOUND     in the LP data file.
    00100000 MAX: or MIN: NOT FOUND
    01000000 UNKNOWN CHARACTER IN DECLARATION



    SEE ALSO: KEYWORDS
 - OBJECTIVE FUNCTION

    Objective function errors occur when LP100 is unable to properly read and
    interpret the objective function.  Since an output channel will have been
    made by this point, the error report is sent to the output. The display
    screen will show the error message *** OBJECTIVE FUNCTION ERROR and the
    error code and LP100 aborts to the next file in the queue.  The error
    codes are:

    00000001 FORMULATION BAD NEAR VARIABLE  too many operators (+/-)
    00000010 UNKNOWN VARIABLE #   indicated character/variable not expected
    00000100 DUPLICATE VARIABLE # indicated variable used more than once

    Multiple errors are NOT detected - only the first.







    SEE ALSO: OBJECTIVE FUNCTION
 - CONSTRAINT

    Constraint errors occur when LP100 is unable to properly read and interpret
    a constraint.  Since an output channel will have been made by this point,
    the error report is sent to the output.  The display screen shows the
    error message *** CONSTRAINT ERROR and the error code and LP100 aborts to
    the next file in the queue.  The error codes are:

    00000001 FORMULATION BAD too many operators (+/-)
    00000010 UNKNOWN VARIABLE indicated variable not in FUNCTION:
    00000100 DUPLICATE NAME indicated name used more than once
    00001000 ILLEGAL CONSTRAINT NAME indicated name is illegal
    00010000 LTE: count does not match declaration
    00100000 GTE: count does not match declaration
    01000000 EQU: count does not match declaration
    10000000 MATRIX ALLOCATION OVERRUN count of LTE: + GTE: does not match

    Multiple errors are possible with the additional possibility of erroneous
    errors being indicated (...count does not...) since parsing is stopped
    after the first error.

    SEE ALSO: CONSTRAINTS
 - 123 READ

    When input is taken from a LOTUS file the following errors may occur.
    These cause LP100 to abort to the next file in the queue.

    FILE NOT FOUND indicated file was not found
    CANNOT OPEN INPUT indicated file cannot be opened (bad name)
    UNKNOWN OR CORRUPT LOTUS FILE format code unknown













    SEE ALSO: SPREADSHEET
 - 123 WRITE

    When ouput is sent to a WKS file the following errors may occur.
    These cause LP100 to abort to the next file in the queue.

    LOTUS OUTPUT FUNCTIONAL ONLY IN REGISTERED LP100 VERSIONS
    CANNOT OPEN OUTPUT indicated file cannot be opened (bad name)














    SEE ALSO: SPREADSHEET
 - INFEASIBLE MODEL

    An INFEASIBLE MODEL error occurs if, at the time SIMPLEX algorithm has
    found an optimal solution, an artificial variable remains in the basis
    (solution set) at a positive activity level.  The next file is begun.
















    SEE ALSO: ARTIFICIAL
 - UNBOUNDED MODEL

    An UNBOUNDED MODEL error occurs if, at anytime in the SIMPLEX algorithm, a
    variable can be introduced without bound.  The unbounded variable is
    identified by UNB in the ALT OPT column.  The next file is begun.
















    SEE ALSO: ALTERNATE OPTIMA
 - ABORT

    An ABORT error occurs if the user presses <Esc> to abort the current
    problem that LP100 is solving or if the user presses <Ctrl><F1>
    to immediately abort the LP100 session to the system.

    NOTE: If Esc is pressed in certain LP100 routines, that and only that
          routine is exited early.  Output will indicate this if it occurs.













    SEE ALSO: ABORTING
 - RUN-TIME

    A RUN-TIME error may occur under certain circumstances.  These are rare
    and in such an event, the LP100 session is aborted to DOS.

                 6 NUMBER OVERFLOW      24 DEVICE TIMEOUT
                 7 OUT OF MEMORY        25 DEVICE FAULT
                11 DIVISION BY ZERO     27 OUT OF PAPER
                14 OUT OF NEAR SPACE    61 DISK FULL

            52 to 76 are mostly hardware/disk related errors.

    If a run-time error continues to occur see REPORT BUGS TO...

    In addition to the RUN-TIME error number, the MODULE and LEVEL at which
    the error occured are indicated on the disposition line.

    Run-time errors 7 and 14 are handled specially by LP100.  The message
    << OUT OF MEMORY >> will be displayed on the disposition line with
    no MODULE or LEVEL report available.  This generally means that the
    problem you have specified is too large.

 REPORT BUGS TO...

    Though LP100 has been through significant testing, minor bugs may occur.
    If you experience any problems in using LP100 write a complete description
    of the problem using BUG REPORT FORM form as a guide.  Also include a
    listing of the model, and if possible, include the model on a 5 1/4" 360K
    floppy.  Send this to:

                         Cornel Huth
                         ATTN: LP100 v2.10 REPORT
                         6402 Ingram Rd.
                         San Antonio, TX  78238

    If necessary, call (512)684-8065 (7PM-9PM CENTRAL TIME)

    Assistance can be given ONLY in the use of LP100, NOT with the
    linear programs/models that need to be formulated.  For such help,
    consult with those experienced in operations research, or seek such
    information from the library of any good college.


    SEE ALSO: BUG REPORT FORM
 - BUG REPORT FORM


     Program: LP100  Ver: 2.10  S/N:_______-__ Have you registered? __

        Name: ________________________________________________________
        Addr: ________________________________________________________
              ________________________________________________________
              ________________________________________________________
       Phone: (     ) ______ - _________ ext. ______ (only if collect)


    Describe the problem, the circumstances of its happening, and
    any errors reported by LP100 or the system.  Include a description of
    the hardware and operating system and any other software loaded in
    memory.



    Any suggestions for improvement will be appreciated.

    SEE ALSO: REPORT BUGS TO...
 SPECIFICATIONS                  Version 2.10

    MINIMUM REQUIREMENTS: 256K IBM-PC or compatible, DOS 2.1, one floppy drive.

    CHKDSK must report at least 215000 bytes free to start LP100.

    The maximum problem size depends on available memory.  Use this formula
    to APPROXIMATE the number of K bytes needed by LP100 as displayed in the
    upper-right corner of the display screen at start-up (at 99%).

     {[(VAR:+LTE:+GTE:+EQU:+2)*(LTE:+GTE:+EQU:+1)*8]+32000}/1024 = K RAM needed

    With 440K RAM free, over 48,000 total matrix elements are possible (this
    is equal to 400 variables and 100 constraints).

    The LP100 programs were compiled with the Microsoft QuickBASIC 4.0 compiler
    and total approximately 6200 lines of source code.

    The 8087/80287 math coprocessor is used if available.

    This version of LP100 uses BIOS for video output and has been used in the
    DoubleDOS multitasking environment running in the background at >= 50%.
 INCLUDED FILES LIST             Version 2.10

    README          initial instructions & information
    LP100.EXE       linear programming optimizer        161561 bytes in size
    LPDEMO.EXE      demonstration program                45077 bytes
    LPHELP.EXE      help program                         45347 bytes
    LPEDIT.COM      full-screen ASCII text editor         3000 bytes
    LP100.HLP       data file used by the help program
    LP100.TXT       LP100 User Guide in ASCII format

    BATCHRUN.BLP    ASCII batch file example

    EXAMPLE.LP      ASCII LP data file (simple example)
    BUDGETSS.LP     ASCII LP data file (budget example)
    INTEGER.ILP     ASCII LP data file (all-integer example)

    EXAMPLE.WKS     WKS spreadsheet LP data file (similar to EXAMPLE.LP)
    XOUT.WKS        WKS spreadsheet LP data output from EXAMPLE.WKS

    NOTE: Be sure to make a working copy of this disk.
 SHAREWARE

    Shareware is a means that software authors have of releasing their
    product without the overhead costs of marketing and packaging.  This
    gives users the option of obtaining a quality product at a truly
    reasonable price.  It also may be the only means of obtaining software
    that is not available elsewhere, at any price.

    What this means is that users can use the product on a trial basis
    without any obligation to purchase the software.  Generally, users may
    freely distribute the product to others provided that any licensing
    agreement or stipulations that the author has specified be followed.
    The shareware concept does not allow a user to continue using the product
    after the trial period unless the license agreement has been fulfilled or
    otherwise been given permission by the author.

    ***************************** NOTICE **********************************

    All LP100 *.EXE programs in the INCLUDED FILES LIST are the sole
    property of Cornel Huth and are Copyright 1988,1989 by Cornel Huth.

    SEE ALSO: LICENSE AGREEMENT, REGISTRATION FORM
 - LICENSE AGREEMENT

    USAGE:  LP100 may be used on a trial basis for 30 days.  After this, the
    user promises to fulfill this license agreement or discontinue using LP100.
    By using LP100 you agree to abide by this LICENSE AGREEMENT.

    FULFILLMENT:  A limited license for using LP100 on a single computer may
    be purchased for $45.00.  Site licenses are $180.00.  After receiving
    payment, a current, registered version and receipt of payment is sent.

    DISTRIBUTION:  LP100 may be distributed without the author's permission
    only if the following three stipulations are followed:

    1.  The LP100 package must be distributed complete, including ALL files
        listed in INCLUDED FILES LIST.

    2.  The LP100 package CANNOT be sold for profit.  Recovery of costs
        associated with distribution is allowed (NO PROFIT).

    3.  ONLY the SHAREWARE version of the LP100 package may be distributed.

    SEE ALSO: SHAREWARE, REGISTRATION FORM
 - REGISTRATION FORM

    Name of licensee: ________________________________________________
                            (to appear on title screen and output)

    Amount paid: $ ____________ (1-$45.00, 2-90.00, 3-135.00, 4>180.00)

    Comments:  _________________________________________________________
               _________________________________________________________

     Contact:  _____________________ Phone:(   ) ____ - ______ ext. ____

               Would you like to be added to our mailing list? _________

     Mail to:  _________________________________________________________
               _________________________________________________________
               _________________________________________________________

     Send payment to:  Cornel Huth
                       ATTN: LP100 v2.10 REGISTRATION
                       6402 Ingram Rd.
                       San Antonio, TX  78238
 TRADEMARKS

 * Microsoft and QuickBASIC are registered trademarks of Microsoft Corp.
 * Lotus, 1-2-3, Symphony are registered trademarks of Lotus Development Corp.
 * VP-PLANNER is a registered trademark of Paperback Software International
 * IBM is a registered trademark of International Business Machines Corp.
 * DoubleDOS is a registered trademark of SoftLogic Solutions, Inc.
 * ScanSoft, LP100, LP OPTIMIZER are trademarks of ScanSoft, Inc.
________________________________________________________________________________


                              SUPPORT SHAREWARE.
 ENDOFHELP terminate help items
