You are on page 1of 485

1

CHAPTER

1
BLOCK 1 PREFACE

1
Of all, there were three things:
The certainty that we are always starting ...
The certainty that we need to continue ...
Rest assured that we will be interrupted before continuing ...
Therefore, we must:
Make of interruption, a path ...
Of the fall, a dance step ...
From fear, a ladder ...
From the dream, a bridge ...
Of the search, a meet. .
Fernando Pessoa

2
Operations management is at the heart of the great changes that are taking place in
today's business environment.

Competitive pressures for higher quality, faster response time, superior service and full
customization can only be met through more intelligently executed business operations.

The objective of this work is not to teach linear programming, but to present a collection of
problems modeled in LINGO, in an auxiliary way in the development of new models or
similar.

This type of modeling is designed for the use of large volumes of data, which can be made
available in Database, Text Spreadsheets or Text Files, through OLE, ODBC and OLE
functions.

The cases included in this work do not use external files, however, adjustments can be
made to this by consulting the Lingo manual, available on Lindo Inc's website.

Thus, I hope that this content can be useful to the esteemed reader in the use of
technology in their projects.

Author

3
4
BLOCK 2 LINGO

• Approach
• Key benefits of LINGO
• Overview
• Model Class
• Toolbar
• Menu Commands
• File type

5
C1-B2 LINGO APPROACH

LINGO - Optimization Modeling Software for Linear, Nonlinear, and Integer Programming

LINGO combines a full featured modeling environment with a set of solvers for linear, integer, and nonlinear models.
Beginning modelers will appreciate the easy, natural style of model expression and the comfortable Windows interface.

Power modelers will love the option to use the advanced modeling language, library of mathematical functions, and the
ability to read data from spreadsheets, databases, an LINGO is a comprehensive tool designed to make building and
solving Linear, Nonlinear (convex & nonconvex/Global), Quadratic, Quadratically Constrained, Second Order Cone,
Semi-Definite, Stochastic, and Integer optimization models faster, easier and more efficient.

LINGO provides a completely integrated package that includes a powerful language for expressing
optimization models, a full featured environment for building and editing problems, and a set of fast
built-in solvers.

The recently released LINGO includes a number of significant enhancements and new features. Click
here for more information on these new features.

6
C1-B2 LINGO Key Benefits of LINGO

EASY MODEL EXPRESSION


LINGO will help you cut your development time. It lets you formulate your linear, nonlinear and integer problems
quickly in a highly readable form. LINGO's modeling language allows you to express models in a straightforward
intuitive manner using summations and subscripted variables -- much like you would with pencil and paper. Models
are easier to build, easier to understand, and, therefore, easier to maintain. LINGO can exploit multiple CPU cores for
faster model generation.

CONVENIENT DATA OPTIONS


LINGO takes the time and hassle out of managing your data. It allows you to build models that pull information
directly from databases and spreadsheets. Similarly, LINGO can output solution information right into a database or
spreadsheet making it easier for you to generate reports in the application of your choice.

POWERFUL SOLVERS
LINGO is available with a comprehensive set of fast, built-in solvers for Linear, Nonlinear (convex & nonconvex/
Global), Quadratic, Quadratically Constrained, Second Order Cone, Stochastic, and Integer optimization. You never
have to specify or load a separate solver, because LINGO reads your formulation and automatically selects the
appropriate one.

MODEL INTERACTIVELY OR CREATE TURN-KEY APPLICATIONS


You can build and solve models within LINGO, or you can call LINGO directly from an application you have written.
For developing models interactively, LINGO provides a complete modeling environment to build, solve, and analyze
your models. For building turn-key solutions, LINGO comes with callable DLL and OLE interfaces that can be called
from user written applications. LINGO can also be called directly from an Excel macro or database application.

EXTENSIVE DOCUMENTATION AND HELP


LINGO provides all of the tools you will need to get up and running quickly. You get the LINGO User Manual
(in printed form and available via the online help), which fully describes the commands and features of the program.
Also included with super versions and larger is a copy of Optimization Modeling with LINGO, a comprehensive
modeling text discussing all major BLOCKS of linear, integer and nonlinear optimization problems. LINGO also
comes with dozens of real-world based examples for you to modify and expand.

DISTRIBUTORS U.S. DISTRIBUTORS BRAZIL


U.S. and all countries not listed below: PRODUTTARE Consultores Associados

LINDO Systems, Inc. Rua Honorio Silveira Dias, 1550

1415 N. Dayton Bairro Higienopolis

Chicago, IL 60642 90540-070 Porto Alegre RS Brasil

Contact: Mark Wiley Contact: Flavio Pizzato

Tel: (312) 988-7422 Phone ( fax ) : +(55) 51 3024 5536

Fax: (312) 988-9065 +(55) 51 3022 8515

7
C1-B2 LINGO OVERVIEW

LINGO is a comprehensive tool designed to make building and solving mathematical optimization models easier and
more efficient. LINGO provides a completely integrated package that includes a powerful language for expressing
optimization models, a full-featured environment for building and editing problems, and a set of fast built-in solvers
capable of efficiently solving most classes of optimization models. LINGO's primary features include:

Algebraic Modeling Language


LINGO supports a powerful, set-based modeling language that allows users to express math programming models
efficiently and compactly. Multiple models may be solved iteratively using LINGO's internal scripting capabilities.

Convenient Data Options


LINGO takes the time and hassle out of managing your data. It allows you to build models that pull information
directly from databases and spreadsheets. Similarly, LINGO can output solution information right into a database or
spreadsheet making it easier for you to generate reports in the application of your choice. Complete separation of
model and data enhance model maintenance and scalability.

Model Interactively or Create Turnkey Applications


You can build and solve models within LINGO, or you can call LINGO directly from an application you have written.
For developing models interactively, LINGO provides a complete modeling environment to build, solve, and analyze
your models. For building turn-key solutions, LINGO comes with callable DLL and OLE interfaces that can be called
from user written applications. LINGO can also be called directly from an Excel macro or database application. LINGO
currently includes programming examples for C/C++, FORTRAN, Java, C#.NET, VB.NET, ASP.NET, Visual Basic,
Delphi, and Excel.

Extensive Documentation and Help


LINGO provides all of the tools you will need to get up and running quickly. You get the LINGO Users Manual (in
printed form and available via the online Help), which fully describes the commands and features of the program. Also
included with Super versions and larger is a copy of Optimization Modeling with LINGO, a comprehensive modeling
text discussing all major classes of linear, integer and nonlinear optimization problems. LINGO also comes with
dozens of real- world based examples for you to modify and expand.

Powerful Solvers and Tools


LINGO is available with a comprehensive set of fast, built-in solvers for linear, nonlinear (convex & nonconvex),
quadratic, quadratically constrained, and integer optimization. You never have to specify or load a separate solver,
because LINGO reads your formulation and automatically selects the appropriate one. A general description of the
solvers and tools available in LINGO follows:

General Nonlinear Solver


LINGO provides both general nonlinear and nonlinear/integer capabilities. The nonlinear license option is required in
order to use the nonlinear capabilities with LINDO API.

Global Solver
The global solver combines a series of range bounding (e.g., interval analysis and convex analysis) and range
reduction techniques (e.g., linear programming and constraint propagation) within a branch-and-bound framework to
find proven global solutions to non-convex nonlinear programs. Traditional nonlinear solvers can get stuck at
suboptimal, local solutions. This is no longer the case when using the global solver.

8
C1-B2 LINGO OVERVIEW

Multistart Solver
The multistart solver intelligently generates a sequence of candidate starting points in the solution space of NLP and
mixed integer NLPs. A traditional NLP solver is called with each starting point to find a local optimum. For non-convex
NLP models, the quality of the best solution found by the multistart solver tends to be superior to that of a single solution
from a traditional nonlinear solver. A user adjustable parameter controls the maximum number of multistarts to be
performed.

Barrier Solver
The barrier solver is an alternative way for solving linear, quadratic and conic problems. LINGO's state-of-the-art
implementation of the barrier method offers great speed advantages for large-scale, sparse models.

Simplex Solvers
LINGO offers two advanced implementations of the primal and dual simplex methods as the primary means for solving
linear programming problems. Its flexible design allows the users to fine tune each method by altering several of the
algorithmic parameters.

Mixed Integer Solver


The mixed integer solver’s capabilities of LINGO extend to linear, quadratic, and general nonlinear integer models. It
contains several advanced solution techniques such as cut generation, tree reordering to reduce tree growth
dynamically, and advanced heuristic and resolve strategies.

Stochastic Solver
The stochastic programming solver supports decision making under uncertainty through multistage stochastic models
with recourse. The user describes the uncertainty by identifying the distribution functions, either built-in or user-defined,
describing each random variable. The stochastic solver will optimize the model to minimize the cost of the initial stage
plus the expected cost of future recourse actions over the planning horizon. Advanced sampling modes are also
available for approximating continuous distributions. LINGO's stochastic solver also supports chance-constrained
models, where one or more sets of constraints are allowed to be violated according to a specified probability.

Model and Solution Analysis Tools


LINGO includes a comprehensive set of analysis tools for debugging infeasible linear, integer and nonlinear programs,
using advanced techniques to isolate the source of infeasibilities to the smallest subset of the original constraints. It also
has tools to perform sensitivity analysis to determine the sensitivity of the optimal basis to changes in certain data
components (e.g. objective vector and right-hand-size values).

Quadratic Recognition Tools


The QP recognition tool is a useful algebraic pre-processor that automatically determines if an arbitrary NLP is actually a
convex, quadratic model. QP models may then be passed to the faster quadratic solver, which is available as part of the
barrier solver option. When the barrier solver option is combined with the global option, LINGO will automatically
recognize conic models, in addition to convex quadratic models.

Linearization Tools
Linearization is a comprehensive reformulation tool that automatically converts many non-smooth functions and
operators (e.g., max and absolute value) to a series of linear, mathematically equivalent expressions. Many non-smooth
models may be entirely linearized. This allows the linear solver to quickly find a global solution to what would have
otherwise been an intractable nonlinear problem.

9
C1-B2 LINGO VERSION

Maximum Problem Dimensions


Some versions of LINGO limit one or more of the following model properties: total variables, integer variables,
nonlinear variables, global variables, and constraints. The total variable limit is on the total number of optimizable
variables in your model (i.e., variables LINGO was unable to determine as being fixed at a particular value). The
integer variable limit applies to the total number of optimizable variables restricted to being integers with either the
@BIN or @GIN functions. The nonlinear variable limit applies to the number of optimizable variables that appear
nonlinearly in the model’s constraints. As an example, in the expression: X + Y, both X and Y appear linearly.
However, in the expression:

X ^ 2 + Y, X appears nonlinearly while Y appears linearly. Thus, X would count against the nonlinear variable limit. In
some cases, nonlinear variables are allowed only if you have purchased the nonlinear option for your LINGO
software. The global variable limit applies to the total number of nonlinear variables when using the global solver. The
constraint limit refers to the number of formulas in the model that contain one or more optimizable variables. Keep in
mind that a single @FOR function may generate many constraints.

The maximum sized problem your LINGO can handle depends on the version you have. The current limits for the
various versions are:

You can also determine the limits of your version by selecting the About LINGO command from the Help menu in
Windows, or by typing HELP at the command-line prompt on other platforms. If you determine you need a larger
version of LINGO, upgrades are available from LINDO Systems. Please feel free to contact us for pricing and
availability.

10
C1-B2 MODEL CLASS

EXTENDED SOLVER STATUS BOX

SOLVER TYPE: BNP SOLVER BRANCH-AND-BOUND GLOBAL MULTISTART

BEST OBJ: The objective value of the best solution found so far.

OBJ BOUND: The theoretical bound on the objective.

STEPS: The number of steps taken by the extended solver.

ACTIVE: The number of active subproblems remaining to be analyzed.

ABBREV MODEL CLASS DESCRIPTION MODEL CLASS FIELD

All expressions are linear and the model contains no integer restrictions
LP LINEAR PROGRAM
on the variables.

All expressions are linear or quadratic and there are no integer


QP QUADRATIC PROGRAM
restrictions.

The model is a conic (second-order cone) program and all variables are
CONE CONIC PROGRAM
continuous.

At least one of the relationships in the model is nonlinear with respect to


NLP NONLINEAR PROGRAM
the variables.

MIXED INTEGER LINEAR All expressions are linear, and a subset of the variables is restricted to
MILP
PROGRAM integer values.

MIXED INTEGER QUADRATIC All expressions are either linear or quadratic and a subset of the
MIQP
PROGRAM variables has integer restrictions.

MIXED INTEGER CONIC The model is a conic (second-order cone) program, and a subset of the
MICONE
PROGRAM variables is restricted to integer values.

INTEGER NONLINEAR At least one of the expressions in the model is nonlinear, and a subset
MINLP of the variables has integer restrictions. In general, this class of model
PROGRAM will be very difficult to solve for all but the smallest cases.

PURE INTEGER LINEAR All expressions are linear, and all variables are restricted to integer
PILP
PROGRAM values.

PURE INTEGER QUADRATIC All expressions are linear or quadratic and all variables are restricted to
PIQP
PROGRAM integer values.

PURE INTEGER CONIC


PROGRAM The model is a conic (second-order cone) program, and all the variables
PICONE
are restricted to integer values.
(Second-Order Cone)

PURE INTEGER NONLINEAR At least one of the expressions in the model is nonlinear, and all
PINLP variables have integer restrictions. In general, this class of model will be
PROGRAM very difficult to solve for all but the smallest cases.

11
C1-B2 LINGO TOOL BAR

The WindowsToolbar
LINGO's toolbar for its Windows version is illustrated in the following graphic:

12
C1-B2 LINGO TOOL BAR

The Mac and LinuxToolbar


LINGO's toolbar for its Mac and Linux versions is illustrated in the following graphic:

13
C1-B2 LINGO MENU COMMANDS

14
C1-B2 LINGO MENU COMMANDS

15
C1-B2 LINGO MENU COMMANDS

16
C1-B2 LINGO MENU COMMANDS

File|New
The New command opens a new, blank window. When you select the New command, you will be presented with the
following dialog box:

You may then select the type of file you want to create. The file must be one of the four types:

17
C1-B2 FILE EXTENSION

1. LINGO Model (*.lg4)


The LG4 format was established with release 4.0 of LINGO. LG4 is the primary file format used by LINGO to store
models under Windows and is not used on other platforms. This format supports multiple fonts, custom formatting,
and Object Linking and Embedding (OLE). LG4 files are saved to disk using a custom binary format. Therefore, these
files can't be read directly into other applications or transported to platforms other than Windows. Use the LNG
format (discussed next) to port a file to other applications or platforms.

2. LINGO Model (Text Only) (*.lng)


The LNG format is a portable format for storing your models. It is the standard file format used by LINGO on non-
Windows platforms. LNG files are saved to disk as ASCII text and may be read into any application or word
processor that supports text files. The LNG file format is supported by LINGO on all platforms, and LNG files can be
ported from one platform to another. LNG files do not support multiple fonts, custom formatting, or OLE embedding
of objects.

3. LINGO Data (*.ldt)


LDT files are data files that are typically imported into LINGO models using the @FILE function. @FILE can only read
text files. Given this, all LDT files are stored as ASCII text. LDT files do not support multiple fonts, custom formatting,
or OLE embedding.

4. LINGO Command Script (*.ltf)


LTF files are LINGO command scripts. These are ASCII text files containing a series of LINGO commands that can be
executed with the File|Take Commands command. For more information on commands that can be used in a LINGO
script, refer to Command-line Commands. LTF files do not support multiple fonts, custom formatting, or OLE.

5. LINDO Model (*.ltx)


LTX files are model files that use the LINDO syntax. Longtime LINDO users may prefer LINDO syntax over LINGO
syntax. LINDO syntax is convenient for quickly entering small to medium-sized linear programs. As long as a file has
an extension of .ltx, LINGO will assume that the model is written using LINDO syntax. Readers interested in the
details of LINDO syntax may contact LINDO Systems to obtain a LINDO user’s manual.

When you simply press either the New toolbar button or the F2 key, LINGO assumes you want a model file. Thus,
LINGO does not display the file type dialog box and immediately opens a model file of type LG4. If you have used the
Solver|Options command to change the default model file format from LG4 to LNG, LINGO will automatically open a
model of type LNG when you press either the New button or the F2 key.

You may begin entering text directly into a new model window or paste in text from other applications using the
Windows clipboard and the Edit|Paste command in LINGO.

18
BLOCK 3 Manual & Models

• Optimization Modeling
• User’s Manual
• Models

19
C1-B3 LINGO Optimization Modeling with LINGO by Linus Schrage

Click here to Download Optimization Modeling with LINGO by Linus Schrage

20
C1-B3 LINGO User’s Manual

Download LINGO User’s Manual (PDF)


LINGO is a comprehensive tool designed to help you build and solve linear, nonlinear, and integer optimization models
quickly, easily, and efficiently. LINGO includes a powerful modeling language, a full-featured environment for building
and editing problems, the ability to read and write to Excel and databases, and a set of fast built-in solvers.

21
C1-B3 LINGO Models

22
BLOCK 4 CONTENT

23
C2-B4 Solving Problems with LINGO Number of Cases. ( Top/Down )

NUMBER OF CASES

Block Name Count %

B1 Product Mix 27 20.61

B6 Transport 15 11.45

B5 Aviation 9 6.87

B2 Blend 9 6.87

B10 Schedule 8 6.11

B7 Agriculture 8 6.11

B12 Metallurgy 7 5.34

B14 Investment 6 4.58

B11 Cutting 6 4.58

B4 Diet 6 4.58

B9 Refinery 5 3.82

B3 Finance 4 3.05

B13 Fertilizer 4 3.05

B16 Classics 3 2.29

B15 Clinic 3 2.29

B18 Logistics 3 2.29

B8 Construction 3 2.29

B20 Assembly Line Balancing 2 1.53

B17 Dynamic 2 1.53

B19 Energy 1 0.76

Total 131 100.00

24
2
1
CHAPTER
BLOCK 1 BLOCKS: PRODUCT MIX

What should be the composition of products to be manufactured by a company in order to achieve


maximum profit, with the limitations or requirements of the buyer market and the production capacity of
the factory being respected?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

2
C2-B1 Solving Problems with LINGO Engines | Case 1 | Product Mix

GOAL

1 An engine factory produces three models in its three factories: model 1100 cc, 1400 cc and 1800 cc. A
union conflict foresees, in the short term, a prolonged strike at the factory 1.

To address this situation, the board decided to prepare a special production and sales plan for the next
period, assuming there will be no production at factory 1 during the strike.

During this same period, the capacity of the Plant 2 is:


Blocks
• 3000 engines of 1100 cc, if only this model were manufactured;
• Product Mix
• 8000 engines of 1400 cc, if only this model were manufactured;
• Blend
• 2000 engines of 1800 cc, if only this model were manufactured;
• Finance
• Or any appropriate combination of these models.
• Investments
During this same period, the capacity of Plant 3 is:
• Diet
• 4000 engines of 1100 cc, if only this model were manufactured;
• Aviation
• 8000 engines of 1400 cc, if only this model were manufactured;
• Transport
• Or any appropriate combination of these two models.
• Agriculture
• The 1800 cc model is not produced in this factory
• Construction
The company has entered into commitments that require it to supply at least 1000 engines of 1800 cc
• Refinery for export.

• Schedule On the other hand, due to the decline in the domestic demand for 1100 cc engines and 1800 cc, the
marketing department estimates 1000 and 1500 units of sales of these two models respectively.
• Cutting
• Metallurgy Since the 1400 cc model is currently highly commercially successful, no limitations on its
commercialization are envisaged. Determine the production plan that maximizes profit.
• Fertilizer
• Clinic
Motor Production Models Plant 2 Plant 3 Demand
• Classic
• Dynamic un M1100 3000 4000 1000
• Logistics
Capacity un M1400 3000 8000 8000
• Energy
• Assembly Line un M1800 2000 0 1500

Models Cost Price


Keywords:
$ M1100 875.00 900.00 1,150.00
• Factory
• Engines Cost/Price $ M1400 1,260.00 1,100.00 1,450.00

• Plant $ M1800 1,450.00 0.00 1,800.00

Source:
• Book 2
• Page 231

3
C2-B1 Solving Problems with LINGO Engines | Case 1 | Product Mix
MODEL:
SETS:
MOTORS:DEMAND, PRICE ;
FACTORY:;
ROUTES( MOTORS, FACTORY): COST, VOLUME, CAPACITY;
ENDSETS
DATA:
! Products attributes;
MOTORS, DEMAND, PRICE =
M1100 1000 1150
M1400 8000 1450
M1800 1500 1800;
! Resources attributes;
FACTORY =
PLANT2
PLANT3;
! Engine cost Plant2 Plant3;
COST = 875 900 ! M1100;
1260 1100 ! M1400;
1450 0; ! M1800;

! Manufacturing capacity Plant2 Plant3;


CAPACITY = 3000 4000 ! M1100;
3000 8000 ! M1400;
2000 0; ! M1800;
ENDDATA
SUBMODEL MAX1:
[OBJ] MAX = @SUM( ROUTES( I, J):PRICE(I) * VOLUME( I, J) - COST( I,J) * VOLUME( I,J));
! The demand constraints;
@FOR( MOTORS( I):
[DEM] @SUM( FACTORY( J): VOLUME( I, J)) = DEMAND( I));
! The capacity constraints;
@FOR( ROUTES( I,J): VOLUME(I,J) <= CAPACITY(I,J));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " UNIT COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " CAPACITY (un):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " PRICE (un):", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1)," SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J)| VOLUME( I, J) #GT# 0: ' ',FACTORY( J),' produce:',
@FORMAT(VOLUME( I, J),'%4g'),'un ', MOTORS( I), ' x Price:$',
@FORMAT(PRICE(I),'%7.2f'), ' = Revenue:$',
@FORMAT(PRICE(I) * VOLUME( I, J),'%11.2f'), @NEWLINE(1),46*' ', ' - Cost:$',
@FORMAT(COST( I,J) * VOLUME( I, J),'%11.2f'), @NEWLINE(1),46*' ', ' = Profit:$',
@FORMAT((PRICE(I) * VOLUME( I, J)) - (COST( I,J) * VOLUME( I, J)),'%11.2f'),
@NEWLINE( 2));
@WRITE(' TOTAL:', 39*' ','= Revenue:$',
@FORMAT(@SUM(ROUTES(I,J): PRICE(I) * VOLUME( I, J)),'%11.2f'), @NEWLINE(1),46*' ', ' - Cost:$',
@FORMAT(@SUM(ROUTES(I,J): COST( I,J) * VOLUME( I, J)),'%11.2f'), @NEWLINE(1),46*' ', ' = Profit:$',
@FORMAT(@SUM(ROUTES(I,J): PRICE(I) * VOLUME( I, J) - (COST( I,J) * VOLUME( I, J))),'%11.2f'),@NEWLINE(2));
! Execute the graph;
@CHARTSVBAR( 'Production capacity per plant', 'Plant','Unit', CAPACITY);
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

4
C2-B1 Solving Problems with LINGO Engines | Case 1 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

❖ SOLUTION
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

5
C2-B1 Solving Problems with LINGO Engines | Case 1 | Product Mix

6
C2-B1 Solving Problems with LINGO Shoemaker | Case 2 | Product Mix

GOAL

2 A shoemaker makes 6 shoes per hour, if he only makes shoes, and 5 belts per hour, if he only
makes belts.

Resources / Products Shoe Belt Available

Leather un 2 1 6
Blocks
Time Spent min 10 12 60
• Product Mix
Unit Profit $ 5.00 2.00 -
• Blend
• Finance Formulate the model of the system of production of the cobbler, in order to obtain the
maximum revenue per hour.
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 2
• Page 224

7
C2-B1 Solving Problems with LINGO Shoemaker | Case 2 | Product Mix

MODEL:
SETS:
PRODUCT : PRICE, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
LEATHER 6
TIMESPENT 60;

! Product attributes;
PRODUCT, PRICE =
SHOES 5
BELTS 4;

! Required SHOES BELTS;


USAGE = 2 1 ! Leather (un);
10 12; ! TimeSpent (min);
ENDDATA
SUBMODEL MAX2:
MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " REQUIRED (un, min):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (un, min):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR(PRODUCT(J): ' ', Product(J),', Produce:',
@FORMAT(produce( J),'%2.0f'),'un x ', 'Unit Profit: $',
@FORMAT(Price( J),'%4.2f'), ' = ', 'Total: $',
@FORMAT(produce( J) * Price( J),'%5.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX2);
ENDCALC
END

8
C2-B1 Solving Problems with LINGO Shoemaker | Case 2 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
REQUIRED (un, min):
SHOES BELTS
LEATHER 2.000000 1.000000
TIMESPENT 10.00000 12.00000

AVAILABLE (un, min):


LEATHER 6.000000
TIMESPENT 60.00000

PRICE:
SHOES 5.000000
BELTS 4.000000

SOLUTION
Global optimal solution found.
Objective value: 21.42857
Infeasibilities: 0.000000
❖ SOLUTION
Model Class: LP
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

OPTIMAL PRODUCTION PROGRAM:


SOLUTION
SHOES, Produce: 1un x Unit Profit: $5.00 = Total: $ 4.29
Global optimal solution found.
BELTS, Produce: 4un x Unit Profit: $4.00 = Total: $17.14
Objective value: 21.42857
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


SHOES, Produce: 1un x Unit Profit: $5.00 = Total: $ 4.29
BELTS, Produce: 4un x Unit Profit: $4.00 = Total: $17.14

9
C2-B1 Solving Problems with LINGO Leather Belts | Case 3 | Product Mix

GOAL

3 One company manufactures 2 models of leather belts. The MOD1 model, of better quality,
requires twice the manufacturing time compared to the MOD2 model ( scale ). If all the belts are
of the model MOD2, at most 1000 units per day can be produced.

Resources / Products Mod1 Mod2 Available


Blocks
Raw Material ( Buckle ) un 400 700 1,100
• Product Mix
Production Scale un 2 1 1,000
• Blend
• Finance Unit Profit $ 4.00 3.00 -

• Investments
What is the optimal production program that maximizes the company's total daily revenue?
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 2
• Page 224

10
C2-B1 Solving Problems with LINGO Leather Belts | Case 3 | Product Mix
MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
BUCKLE_A 400
BUCKLE_B 700
SCALE 1000;

! Products attributes;
PRODUCT, PROFIT =
MOD1 4
MOD2 3;

! Required MOD1 MOD2;


USAGE = 1 0 ! BUCKLE_A;
0 1 ! BUCKLE_B;
2 1; ! SCALE;
ENDDATA
SUBMODEL MAX3:
MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;

@SET('TERSEO',1);

! Post status windows, 1 Yes, 0 No;

@SET('STAWIN',0);

! Data block;

@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE:", @NEWLINE( 1));


@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE:", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX3);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J) | I #LE# 1:' ', Product(J),', Produce:',
@FORMAT(produce( J),'%4.0f'),'un using ',
@FORMAT(RESOURCE(I),'-8s'), ' x ','Unit PROFIT:$',
@FORMAT(PROFIT( J),'%4.2f'), ' = ','Total:$ ',
@FORMAT(produce( J) * PROFIT( J),'%7.2f'),
@NEWLINE( 1));
! Execute the graph;
@CHARTPIE( 'Product Mixer Model', 'Produce', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX3);
ENDCALC
END

11
C2-B1 Solving Problems with LINGO Leather Belts | Case 3 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE:
MOD1 MOD2
BUCKLE_A 1.000000 0.000000
BUCKLE_B 0.000000 1.000000
SCALE 2.000000 1.000000

AVAILABLE:
BUCKLE_A 400.0000
BUCKLE_B 700.0000
SCALE 1000.000

PRICE:
MOD1 4.000000
MOD2 3.000000

SOLUTION
Global optimal solution found.
Objective value: 2700.000
Objective bound 2700.000
Infeasibilities: 0.000000

❖ SOLUTION
Model Class: PILP
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
OPTIMAL PRODUCTION PROGRAM:
MOD1, Produce: 150un using BUCKLE_A x Unit price:$4.00 = Total:$ 600.00
SOLUTION
MOD2, Produce:
Global optimal 700un using
solution BUCKLE_A x Unit price:$3.00 = Total:$ 2100.00
found.
Objective value: 2700.000
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


MOD1, Produce: 150un using BUCKLE_A x Unit PROFIT:$4.00 = Total:$ 600.00
MOD2, Produce: 700un using BUCKLE_A x Unit PROFIT:$3.00 = Total:$ 2100.00 1

12
C2-B1 Solving Problems with LINGO Resource Reutilization | Case 4 | Product Mix

GOAL

4 A company, after a process of rationalization of production, has available with 3 productive


resources, R1, R2 and R3, that can be used to produce two products P1 and P2

Resources / Products P1 P2 Available


Blocks R1 un 2 4 100
• Product Mix Assembler Line R2 un 3 2 90
• Blend
R3 un 5 3 120
• Finance
Unit Profit $ 120.00 150.00 -
• Investments
• Diet
• Aviation So, what is the monthly output of P1 and P2 that brings the highest revenue to the company?

• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities

Source:
• Book 2
• Page 225

13
C2-B1 Solving Problems with LINGO Resource Reutilization | Case 4 | Product Mix

MODEL:
SETS:
PRODUCT : PRICE, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes ;
RESOURCE, AVAILABLE =
R1 100
R2 90
R3 120;
! Products attributes;
PRODUCT, PRICE =
P1 120
P2 150;

! Required P1 P2;
USAGE = 2 4 ! R1;
3 2 ! R2;
5 3; ! R3;
ENDDATA
SUBMODEL MAX4:
[OBJ] MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r);
@GIN( PRODUCE ); );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " PRODUCTIVE RESOURCES BY UNIT):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (un):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX4);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( product( J):' ',
@FORMAT(Product(J), '-2s'),': ',
@FORMAT(produce( J),'%2.0f'),'un x ', 'Unit Profit: $',
@FORMAT(Price( J),'%4.2f'), ' = ', 'Total: $',
@FORMAT(produce( J) * Price( J),'%4.2f'),
@NEWLINE( 1));
! Execute the Graph;
@CHARTPIE( 'Product Mixer Model', 'Produce', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX4);
ENDCALC
END

14
C2-B1 Solving Problems with LINGO Resource Reutilization | Case 4 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
PRODUCTIVE RESOURCES BY UNIT:
P1 P2
R1 2.000000 4.000000
R2 3.000000 2.000000
R3 5.000000 3.000000

AVAILABLE (un):
R1 100.0000
R2 90.00000
R3 120.0000

PRICE:
P1 120.0000
P2 150.0000

SOLUTION
Global optimal solution found.
Objective value: 4290.000
Objective bound: 4290.000
Infeasibilities:
❖ SOLUTION 0.000000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Model Class: PILP
SOLUTION
OPTIMAL PRODUCTION PROGRAM:
Global optimal solution found.
P1: 12un x Unit Profit: $120.00 = Total: $1440.00
Objective value: 4290.000
P2: 19un x Unit Profit: $150.00 = Total: $2850.00
Objective bound: 4290.000
Infeasibilities: 0.000000
SLACK/SURPLUS:
AVAILAB PRODUCE_P1 PRODUCE_P2 SLACK
OPTIMAL PRODUCTION PROGRAM:
R1 100.0000 24.00000 76.00000 0.000000
P1: 12un x Unit Profit: $120.00 = Total: $1440.00
R2 90.00000 36.00000 38.00000 16.00000
P2: 19un x Unit Profit: $150.00 = Total: $2850.00
R3 120.0000 60.00000 57.00000 3.000000

15
C2-B1 Solving Problems with LINGO Paper | Case 5 | Product Mix

GOAL

5 Two factories (A, B) produce 3 different types of paper. The company that controls both has a
contract to produce:

Products / Resource A B Available


Blocks Thin ton 8 2 16
• Product Mix
Paper Medium ton 1 1 6
• Blend
Thick ton 2 7 28
• Finance
Unit Cost $ 1000.00 2000.00 -
• Investments
• Diet
• Aviation How many days will each plant have to operate to supply the orders more economically?
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

16
C2-B1 Solving Problems with LINGO Paper | Case 5 | Product Mix

MODEL:
SETS:
PRODUCT: DEMAND;
RESOURCE: COST;
RXP( PRODUCT, RESOURCE) : CAPACITY, VOLUME;
ENDSETS
DATA:
! Products attributes;
PRODUCT, DEMAND =
THIN 16
MEDIUM 6
THICK 28;
! Resources attributes;
RESOURCE, COST =
PLANT_A 1800
PLANT_B 2000;
! Daily production Plant_A Plant_B;
CAPACITY = 8 2 !Thin;
1 1 !Medium;
2 7; !Thick;
ENDDATA
SUBMODEL MIN5:
[OBJ] MIN = @SUM( RXP(r, p): COST( p) * VOLUME( r, p));
! The Demand constraints;
@FOR( PRODUCT( L):
[DEM] @SUM (RESOURCE(C): VOLUME( L, C)) = DEMAND ( L););
! The Capacity constraints;
@FOR( RXP( r, p):
[CAP] @SUM( RXP( r,p ): VOLUME( r,p )) >= CAPACITY( r, p););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1) ;
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " DAILY PRODUCTION (TON) :", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND:", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN5);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J) : ' Product:',
@FORMAT(PRODUCT(I),'-7s'), ' Produce: ',
@FORMAT(VOLUME(I,J),'%5.1f'),"ton ", '(in ' ,
@FORMAT(VOLUME(I,J)/CAPACITY(I,J),'%4.1f'), ' Days) ',
@FORMAT(RESOURCE(J),"-6s"), ' x ', 'Unit cost: $',
@FORMAT(COST( J),'%6.2f'), ' = ', 'Total: $',
@FORMAT(VOLUME(I, J) * COST( J),'%8.2f'),
@NEWLINE( 1));
! Demand reached;
@WRITE(' Demand reached in:',20*' ',
@FORMAT(@MAX( RXP(I, J):VOLUME/CAPACITY),'%4.1f'),' Days' , @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN5);
ENDCALC
END

17
C2-B1 Solving Problems with LINGO Paper | Case 5 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
DAILY PRODUCTION (TON) :
PLANT_A PLANT_B
THIN 8.000000 2.000000
MEDIUM 1.000000 1.000000
THICK 2.000000 7.000000

DEMAND:
THIN 16.00000
MEDIUM 6.000000
THICK 28.00000

COST:
PLANT_A 1000.000
PLANT_B 2000.000

SOLUTION
Global optimal solution found.
Objective value: 9200.000
Infeasibilities: 0.000000

Model Class: LP
❖ SOLUTION
Below is the solution
OPTIMAL achievedPROGRAM:
PRODUCTION by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Product:PLANT_A Produce: 2.8ton THIN x Unit cost: $1000.00 = Total: $2800.00
SOLUTION
Product:PLANT_B Produce: 3.2ton MEDIUM x Unit cost: $2000.00 = Total: $6400.00
Global optimal solution found.
Objective value: 92000.00
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


Product:THIN Produce: 14.0ton (in 1.8 Days) PLANT_A x Unit cost: $1800.00 = Total: $25200.00
Product:THIN Produce: 2.0ton (in 1.0 Days) PLANT_B x Unit cost: $2000.00 = Total: $ 4000.00
Product:MEDIUM Produce: 5.0ton (in 5.0 Days) PLANT_A x Unit cost: $1800.00 = Total: $ 9000.00
Product:MEDIUM Produce: 1.0ton (in 1.0 Days) PLANT_B x Unit cost: $2000.00 = Total: $ 2000.00
Product:THICK Produce: 21.0ton (in 10.5 Days) PLANT_A x Unit cost: $1800.00 = Total: $37800.00
Product:THICK Produce: 7.0ton (in 1.0 Days) PLANT_B x Unit cost: $2000.00 = Total: $14000.00
Demand reached in: 10.5 Days

1
18 1
C2-B1 Solving Problems with LINGO Parachutes/Hang Gliders | Case 6 | Max | Product Mix

GOAL

6 One company produces parachutes and hang gliders on two assembly lines.

Resources / Products Parachutes Hang Gliders Available

Line A hr 10 10 100
Blocks Assembler
• Product Mix Line B hr 3 7 42

• Blend
Profit $ 60.00 40.00 -
• Finance
• Investments
Formulate the production schedule that maximize the profit of the Company?
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities

19
C2-B1 Solving Problems with LINGO Parachutes/Hang Gliders | Case 6 | Max | Product Mix

MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , AVAILABLE =
LINE_A 100
LINE_B 42;

! Products attributes;
PRODUCT, PROFIT =
PARACHUTES 60
HANG_GLIDERS 40;

! Required ( hr) Parachutes HangGliders;


USAGE = 10 10 ! LINE_A;
3 7; ! LINE_B;
ENDDATA
SUBMODEL MAX6:
MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r); );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " REQUIRED:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE:", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX6);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J) | USAGE( I,J) #GT# 0 #AND# USAGE(I, J) #LT# 4: ' ',
@FORMAT(RESOURCE(I),'-6s'), ', Produce:',
@FORMAT(PRODUCE( J),'%2.0f'),' ',
@FORMAT(PRODUCT(J),'-12s'), 'x Unit profit: $',
@FORMAT(PROFIT( J),'%4.2f'), ' = ', 'Total: $',
@FORMAT(PRODUCE( J) * PROFIT( J),'%6.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX6);
ENDCALC
END

20
C2-B1 Solving Problems with LINGO Parachutes/Hang Gliders | Case 6 | Max | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (hr):
PARACHUTES HANG_GLIDERS
LINE_A 10.00000 10.00000
LINE_B 3.000000 7.000000

AVAILABLE (hr/week):
LINE_A 100.0000
LINE_B 42.00000

PROFIT (p/un):
PARACHUTES 60.00000
HANG_GLIDERS 40.00000

SOLUTION
Global optimal solution found.
Objective value: 600.0000
Infeasibilities: 0.000000

Model Class: LP

❖ SOLUTION
OPTIMAL PRODUCTION PROGRAM:
LINE_B,
Below is the Produce:10
solution achievedPARACHUTES x Unit 0,
by LINGO with infeasibilities profit: $60.00
and the detailed = that
report Total: $600.00
makes up the optimal

SOLUTION
Global optimal solution found.
Objective value: 600.0000
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


LINE_B, Produce:10 PARACHUTES x Unit profit: $60.00 = Total: $600.00
1

21
C2-B1 Solving Problems with LINGO Costumes manufacture | Case 7 | Product Mix

GOAL

7 One factory intends to manufacture two models of suits and has the following stock:

Resources / Products Mod1 Mod2 Available

Jeans m 4 2 32
Blocks
Raw Material Silk m 2 4 22
• Product Mix
Satin m 2 6 30
• Blend
Price $ 6.00 10.00 -
• Finance
• Investments
How many pieces of each type the manufacturer must make to get the maximum revenue.
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

22
C2-B1 Solving Problems with LINGO Costumes manufacture | Case 7 | Product Mix

MODEL:
SETS:
PRODUCT : PRICE, PRODUCE, IND;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE , AVAILABLE =
JEANS 32
SILK 22
SATIN 30;

! Product attributes;
PRODUCT, PRICE, IND =
MOD1 6 0
MOD2 10 1;

! Required (m) MOD1 MOD2;


USAGE = 4 2 ! JEANS;
2 4 ! SILK;
2 6; ! SATIN;
ENDDATA
SUBMODEL MAX7:
[OBJ] MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r); );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (m):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (m):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX7);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) : ' ',
@FORMAT(PRODUCT(J), '-5s'),'Produce:',
@FORMAT(PRODUCE( J),'%2g'),'un x ', 'Unit price:$',
@FORMAT(PRICE( J),'%5.2f'), ' = ', 'Revenue:$',
@FORMAT(PRODUCE( J) * PRICE( J),'%5.2f'),
@NEWLINE( 1));
! Execute the Graph;
@CHARTPIE( 'Product Mixer Model', 'Produce', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX7);
ENDCALC
END

23
C2-B1 Solving Problems with LINGO Costumes manufacture | Case 7 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (m):
MOD1 MOD2
JEANS 4.000000 2.000000
SILK 2.000000 4.000000
SATIN 2.000000 6.000000

AVAILABLE (m):
JEANS 32.00000
SILK 22.00000
SATIN 30.00000

PRICE:
MOD1 6.000000
MOD2 10.00000

SOLUTION
Global optimal solution found.
Objective value:
❖ SOLUTION 62.00000
Infeasibilities:
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that 0.000000
makes up the optimal solution.

Model Class: LP
SOLUTION
Global optimal solution found.
OPTIMAL PRODUCTION PROGRAM:
Objective value: 62.00000
MOD1 Produce: 7un x Unit price:$ 6.00 = Revenue:$42.00
Infeasibilities: 0.000000
MOD2 Produce: 2un x Unit price:$10.00 = Revenue:$20.00
OPTIMAL PRODUCTION PROGRAM:
SLACK/SURPLUS
MOD1 Produce: 7un x Unit price:$ 6.00 = Revenue:$42.00
JEANS Used: 4m x 7un MOD1 = Total: 28m - Available: 0m = 0m
MOD2 Produce: 2un x Unit price:$10.00 = Revenue:$20.00
JEANS Used: 2m x 2un MOD2 = Total: 4m - Available: 32m = 0m
SILK Used: 2m x 7un MOD1 = Total: 14m - Available: 0m = 0m
SILK Used: 4m x 2un MOD2 = Total: 8m - Available: 22m = 0m
SATIN Used: 2m x 7un MOD1 = Total: 14m - Available: 0m = 0m
SATIN Used: 6m x 2un MOD2 = Total: 12m - Available: 30m = -4m
Totals: 80m - 84m = -4m Slack

24
C2-B1 Solving Problems with LINGO Bags and Backpacks | Case 8 | Product Mix

GOAL

8 A leather goods company, manufactures two types of products: bags and backpacks.

Resources / Products Bags Backpack Available

Cutting hr 2 0 300
Blocks
• Product Mix Seam hr 2 2 440
Process
• Blend Packing hr 1.2 1.5 300
• Finance
Dyeing hr 0 3 540
• Investments
• Diet Production Day un 120 30 150

• Aviation Profit $ 50.00 40.00 -


• Transport
• Agriculture
Determines how many of each product the company must manufacture to maximize its profit.
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

25
C2-B1 Solving Problems with LINGO Bags and Backpacks | Case 8 | Product Mix
MODEL:
SETS:
PRODUCT : PROFIT, DEMAND, IND, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
CUTTING 300
SEAM 440
PACKING 300
DEYING 540;
! Products attributes;
PRODUCT, DEMAND, PROFIT, IND =
BAGS 120 50 0
BACKPACkS 30 40 1;
! Required BAGS BACKPACkS;
USAGE = 2 0 ! CUTTING;
2 2 ! SEAM;
1.2 1.5 ! PACKING;
0 3; ! DEYING;
ENDDATA
SUBMODEL MAX8:
MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The Demand constraints;
@FOR( PRODUCT( J): [DEM] @SUM( PRODUCT( J): PRODUCE( J)) = DEMAND( J));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r); );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (hr/un):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (hr):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " PROFIT (p/un):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX8);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) : ' ',
@FORMAT(PRODUCT(J),'-10s'),' Produce:',
@FORMAT(PRODUCE( J),'%3.0f'),'un x ', 'Profit:$',
@FORMAT(PROFIT( J),'%5.2f'), ' = ', 'Total:$',
@FORMAT(PRODUCE( J) * PROFIT( J),'%6.2f'),
@NEWLINE( 1));
! Execute the Graph;
@CHARTPIE( 'Product Mixer Model', 'Produce', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX8);
ENDCALC
END

26
C2-B1 Solving Problems with LINGO Bags and Backpacks | Case 8 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (hr/un):
BAGS BACKPACKS
CUTTING 2.000000 0.000000
SEAM 2.000000 2.000000
PACKING 1.200000 1.500000
DEYING 0.000000 3.000000

AVAILABLE (hr):
CUTTING 300.0000
SEAM 440.0000
PACKING 300.0000
DEYING 540.0000

DEMAND (un):
BAGS 120.0000
BACKPACKS 30.00000

PROFIT (p/un):
BAGS 50.00000
BACKPACKS 40.00000

SOLUTION
SOLUTION
❖Global optimal solution found.
Objective value:achieved by LINGO with infeasibilities 0, and the7200.000
Below is the solution detailed report that makes up the optimal
Infeasibilities: 0.000000

SOLUTION
Model Class: LP
Global optimal solution found.
OPTIMAL PRODUCTION
Objective value: PROGRAM: 7200.000
BAGS Produce:120un
Infeasibilities: x Profit:$50.00 = Total:$6000.00
0.000000
BACKPACKS Produce: 30un x Profit:$40.00 = Total:$1200.00
OPTIMAL PRODUCTION PROGRAM:
BAGS Produce:120un x Profit:$50.00 = Total:$6000.00
1
BACKPACKS Produce: 30un x Profit:$40.00 = Total:$1200.00

27
C2-B1 Solving Problems with LINGO Bike Production | Case 9 | Product Mix

GOAL

9 A manufacturing company produces metal structures for two categories of bicycles. All the
necessary information for the development of the model follows below:

Resources / Products Mountain Racing Available

Blocks Frame min 25 10 19,000


• Product Mix
Process Paint min 10 15 18,000
• Blend
• Finance Quality min 10 25 15,000

• Investments Fixed Cost $ 162,559.00 92,441.00 -


• Diet
Price $ 800.00 1000.00 -
• Aviation
• Transport Minimum Production un 250 1 -
• Agriculture
• Construction Due to the responsibilities of the contractors there is a goal of producing over 250 Mountain
• Refinery Bike per month. What is the Best Monthly Production Plan?

• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

28
C2-B1 Solving Problems with LINGO Bike Production | Case 9 | Product Mix
MODEL:
SETS:
PRODUCT : PRICE, COST, FCOST, MIN_PROD, IND, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
FRAME 19000
PAINT 18000
QUALITY 15000;
! Products attributes;
PRODUCT, PRICE, COST, MIN_PROD, FCOST IND =
MOUNTAIN 800 300 250 162559 0
RACING 1000 400 1 92441 1;
! Required MOUNTAIN RACING;
USAGE = 10 25 ! Frame;
18 15 ! Paint;
10 25; ! Quality;
ENDDATA
SUBMODEL MAX9:
[OBJ] MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p) - COST( P) * PRODUCE(P) - FCOST( p));
! The Available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( P): usage( R,P) * PRODUCE( P )) <= AVAILABLE( R); @GIN( PRODUCE));
! Minimum production constraints;
@FOR( PRODUCT( P): PRODUCE(P) >= MIN_PROD(P));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;

@SET('TERSEO',1);

! Post status windows, 1 Yes, 0 No;

@SET('STAWIN',0);

! Data block;

@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (Minutes):", @NEWLINE( 1));


@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Minutes):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " MINIMUM PRODUCTION (unity):", @NEWLINE( 1));
@TABLE(MIN_PROD);
@WRITE(" ", @NEWLINE( 1), " FIXED COST:", @NEWLINE( 1));
@TABLE(FCOST);
@WRITE(" ", @NEWLINE( 1), " UNIT PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
@SOLVE(MAX9);
! Solution report;
@WRITE(" OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J):' ',
@FORMAT(PRODUCT(J),'-8s'),' Produce:',
@FORMAT(PRODUCE( J),'%3.0f'), ' x cost: $',
@FORMAT(COST( J),'%7.2f'), ' = total:$',
@FORMAT(COST( J) * PRODUCE( J), '%8.2f'), ' - ',@NEWLINE(1),' ',37*' ', 'Fixed cost:$',
@FORMAT(FCOST(J),'%9.2f'), ' - ', @NEWLINE(1), ' ',
@FORMAT(PRODUCT(J),'-8s'),' Produce:',
@FORMAT(PRODUCE( J),'%3.0f'), ' x price:$',
@FORMAT(PRICE( J),'%7.2f'),' = ', ' Total:$',
@FORMAT(PRODUCE( J) * Price( J),'%7.2f' ),' + ', @NEWLINE(1),' ' , 'PROFIT:', 41*' ','$',
@FORMAT(PRODUCE( J) * PRICE( J) - COST(J) * PRODUCE( J) - FCOST(J),'%9.2f'),' = ',
@NEWLINE( 2));
@WRITE(' TOTAL PROFIT:', 35*' ','$', @FORMAT(OBJ,'%9.2f'), @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX9);
ENDCALC
END

29
MOUNTAIN RACING
FRAME 10.00000 25.00000
PAINT 18.00000 15.00000
QUALITY 10.00000 25.00000
C2-B1 Solving Problems with LINGO Bike Production | Case 9 | Product Mix
AVAILABLE (Minutes):
FRAME 19000.00
❖ DATA PAINT 18000.00
QUALITY
All problem data is organized in the data block as a set of members and value15000.00
attributes, which can be viewed below.

DATA: MINIMUM PRODUCTION (unity):


RESOURCES/USAGE (Minutes): MOUNTAIN 250.0000
MOUNTAIN RACING RACING 1.000000
FRAME 10.00000 25.00000
PAINT 18.00000 15.00000 FIXED COST:
QUALITY 10.00000 25.00000 MOUNTAIN 162559.0
RACING 92441.00
AVAILABLE (Minutes):
FRAME 19000.00 UNIT PRICE:
PAINT 18000.00 MOUNTAIN 800.0000
QUALITY 15000.00 RACING 1000.000

MINIMUM PRODUCTION (unity): SOLUTION


MOUNTAIN 250.0000 Global optimal solution found.
RACING 1.000000 Objective value:
Objective bound:
FIXED COST: Infeasibilities:
MOUNTAIN 162559.0
RACING 92441.00 Model Class: LP

UNIT PRICE: OPTIMAL PRODUCTION PROGRAM:


MOUNTAIN 800.0000 MOUNTAIN Produce:750 x cost: $ 300.00 = to
❖ SOLUTION
RACING 1000.000 Fixed c
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the
MOUNTAIN Produce:750 x price:$ 800.00 = Tooptimal
SOLUTION PROFIT:
SOLUTION
Global optimal solution found.
Objective
Global optimal value: solution found. RACING 300000.0
Produce:300 x cost: $ 400.00 = to
Objective
Objective bound: value: 300000.0
300000.0 Fixed c
Infeasibilities:
Objective bound: RACING 0.000000
300000.0 x price:$1000.00 = To
Produce:300
Infeasibilities: PROFIT: 0.000000
Model Class: LP
OPTIMAL PRODUCTION PROGRAM: TOTAL PROFIT:
OPTIMAL PRODUCTION PROGRAM:
MOUNTAIN Produce:750
MOUNTAIN Produce:750x x cost: cost: $ 300.00
$ 300.00 = total:$225000.00
= total:$225000.00 - -
FixedFixed cost:$162559.00
cost:$162559.00 - -
MOUNTAIN Produce:750
MOUNTAIN Produce:750x x price:$ price:$ 800.00
800.00 = Total:$600000.00
= Total:$600000.00 + +
PROFIT:
PROFIT: $212441.00
$212441.00 = =

RACING
RACING Produce:300x x cost:
Produce:300 cost: $ 400.00
$ 400.00 = total:$120000.00
= total:$120000.00 - -
Fixed
Fixed cost:$
cost:$ 92441.00
92441.00 - -
RACING
RACING Produce:300
Produce:300x x price:$1000.00 = Total:$300000.00
price:$1000.00 +
= Total:$300000.00 +
PROFIT:
PROFIT: $ 87559.00 =
$ 87559.00 =
TOTAL
TOTAL PROFIT:
PROFIT: $300000.00
$300000.00
1

30
C2-B1 Solving Problems with LINGO TV Console | Case 10 | Product Mix

GOAL

10 One manufacturer is starting the last week of production of four different models of wooden
consoles for television sets designated M1, M2, M3 and M4. Each of them should be
assembled and then decorated.

The manufacturer has:


Blocks • 30,000 hours to assemble these products (750 assemblers working 40 hours per week)
• Product Mix • 20,000 hours to decorate these products (500 decorators working 40 hours per week).
• Blend All the necessary information for the development of the model follows below:
• Finance
• Investments Resources / Products M1 M2 M3 M4 Available Workers HR/W

• Diet Assembler hr 4 5 3 5 30,000 750 40


• Aviation Process
Decor hr 2 1 5 3 20,000 500 40
• Transport
• Agriculture Profit $ 7.00 7.00 6.00 9.00 - - -
• Construction
• Refinery How much of each model should be produced during this last week to maximize profit?
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities

31
C2-B1 Solving Problems with LINGO TV Console | Case 10 | Product Mix

MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
ASSEMBLER 30000
DECOR 20000;
! Product attributes;
PRODUCT , PROFIT =
M1 7
M2 7
M3 6
M4 9;

! Hours required per unit M1 M2 M3 M4;


USAGE = 4 5 3 5 ! Assembler;
2 1 5 3; ! Decor;
ENDDATA
SUBMODEL MAX10:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r);
@GIN( PRODUCE ););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (hour):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (hour):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT (p/un):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX10);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE( J) #GT# 0: ' ', PRODUCT(J),', Produce:',
@FORMAT(PRODUCE( J),'%5.0f'),' un x ', 'Unit price: $',
@FORMAT(PROFIT( J),'%4.2f'),' = ', 'Total: $',
@FORMAT(PRODUCE( J) * PROFIT( J),'%8.2f' ),
@NEWLINE( 1));
! Execute the Graph;
@CHARTPIE( 'Product Mixer Model', 'Produce', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
! @GEN(MAX10);
ENDCALC
END

32
C2-B1 Solving Problems with LINGO TV Console | Case 10 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (hour):
M1 M2 M3 M4
ASSEMBLER 4.000000 5.000000 3.000000 5.000000
DECOR 2.000000 1.000000 5.000000 3.000000

AVAILABLE (hour):
ASSEMBLER 30000.00
DECOR 20000.00

PROFIT (p/un):
M1 7.000000
M2 7.000000
M3 6.000000
M4 9.000000

SOLUTION
Global optimal solution found.
Objective value: 54375.00
Infeasibilities: 0.000000
❖ SOLUTION
Model Class: LP
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

OPTIMAL PRODUCTION PROGRAM:


SOLUTION
M3, Produce: 625 un x Unit price: $6.00 = Total: $ 3750.00
Global optimal solution found.
M4, Produce:
Objective 5625 un x Unit price: $9.00 = Total:
value: $50625.00
54375.00
Objective bound: 54375.00
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


M3, Produce: 625 un x Unit price: $6.00 = Total: $ 3750.00
M4, Produce: 5625 un x Unit price: $9.00 = Total: $50625.00

33
C2-B1 Solving Problems with LINGO RONCAM Motor | Case 11 | Product Mix

GOAL

11 One company manufactures motors for toys and small appliances. The Marketing department
is forecasting sales of 6100 RONCAM engine units in the next six months.

This is a good demand and the company will have to test its productive capacity. All the
necessary information for the development of the model follows below:

Blocks
Made Purchase
• Product Mix Resources / Components Available
• Blend Body Base Blind Body Base Blind

• Finance Preparation UT 2 5 4 49,200


• Investments
Process Mold UT 4 2 5 49,200
• Diet
Assembler UT 2 4 5 49,200
• Aviation
• Transport Unit Cost $ 8.00 20.00 10.00 10.00 20.00 16.00 -
• Agriculture
Some of these components may be purchased from other suppliers if there are company
• Construction limitations. Based on this information minimize the cost of the company.
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Purchase

Source:
Book 8
Chapter 1.2.5

34
C2-B1 Solving Problems with LINGO RONCAM Motor | Case 11 | Product Mix
MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes UT (Unit of time);
RESOURCE , AVAILABLE =
PREPARATION 49200
MOLD 49200
ASSEMBLER 49200;

! Products attributes;
PRODUCT , COST =
BODY 8
BASE 20
BLIND 10
BODY_P 10
BASE_P 20
BLIND_P 16;

! Hours required p/unit Body Base Blind Body_P Base_P Blind_P;


USAGE = 2 5 4 0 0 0 ! Preparation (UT (Unit of time);
4 2 5 0 0 0 ! Mold (UT (Unit of time);
2 4 5 0 0 0; ! Assembler (UT (Unit of time);
ENDDATA
SUBMODEL MIN11:
MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r); );
! forecasting sales;
PRODUCE(1) + PRODUCE(4) >= 6100;
PRODUCE(2) + PRODUCE(5) >= 6100;
PRODUCE(3) + PRODUCE(6) >= 6100;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (UT):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (UT):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN11);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION/PURCHASE PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-7s'), @IF(@STRLEN(PRODUCT(J)) #GT# 5, ' Purchase:', ' Produce :'),
@FORMAT(PRODUCE( J),'%5.0f'),' un x ', 'Unit cost: $',
@FORMAT(COST( J),'%5.2f'),' = ', 'Total: $',
@FORMAT(produce( J) * COST( J),'%9.2f' ),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN11);
ENDCALC
END

35
C2-B1 Solving Problems with LINGO RONCAM Motor | Case 11 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (UT - Unit of Time):
BODY BASE BLIND BODY_P BASE_P BLIND_P
PREPARATION 2.000000 5.000000 4.000000 0.000000 0.000000 0.000000
MOLD 4.000000 2.000000 5.000000 0.000000 0.000000 0.000000
ASSEMBLER 2.000000 4.000000 5.000000 0.000000 0.000000 0.000000

AVAILABLE (UT):
PREPARATION 49200.00
MOLD 49200.00
ASSEMBLER 49200.00

COST:
BODY 8.000000
BASE 20.00000
BLIND 10.00000
BODY_P 10.00000
BASE_P 20.00000
BLIND_P 16.00000

SOLUTION
Global optimal solution found.
Objective value:
❖ SOLUTION 234650.0
Objective bound: 234650.0
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Infeasibilities: 0.000000
SOLUTION
Model Class: MILP
Global optimal solution found.
Objective value:
OPTIMAL PRODUCTION/PURCHASE PROGRAM: 234650.0
Infeasibilities:
BODY Produce : 4675 un x Unit cost: $ 8.00 = Total: 0.000000
$ 37400.00
BLIND Produce : 6100 un x Unit cost: $10.00 = Total: $ 61000.00
OPTIMAL
BODY_P PRODUCTION/PURCHASE
Purchase: 1425 un x PROGRAM:
Unit cost: $10.00 = Total: $ 14250.00
BODY
BASE_PProduce : 4675 un x Unit
Purchase: 6100 un x Unit cost: $ 8.00
cost: = Total:
$20.00 $ 37400.00
= Total: $122000.00
BLIND Produce : 6100 un x Unit cost: $10.00 = Total: $ 61000.00
BODY_P Purchase:
SLACK/SURPLUS 1425= un
LIMIT x Unit (UT):
AVAILABLE cost: $10.00 = Total: $ 14250.00
BASE_P Purchase: 6100BODYun x Unit cost:
MOLD $20.00 = Total:
ASSEMBLER $122000.00
LIMIT VALUE
PREPARATION 9350.000 0.000000 24400.00 49200.00 -15450.00
MOLD 18700.00 0.000000 30500.00 49200.00 0.000000
ASSEMBLER 9350.000 0.000000 30500.00 49200.00 -9350.000

36
C2-B1 Solving Problems with LINGO Modem | Case 12 | Product Mix

GOAL

12 An electronics company manufactures five different models of communication cards for


microcomputers.

Here are the materials and component quantities that make up each card model:

Blocks Resources / Products H1 F1 V1 M1 M2 Available

• Product Mix Printed Circuit m2 20 15 10 8 5 80,000


• Blend
Resistors un 28 24 18 12 16 100,000
• Finance Raw Material
Memory un 8 8 4 4 6 30,000
• Investments
• Diet Assembler hr 0.75 0.6 0.5 0.65 1 5,000
• Aviation
Minimum Production un 500 1,000 500 500 500 -
• Transport
Cost $ 136.00 101.00 96.00 137.00 101.00 -
• Agriculture
• Construction Price $ 189.00 149.00 129.00 169.00 139.00 -

• Refinery
The company can sell every quantity produced, however, the marketing department wants to
• Schedule
produce at least 500 units of each card model.
• Cutting
This department also determines that the quantity produced from the F1 card is at least twice
• Metallurgy
the quantity sold from the H1 carton.
• Fertilizer
• Clinic Based on this information maximize the profit of the company.

• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 2
• Page 227

37
C2-B1 Solving Problems with LINGO Modem | Case 12 | Product Mix
MODEL:
SETS:
PRODUCT :PRICE, COST, PRODUCE, MIN_PROD;
HEADER / H1, F1, V1, M1, M2, AVAIL, VALUE /:;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
PXR( RESOURCE,HEADER): SLASUR;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
PRT_CIRCUIT_M2 80000
RESISTORS_UN 100000
MEMORY_UN 30000
ASSEMBLER_HR 5000;
! Products attributes;
PRODUCT, PRICE, COST, MIN_PROD =
H1 189 136 500
F1 149 101 1000
V1 129 96 500
M1 169 137 500
M2 139 101 500;
! Required per unit H1 F1 V1 M1 M2;
USAGE = 20 15 10 8 5 ! PRT_CIRCUIT_M2;
28 24 18 12 16 ! RESISTORS_UN;
8 8 4 4 6 ! MEMORY_UN;
0.75 0.6 0.5 0.65 1; ! ASSEMBLER_HR;
ENDDATA
SUBMODEL MAX12:
MAX = @SUM( PRODUCT( p): PRICE(p) * produce(p) - COST( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
! Minimum production required;
@FOR( PRODUCT( p): PRODUCE(p) >= MIN_PROD(p));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Sets the length of the line;
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (m2, un, un, hr):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (m2, un, un, hr)::", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " MINIMUM PRODUCTION (un):", @NEWLINE( 1));
@TABLE(MIN_PROD);
@WRITE(" ", @NEWLINE( 1), " COST p/un:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " PRICE p/un:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
@SOLVE(MAX12);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-3s'),'Produce:',
@FORMAT(PRODUCE( J),'%4.0f'),'un x ', 'Price:$',
@FORMAT(PRICE( J),'%4.2f'),' = ', 'Revenue:$',
@FORMAT(PRODUCE( J) * PRICE( J),'%9.2f' ),' - Cost:$',
@FORMAT(PRODUCE( J) * COST( J),'%9.2f' ),' = Profit:$',
@FORMAT(PRODUCE( J) * PRICE( J) - PRODUCE( J) * COST( J),'%7.2f' ),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
! Slack / Surplus report;
@WRITE(" SLACK/SURPLUS LIMIT = AVAILABLE: " , @NEWLINE( 1));
@FOR(PXR(I,J): SLASUR(I,6) = AVAILABLE(I));
@FOR(RXP(I,J)| J #LT# 6: SLASUR(I,J) = USAGE(I,J) * PRODUCE(J));
@FOR(PXR(I,J): SLASUR(I,7) = SLASUR(I,1) + SLASUR(I,2) + SLASUR(I,3) + SLASUR(I,4) + SLASUR(I,5)- SLASUR(I,6));
@TABLE(SLASUR);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX12);
ENDCALC
END

38
PRT_CIRCUIT_M2 20.00000 15.00000
RESISTORS_UN 28.00000 24.00000
MEMORY_UN 8.000000 8.000000
ASSEMBLER_HR 0.750000 0.600000
C2-B1 Solving Problems with LINGODATA:
RESOURCES/USAGE un,Modem
(m2, un, AVAILABLE | Case
hr): (m2, 12 un,
un, | Product
hr): Mix
H1 PRT_CIRCUIT_M2
F1 80000.00
V1 M1
❖ DATA PRT_CIRCUIT_M2 20.00000 RESISTORS_UN
15.00000 100000.0
10.00000 8.000000 5.0
RESISTORS_UN 28.00000 MEMORY_UN
24.00000 18.00000
30000.0012.00000 16.
All problem data is organized in the data block as a set of members8.000000
MEMORY_UN and valueASSEMBLER_HR
attributes,
8.000000which can be viewed below.
4.000000
5000.000 4.000000 6.0
ASSEMBLER_HR 0.750000 0.600000 0.500000 0.650000 1.0
DATA:
DATA: MINIMUM PRODUCTION (un):
RESOURCES/USAGE
RESOURCES/USAGE (m2, (m2, un,
un, un,
un, hr):
hr):
AVAILABLE (m2, un, un, hr): H1 500.0000
H1
H1 F1
F1
PRT_CIRCUIT_M2 V1
V1 80000.00M1 M1 M2
M2
F1 1000.000
PRT_CIRCUIT_M2
PRT_CIRCUIT_M2 20.00000
20.00000 15.00000
15.00000 10.00000 8.000000
10.00000 100000.0
RESISTORS_UN 8.000000 5.000000
5.000000
V1 500.0000
RESISTORS_UN
RESISTORS_UN 28.00000
28.00000 24.00000
24.00000
MEMORY_UN 18.00000 12.00000
18.00000 30000.00
12.00000 16.00000
16.00000
M1 500.0000
MEMORY_UN
MEMORY_UN 8.000000
8.000000 8.000000
8.000000 4.000000
4.000000
ASSEMBLER_HR 4.000000
4.000000 6.000000
6.000000
5000.000 M2 500.0000
ASSEMBLER_HR
ASSEMBLER_HR 0.750000
0.750000 0.600000
0.600000 0.500000
0.500000 0.650000
0.650000 1.000000
1.000000
MINIMUM PRODUCTION (un): COST p/un:
AVAILABLE
AVAILABLE (m2,
(m2, un,
un, un,
un, hr):
hr): H1 500.0000 H1 136.0000
PRT_CIRCUIT_M2
PRT_CIRCUIT_M2 80000.00
80000.00 F1 1000.000 F1 101.0000
RESISTORS_UN
RESISTORS_UN 100000.0
100000.0 V1 500.0000 V1 96.00000
MEMORY_UN
MEMORY_UN 30000.00
30000.00 M1 500.0000 M1 137.0000
ASSEMBLER_HR
ASSEMBLER_HR 5000.000
5000.000 M2 500.0000 M2 101.0000
MINIMUM
MINIMUM PRODUCTION
PRODUCTION (un):
(un): COST p/un: PRICE p/un:
H1 500.0000
H1 500.0000 H1 136.0000 H1 189.0000
F1
F1 1000.000
1000.000 F1 101.0000 F1 149.0000
V1 500.0000
V1 500.0000 V1 96.00000 V1 129.0000
M1
M1 500.0000
500.0000 M1 137.0000 M1 169.0000
M2 500.0000
M2 500.0000 M2 101.0000 M2 139.0000
COST
COST p/un:
p/un: PRICE p/un: SOLUTION
H1
H1 136.0000
136.0000 H1 189.0000 Global optimal solution found.
F1
F1 101.0000
101.0000 F1 149.0000 Objective value:
V1
V1 96.00000
96.00000 V1 129.0000
❖ SOLUTION Objective bound:
M1
M1 137.0000
137.0000 M1 169.0000 Infeasibilities:
M2
M2 101.0000
Below 101.0000
is M2infeasibilities
the solution achieved by LINGO with 139.00000, and the detailed report that makes up the optimal
Model Class: LP
PRICE
PRICE p/un:
p/un: SOLUTION
SOLUTION
H1
H1 189.0000
189.0000 Global optimal solution found. OPTIMAL PRODUCTION PROGRAM:
Global optimal solution found.
F1
F1 149.0000
149.0000 Objective value:
Objective value: 215000.0
V1
V1 129.0000
129.0000 Objective bound:
Objective bound: 215000.0
M1
M1 169.0000
169.0000
Infeasibilities: Infeasibilities: 0.000000
M2
M2 139.0000
139.0000
Model Class: LP Model Class: LP
SOLUTION
SOLUTION
Global
Global optimal
OPTIMAL PRODUCTION
optimal solution
PROGRAM:
solution found.
found. OPTIMAL PRODUCTION PROGRAM:
Objective
H1 Produce: value:
Objective value:500un x Price:$189.00 = Revenue:$ 94500.00 - Cost:$ 68000.00 = Profit:$26500.00 215000.0
215000.0
F1 Produce:1000un
Objective
Objective bound:
bound: x Price:$149.00 = Revenue:$149000.00 - Cost:$101000.00 = Profit:$48000.00 215000.0
215000.0 1
V1 Produce:1500un
Infeasibilities:
Infeasibilities: x Price:$129.00 = Revenue:$193500.00 - Cost:$144000.00 = Profit:$49500.00 0.000000
0.000000
M1 Produce:2250un x Price:$169.00 = Revenue:$380250.00 - Cost:$308250.00 = Profit:$72000.00
M2 Produce:
Model Class:500un
LP x Price:$139.00 = Revenue:$ 69500.00 - Cost:$ 50500.00 = Profit:$19000.00
Model Class: LP
SLACK/SURPLUS LIMIT = AVAILABLE:
OPTIMAL
OPTIMAL PRODUCTION
PRODUCTION PROGRAM:
PROGRAM:
H1 F1 V1 M1 M2 LIMIT VALUE
PRT_CIRCUIT_M2 10000.00 15000.00 15000.00 18000.00 2500.000 80000.00 -19500.00
RESISTORS_UN 14000.00 24000.00 27000.00 27000.00
1
8000.0001 100000.0 0.000000
MEMORY_UN 4000.000 8000.000 6000.000 9000.000 3000.000 30000.00 0.000000
ASSEMBLER_HR 375.0000 600.0000 750.0000 1462.500 500.0000 5000.000 -1312.500

39
1
C2-B1 Solving Problems with LINGO Product Mix | Case 13 | Product Mix

GOAL

13 In a product mix model, the decision is how many different products should be produced to
maximize total profit. All the information needed to develop the model follows:

Resources / Products Rocket Meteor Streak Comet Jet Biplane Available

Steel un 1 4 0 4 2 0 800
Blocks
• Product Mix Cooper un 4 5 3 0 1 0 1,160

• Blend Raw Plastic un 0 3 8 0 1 0 1,780

• Finance Material Rubber un 2 0 1 2 1 5 1,050


• Investments Glass un 2 4 2 2 2 4 1,360
• Diet
Paint un 1 4 1 4 3 4 1,240
• Aviation
Minimum Production un 400 400 400 400 400 400 -
• Transport
• Agriculture Setup $ 35.00 20.00 60.00 70.00 75.00 30.00 -

• Construction Profit $ 30.00 45.00 24.00 26.00 24.00 30.00 -


• Refinery
Each of the products compete with several scarce resources. In this example, we produce six
• Schedule different flying machines from six different raw materials.
• Cutting
This model also has the characteristic that, if we want to produce a specific product, we
• Metallurgy
assume a fixed installation cost.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

40
C2-B1 Solving Problems with LINGO Product Mix | Case 13 | Product Mix
MODEL:
SETS:
PRODUCT: PROFIT, SETUP, PRODUCE, MIN_PROD;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Product Attributes;
PRODUCT, PROFIT, SETUP MIN_PROD =
ROCKET 30 35 400
METEOR 45 20 400
STREAK 24 60 400
COMET 26 70 400
JET 24 75 400
BIPLANE 30 30 400;
! Resources attributes;
RESOURCE, AVAILABLE =
STEEL 800
COPPER 1160
PLASTIC 1780
RUBBER 1050
GLASS 1360
PAINT 1240;
! Required p/unit (hr) Rocket Meteor Streak Comet Jet Biplane;
USAGE = 1 4 0 4 2 0 ! STEEL;
4 5 3 0 1 0 ! COPPER;
0 3 8 0 1 0 ! PLASTIC;
2 0 1 2 1 5 ! RUBBER;
2 4 2 2 2 4 ! GLASS;
1 4 1 4 3 4; ! PAINT;
ENDDATA
SUBMODEL MAX13:
[OBJ] MAX = @SUM( PRODUCT: PROFIT * PRODUCE - SETUP );
! The Available constraints;
@FOR( RESOURCE( I):
[AVA] @SUM( PRODUCT( J): USAGE( I, J) * PRODUCE( J)) <= AVAILABLE( I) );
@FOR( PRODUCT: @GIN( PRODUCE));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Sets the length of the line;
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (un):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (un):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " MINIMUM PRODUCTION (un):", @NEWLINE( 1));
@TABLE(MIN_PROD);
@WRITE(" ", @NEWLINE( 1), " SETUP:", @NEWLINE( 1));
@TABLE(SETUP);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX13);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-8s'),' Produce:',
@FORMAT(PRODUCE( J),'%3.0f'),' un x ', 'Price: $',
@FORMAT(PROFIT( J),'%4.2f'),' = ', 'Revenue: $',
@FORMAT(PRODUCE( J) * PROFIT( J),'%8.2f' ),' - Setup: $',
@FORMAT(SETUP( J),'%5.2f' ),' = Profit: $',
@FORMAT(PRODUCE( J) * PROFIT( J) - SETUP( J) ,'%8.2f' ),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX13);
ENDCALC
END

41
STEEL 1.000000 4.000000 0.000000 4.000000 2.000000 0.000000
COPPER 4.000000 5.000000 3.000000 0.000000 1.000000 0.000000
PLASTIC 0.000000 3.000000 8.000000 0.000000 1.000000 0.000000
RUBBER 2.000000 0.000000 1.000000 2.000000 1.000000 5.000000
GLASS 2.000000 4.000000 2.000000 2.000000 2.000000 4.000000
C2-B1 Solving Problems with PAINT
LINGO 1.000000 4.000000 1.000000
Product 4.000000
Mix | Case 3.000000 4.000000
13 | Product Mix
AVAILABLE (un):
❖ DATA STEEL 800.0000
COPPER 1160.000
All problem data is organized in the data block as 1780.000
PLASTIC a set of members and value attributes, which can be viewed below.
RUBBER 1050.000
DATA: GLASS 1360.000
RESOURCES/USAGE (un): PAINT 1240.000
ROCKET METEOR STREAK COMET JET BIPLANE
MINIMUM PRODUCTION (un) :
STEEL 1.000000 4.000000 0.000000 4.000000 2.000000 0.000000
ROCKET 400.0000
COPPER 4.000000 5.000000 3.000000 0.000000 1.000000 0.000000
METEOR 400.0000
PLASTIC 0.000000 3.000000 8.000000 0.000000 1.000000 0.000000
STREAK 400.0000
RUBBER 2.000000 0.000000 1.000000 2.000000 1.000000 5.000000
COMET 400.0000
GLASS 2.000000 4.000000 2.000000 2.000000 2.000000 4.000000
JET 400.0000
PAINT 1.000000 4.000000 1.000000 4.000000 3.000000 4.000000
BIPLANE 400.0000
AVAILABLE (un): SETUP (p/product):
STEEL 800.0000 ROCKET 35.00000
COPPER 1160.000 METEOR 20.00000
PLASTIC 1780.000 STREAK 60.00000
RUBBER 1050.000 COMET 70.00000
GLASS 1360.000 JET 75.00000
PAINT 1240.000 BIPLANE 30.00000

MINIMUM PRODUCTION (un) : PROFIT p/un:


ROCKET 400.0000 ROCKET 30.00000
METEOR 400.0000 METEOR 45.00000
STREAK 400.0000 STREAK 24.00000
COMET 400.0000 COMET 26.00000
JET 400.0000 JET 24.00000
BIPLANE 400.0000 BIPLANE 30.00000

SETUP (p/product):
ROCKET
❖ SOLUTION 35.00000
METEOR 20.00000
Below is the 60.00000
STREAK solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
COMET 70.00000
SOLUTION 75.00000
JET
BIPLANE
Global 30.00000
optimal solution found.
Objective value: 14730.00
PROFIT p/un:
Objective bound: 14730.00
ROCKET 30.00000
Infeasibilities: 0.000000
METEOR 45.00000
STREAK 24.00000 PROGRAM:
OPTIMAL PRODUCTION
COMET
ROCKET 26.00000
Produce:120 un x Price: $30.00 = Revenue:
$ 3600.00 - Setup: $35.00 = Profit: $ 3565.00
JET
STREAK 24.00000
Produce:220 un x Price: $24.00 = Revenue: $ 5280.00 - Setup: $60.00 = Profit: $ 5220.00
BIPLANE Produce:160
COMET 30.00000 un x Price: $26.00 = Revenue:
$ 4160.00 - Setup: $70.00 = Profit: $ 4090.00
JET Produce: 20 un x Price: $24.00 = Revenue: $ 480.00 - Setup: $75.00 = Profit: $ 405.00
BIPLANE Produce: 50 un x Price: $30.00 = Revenue: $ 1500.00 - Setup: $30.00 = Profit: $ 1470.00

SLACK/SURPLUS LIMIT = AVAILABLE:


ROCKET METEOR STREAK COMET JET BIPLANE LIMIT VALUE
STEEL 120.0000 0.000000 0.000000 640.0000 40.00000 0.000000 800.0000 0.000000
COPPER 480.0000 0.000000 660.0000 0.000000 20.00000 0.000000 1160.000 0.000000
PLASTIC 0.000000 0.000000 1760.000 0.000000 20.00000 0.000000 1780.000 0.000000
RUBBER 240.0000 0.000000 220.0000 320.0000 20.00000 250.0000 1050.000 0.000000
GLASS 240.0000 0.000000 440.0000 320.0000 40.00000 200.0000 1360.000 -120.0000
PAINT 120.0000 0.000000 220.0000 640.0000 60.00000 200.0000 1240.000 0.000000

SLACK/SURPLUS LIMIT = MINIMUM PRODUCTION:


PROD LIMIT VALUE
ROCKET 120.0000 400.0000 -280.0000
METEOR 0.000000 400.0000 -400.0000
STREAK 220.0000 400.0000 -180.0000
COMET 160.0000 400.0000 -240.0000
JET 20.00000 400.0000 -380.0000
BIPLANE 50.00000 400.0000 -350.0000

1
42
C2-B1 Solving Problems with LINGO Manufacture | Case 14 | Product Mix

GOAL

In the manufacture of certain products, the following raw materials are used in the quantities

14 indicated below:

Resources / Products PA PB PC PD Available

Wood Ton 2 1 3 0 1,000


Blocks
Plastic Ton 0 4 1 0 2,000
• Product Mix
Raw Material Steel Ton 1 0 3 2 800
• Blend
Glass Ton 0 0 2 2 1,000
• Finance
• Investments Ink Ton 0 1 2 1 1,500

• Diet Profit $ 20.00 30.00 25.00 15.00 -


• Aviation
Raw material stocks in tons are in the table above as availability and profits in the last line. We
• Transport ask for the maximum profit scheme.
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities

Source:
• Book 1
• Page 188

43
C2-B1 Solving Problems with LINGO Manufacture | Case 14 | Product Mix
MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , AVAILABLE =
WOOD 1000
PLASTIC 2000
STEEL 800
GLASS 1000
INK 1500;
! Products attributes;
PRODUCT , PROFIT =
PA 20
PB 30
PC 25
PD 15;
! Required PA PB PC PD;
USAGE = 2 1 3 0 ! WOOD;
0 4 1 0 ! PLASTIC;
1 0 3 2 ! STEEL;
0 0 2 2 ! GLASS;
0 1 2 1; ! INK;
ENDDATA
SUBMODEL MIN14:
MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r); );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (Ton):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Ton):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT (p/Ton):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN14);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION/PURCHASE PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-2s'),' Produced:',
@FORMAT(PRODUCE( J),'%4.0f'),'ton x ', 'Profit: $',
@FORMAT(PROFIT( J),'%4.2f'),' = ', 'Total: $',
@FORMAT(PRODUCE( J) * PROFIT( J),'%8.2f' ),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN14);
ENDCALC
END

44
C2-B1 Solving Problems with LINGO Manufacture | Case 14 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (Ton):
PA PB PC PD
WOOD
DATA: 2.000000 1.000000 3.000000 0.000000
PLASTIC 0.000000(UT):
RESOURCES/USAGE 4.000000 1.000000 0.000000
STEEL 1.000000
PA 0.000000PB 3.000000PC 2.000000PD
GLASS
WOOD 0.000000
2.000000 0.000000
1.000000 2.000000
3.000000 2.000000
0.000000
INK 0.000000 1.000000
PLASTIC 0.000000 4.000000 2.000000 1.000000
1.000000 0.000000
STEEL 1.000000 0.000000 3.000000 2.000000
AVAILABLE
GLASS (Ton):
0.000000 0.000000 2.000000 2.000000
WOOD
INK 1000.000
0.000000 1.000000 2.000000 1.000000
PLASTIC 2000.000
STEEL 800.0000
AVAILABLE (UT):
GLASS 1000.000
WOOD 1000.000
INK 1500.000
PLASTIC 2000.000
STEEL (p/Ton):
PROFIT 800.0000
GLASS
PA 1000.000
20.00000
INK 30.00000
PB 1500.000
PC 25.00000
COST:
PD 15.00000
PA 20.00000
PB 30.00000
SOLUTION
❖ SOLUTION
PC 25.00000
Global optimal solution found.
PD is15.00000
Objective
Below value:
the solution 24125.00
achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Infeasibilities: 0.000000
SOLUTION
OPTIMAL PRODUCTION/PURCHASE
Global optimal solution found. PROGRAM:
PA Produced:
Objective 250ton x Profit: $20.00 = Total: $ 5000.00
value: 24125.00
PB Produced: 500ton x Profit: $30.00 = Total: $15000.00
Infeasibilities: 0.000000
PD Produced: 275ton x Profit: $15.00 = Total: $ 4125.00
OPTIMAL PRODUCTION/PURCHASE PROGRAM:
PA Produced: 250ton x Profit: $20.00 = Total: $ 5000.00
PB Produced: 500ton x Profit: $30.00 = Total: $15000.00
PD Produced: 275ton x Profit: $15.00 = Total: $ 4125.00

45
1
C2-B1 Solving Problems with LINGO Next Production Cycle | Case 15 | Product Mix

GOAL

15 One company is planning its next production cycle, to produce three products. For this they
must go through three productive processes and consume different amount of hours as
follows:

Resources / Products P1 P2 P3 Available


Blocks
Machining hr 2 3 6 600
• Product Mix
Process Polymer hr 6 3 4 300
• Blend
• Finance Assembler hr 5 6 2 400

• Investments Minimum Production un 50 67 75 -


• Diet Setup $ 1000 800 900 -
• Aviation
Profit $ 48.00 55.00 50.00 -
• Transport
The production manager wants to determine the most profitable production mix.
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities

46
C2-B1 Solving Problems with LINGO Next Production Cycle | Case 15 | Product Mix

MODEL:
SETS:
PRODUCT: PROFIT, SETUP, PRODUCE, MIN_PROD;
RESOURCE : AVAILABLE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Product Attributes;
PRODUCT, PROFIT, SETUP, MIN_PROD =
PROD1 48 1000 50
PROD2 55 800 67
PROD3 50 900 75;
! Available resources;
RESOURCE, AVAILABLE =
MACHINING 600
POLYMER 300
ASSEMBLER 400;

! Required Machining Polymer Assembler;


USAGE = 2 3 6 ! PROD1;
6 3 4 ! PROD2;
5 6 2; ! PROD3;
ENDDATA
SUBMODEL MAX15:
[OBJ] MAX = @SUM( PRODUCT(I): PROFIT(I) * PRODUCE(I) - @IF(PRODUCE #GT# 0, SETUP(I),0));
! The Available constraints;
@FOR( RESOURCE( I):
[AVA] @SUM( PRODUCT( J): USAGE( I, J) * PRODUCE( J)) <= AVAILABLE( I) );
! Minimum production required;
@FOR( PRODUCT:[PROD] PRODUCE <= MIN_PROD );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Sets the length of the line;
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE (hr):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (hr):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " MINIMUM PRODUCTION (un):", @NEWLINE( 1));
@TABLE(MIN_PROD);
@WRITE(" ", @NEWLINE( 1), " SETUP (p/product):", @NEWLINE( 1));
@TABLE(SETUP);
@WRITE(" ", @NEWLINE( 1), " PROFIT (p/un):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX15);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ', PRODUCT(J),' Produce:',
@FORMAT(PRODUCE( J),'%3.0f'),' un x ', 'Unity profit: $',
@FORMAT(PROFIT( J),'%4.2f'),' = ', 'Total: $',
@FORMAT(PRODUCE( J) * PROFIT( J),'%6.2f' ),' - Setup: $',
@FORMAT(SETUP( J),'%4.2f' ),' = Profit: $',
@FORMAT(PRODUCE( J) * PROFIT( J) - SETUP( J) ,'%7.2f' ),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX15);
ENDCALC
END

47
C2-B1 Solving Problems with LINGO Next Production Cycle | Case 15 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (hour):
PROD1 PROD2 PROD3
MACHINING 2.000000 3.000000 6.000000
POLYMER 6.000000 3.000000 4.000000
ASSEMBLER 5.000000 6.000000 2.000000

AVAILABLE:
MACHINING 600.0000
POLYMER 300.0000
ASSEMBLER 400.0000

MINIMUM PRODUCTION:
PROD1 50.00000
PROD2 67.00000
PROD3 75.00000

SETUP:
PROD1 1000.000
PROD2 800.0000
PROD3 900.0000

PROFIT:
PROD1 48.00000
PROD2 55.00000
PROD3 50.00000

SOLUTION
❖ SOLUTION
Global optimal solution found.
Objective
Below is the value:
solution achieved by LINGO with infeasibilities 0, and the detailed report 3022.222
that makes up the optimal
Objective bound: 3022.222
Infeasibilities:
SOLUTION 0.000000
Global optimal solution found.
Model Class:
Objective PILP
value: 3022.22
Objective bound: 3022.22
OPTIMAL PRODUCTION PROGRAM:
Infeasibilities: 0.00000
PROD2 Produce: 56 un x Unity profit: $55.00 = Total: $3055.56 - Setup: $800.00 = Profit: $2255.56
PROD3 Produce:
OPTIMAL PRODUCTION33 un x Unity profit: $50.00 = Total: $1666.67 - Setup:
PROGRAM: $900.00 = Profit: $ 766.67
PROD2 Produce: 56 un x Unity profit: $55.00 = Total: $3055.56 - Setup: $800.00 = Profit: $2255.56
SLACK/SURPLUS
PROD3 Produce: LIMIT
33 un =x AVAILABLE:
Unity profit: $50.00 = Total: $1666.67 - Setup: $900.00 = Profit: $ 766.67
PROD1 PROD2 PROD3 LIMIT VALUE
MACHINING 0.000000 166.6667
SLACK/SURPLUS LIMIT = AVAILABLE: 200.0000 600.0000 -233.3333
PROD1 PROD2 PROD3 LIMIT VALUE
MACHINING 0.000000 166.6667 200.0000 600.0000 -233.3333
POLYMER 0.000000 166.6667 133.3333 300.0000 0.000000
ASSEMBLER 0.000000 333.3333 66.66667 400.0000 0.000000

SLACK/SURPLUS LIMIT = MINIMUM PRODUCTION:


PROD LIMIT VALUE
PROD1 0.000000 50.00000 -50.00000
PROD2 55.55556 67.00000 -11.44444
PROD3 33.33333 75.00000 -41.66667

1
48
C2-B1 Solving Problems with LINGO Three Products | Case 16 | Product Mix

GOAL

16 A company has three manufacturing facilities that can each produce three different products.
All the necessary information for the development of the model follows below:

Resources / Products Prod1 Prod2 Prod3 Available


Blocks 800
INST_1 un 8 4 10
• Product Mix
Facilities INST_2 un 9 6 10 1,000
• Blend
INST_3 un 12 10 11 1,200
• Finance
• Investments Demand un 1,000 900 800 -
• Diet
Price $ 20.00 25.00 30.00 -
• Aviation
What is the best production plan to maximize profit?
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities

Source:
• Book 2
• Page 228

49
C2-B1 Solving Problems with LINGO Three Products | Case 16 | Product Mix

MODEL:
SETS:
PRODUCT : PRICE, DEMAND, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
INST1 800
INST2 1000
INST3 1200;

! Product attributes;
PRODUCT, PRICE, DEMAND =
PROD1 20 1000
PROD2 25 900
PROD3 30 800;

!Required PROD1 PROD2 PROD3;


USAGE = 8 4 10 ! INST1;
9 6 10 ! INST2;
12 10 11 ; ! INST3;
ENDDATA
SUBMODEL MAX16:
[OBJ] MAX = XPRICE - XCOST ;
XPRICE = @SUM( RXP (r, p): PRODUCE( p) * price( p));
XCOST = @SUM( RXP( r, p): PRODUCE( p) * usage( r, p));
! The Available constraints;
@FOR( PRODUCT( J):
[AVA] @SUM( PRODUCT(c): PRODUCE( C)) <= AVAILABLE( j));
! The Demand constraints;
@FOR( RESOURCE( k):
[DEM] @SUM( RESOURCE( p): PRODUCE( p) ) <= DEMAND( k); );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/PRODUCT (un):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (un):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " PRICE (p/un):", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1));
@WRITE(" SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX16);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J) | USAGE( I,J) * PRODUCE(J) #GT# 0: ' ',
@FORMAT(RESOURCE(I),'-6s'), ' ', PRODUCT(J),' Produce: ',
@FORMAT(PRODUCE( J),'%3.0f'),' un x ', 'Price: $',
@FORMAT(PRICE( J),'%5.2f'), ' = ', 'Total: $',
@FORMAT(PRODUCE(J) * Price( J),'%6.2f'), ' - Cost: $',
@FORMAT(PRODUCE(J) * usage(i, j),'%6.2f'), ' = Profit: $',
@FORMAT(PRODUCE(J) * PRICE( j) - PRODUCE(J) * USAGE(I,J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX16);
ENDCALC
END

50
C2-B1 Solving Problems with LINGO Three Products | Case 16 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/PRODUCT (un):
PROD1 PROD2 PROD3
INST1 8.000000 4.000000 10.00000
INST2 9.000000 6.000000 10.00000
INST3 12.00000 10.00000 11.00000

AVAILABLE (un):
INST1 800.0000
INST2 1000.000
INST3 1200.000

DEMAND (un):
PROD1 1000.000
PROD2 900.0000
PROD3 800.0000

PRICE (p/un):
PROD1 20.00000
PROD2 25.00000
PROD3 30.00000

SOLUTION
Global optimal solution found.
Objective value: 47200.00
Infeasibilities: 0.000000

❖ SOLUTION
Model Class: LP

Below is the
OPTIMAL solution achieved
PRODUCTION by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
PROGRAM:
INST1 PROD3 Produce: 800 un x Price: $30.00 = Total: $24000.00 - Cost: $8000.00 = Profit: $16000.00
INST2 PROD3 Produce: 800 un x Price: $30.00 = Total: $24000.00 - Cost: $8000.00 = Profit: $16000.00
SOLUTION
INST3 optimal
Global PROD3 Produce:
solution 800 un x Price: $30.00 = Total: $24000.00 - Cost: $8800.00 = Profit: $15200.00
found.
Objective value: 47200.00
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


INST1 PROD3 Produce: 800 un x Price: $30.00 = Total: $24000.00 - Cost: $8000.00 = Profit: $16000.00
INST2 PROD3 Produce: 800 un x Price: $30.00 = Total: $24000.00 - Cost: $8000.00 = Profit: $16000.00
INST3 PROD3 Produce: 800 un x Price: $30.00 = Total: $24000.00 - Cost: $8800.00 = Profit: $15200.00

51
1
C2-B1 Solving Problems with LINGO Heater | Case 17 | Product Mix

GOAL

17 One company manufactures two types of heater: one electric and one gas model and has just
signed a contract to provide 30,000 electric heaters and 15,000 gas.

However, its productive capacity is limited to three processes, in the number of hours
available.
Blocks
Alternatively, the company can buy similar heaters on the market, paying for the $67 electric
• Product Mix
model and the $95 gas model.
• Blend
All the necessary information for the development of the model follows below:
• Finance
• Investments Resources / Products Electric Gas Available
• Diet Production hr 0.2 0.4 10,000
• Aviation
Process Assembler hr 0.3 0.1 15,000
• Transport
Package hr 0.1 0.1 5,000
• Agriculture
• Construction Demand un 30,000 15,000 -

• Refinery Production Cost $ 55.00 85.00 -


• Schedule Purchase Cost $ 67.00 95.00 -
• Cutting
Determine how many heaters of each model are to be manufactured and how many must be
• Metallurgy
purchased in order to meet the request at the lowest possible cost.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities
• Purchase

Source:
• Book 2
• Page 231

52
C2-B1 Solving Problems with LINGO Heater | Case 17 | Product Mix

MODEL:
SETS:
PRODUCT : COST, PRODUCE, DEMAND;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Available resources;
RESOURCE, AVAILABLE =
PRODUCTION 10000
ASSEMBLER 15000
PACKAGE 5000;

! Product Attributes;
PRODUCT, COST, DEMAND =
ELE_PRODU 55 30000
GAS_PRODU 85 15000
ELE_PURCH 67 0
GAS_PURCH 95 0;

! Required p/unit (hr) ELE_PRODU GAS_PRODU ELE_PURCH GAS_PURCH;


USAGE = 0.2 0.4 0 0 ! PRODUCTION;
0.3 0.1 0 0 ! ASSEMBLER;
0.1 0.1 0 0; ! PACKAGE;
ENDDATA
SUBMODEL MIN17:
MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[CAP] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
! The Demand constraints;
PRODUCE( 1) + PRODUCE( 3) = 30000;
PRODUCE( 2) + PRODUCE( 4) = 15000;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/PRODUCT (hour):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (hour):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " PRODUCTION/PURCHASE COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN17);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION/PURCHASE PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-10s'), @IF(@STRLEN(PRODUCT(J)) #GT# 11, 'Purchase:' ,'Produce: ' ),
@FORMAT(PRODUCE( J),'%5.0f'),' Heater x ', 'Unit cost: $',
@FORMAT(COST( J),'%5.2f'),' = ', 'Total: $',
@FORMAT(COST( J) * PRODUCE(J),'%10.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN17);
ENDCALC
END

53
C2-B1 Solving Problems with LINGO Heater | Case 17 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/PRODUCT (hour):
ELE_PRODU GAS_PRODU ELE_PURCH GAS_PURCH
PRODUCTION 0.2000000 0.4000000 0.000000 0.000000
ASSEMBLER 0.3000000 0.1000000 0.000000 0.000000
PACKAGE 0.1000000 0.1000000 0.000000 0.000000

AVAILABLE (hour):
PRODUCTION 10000.00
ASSEMBLER 15000.00
PACKAGE 5000.000

DEMAND (un):
ELE_PRODU 30000.00
GAS_PRODU 15000.00
ELE_PURCH 0.000000
GAS_PURCH 0.000000

PRODUCTION/PURCHASE COST:
ELE_PRODU 55.00000
GAS_PRODU 85.00000
ELE_PURCH 67.00000
GAS_PURCH 95.00000

SOLUTION
Global optimal solution found.
❖ SOLUTION
Objective value: 2975000.
Below is the solution
Objective bound:achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
2975000.
Infeasibilities: 0.000000
SOLUTION
Global optimal
Model Class: solution found.
MILP
Objective value: 2975000.
Infeasibilities:
OPTIMAL PRODUCTION/PURCHASE PROGRAM: 0.000000
ELE_PRODU Produce: 30000 Heater x Unit cost: $55.00 = Total: $1650000.00
GAS_PRODU
OPTIMAL Produce: 10000 Heater
PRODUCTION/PURCHASE x Unit cost: $85.00 =
PROGRAM: Total: $ 850000.00
GAS_PURCH Produce:
ELE_PRODU 5000 Heater
Produce: 30000 Heaterx x Unit cost:
Unit $95.00
cost: $55.00= Total:
= $ 475000.00
Total: $1650000.00
GAS_PRODU Produce: 10000 Heater x Unit cost: $85.00 = Total: $ 850000.00
SLACK/SURPLUS LIMIT = AVAILABLE:
GAS_PURCH Produce: 5000 Heater
x Unit cost: $95.00 = Total: $ 475000.00
ELE_PRODU GAS_PRODU ELE_PURCH GAS_PURCH LIMIT VALUE
PRODUCTION
SLACK/SURPLUS 6000.000 4000.000
LIMIT = AVAILABLE: 0.000000 0.000000 10000.00 0.000000
ASSEMBLER 9000.000 1000.000 0.000000 0.000000 15000.00 -5000.000
ELE_PRODU GAS_PRODU ELE_PURCH GAS_PURCH LIMIT VALUE
PACKAGE 3000.000 1000.000 0.000000 0.000000 5000.000 -1000.000
PRODUCTION 6000.000 4000.000 0.000000 0.000000 10000.00 0.000000
ASSEMBLER 9000.000 1000.000 0.000000 0.000000 15000.00 -5000.000
PACKAGE 3000.000 1000.000 0.000000 0.000000 5000.000 -1000.000

54
C2-B1 Solving Problems with LINGO Canned | Case 18 | Product Mix

GOAL

18 An agro-industrial company produces 3 types of canning. Each type requires a similar industrial
treatment that differs in duration.

• 1000 boxes of tomato soup requires 200 hours of labor + 6 hours of equipment
• 1000 boxes of tomato juice requires 80 hours of labor + 24 hours of equipment
Blocks
• 1000 boxes of tomato sauce requires 300 hours of labor + 7 hours of equipment.
• Product Mix
All the necessary information for the development of the model follows below:
• Blend
• Finance Resources / Products Soup Juice Sauce Available
• Investments
Labor hr 200 80 300 5,000
• Diet
Equipment hr 6 24 7 168
• Aviation
• Transport Minimum Production pac 500 500 500 -

• Agriculture
Profit $ 3.00 2.50 1.00 -
• Construction
• Refinery Assuming that the company wants to maximize its profit, determine the production of each of
the products,
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Blend

Source:
• Book 2
• Page 233

55
C2-B1 Solving Problems with LINGO Canned | Case 18 | Product Mix

MODEL:
SETS:
PRODUCT : PROFIT, MINPROD, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Available resources;
RESOURCE , AVAILABLE =
LABOR 5000
EQUIPMENT 168;
! Product Attributes;
PRODUCT, PROFIT, MINPROD =
SOUP 3 500
JUICE 2.5 500
SAUCE 1 500;

! Required p/unit (hr) SOUP JUICE SAUCE;


USAGE = 200 80 300 ! Labor;
6 24 7; ! Equipment;
ENDDATA
SUBMODEL MAX18:
MAX = @SUM( PRODUCT (p): PRODUCE( p) * PROFIT( p));
! The capacity constraints;
@FOR( RESOURCE( I):
[CAP] @SUM( PRODUCT(J): USAGE(I, J)/1000 * PRODUCE(J)) <= AVAILABLE( I););
! The demand constraints;
@FOR( PRODUCT(K):
[DEM] @SUM( PRODUCT( K): PRODUCE( K )) >= MINPROD( K));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/PRODUCT (hr):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (hr):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " MINIMUM PRODUCTION (Pac):", @NEWLINE( 1));
@TABLE(MINPROD);
@WRITE(" ", @NEWLINE( 1), " PROFIT (p/pac):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX18);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-5s'),' Produce:',
@FORMAT(PRODUCE( J),'%5.0f'), ' Pac x ', 'Unit profit: $',
@FORMAT(PROFIT( J),'%4.2f'), ' = ', 'Total: $',
@FORMAT(PRODUCE(J) * Profit( J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX18);
ENDCALC
END

56
C2-B1 Solving Problems with LINGO Canned | Case 18 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/PRODUCT (hr):
SOUP JUICE SAUCE
LABOR 200.0000 80.00000 300.0000
EQUIPMENT 6.000000 24.00000 7.000000

AVAILABLE (hr):
LABOR 5000.000
EQUIPMENT 168.0000

MINIMUM PRODUCTION (Pac):


SOUP 500.0000
JUICE 500.0000
SAUCE 500.0000

PROFIT (p/pac):
SOUP 3.000000
JUICE 2.500000
SAUCE 1.000000

SOLUTION
Global optimal solution found.
❖ SOLUTION
Objective value: 74393.52
Infeasibilities:
Below 0.000000
is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

Model Class: PILP


SOLUTION
Global optimal solution found.
OPTIMAL PRODUCTION
Objective value: PROGRAM: 74393.52
SOUP Produce:23898 Pac x Unit profit: $3.00 = Total:0.000000
Infeasibilities: $71694.44
JUICE Produce: 880 Pac x Unit profit: $2.50 = Total: $ 2199.07
SAUCE Produce:
OPTIMAL 500
PRODUCTION Pac x Unit profit: $1.00 = Total: $ 500.00
PROGRAM:
SOUP Produce:23898 Pac x Unit profit: $3.00 = Total: $71694.44
SLACK/SURPLUS
JUICE Produce: LIMIT = AVAILABLE:
880 Pac x Unit profit: $2.50 = Total: $ 2199.07
SAUCE Produce: 500 Pac
SOUP x JUICE
Unit profit:
SAUCE$1.00 LIMIT
= Total: $VALUE
500.00
LABOR 4779630. 70370.37 150000.0 5000.000 4995000.
SLACK/SURPLUS LIMIT = AVAILABLE:
EQUIPMENT 143388.9 21111.11 3500.000 168.0000 167832.0
SOUP JUICE SAUCE LIMIT VALUE
LABOR 4779630.
SLACK/SURPLUS LIMIT =70370.37
MINPROD: 150000.0 5000.000 4995000.
EQUIPMENT 143388.9
PROD 21111.11
LIMIT 3500.000
VALUE 168.0000 167832.0
SOUP 23898.15 500.0000 23398.15
SLACK/SURPLUS LIMIT500.0000
JUICE 879.6296 = MINPROD:379.6296
PROD
SAUCE 500.0000 LIMIT
500.0000 VALUE
0.000000
SOUP 23898.15 500.0000 23398.15
JUICE 879.6296 500.0000 379.6296
SAUCE 500.0000 500.0000 0.000000

1
57
C2-B1 Solving Problems with LINGO Case for Computer | Case 19 | Product Mix

GOAL

19
As a manufacturer of electronic equipment, you must design a cabinet for your new product, which
meets the area, volume, marketing and aesthetic requirements.

In this example, we create a nonlinear optimization model to design the case for a computer.

Blocks
• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 4

58
C2-B1 Solving Problems with LINGO Case for Computer | Case 19 | Product Mix

MODEL:
! Design a box at minimum cost that meetsarea, volume, marketing and aesthetic requirements;
SUBMODEL MIN19:
[COST] MIN = 2*( .05*(d*w + d*h) +.1*w*h);
[SURFACE] 2*(h*d + h*w + d*w) >= 888;
[VOLUME] h*d*w >= 1512;
! These two enforce aesthetics;
[NOTNARRO] h/w <= .718;
[NOTHIGH] h/w >= .518;
! Marketing requires a small footprint;
[FOOTPRNT] d*w <= 252;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
!Data block;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" VOLUME: 1512", @NEWLINE( 1));
@WRITE(" SURFACE: 888", @NEWLINE( 1));
@WRITE(" NOTNARRO: 0.718", @NEWLINE( 1));
@WRITE(" NOTHIGH: 0.518", @NEWLINE( 1));
@WRITE(" FOOTPRNT: 252", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN19);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " DIMENSIONS OF THE BOX: ", @NEWLINE( 1));
@WRITE( ' Depth: ',
@FORMAT(D,'%8.5f'), @NEWLINE( 1), ' Width: ',
@FORMAT(W,'%8.5f'), @NEWLINE( 1),' Height: ',
@FORMAT(H,'%8.5f'), @NEWLINE( 2), ' MINIMUM COST:', 32*' ','$',
@FORMAT(COST, '%8.5F'), @NEWLINE( 1));
ENDCALC
END

59
C2-B1 Solving Problems with LINGO Case for Computer | Case 19 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:

VOLUME: 1512
SURFACE: 888
NOTNARRO: 0.718
NOTHIGH: 0.518
FOOTPRNT: 252

SOLUTION
Local optimal solution found.
Objective value: 50.96508
Infeasibilities: 0.000000

Model Class: NLP

DIMENSIONS OF THE BOX:


Depth: 23.03096
Width: 9.56220
Height: 6.86566

MINIMUM COST: $50.96508


❖ SOLUTION
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

SOLUTION
Local optimal solution found.
Objective value: 50.96508
Infeasibilities: 0.000000
Extended solver steps: 5
Best multistart solution found at step: 1
Total solver iterations: 51
Elapsed runtime seconds: 0.54

DIMENSIONS OF THE BOX:


Depth: 23.03096
Width: 9.56220
Height: 6.86566

MINIMUM COST: $50.96508

1
60
C2-B1 Solving Problems with LINGO Garden Equipment | Case 20 | Product Mix

GOAL

20 One company manufactures some models of garden equipment. The company intends to
determine how many units to produce during the next few months, in order to meet demand at
the lowest possible cost.

The company estimates a cost of $ 1.50 per month for each unit held in stock.
Blocks
It considers that the number of units in stock per month is the average of the quantity existing
• Product Mix
at the beginning of the month. Currently it has 120 units in stock.
• Blend
To maintain the workforce, it needs to produce at least 400 units per month and also wants to
• Finance
keep a minimum safety stock of 50 units per month.
• Investments
• Diet The company intends to determine how many units it will produce during the next 4 months, in
order to meet the demand for the lowest possible cost.
• Aviation
• Transport All the necessary information for the development of the model follows below:
• Agriculture
• Construction Items / Month M1 M2 M3 M4

• Refinery
Production Cost $ 49.00 45.00 46.00 47.00
• Schedule
Cost of Stock $ 1.50 1.50 1.50 1.50
• Cutting
• Metallurgy Initial and Safety Stock un 120 50 50 50
• Fertilizer
Demand un 420 580 310 540
• Clinic
• Classic Minimum Production un 400 400 400 400
• Dynamic
Production Capacity un 500 520 450 550
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 2
• Page 233

61
C2-B1 Solving Problems with LINGO Garden Equipment | Case 20 | Product Mix

MODEL:
SETS:
PRODUCT: COST, COST_STOCK, USED_STOCK, STK_BAL, MINPROD, DEMAND, CAPACITY, PRODUCE;
HEADER / PROD, LIMIT, VALUE /:;
ENDSETS
DATA:
! Product Attributes;
PRODUCT, COST, COST_STOCK, MINPROD, DEMAND, CAPACITY =
M1 49.00 1.50 400 420 500
M2 45.00 1.50 400 580 520
M3 46.00 1.50 400 310 450
M4 47.00 1.50 400 540 550;
ENDDATA
SUBMODEL MIN20:
[OBJ] MIN = @SUM(PRODUCT( p): COST( p) * PRODUCE( p) ) +
@SUM(PRODUCT( p): STK_BAL( p) * COST_STOCK( p));
! Initial stock - Security stock;
USED_STOCK(1) = 120 - 110;
USED_STOCK(2) = 110 - 50;
USED_STOCK(3) = 140 - 50;
USED_STOCK(4) = 140 - 50;
! Stock balance;
STK_BAL(1) = 120 - 10;
STK_BAL(2) = 110 - 60;
STK_BAL(3) = 50 + 90;
STK_BAL(4) = 140 - 50;
! Equalization of production to meet demand;
PRODUCE(1) = DEMAND(1) - USED_STOCK(1);
PRODUCE(2) = DEMAND(2) - USED_STOCK(2);
! MinProd 400 un - Demand: 310 = Stock 90 + Security stock 50 un = 140un;
PRODUCE(3) = DEMAND(3) + USED_STOCK(3);
PRODUCE(4) = DEMAND(4) - USED_STOCK(4);
! minimum and maximum production range;
@FOR( PRODUCT(K):
[MPR] @SUM( PRODUCT( K): PRODUCE( K)) >= MINPROD( K);
[CAP] @SUM( PRODUCT( K): PRODUCE( K)) <= CAPACITY( K););
ENDSUBMODEL

62
C2-B1 Solving Problems with LINGO Garden Equipment | Case 20 | Product Mix

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1), " PRODUCTION COST p/un:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " COST OF STOCK (un):", @NEWLINE( 1));
@TABLE(COST_STOCK);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " MAXIMUM PRODUCTION (un):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " MINIMUM PRODUCTION (un):", @NEWLINE( 1));
@TABLE(MINPROD);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN20);
! Solution report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(" OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 2));
@WRITE( ' PRODUCTION COST:', @NEWLINE(1));
@WRITEFOR( PRODUCT( J)| PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-6s'),' Produce:',
@FORMAT(PRODUCE( J),'%4.0f'), ' un x ', 'Unit cost: $',
@FORMAT(COST( J),'%5.2f'), ' = ', 'Total: $',
@FORMAT(PRODUCE(J) * COST( J),'%8.2f'),@NEWLINE( 1));
@WRITE(' TOTAL PRODUCTION COST:', 32*' ', '$',
@FORMAT( @SUM(PRODUCT( p): COST( p) * PRODUCE( p)),'%8.2f'), @NEWLINE(2));
! Cost of stock;
@WRITEFOR( PRODUCT( J)| PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-6s'),' Stock: ',
@FORMAT(STK_BAL(J),'%5.0f'), ' un x Cost: $',
@FORMAT(COST_STOCK(J),'%5.2f'), ' = Total: $',
@FORMAT(STK_BAL * COST_STOCK(J),'%8.2f'), @NEWLINE(1));
@WRITE(' COST OF STOCK:', 40*' ', '$',
@FORMAT( @SUM(PRODUCT( J): STK_BAL( J) * COST_STOCK( J)),'%8.2f'),
@NEWLINE(2));
! Minimum Total Cost:;
@WRITE(' MINIMUM TOTAL COST::', 34*' ', '$', @FORMAT( OBJ,'%8.2f'), @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN20);
ENDCALC
END

63
COST OF STOCK (un):
M1 1.500000
M2 1.500000
M3 1.500000
M4 1.500000
C2-B1 Solving Problems with LINGO Garden Equipment | Case 20 | Product Mix
DEMAND (un):
❖ DATA M1 420.0000
M2 580.0000
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
M3 310.0000
DATA: M4 540.0000
DATA:
PRODUCTION MAXIMUM PRODUCTION (un):
PRODUCTION COST
COST p/un:
p/un:
M1 49.00000 M1 500.0000
M1 49.00000
M2 M2 520.0000
M2 45.00000
45.00000
M3 46.00000 M3 450.0000
M3 46.00000
M4 M4 550.0000
M4 47.00000
47.00000
COST OF MINIMUM PRODUCTION (un):
COST OF STOCK
STOCK (un):
(un): M1 400.0000
M1 1.500000
M1 1.500000 M2 400.0000
M2 1.500000
M2 1.500000 M3 400.0000
M3 1.500000
M3 1.500000 M4 400.0000
M4 1.500000
M4 1.500000
DEMAND (un): SOLUTION
DEMAND (un): Global optimal solution found.
M1 420.0000
M1 420.0000 Objective value: 83625.00
M2 580.0000
M2 580.0000 Infeasibilities: 0.000000
M3 310.0000
M3 310.0000
M4 540.0000
M4 540.0000 Model Class: LP
MAXIMUM PRODUCTION (un):
MAXIMUM PRODUCTION (un): OPTIMAL PRODUCTION PROGRAM:
M1 500.0000
M1 520.0000
M2 500.0000
M2 520.0000
M3 450.0000 PRODUCTION COST:
M3 450.0000
❖ SOLUTION
M4 550.0000 M1 Produce: 410 un x Unit cost: $49.00 = Total: $20090.00
M4 550.0000 M2 Produce: 520 un x Unit cost: $45.00 = Total: $23400.00
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
MINIMUM PRODUCTION (un): M3 Produce: 400 un x Unit cost: $46.00 = Total: $18400.00
MINIMUM PRODUCTION
M1 400.0000 (un): M4 Produce: 450 un x Unit cost: $47.00 = Total: $21150.00
SOLUTION
M1 400.0000
M2 400.0000 TOTAL PRODUCTION COST: $83040.00
Global optimal solution found.
M2 400.0000
M3 400.0000
Objective value: 83625.00
M3
M4 400.0000
400.0000
Infeasibilities: 0.000000
M4 400.0000
SOLUTION
OPTIMAL PRODUCTION PROGRAM:
SOLUTION
Global optimal solution found.
Global optimal
PRODUCTION
Objective value:solution found.
COST: 83625.00
Objective
M1 value:
Produce:
Infeasibilities: 410 un x Unit cost: $49.00 = Total: 83625.00
$20090.00
0.000000
M2 Produce: 520 un x Unit cost: $45.00 = Total: $23400.00
Infeasibilities: 0.000000
M3 Produce:
Model Class: LP 400 un x Unit cost: $46.00 = Total: $18400.00
M4 Produce:
Model Class: LP 450 un x Unit cost: $47.00 = Total: $21150.00
TOTAL
OPTIMALPRODUCTION
PRODUCTION COST:
PROGRAM: $83040.00
OPTIMAL PRODUCTION PROGRAM:
M1 Stock: 110 un x Cost: $ 1.50 = Total: $ 165.00
PRODUCTION
M2 Stock:
COST: 50 un x Cost: $ 1.50 = Total: $ 75.00
PRODUCTION
M1
M3 Stock:COST:
Produce: 410 un x
140 un x Cost: Unit cost: $49.00 = Total:
$ 1.50 = Total: $ 210.00 $20090.00
M2
M1
M4 Produce:
Produce: 90
Stock: 520
410unun xx Unit
Unit cost:
unx Cost: cost: $45.00
$49.00
$ 1.50 == Total:
= Total: Total: $23400.00
$ 135.00$20090.00
M3 Produce:
Produce: 400
M2 OF STOCK:
COST 520 unun xx Unit
Unit cost:
cost: $46.00
$45.00 == Total:
Total: $18400.00
$ 585.00$23400.00
M4
M3 Produce: 450 un x Unit cost: $47.00 =
Produce: 400 un x Unit cost: $46.00 = Total: $18400.00 Total: $21150.00
TOTAL
M4 PRODUCTION COST:COST:
Produce:
MINIMUM TOTAL 450 un x Unit cost: $47.00 = Total: $83040.00
$21150.00
$83625.00
TOTAL PRODUCTION COST: $83040.00

1
1

64
C2-B1 Solving Problems with LINGO Winery | Case 21 | Product Mix

GOAL

21 A wine producer has 2 vineyards whose production capacity and cost per bottle are detailed
below.

Four Italian restaurants located near the wineries are interested in buying this wine.

Blocks The demand required for each restaurant, as well as price, shipping costs, are also detailed
below:
• Product Mix
• Blend Winery / Restaurants ST1 ST2 ST3 ST4 Capacity Cost p/un
• Finance
Demand un 1800 2300 1250 1750 - -
• Investments
• Diet W1 $ 7.00 8.00 13.00 9.00 3500 un $23.00
Shipping
• Aviation W2 $ 12.00 6.00 8.00 7.00 3100 un $25.00
• Transport
Price $ 69.00 67.00 70.00 66.00 - -
• Agriculture
• Construction The producer wants to determine the production and the shipping plan in order to maximize
the profits
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 2
• Page 235

65
C2-B1 Solving Problems with LINGO Winery | Case 21 | Product Mix
MODEL:
SETS:
WINERY: CAPACITY , COST;
VENDORS: DEMAND,PRICE;
LINKS( WINERY, VENDORS): SHIPPING, VOLUME;
ENDSETS
DATA:
! Winery attributes;
WINERY, CAPACITY, COST =
WINERY1 3500 23.00
WINERY2 3100 25.00;
! Vendor attributes;
VENDORS, DEMAND, PRICE =
ST1 1800 69.00
ST2 2300 67.00
ST3 1250 70.00
ST4 1750 66.00;
! Shipping p/bottle ST1 ST2 ST3 ST4;
SHIPPING = 7 8 13 9 ! WINERY1;
12 6 8 7; ! WINERY2;
ENDDATA
SUBMODEL MAX21:
[OBJ] MAX = @SUM( LINKS( I, J): PRICE( J) * VOLUME( I,J) - SHIPPING( I, J) * VOLUME( I, J) - COST(I) * VOLUME( I,J));
! The demand constraints;
@FOR( VENDORS( J):
[DEM] @SUM( WINERY( I): VOLUME( I, J)) <= DEMAND( J));
! The capacity constraints;
@FOR( WINERY( I):
[CAP] @SUM( VENDORS( J): VOLUME( I, J)) = CAPACITY( I));
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING COST:", @NEWLINE( 1));
@TABLE(SHIPPING);
@WRITE(" ", @NEWLINE( 1), " CAPACITY (bottle):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND (bottle):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " BOTTLE COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
@SOLVE(MAX21);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( LINKS( I, J) | VOLUME( I,J) #GT# 0: ' ', WINERY(I),' To:', VENDORS(j),@NEWLINE(1), ' ',
@FORMAT(VOLUME( I, J),'%4.0f'), ' bottle x ', 'price: $',
@FORMAT(PRICE( J),'%8.2f'), ' = Revenue: $',
@FORMAT(PRICE(J) * VOLUME(I, J),'%9.2f'), @NEWLINE(1),36*' ','- Cost: $',
@FORMAT(COST(I) * VOLUME(I, J),'%9.2f'), @NEWLINE(1),36*' ','- Ship: $',
@FORMAT(SHIPPING( I, J) * VOLUME(I,J),'%9.2f'), @NEWLINE(1),36*' ','= Profit: $',
@FORMAT(PRICE(J) * VOLUME( I, J) - COST(I) * VOLUME(I, J) - SHIPPING( I, J) * VOLUME(I,J),'%9.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITEFOR( LINKS( I, J) | VOLUME( I,J) #GT# 0: ' ', WINERY(I),' To:', VENDORS(j),20*' ','= Profit: $',
@FORMAT(PRICE(J) * VOLUME( I, J) - COST(I) * VOLUME(I, J) - SHIPPING( I, J) *VOLUME(I,J),'%9.2f'),
@NEWLINE(1));
@WRITE(' TOTAL PROFIT:', 32*' ', '$',
@FORMAT(@SUM(LINKS(I,J):PRICE(J) * VOLUME( I, J) - COST(I) * VOLUME(I, J) - SHIPPING( I, J) * VOLUME(I,J)),'%9.2f'), @
NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX21);
ENDCALC
END

66
WINERY2 3100.000
DATA: DEMAND (bottle):
SHIPPING COST: ST1 1800.000
ST1 ST2 ST3 ST4 ST2 2300.000
WINERY1 7.000000 8.000000 13.00000 9.000000 ST3 1250.000
C2-B1 Solving Problems with LINGO
WINERY2 12.00000 6.000000 8.000000 Winery
7.000000 | Case
ST421 1750.000
| Product Mix
DATA: CAPACITY (bottle): DATA: PRICE:
❖ DATA
SHIPPING COST: WINERY1 3500.000 SHIPPING COST: ST1 69.00000
ST1 ST2 3100.000
WINERY2 ST3 ST4 ST1
AllWINERY1
problem data is organized
7.000000 in the data
8.000000 block as a9.000000
13.00000 canST2
set of members and value attributes, which ST2 viewed ST3
be67.00000below. ST4
WINERY1 7.000000 8.000000 13.00000
ST3 70.00000 9.000000
WINERY2 12.00000 6.000000
DATA: 8.000000 7.000000
DEMAND (bottle): WINERY2 12.00000 6.000000 8.000000 7.000000
ST4 66.00000
SHIPPING COST: ST1 1800.000
CAPACITY (bottle): ST1 ST2ST22300.000ST3 ST4 CAPACITY (bottle): BOTTLE COST:
WINERY1 3500.000 ST3 1250.000
WINERY1 7.000000 8.000000 13.00000 9.000000 WINERY1 3500.000 WINERY1 23.00000
WINERY2 12.00000
WINERY2 3100.000 6.000000
ST4 1750.000
8.000000 7.000000 WINERY2 3100.000 WINERY2 25.00000
DEMAND (bottle):
CAPACITY (bottle): PRICE: DEMAND (bottle): SOLUTION
ST1 1800.000
WINERY1 3500.000 ST1 69.00000 ST1 1800.000 Global optimal solution found
ST2 2300.000
WINERY2 3100.000 ST2 67.00000 ST2 2300.000 Objective value:
ST3 1250.000 ST3 70.00000 ST3 1250.000 Infeasibilities:
ST4 (bottle):
DEMAND 1750.000 ST4 66.00000 ST4 1750.000 Total solver iterations:
ST1 1800.000 Elapsed runtime seconds:
PRICE:
ST2 2300.000 BOTTLE COST: PRICE:
ST1
ST3 69.00000
1250.000 WINERY1 23.00000 ST1 69.00000 OPTIMAL PROGRAM:
❖ SOLUTION
ST2 1750.000
67.00000 WINERY2 25.00000
ST4 ST2 67.00000 WINERY1 To:ST1
ST3 70.00000 ST3 70.00000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the bottle
1800 optimal x price: $ 6
ST4 66.00000
PRICE: SOLUTION ST4 66.00000
ST1 69.00000 Global optimal solution found.
SOLUTION
BOTTLE
ST2 COST:
67.00000 Objective value: BOTTLE COST: 241750.0
WINERY1
Global
ST3 70.00000 23.00000
optimal solution found.
Infeasibilities: 0.000000 WINERY1 To:ST2
WINERY1 23.00000
WINERY2
Objective
ST4 25.00000
value:
66.00000 Total solver iterations: WINERY2 25.00000 5
241750.0 450 bottle x price: $ 6
Infeasibilities: Elapsed runtime seconds: 0.000000 0.04
SOLUTION
BOTTLE COST: SOLUTION
Global optimal
WINERY1 23.00000solution found.
OPTIMAL PROGRAM: Global optimal solution found.
OPTIMAL
Objective PROGRAM:
value: WINERY1 To:ST1 241750.0
WINERY2 25.00000 Objective value: WINERY1 To:ST4 24175
WINERY1 To:ST1
Infeasibilities: 1800 bottle x price: $ 0.000000 69.00Infeasibilities:
= Revenue: $124200.00 1250 bottle x price: $0.000 6
1800solver
Total
SOLUTION bottle x price: $
iterations: 69.00 = Revenue: $124200.00 5 - Cost:
Total solver $iterations:
41400.00
Elapsed
Global runtime
optimal seconds:
solution found. - Cost: $ 41400.00
0.04 - Ship:runtime
Elapsed $ 12600.00
seconds: 0
Objective value: - Ship:241750.0 = Profit: $ 70200.00
$ 12600.00
OPTIMAL PROGRAM:
Infeasibilities: WINERY1 To:ST2 = Profit: 0.000000
$ 70200.00
OPTIMAL PROGRAM: WINERY2 To:ST2
WINERY1
Total To:ST1
solver iterations: 450 bottle x price: $ 67.00
5 = Revenue:
WINERY1 $
To:ST1 30150.00 1850 bottle x price: $ 6
WINERY1 To:ST2
1800runtime
Elapsed bottle seconds:
x price: $ 69.00 = Revenue: $124200.00 0.04 - 1800
Cost:bottle$ 10350.00
x price: $ 69.00 = Revenue: $12420
450 bottle x price: $ 67.00 = Revenue:
- Cost:
$ 30150.00
$ 41400.00- Ship: $ 3600.00 - Cost: $ 4140
OPTIMAL PROGRAM:
- Cost:$ 12600.00
- Ship: $ 10350.00
= Profit: $ 16200.00 - Ship: $ 1260
WINERY1 To:ST1 - Ship:$ 70200.00
WINERY1 To:ST4= Profit: $ 3600.00 = Profit: $ 7020
WINERY1 To:ST2x price: $125069.00
1800 bottle bottle = Profit:
x price:
= Revenue: $ $ 16200.00
66.00
$124200.00 = Revenue:
WINERY1 $ 82500.00
To:ST2
WINERY1
450 To:ST4
bottle x price: $ 67.00- =Cost:
Revenue:$ $41400.00
30150.00- Cost:
450 bottle$ 28750.00
x price: $ 67.00 = Revenue: $ 3015
1250 bottle x price: $ - Cost: $ 10350.00
66.00 = Revenue: $ 82500.00
- Ship: $ 12600.00 - Ship: $ 11250.00 - Cost: $ 1035
= -Profit:
Ship:
- Cost: $ $70200.00
3600.00 = Profit: $ 42500.00
$ 28750.00 - Ship: $ 360
WINERY1 To:ST2 WINERY2 To:ST2= Profit: $ 16200.00 = Profit: $ 1620
- Ship: $ 11250.00
WINERY1 To:ST4x price: $185067.00
450 bottle bottle x price: $$ 30150.00
= Revenue: 67.00WINERY1
= Revenue: $123950.00
To:ST4
1250 bottle x price: $ = Profit:
66.00- =Cost:
Revenue: $ 42500.00
- 1250
Cost:bottle$ 46250.00
$ $10350.00
82500.00 x price: $ 66.00 = Revenue: $ 8250
WINERY2 To:ST2 - -Ship:
Cost: $ $ 3600.00
28750.00 - Cost: $ 2875
1850 bottle x price: $ 67.00 = Revenue:
= -Profit:
Ship: $123950.00
$ $16200.00
11250.00 1 Ship:
- $ 1125
WINERY1 To:ST4 - Cost:$ 42500.00
= Profit: $ 46250.00 = Profit: $ 4250
WINERY2 To:ST2x price: $
1250 bottle - Ship:
66.00 = Revenue: $ 11100.00
$ 82500.00 WINERY2 To:ST2
1850 bottle x price: $ 67.00- =Cost:
Revenue: $ $123950.00
28750.00
= Profit: $ 66600.00 1850 bottle x price: $ 67.00 = Revenue: $12395
WINERY2 To:ST3 - - Cost:
Ship: $ $ 46250.00
11250.00 - Cost: $ 4625
= Profit: $ 42500.00
1250 bottle x price: $ 70.00 = Revenue: $ 87500.00 1
WINERY2 To:ST2
1850 bottle x price: $ - Cost:
67.00 = Revenue: $123950.00 $ 31250.00
- Ship:
- Cost: $ 10000.00
$ 46250.00
= Profit: $ 46250.00
1
WINERY1 To:ST1 = Profit: $ 70200.00
WINERY1 To:ST2 = Profit: $ 16200.00
WINERY1 To:ST4 = Profit: $ 42500.00
WINERY2 To:ST2 = Profit: $ 66600.00
WINERY2 To:ST3 = Profit: $ 46250.00
TOTAL PROFIT: $241750.00

67
C2-B1 Solving Problems with LINGO Blueberry Honey Juice | Case 22 | Product Mix

GOAL

22 A juice bottler prepares Blueberry honey in two options: Dark and Light. Each type is
constituted by a different proportion among the basic components.

Since water is abundant and does not have significant weight in the final price of the product,
is not considered in the production planning of each barrel:

Blocks Following is all the information necessary to develop the model, considering Formula,
• Product Mix Availability and Profit per barrel:

• Blend
Resources / Products Dark Light Available
• Finance
Citrus kg/barrel 5 15 480
• Investments
• Diet Glucose kg/barrel 4 4 160

• Aviation Blueberry kg/barrel 35 20 1190


• Transport
Price p/barrel $ 10.00 25.00 -
• Agriculture
Therefore, elaborate a program of production of these types of juice in order to maximize
• Construction
profit per barrel.
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Blend

Source:
• Book 3
• Chapter 2.3.8

68
C2-B1 Solving Problems with LINGO Blueberry Honey Juice | Case 22 | Product Mix

MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
HEADER / DARK, LIGHT, LIMIT, VALUE /:;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
PXR( RESOURCE, HEADER) : SLASUR;
ENDSETS
DATA:
! Available resources;
RESOURCE, AVAILABLE =
CITRUS_PECTIN 480
GLUCOSE 160
BLUEBERRY 1190;
! Product attributes;
PRODUCT, PROFIT =
DARK 10
LIGHT 25;
! Required p/barrel (kg) DARK LIGHT;
USAGE = 5 15 ! CITRUS_PECTIN;
4 4 ! GLUCOSE;
35 20; ! BLUEBERRY;
ENDDATA
SUBMODEL MAX5:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (kg):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (kg):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT per barrel:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX5);
@WRITE(" ", @NEWLINE( 1), " IDEAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-6s'),
@FORMAT(PRODUCE( J),'%2.0f'),' Barrel x Unit profit: $',
@FORMAT(PROFIT( J),'%4.2f'), ' = Total: $',
@FORMAT(PROFIT( J) * PRODUCE( J),'%6.2f'),
@NEWLINE( 1));
! Slack/Surplus Resources report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(" SLACK/SURPLUS LIMIT = AVAILABLE: ", @NEWLINE( 1));
@FOR(PXR(I,J): SLASUR(I,3) = AVAILABLE(I));
@FOR(RXP(I,J)| J #LT# 3: SLASUR(I,J) = PRODUCE(J) * USAGE(I,J));
@FOR(PXR(I,J): SLASUR(I,4) = SLASUR(I,1) + SLASUR(I,2) - SLASUR(I,3));
@TABLE(SLASUR);
! Execute the Graph;
@CHARTPIE( 'Product Mix Model', 'Produce', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

69
C2-B1 Solving Problems with LINGO Blueberry Honey Juice | Case 22 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (kg/barrel):
DARK LIGHT
CITRUS_PECTIN 5.000000 15.00000
GLUCOSE 4.000000 4.000000
BLUEBERRY 35.00000 20.00000

AVAILABLE (kg):
CITRUS_PECTIN 480.0000
GLUCOSE 160.0000
BLUEBERRY 1190.000

PROFIT p/barrel:
DARK 10.00000
LIGHT 25.00000

SOLUTION:
Global optimal solution found.
Objective value: 820.0000
Infeasibilities: 0.000000

Model Class: LP
❖ SOLUTION
IDEAL PRODUCTION PROGRAM:
Below
DARK is the
12 solution
Barrel achieved
x Unit by LINGO with infeasibilities
profit: $10.00 = 0, and the detailed
Total: $120.00 report that makes up the optimal
LIGHT 28 Barrel x Unit profit: $25.00 = Total: $700.00
SOLUTION:
Global optimal solution found.
Objective value: 820.0000
Infeasibilities: 0.000000

IDEAL PRODUCTION PROGRAM:


DARK 12 Barrel x Unit profit: $10.00 = Total: $120.00
LIGHT 28 Barrel x Unit profit: $25.00 = Total: $700.00

SLACK/SURPLUS LIMIT = AVAILABLE:


DARK LIGHT LIMIT VALUE
CITRUS_PECTIN 60.00000 420.0000 480.0000 0.000000
GLUCOSE 48.00000 112.0000 160.0000 0.000000
BLUEBERRY 420.0000 560.0000 1190.000 -210.0000

70
C2-B1 Solving Problems with LINGO Small Confection | Case 23 | Product Mix

GOAL

23 A confection operates with two products: trousers and shirts. Because they are similar
products, they have comparable productivity and share the same features.

Production scheduling is performed by product batches. The production department says it will
take 15 men an hour for a batch of pants and 20 men an hour for a batch of shirts. It is known
Blocks that no specialized manpower is required for the production of fighters, but it takes 10 men an
hour of this type of labor to produce a batch of shirts.
• Product Mix
• Blend Skilled workers can produce shirts or trousers, and 30 men per hour are available from skilled
workers and 50 non-skilled men per hour.
• Finance
• Investments From the production plant it is known that there are only two machines capable of producing
• Diet two types of product, and machine 1 can produce a batch of shirts every 10 hours, and can not
be used for more than 80 hours in the period considered.
• Aviation
• Transport Machine 2 can produce a batch of pants every 30 hours and a batch of shirts every 35 hours,
and can not be used for more than 130 hours in the period considered.
• Agriculture
• Construction Two types of raw material are required to produce trousers and shirts. In the production of a
• Refinery batch of pants, 12 kilos of raw material A, 10 kilos of B.

• Schedule In the production of a batch of shirts, 8 kilos of raw material A and 15 kilos of B.
• Cutting
The warehouse informs that, by imposing space, it can only to provide 120 kg of A and 100 kg
• Metallurgy
of B in the period considered.
• Fertilizer
Knowing that price by sale is $800 in lots of shirts and $500 in lots of pants. All the necessary
• Clinic
information for the development of the model follows below:
• Classic
Resources / Products Shirts Pants Available
• Dynamic
• Logistics T1N head 20 15 80
Worker
• Energy T1E head 10 0 30
• Assembly Line 1 hr 10 20 80
Machine
2 hr 35 30 130

A k 8 12 120
Keywords: Raw
B k 15 10 100
• Factory
Price ( p/lot ) $ 800.00 500.00 -
Formulate the problem in PL to maximize revenue.

71
C2-B1 Solving Problems with LINGO Small Confection | Case 23 | Product Mix

MODEL:
SETS:
PRODUCT : PRICE, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Available resources;
RESOURCE, AVAILABLE =
T1N_WORKER 80
T1E_WORKER 30
MACHINE1 80
MACHINE2 130
RM_A 120
RM_B 100;
! Product attributes;
PRODUCT, PRICE =
SHIRTS 800.00
PANTS 500.00;

! Required SHIRTS PANTS;


USAGE = 20 15 ! T1_WORKER (head);
10 0 ! T2_WORKER (head);
10 20 ! MACH1NE1 (hr);
35 30 ! MACH1NE2 (hr);
8 12 ! RM_A (k);
15 10; ! RM_B (k);
ENDDATA
SUBMODEL MAX23:
[OBJ] MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCES/USAGE ( head, head, hr, hr, k, k):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE ( head, head, hr, hr, k, k):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX23);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-7s'), ' produce:',
@FORMAT(PRODUCE( J),'%2.1f'),' lots x price: $',
@FORMAT(PRICE( J),'%6.2f'),' = $',
@FORMAT(PRICE(J) * PRODUCE(J),'%7.2f'),
@NEWLINE( 1));
@CHARTPIE( 'Product Mixer Model', 'Produce', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX23);
ENDCALC
END

72
C2-B1 Solving Problems with LINGO Small Confection | Case 23 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE ( head, head, hr, hr, k, k):
DATA:
SHIRTS PANTS
RESOURCES/USAGE ( head, head, hr, hr, k, k):
T1N_WORKER 20.00000 15.00000
SHIRTS0.000000
T1E_WORKER 10.00000 PANTS
T1N_WORKER
MACHINE1 20.0000020.00000
10.00000 15.00000
T1E_WORKER
MACHINE2 10.0000030.00000
35.00000 0.000000
RM_A
MACHINE1 8.000000
10.0000012.00000
20.00000
RM_B
MACHINE2 15.00000
35.0000010.00000
30.00000
RM_A 8.000000 12.00000
AVAILABLE ( head, head, hr, hr, k, k):
RM_B 15.00000 10.00000
T1N_WORKER 80.00000
T1E_WORKER 30.00000
AVAILABLE
MACHINE1 ( 80.00000
head, head, hr, hr, k, k):
T1N_WORKER
MACHINE2 80.00000
130.0000
T1E_WORKER
RM_A 30.00000
120.0000
RM_B
MACHINE1 100.0000
80.00000
MACHINE2 130.0000
PRICE:
RM_A 120.0000
SHIRTS 800.0000
RM_B
PANTS
100.0000
500.0000

PRICE:
SOLUTION
SHIRTSoptimal
❖ SOLUTION
Global 800.0000solution found.
PANTS
Objective
Below 500.0000
value:
is the solution 2816.667
achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Infeasibilities: 0.000000
SOLUTION
OPTIMAL optimal
Global PRODUCTION PROGRAM:found.
solution
SHIRTS produce:3.0 lots x price: $800.00 = $2400.00
Objective
PANTS
value:
produce:0.8 lots x price: $500.00 =
2816.667
$ 416.67
Infeasibilities: 0.000000
SLACK/SURPLUS LIMIT = AVAILABLE:
OPTIMAL PRODUCTION PROGRAM:
SHIRTS PANTS LIMIT VALUE
SHIRTS produce:3.0
T1N_WORKER 60.00000 lots x price:
12.50000 $800.00-7.500000
80.00000 = $2400.00
T1E_WORKER
PANTS 30.00000 lots
produce:0.8 0.000000 30.00000
x price: $500.00 0.000000
= $ 416.67
MACHINE1 30.00000 16.66667 80.00000 -33.33333
MACHINE2 105.0000 25.00000 130.0000 0.000000
SLACK/SURPLUS LIMIT = AVAILABLE:
RM_A 24.00000 10.00000 120.0000 -86.00000
RM_B SHIRTS 8.333333
45.00000 PANTS
100.0000LIMIT
-46.66667 VALUE
T1N_WORKER 60.00000 12.50000 80.00000 -7.500000
T1E_WORKER 30.00000 0.000000 30.00000 0.000000
MACHINE1 30.00000 16.66667 80.00000 -33.33333
MACHINE2 105.0000 25.00000 130.0000 0.000000
RM_A 24.00000 10.00000 120.0000 -86.00000
RM_B 45.00000 8.333333 100.0000 -46.66667

1
73
C2-B1 Solving Problems with LINGO Pencils | Case 24 | Product Mix

GOAL

24 A company produces only three items: Rollerball pen, mechanical pencils and fountain pen.

The unitary income for each of the items is $3.00 for rollerball pen $3.00 to $5.00 and mechanical
pencil with fountain pen.

The company is planning its production mix for next week. It is believed that the company can
Blocks
sell any amount of pens and mechanical pencils to produce, but the production is limited to
• Product Mix available resources.
• Blend
All the necessary information for the development of the model follows below:
• Finance
• Investments
Resources / Products Rollerball Pen Automatic Pencil Fountain Pen Available
• Diet
• Aviation
Plastic g 1.2 1.7 1.2 1,000
• Transport
• Agriculture Chrome g 0.8 0 2.3 1,200
• Construction
Stainless Steel g 2.0 3.0 4.5 2,000
• Refinery
• Schedule Price $ 3.00 3.00 5.00 -
• Cutting
• Metallurgy Based on this information, build a linear programming model that allows the company to plan
next week's production for maximum revenue.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 2
• Page 237

74
C2-B1 Solving Problems with LINGO Pencils | Case 24 | Product Mix

MODEL:
SETS:
PRODUCT : PRICE, PRODUCE;
HEADER / ROLPEN, AUTPEN, FOUPEN, LIMIT, VALUE /:;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
PXR( RESOURCE, HEADER) : SLASUR;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , AVAILABLE =
PLASTIC 1000
CHROME 1200
ST_STEEL 2000;
! Product attributes;
PRODUCT, PRICE =
ROLPEN 3.00
AUTPEN 3.00
FOUPEN 5.00;
! Required (g) ROLPEN AUTPEN FOUPEN;
USAGE = 1.2 1.7 1.2 ! PLASTIC ;
0.8 0 2.3 ! CHROME ;
2.0 3.0 4.5; ! ST_STEEL;
ENDDATA
SUBMODEL MAX24:
[OBJ] MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" RESOURCES/USAGE (g):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1));
@WRITE(" AVAILABLE (g):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1));
@WRITE(" PRICE :", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1));
@WRITE(" SOLUTION ", @NEWLINE( 1));
@SOLVE(MAX24);
@WRITE(" OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-6s'),': Produce:',
@FORMAT(PRODUCE( J),'%3.0f'),' un x price: $',
@FORMAT(PRICE( J),'%4.2f'),' = ', 'Total: $',
@FORMAT(PRICE(J) * PRODUCE(J),'%7.2f'),
@NEWLINE( 1));
! Slack/Surplus Resources report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(" SLACK/SURPLUS LIMIT = AVAILABLE: ", @NEWLINE( 1));
@FOR(PXR(I,J): SLASUR(I,4) = AVAILABLE(I));
@FOR(RXP(I,J)| J #LT# 4: SLASUR(I,J) = PRODUCE(J) * USAGE(I,J));
@FOR(PXR(I,J): SLASUR(I,5) = SLASUR(I,1) + SLASUR(I,2) + SLASUR(I,3) - SLASUR(I,4));
@TABLE(SLASUR);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX24);
ENDCALC
END

75
C2-B1 Solving Problems with LINGO Pencils | Case 24 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCES/USAGE (g):
ROLPEN AUTPEN FOUPEN
PLASTIC 1.200000 1.700000 1.200000
CHROME 0.8000000 0.000000 2.300000
ST_STEEL 2.000000 3.000000 4.500000

AVAILABLE (g):
PLASTIC 1000.000
CHROME 1200.000
ST_STEEL 2000.000
DATA:
RESOURCES/USAGE (g):
PRICE : ROLPEN AUTPEN FOUPEN
ROLPEN
PLASTIC 3.000000
1.200000 1.700000 1.200000
AUTPEN
CHROME 3.000000
0.8000000 0.000000 2.300000
FOUPEN
ST_STEEL5.000000
2.000000 3.000000 4.500000
SOLUTION
AVAILABLE (g):
Global optimal solution found.
PLASTIC 1000.000
Objective value: 2766.667
CHROME 1200.000
Infeasibilities: 0.000000
ST_STEEL 2000.000
OPTIMAL PRODUCTION PROGRAM:
PRICE
ROLPEN:: Produce:700 un x price: $3.00 = Total: $2100.00
ROLPEN Produce:133
FOUPEN:
❖ SOLUTION 3.000000 un x price: $5.00 = Total: $ 666.67
AUTPEN 3.000000
Below is the solution
FOUPEN
SLACK/SURPLUS5.000000 achieved
LIMIT by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
= AVAILABLE:
ROLPEN AUTPEN FOUPEN LIMIT VALUE
PLASTIC
SOLUTION 840.0000 0.000000 160.0000 1000.000 0.000000
CHROME optimal
Global 560.0000 0.000000
solution found. 306.6667 1200.000 -333.3333
ST_STEEL value:
Objective 1400.000 0.000000 600.0000 2000.000 0.000000
2766.667
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


ROLPEN: Produce:700 un x price: $3.00 = Total: $2100.00
FOUPEN: Produce:133 un x price: $5.00 = Total: $ 666.67

SLACK/SURPLUS LIMIT = AVAILABLE:


ROLPEN AUTPEN FOUPEN LIMIT VALUE
PLASTIC 840.0000 0.000000 160.0000 1000.000 0.000000
CHROME 560.0000 0.000000 306.6667 1200.000 -333.3333
ST_STEEL 1400.000 0.000000 600.0000 2000.000 0.000000

76
C2-B1 Solving Problems with LINGO Paper Recycle | Case 25 | Product Mix

GOAL

25 A paper recycling company transforms paper, sulfite paper, carbon and several other types of
paper into a pulp or dough from which paper, paperboard and butter paper can be produced.

The following table summarizes the percentage of recovered paper obtained from the papers
that are recycled.
Blocks Formulas Newspaper Cardboard Parchment Availability
• Product Mix
Newspaper % 85 80 0 600
• Blend
Various pulp % 90 80 70 500
• Finance
Sulfite Paper % 90 85 80 300
• Investments
Carbon Paper % 80 70 0 400
• Diet
• Aviation Target Production Ton 500 600 300 -

• Transport Processing Cost Newspaper Cardboard Parchment Purchase

• Agriculture Newspaper $ 6.50 11.00 0.00 15.00


• Construction Various pulp $ 9.75 12.25 9.50 16.00
• Refinery
Sulfite Paper $ 4.75 7.75 8.50 19.00
• Schedule
Carbon Paper $ 7.50 8.50 0.00 17.00
• Cutting
• Metallurgy To better understand the previous table, if we have 1 ton of newspaper we can recover 0.85
ton of newsprint or 0.80 ton of cardboard. If we have 1 ton of carbon paper to be recycled we
• Fertilizer can get 0.80 ton of newsprint or 0.70 ton of cardboard.
• Clinic
The costs for processing each ton of material (papers) in the various types of pulp and
• Classic
respective procurement costs are also indicated in the table above.
• Dynamic
• Logistics The company wants to determine the highest production of pulp at the lowest cost, to
produce 500 tons of paper pulp, 600 tons of pulp and 300 tons of paper.
• Energy
• Assembly Line

Keywords:
• Factory

Source:
• Book 2
• Page 240

77
C2-B1 Solving Problems with LINGO Paper Recycle | Case 25 | Product Mix

MODEL:
SETS:
PRODUCT : TARGET, PRODUCE;
RESOURCE: AVAILABLE, PURCHASE, CP, PC;
RXP( RESOURCE, PRODUCT): FORMULA, COST_PROC, BUILD;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE, PURCHASE =
NEWSPAPER 600 15.00
VARIOUS 500 16.00
SULFIT 300 19.00
CARBON 400 17.00;

! Product attributes;
PRODUCT, TARGET =
NEWSPAPER 500
CARDBOARD 600
PARCHMENT 300;

! Required Newspaper Cardboard Parchment;


FORMULA = 85 80 0 ! Paper to be recycled: Newspaper;
90 80 70 ! Paper to be recycled: Various paper;
90 85 80 ! Paper to be recycled: Sulfite paper;
80 70 0; ! Paper to be recycled: Carbon paper;

COST_PROC = 6.50 11.00 0.00 ! Processing cost: Newspaper;


9.75 12.25 9.50 ! Processing cost: Various paper;
4.75 7.75 8.50 ! Processing cost: Sulfite paper;
7.50 8.50 0.00; ! Processing cost: Carbon paper;

! Select NEWSPAPER CARDBOARD PARCHMENT;


BUILD = 1 0 0 ! Or;
0 0 1 ! Or;
0 1 0 ! Or;
0 1 0; ! Or;
ENDDATA
SUBMODEL MAX25:
[OBJ] MAX = @SUM(PRODUCT(J): PRODUCE(J));
! Purchase cost;
@FOR(RESOURCE(I):
CP(I) = @SUM( PRODUCT(J): PRODUCE(J) * (1+(1-FORMULA(I,J)/100)) * PURCHASE(I) * BUILD(I,J)););
! Processing cost;
@FOR(RESOURCE(I):
PC(I) = @SUM( PRODUCT(J): PRODUCE(J) * (1+(1-FORMULA(I,J)/100)) * COST_PROC(I,J) * BUILD(I,J)));
! The available constraints;
@FOR(RESOURCE(I):
@SUM( PRODUCT(J): PRODUCE(J) * (1+(1-FORMULA(I,J)/100)) * BUILD(I,J)) <= AVAILABLE(I););
! The Target constraints;
@FOR(PRODUCT(J):
@SUM( RESOURCE(I): PRODUCE(J) ) >= TARGET(J););
@FOR( RXP(I,J): @BIN(BUILD));
ENDSUBMODEL

78
C2-B1 Solving Problems with LINGO Paper Recycle | Case 25 | Product Mix

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RECYCLING FORMULA (%):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " PROCESSING COST P/TON:", @NEWLINE( 1));
@TABLE(COST_PROC);
@WRITE(" ", @NEWLINE( 1), " PURCHASE PROFIT P/TON:", @NEWLINE( 1));
@TABLE(PURCHASE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Ton):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " TARGET (Ton): ", @NEWLINE( 1));
@TABLE(TARGET);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX25);
! Solution report;
@WRITE(' ',@NEWLINE( 1), ' PRODUCE:',@NEWLINE( 1));
@WRITEFOR(PRODUCT(I): ' . ',
@FORMAT(PRODUCT(I),'-10s'), 31*' ',
@FORMAT(PRODUCE(I),'%7.1f'), ' ton',
@NEWLINE(1));
@WRITE(' ',@NEWLINE( 1));
! Processing cost;
@WRITE(' PROCESSING COST:',@NEWLINE( 1));
@WRITEFOR( RXP( I, J) | BUILD(I,J) #GT# 0: ' . ',
@FORMAT(RESOURCE(I),'-10S'),
@FORMAT(PRODUCE(J) * (1+(1-FORMULA(I,J)/100)) * BUILD(I,J), '%7.1f'),' ton x cost: $',
@FORMAT(COST_PROC(I,J),'%5.2f'),' = $',
@FORMAT(PRODUCE(J) * COST_PROC(I,J),'%8.2f'),
@NEWLINE( 1));
@WRITE( ' Total:', 40*' ', '$',@FORMAT(@SUM(PRODUCT(J): PC(J)),'%8.2f'),@NEWLINE(1));
! Purchase cost;
@WRITE(" ", @NEWLINE( 1), ' PURCHASE COST:',@NEWLINE( 1));
@WRITEFOR( RXP( I, J) | BUILD(I,J) #GT# 0: ' . ',
@FORMAT(RESOURCE(I),'-10S'),
@FORMAT(PRODUCE(J) * (1+(1-FORMULA(I,J)/100)) * BUILD(I,J), '%7.1f'),' ton x cost: $',
@FORMAT(PURCHASE(I),'%5.2f'),' = $',
@FORMAT(PRODUCE(J) * PURCHASE(I),'%8.2f'),
@NEWLINE( 1));
@WRITE( ' Total:', 40*' ', '$',@FORMAT(@SUM(PRODUCT(J): CP(J)),'%8.2f'),@NEWLINE(2));
! Total cost ( Processing + Purchase );
@WRITE(' TOTAL COST (PROCESSING + PURCHASE):', 11*' ', '$',
@FORMAT(@SUM(PRODUCT(J): CP(J)+PC(J)),'%8.2f'),@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX25);
ENDCALC
END

79
VARIOUS
NEWSPAPER NEWSPAPER
90.00000 CARDBOAR
85.00000 80.0000
80.0000
DATA: NEWSPAPER
SULFIT
VARIOUS 85.00000
90.00000
90.00000 80.0000
85.0000
80.0000
RECYCLING FORMULA (%): VARIOUS
CARBON
SULFIT 90.00000
80.00000
90.00000 80.0000
70.0000
85.0000
NEWSPAPER CARDBOARD PARCHMENT SULFIT
CARBON 90.00000
80.00000 85.0000
70.0000
C2-B1 Solving Problems
NEWSPAPER 85.00000 with LINGO
80.00000 0.000000 CARBON
Paper Recycle | Case 25
PROCESSING 80.00000
| Product
COST P/TON:Mix 70.0000
VARIOUS 90.00000 80.00000 70.00000 PROCESSING COST NEWSPAPER
P/TON: CARDBOAR
SULFIT
❖ DATA 90.00000 85.00000 80.00000 PROCESSING COST
NEWSPAPER NEWSPAPER P/TON:
6.500000 CARDBOAR
11.0000
CARBON 80.00000 70.00000 0.000000 VARIOUS
NEWSPAPER NEWSPAPER
9.750000
6.500000 CARDBOAR
12.2500
11.0000
All problem data is organized in the data block as a set of members and value attributes, which can be6.500000
NEWSPAPER viewed below. 11.0000
SULFIT
VARIOUS 4.750000
9.750000 7.75000
12.2500
VARIOUS
CARBON
SULFIT 9.750000
7.500000
4.750000 12.2500
8.50000
7.75000
PROCESSING COST P/TON:
DATA:
SULFIT
CARBON 4.750000
7.500000 7.75000
8.50000
RECYCLING FORMULA NEWSPAPER (%): CARDBOARD PARCHMENT
CARBON
PURCHASE COST P/TON:7.500000 8.50000
NEWSPAPER NEWSPAPER 6.500000 CARDBOARD
11.00000 PARCHMENT
0.000000
VARIOUS
NEWSPAPER 9.750000
85.00000 12.25000
80.00000 9.500000
0.000000 PURCHASE
NEWSPAPER COST15.00000
P/TON:
PURCHASE
NEWSPAPER
VARIOUS COST P/TON:
15.00000
16.00000
SULFIT
VARIOUS 4.750000
90.00000 7.750000
80.00000 8.500000
70.00000
NEWSPAPER
VARIOUS
SULFIT 15.00000
16.00000
19.00000
CARBON
SULFIT 7.500000
90.00000 8.500000
85.00000 0.000000
80.00000
VARIOUS
SULFIT 16.00000
19.00000
CARBON 80.00000 70.00000 0.000000 CARBON 17.00000
SULFIT
CARBON 19.00000
17.00000
PURCHASE PROFIT P/TON:
CARBON 17.00000
NEWSPAPER
PROCESSING COST 15.00000P/TON: AVAILABLE (Ton):
VARIOUS 16.00000
NEWSPAPER CARDBOARD PARCHMENT AVAILABLE
NEWSPAPER(Ton): 600.0000
AVAILABLE
NEWSPAPER (Ton):
600.0000
SULFIT
NEWSPAPER 19.00000 6.500000 11.00000 0.000000 VARIOUS 500.0000
NEWSPAPER
VARIOUS 600.0000
500.0000
CARBON
VARIOUS 17.00000
9.750000 12.25000 9.500000 SULFIT 300.0000
VARIOUS
SULFIT 500.0000
300.0000
SULFIT 4.750000 7.750000 8.500000 CARBON 400.0000
SULFIT
CARBON 300.0000
400.0000
AVAILABLE
CARBON (Ton):7.500000 8.500000 0.000000 CARBON 400.0000
NEWSPAPER 600.0000 TARGET (Ton):
PURCHASE
VARIOUS COST P/TON:
500.0000 TARGET
NEWSPAPER (Ton):500.0000
TARGET
NEWSPAPER (Ton):
NEWSPAPER 15.00000
SULFIT 300.0000 CARDBOARD 500.0000
600.0000
NEWSPAPER
CARDBOARD 500.0000
VARIOUS
CARBON 16.00000
400.0000 PARCHMENT 600.0000
300.0000
CARDBOARD 600.0000
PARCHMENT 300.0000
SULFIT 19.00000 PARCHMENT 300.0000
CARBON
NEWSPAPER 17.00000
500.0000 SOLUTION
CARDBOARD 600.0000 SOLUTION
Global optimal solution found.
SOLUTION
Global optimal solution found.
AVAILABLE
PARCHMENT(Ton): 300.0000 Objective value:
Global
Objective optimal
value: solution found.
❖ SOLUTION
NEWSPAPER 600.0000 Infeasibilities:
Objective value:
Infeasibilities:
VARIOUS
SOLUTION 500.0000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Infeasibilities:
SULFIT 300.0000 Model Class: LP
CARBON
SOLUTION 400.0000 Model Class: LP
Model Class: LP
Global optimal solution found.
TARGET (Ton):
Objective value: 1167.224
NEWSPAPER
Infeasibilities: 500.0000 0.000000
CARDBOARD 600.0000
PARCHMENT 300.0000
PRODUCE:
. NEWSPAPER 521.7 ton
SOLUTION
. CARDBOARD 260.9 ton
Global optimal
. PARCHMENT solution found. 384.6 ton
Objective value: 44347.06
Infeasibilities:
PROCESSING COST: 0.000000
. NEWSPAPER 600.0 ton x cost: $ 6.50 = $ 3391.30
Model
. VARIOUSClass: LP 500.0 ton x cost: $ 9.50 = $ 3653.85
. SULFIT 300.0 ton x cost: $ 7.75 = $ 2021.74
. CARBON 339.1 ton x cost: $ 8.50 = $ 2217.39 1
Total: $10975.00

PURCHASE COST:
. NEWSPAPER 600.0 ton x cost: $15.00 = $ 7826.09

80
C2-B1 Solving Problems with LINGO Assembly Equipment | Case 26 | Product Mix

GOAL

26 A company produces four different types of containers (C1, C2, C3 and C4). The profit per unit
of each container produced and the weekly maximum demand of the containers in the market
are described in the table below.

Resources / Products C1 C2 C3 C4 Available


Blocks
Welding m/h 1 2 4 3 165
• Product Mix
Installation / Door m/h 3 4 2 3 75
• Blend
• Finance Finish / Painter m/h 2 5 1 7 210
• Investments Demand un 45 65 90 65 -
• Diet
Profit $ 10.00 15.00 18.00 21.00 -
• Aviation
• Transport Containers are assembled in three sequential processes. The critical aspect of the processes is
the labor force.
• Agriculture
• Construction The consumption of labor in each process and the quantity of men x hours are also described
in the table above.
• Refinery
• Schedule It is possible a scheme of reutilization of labor between the processes.

• Cutting Consequently, it is possible that up to 15% of the workers who took part in the welding process
• Metallurgy are lent to the installation/door process.

• Fertilizer Similarly, up to 20% of finishing and painting workers can work on installation /door.
• Clinic
Production requirements require that the ratio between containers C1 and C3 be between 0.8
• Classic and 1.1.
• Dynamic
Formulate the problem to optimize the production of containers.
• Logistics
• Energy
• Assembly Line

Keywords:
• Factory
• Facilities
• Team

Source:
• Book 3
• Chapter 2.15.13

81
C2-B1 Solving Problems with LINGO Assembly Equipment | Case 26 | Product Mix

MODEL:
SETS:
PRODUCTS: DEMAND, PROFIT, VOLUME;
RESOURCE: AVAILABLE;
ROUTES( RESOURCE, PRODUCTS): USAGE ;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
WELDING 165
INST_DOOR 75
FINISH_PAINTER 210;
! Products attributes;
PRODUCTS, DEMAND, PROFIT =
CONTAINER1 45 10
CONTAINER2 65 15
CONTAINER3 90 18
CONTAINER4 65 21;
!Required Container1 Container2 Container3 Container4 ;
USAGE = 1 2 4 3 ! WELDING;
3 4 2 3 ! INST_DOOR;
2 5 1 7; ! FINISH_PAINTER;
ENDDATA
SUBMODEL MAX26:
[OBJ] MAX = @SUM( PRODUCTS( J): PROFIT( J) * VOLUME(J));
! The demand constraints;
@FOR( PRODUCTS( J):
[DEM] @SUM( products( J): VOLUME( J)) <= DEMAND( J) * BUILD;
@BIN(BUILD));
! The capacity constraints;
@FOR( RESOURCE( J):
[AVA] @SUM( PRODUCTS( K): USAGE(J, K) * VOLUME( K)) <= AVAILABLE( J););
! Proportion for transport ;
VOLUME(1) >= 0.8 * VOLUME(3);
VOLUME(1) <= 1.1 * VOLUME(3);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Sets the length of the line;
@SET('LINLEN',120);
! scheme of reutilization of labor between the processes;
! Installation / Door;
AVAILABLE(2) = AVAILABLE(2) + AVAILABLE(1) * 0.20 + AVAILABLE(3) * 0.15;
! Welding;
AVAILABLE(1) = AVAILABLE(1) * 0.80;
! Finish / painter;
AVAILABLE(3) = AVAILABLE(3) * 0.85;
! Data block;
@WRITE(" ", @NEWLINE( 1), " REQUIRED ( m/hr ):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE ( m/hr ):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND ( m/hr):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
@SOLVE(MAX26);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITE(' PRODUCE:', @NEWLINE(1));
@WRITEFOR( PRODUCTS( J) | VOLUME( J) #GT# 0:' ', PRODUCTS( J), ' produce:',
@FORMAT(VOLUME( J),'%2.0f'), 'un x Unit profit: $',
@FORMAT(PROFIT(J),'%4.2f'), ' = Total: $',
@FORMAT(PROFIT(J) * VOLUME(J),'%6.2f'),
@NEWLINE( 1));
@WRITE(' Total:',48*' ','$', @FORMAT(OBJ,'%6.2f'), @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX26);
ENDCALC
END

82
C2-B1 Solving Problems with LINGO Assembly Equipment | Case 26 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

REQUIRED (m/hr):
C1 C2 C3 C4
WELDING 1.000000 2.000000 4.000000 3.000000
INST_DOOR 3.000000 4.000000 2.000000 3.000000
FINISH_PAINTER 2.000000 5.000000 1.000000 7.000000

PROFIT:
C1 10.00000
C2 15.00000
C3 18.00000
C4 21.00000

AVAILABLE (m/hr):
WELDING 132.0000
INST_DOOR 139.5000
FINISH_PAINTER 178.5000

DEMAND (m/hr)
C1 45.00000
C2 65.00000
C3 90.00000
C4 65.00000

SOLUTION
Global optimal solution found.
❖ SOLUTION
Objective value: 825.9447
Objective
Below bound:achieved by LINGO with infeasibilities 0, and
is the solution 825.9447
the detailed report that makes up the optimal solution.
Infeasibilities: 0.000000
SOLUTION 1
Global optimal solution found.
Objective value: 825.9447
Objective bound: 825.9447
Infeasibilities: 0.000000

OPTIMAL PRODUCTION PROGRAM:


PRODUCE:
CONTAINER1 produce:16un x Unit profit: $10.00 = Total: $164.69
CONTAINER2 produce: 2un x Unit profit: $15.00 = Total: $ 33.79
CONTAINER3 produce:15un x Unit profit: $18.00 = Total: $269.48
CONTAINER4 produce:17un x Unit profit: $21.00 = Total: $357.98
Total: $825.94

SLACK/SURPLUS LIMIT = AVAILABLE:


CONTAINER1 CONTAINER2 CONTAINER3 CONTAINER4 LIMIT VALUE
WELDING 16.46851 4.505725 59.88550 51.14027 132.0000 0.000000
INST_DOOR 49.40553 9.011450 29.94275 51.14027 139.5000 0.000000
FINISH_PAINTER 32.93702 11.26431 14.97137 119.3273 178.5000 0.000000

SLACK/SURPLUS LIMIT = DEMAND:


PROD LIMIT VALUE
CONTAINER1 16.46851 45.00000 -28.53149
CONTAINER2 2.252863 65.00000 -62.74714
CONTAINER3 14.97137 90.00000 -75.02863
CONTAINER4 17.04676 65.00000 -47.95324

83
C2-B1 Solving Problems with LINGO Containers | Case 27 | Product Mix

GOAL

27 A company has four assembly teams that have been trained to assemble three different
product types.

Each team has a specific performance in assembly time (in minutes) of the products.

Blocks The product assembled by the teams is evaluated based on their aggregation of value,
reliability, elimination of future rework and other elements.
• Product Mix
• Blend If each assembly team has 1800 minutes of useful work in the week, it is necessary to produce
at least 90 units of product 1, 160 of product 2 and 110 of product 3.
• Finance
• Investments Below is all the information necessary for the development of the model.
• Diet
• Aviation Performance Team 1 Team 2 Team 3 Team 4 Demand

• Transport Prod 1 min/un 9 5 3 11 90 un


• Agriculture Prod 2 min/un 4 10 7 12 160 un
• Construction
Prod 3 min/un 9 12 15 16 110 un
• Refinery
Available min 1,800 1,800 1,800 1,800 -
• Schedule
• Cutting
Value Added Team 1 Team 2 Team 3 Team 4
• Metallurgy
• Fertilizer Prod 1 $ 6.00 4.00 4.00 7.00

• Clinic Prod 2 $ 7.00 10.00 8.00 10.00

• Classic Prod 3 $ 8.00 10.00 10.00 11.00


• Dynamic
• Logistics Formulate the Linear programming model that optimizes the assembly process.

• Energy
• Assembly Line

Keywords:
• Factory
• Team

Source:
• Book 3
• Chapter 2.3.19

84
C2-B1 Solving Problems with LINGO Containers | Case 27 | Product Mix
MODEL:
SETS:
PRODUCTS: DEMAND;
RESOURCE: AVAILABLE;
ROUTES( PRODUCTS, RESOURCE): VALUE_ADDED, VOLUME, PERFORMANCE;
TRS( RESOURCE, PRODUCTS): TRA_VOL, TRA_PER, TRA_TOT;
ENDSETS
DATA:
! Products attributes;
PRODUCTS, DEMAND =
PROD1 90
PROD2 160
PROD3 110;

! Resources attributes;
RESOURCE, AVAILABLE =
TEAM1 1800
TEAM2 1800
TEAM3 1800
TEAM4 1800;

! Require Team1 Team2 Team3 Team4;


VALUE_ADDED = 6 4 4 7 ! Prod1;
7 10 8 10 ! Prod2;
8 10 10 11; ! Prod3;

PERFORMANCE = 9 5 3 11 ! Prod1;
4 10 7 12 ! Prod2;
9 12 15 16; ! Prod3;
ENDDATA
SUBMODEL MAX27:
[OBJ] MAX = @SUM( ROUTES( I, J): VALUE_ADDED( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( RESOURCE( J):
[CAP] @SUM( PRODUCTS( I): PERFORMANCE(I,J) * VOLUME( I, J)) <= AVAILABLE( 1));
! The capacity constraints;
@FOR( PRODUCTS( I):
[DEM] @SUM( RESOURCE( J): VOLUME( I, J)) <= DEMAND( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Default starting point for variables;
@SET('STARTP',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " VALUE ADDED:", @NEWLINE( 1));
@TABLE(VALUE_ADDED);
@WRITE(" ", @NEWLINE( 1), " PERFORMANCE min/un:", @NEWLINE( 1));
@TABLE(PERFORMANCE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE min:", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND unit:", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX27);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " OPTIMAL PRODUCTION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' ', RESOURCE( J), ' produce:',
@FORMAT(VOLUME( I, J),'%3.0f'), ' un ', PRODUCTS( I),' x Unit value: $',
@FORMAT(VALUE_ADDED (I, J),'%5.2f'), ' = Total: $',
@FORMAT(VALUE_ADDED (I, J) * VOLUME( I,J),'%7.2f'),
@NEWLINE( 1));
@WRITE(' TOTAL AGGREGATE VALUE:', 36*' ','$', @FORMAT(OBJ,'%7.2f') , @NEWLINE(1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX27);
ENDCALC
END

85
C2-B1 Solving Problems with LINGO Containers | Case 27 | Product Mix

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
VALUE ADDED:
TEAM1 TEAM2 TEAM3 TEAM4
PROD1 6.000000 4.000000 4.000000 7.000000
PROD2 7.000000 10.00000 8.000000 10.00000
PROD3 8.000000 10.00000 10.00000 11.00000

PERFORMANCE min/un:
TEAM1 TEAM2 TEAM3 TEAM4
PROD1 9.000000 5.000000 3.000000 11.00000
PROD2 4.000000 10.00000 7.000000 12.00000
PROD3 9.000000 12.00000 15.00000 16.00000

AVAILABLE min:
TEAM1 1800.000
TEAM2 1800.000
TEAM3 1800.000
TEAM4 1800.000

DEMAND unit:
PROD1 90.00000
PROD2 160.0000
PROD3 110.0000

SOLUTION
❖ SOLUTION
Global optimal solution found.
Objective value: 3380.625
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Infeasibilities: 0.000000
SOLUTION
Model Class:
Global optimal LPsolution found.
Objective value: 3380.625
OPTIMAL PRODUCTION
Infeasibilities: PROGRAM: 0.000000
TEAM4 produce: 90 un PROD1 x Unit value: $ 7.00 = Total: $ 630.00
TEAM2 produce:160
OPTIMAL PRODUCTIONun PROD2 x Unit value: $10.00 = Total: $1600.00
PROGRAM:
TEAM2 produce:
TEAM4 produce: 90 17 un
un PROD3
PROD1 xx Unit
Unit value:
value: $10.00
$ 7.00 == Total:
Total: $$ 166.67
630.00
TEAM3 produce: 43 un PROD3 x Unit value: $10.00
TEAM2 produce:160 un PROD2 x Unit value: $10.00 = Total: $1600.00 = Total: $ 427.08
TEAM4 produce:
TEAM2 produce: 17 51 un
un PROD3
PROD3 xx Unit
Unit value:
value: $11.00
$10.00 == Total:
Total: $$ 556.88
166.67
TOTAL AGGREGATE VALUE:
TEAM3 produce: 43 un PROD3 x Unit value: $10.00 = Total: $ 427.08 $3380.62
TEAM4 produce: 51 un PROD3 x Unit value: $11.00 = Total: $ 556.88
1
TOTAL AGGREGATE VALUE: $3380.62

SLACK/SURPLUS LIMIT = DEMAND:


TEAM1 TEAM2 TEAM3 TEAM4 LIMIT SLACK
PROD1 0.000000 0.000000 0.000000 90.00000 90.00000 0.000000
PROD2 0.000000 160.0000 0.000000 0.000000 160.0000 0.000000
PROD3 0.000000 16.66667 42.70833 50.62500 110.0000 0.000000

SLACK/SURPLUS LIMIT = AVAILABLE:


PROD LIMIT VALUE
TEAM1 0.000000 1800.000 -1800.000
TEAM2 1800.000 1800.000 0.000000
TEAM3 640.6250 1800.000 -1159.375
TEAM4 1800.000 1800.000 0.000000

86
BLOCK 2 Block: BLEND

What foods should people (or animals) use, so that the cost is minimal and they have the nutrients in
adequate quantities, and also meet other requirements, such as variety between meals, appearance,
taste, etc.?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

87
C2-B2 Solving Problems with LINGO Food Ration | Case 1 | Blend

GOAL

1 In this type of problem, the analyst wants to determine levels of use of raw materials in the
composition of a food ration.

Restrictions usually relate to desired nutritional characteristics for the finished product,
quantities of raw materials and inputs available and demand to be met.

Blocks Suppose a problem in which a ration must be elaborated from the mixture of 3 types of grains.

• Product Mix Four nutrients are considered in the final product, as considered in the information below:
• Blend
• Finance Resources / Products Grain 1 Grain 2 Grain 3 Available
• Investments
A kg 2 3 7 1,250
• Diet
• Aviation B kg 1 1 0 250
Nutrient
• Transport
C kg 5 3 0 900
• Agriculture
D kg 0.6 0.25 1 233
• Construction
• Refinery Cost $ 41.00 35.00 96.00 -
• Schedule
The information that compose the constraints and objective function of the problem presented,
• Cutting
serve for the development of the model to minimize costs.
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Ration
• Formula

88
C2-B2 Solving Problems with LINGO Food Ration | Case 1 | Blend
MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
NUTR_A 1250
NUTR_B 250
NUTR_C 900
NUTR_D 232.5;
! Products attributes;
PRODUCT, COST =
GRAIN1 41
GRAIN2 35
GRAIN3 96;

! Require p/kg Grain1 Grain2 Grain3;


USAGE = 2 3 7 ! NUTR_A;
1 1 0 ! NUTR_B;
5 3 0 ! NUTR_C;
0.6 0.25 1; ! NUTR_D;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) >= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (kg):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (KG):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " COST p/kg:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J):' ',product( J),': ',
@FORMAT(PRODUCE( J),'%3g'),' Kg x Unit profit: $',
@FORMAT(COST( J),'%5.2f'), ' = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%7.2f'),
@NEWLINE( 1));
! Execute the Graph;
@CHARTPIE( 'Blend Model', 'Mix', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

89
C2-B2 Solving Problems with LINGO Food Ration | Case 1 | Blend

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (kg):
GRAIN1 GRAIN2 GRAIN3
NUTR_A 2.000000 3.000000 7.000000
NUTR_B 1.000000 1.000000 0.000000
NUTR_C 5.000000 3.000000 0.000000
DATA:
NUTR_D 0.600000 0.250000 1.000000
FORMULA (kg):
GRAIN1
AVAILABLE (KG): GRAIN2 GRAIN3
NUTR_A 1250.000
2.000000 3.000000 7.000000
NUTR_B 250.0000
1.000000 1.000000 0.000000
NUTR_C 900.0000
5.000000 3.000000 0.000000
NUTR_D 232.5000
0.600000 0.250000 1.000000

COST p/kg: (KG):


AVAILABLE
GRAIN1 41.00000
NUTR_A 1250.000
GRAIN2 35.00000
NUTR_B 250.0000
GRAIN3 96.00000
NUTR_C 900.0000
NUTR_D 232.5000
SOLUTION:
Global
COST optimal solution found.
p/kg:
Objective value:
GRAIN1 41.00000 19550.00
Infeasibilities:
❖ SOLUTION
GRAIN2 35.00000 0.000000
GRAIN3
Below 96.00000
is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
IDEAL MIXING PROGRAM:
SOLUTION:
GRAIN1: 200 Kg x Unit profit: $41.00 = Total: $8200.00
Global optimal solution found.
GRAIN2: 50 Kg x Unit profit: $35.00 = Total: $1750.00
Objective
GRAIN3: 100value:
Kg x Unit profit: $96.00 = Total:19550.00
$9600.00
Infeasibilities: 0.000000
SLACK/SURPLUS LIMIT = AVAILABLE:
GRAIN1 GRAIN2 GRAIN3 LIMIT VALUE
IDEAL MIXING PROGRAM:
NUTR_A 400.0000 150.0000 700.0000 1250.000 0.000000
GRAIN1:
NUTR_B 200 Kg x Unit
200.0000 profit:
50.00000 $41.00
0.000000 = Total:0.000000
250.0000 $8200.00
GRAIN2: 50 Kg x Unit
NUTR_C 1000.000 profit:
150.0000 $35.00
0.000000 = Total:250.0000
900.0000 $1750.00
GRAIN3:
NUTR_D 100 Kg x Unit
120.0000 profit:
12.50000 $96.00
100.0000 = Total:0.000000
232.5000 $9600.00

SLACK/SURPLUS LIMIT = AVAILABLE:


GRAIN1 GRAIN2 GRAIN3 LIMIT VALUE
NUTR_A 400.0000 150.0000 700.0000 1250.000 0.000000
NUTR_B 200.0000 50.00000 0.000000 250.0000 0.000000
NUTR_C 1000.000 150.0000 0.000000 900.0000 250.0000
NUTR_D 120.0000 12.50000 100.0000 232.5000 0.000000

90
1
C2-B2 Solving Problems with LINGO Mixing Two Products | Case 2 | Blend

GOAL

2 Suppose we want to produce a minimum cost ration by mixing two products A and B, and
they have different costs: Product A: $0.30 per kg and Product B: $0.40 per kg.

As for birds, it is known that each requires minimum quantities per week. Described in the
formula and will be obtained from these products.

Blocks Below are the information necessary for the development of the model.

• Product Mix
Resources / Products Prod A Prod B Available
• Blend
Vitamin 1 % 5 25 50kg
• Finance
• Investments Vitamin 2 % 25 10 100kg
Formula
• Diet Vitamin 3 % 10 10 60kg
• Aviation
Vitamin 4 % 35 20 180kg
• Transport
Cost p/kg $ 0.30 0.40 -
• Agriculture
• Construction Therefore, to develop a model to obtain the lowest cost in this blend.
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Ration
• Formula

91
C2-B2 Solving Problems with LINGO Mixing Two Products | Case 2 | Blend

MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
VIT_1 50
VIT_2 100
VIT_3 60
VIT_4 180;

! Product attributes;
PRODUCT, COST =
PROD_A 0.30
PROD_B 0.40 ;

! Require (formula) % PROD_A PROD_B;


USAGE = 0.05 0.25 ! VIT_1;
0.25 0.10 ! VIT_2;
0.10 0.10 ! VIT_3;
0.35 0.20; ! VIT_4;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) >= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (kg):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " COST p/kg:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN2);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J): ' ',product( J),': ',
@FORMAT(PRODUCE( J),'%4.1f'),' Kg x Unit cost: $',
@FORMAT(COST( J),'%4.2f'), ' = Total: $',
@FORMAT(COST( J) * produce( J),'%6.2f'),
@NEWLINE( 1));
! Execute the Graph;
@CHARTPIE( 'Blend Model', 'Mix', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

92
C2-B2 Solving Problems with LINGO Mixing Two Products | Case 2 | Blend

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
PROD_A PROD_B
VIT_1 0.0500000 0.2500000
DATA:
VIT_2 0.2500000 0.1000000
FORMULA
VIT_3 (%):
0.1000000 0.1000000
VIT_4 PROD_A
0.3500000 PROD_B
0.2000000
VIT_1 0.0500000 0.2500000
VIT_2
AVAILABLE 0.2500000
(kg): 0.1000000
VIT_1
VIT_3 50.00000
0.1000000 0.1000000
VIT_2
VIT_4 100.0000
0.3500000 0.2000000
VIT_3 60.00000
VIT_4
AVAILABLE 180.0000
(kg):
VIT_1 50.00000
COST p/kg:
VIT_2 100.0000
PROD_A
VIT_3 0.300000
60.00000
PROD_B 0.400000
VIT_4 180.0000
SOLUTION:
COST p/kg:
Global optimal solution found.
PROD_A
Objective
❖ SOLUTION 0.300000
value: 190.0000
PROD_B 0.400000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed0.000000
Infeasibilities: report that makes up the optimal

SOLUTION:
IDEAL MIXING PROGRAM:
Global
PROD_A: optimal
500.0 Kgsolution found.$0.30 =
x Unit cost: Total: $150.00
Objective value:
PROD_B: 100.0 Kg x Unit cost: $0.40 = Total: $ 190.0000
40.00
Infeasibilities: 0.000000
SLACK/SURPLUS LIMIT = AVAILABLE:
PROD_A
IDEAL MIXING PROD_B
PROGRAM: LIMIT VALUE
VIT_1 25.00000
PROD_A: 500.0 Kg 25.00000 50.00000
x Unit cost: $0.300.000000
= Total: $150.00
VIT_2 125.0000
PROD_B: 100.0 Kg 10.00000 100.0000
x Unit cost: $0.4035.00000
= Total: $ 40.00
VIT_3 50.00000 10.00000 60.00000 0.000000
VIT_4 175.0000
SLACK/SURPLUS 20.00000
LIMIT 180.0000 15.00000
= AVAILABLE:
PROD_A PROD_B LIMIT VALUE
VIT_1 25.00000 25.00000 50.00000 0.000000
VIT_2 125.0000 10.00000 100.0000 35.00000
VIT_3 50.00000 10.00000 60.00000 0.000000
VIT_4 175.0000 20.00000 180.0000 15.00000

93
C2-B2 Solving Problems with LINGO Special Ration | Case 3 | Blend

GOAL

3 A company that sells agricultural products received an order of 8000 kg of feed. The customer
wants it to have at least 20% corn, 15% grain and 15% mineral salts.

Available
Resources / Products R1 R2 R3 R4
( kg )
Blocks
• Product Mix Corn % 30 5 20 10 1,660

• Blend
Formula Grains % 10 30 15 10 1,200
• Finance
• Investments Minerals % 20 20 20 30 1,200
• Diet
Cost p/kg 250.00 300.00 320.00 150.00 -
• Aviation
• Transport
What is the ideal blend in order to minimize the cost?
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Ration
• Formula

94
C2-B2 Solving Problems with LINGO Special Ration | Case 3 | Blend
MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
CORN 1600
GRAINS 1200
MINERALS 1200;
! Products attributes;
PRODUCT, COST =
R1 250
R2 300
R3 320
R4 150;

! Require (Formula) % R1 R2 R3 R4;


USAGE = 0.30 0.05 0.20 0.10 ! CORN;
0.10 0.30 0.15 0.10 ! GRAINS;
0.20 0.20 0.20 0.30; ! MINERALS;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM( PRODUCT( p):COST( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) >= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (kg):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " COST p/kg:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE(J) #GT# 0: ' ',product( J),': ',
@FORMAT(PRODUCE( J),'%4.1f'),'Kg x Unit cost: $',
@FORMAT(COST( J),'%4.2f'), ' = Total: $',
@FORMAT(COST( J) * produce( J),'%10.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

95
C2-B2 Solving Problems with LINGO Special Ration | Case 3 | Blend

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
R1 R2 R3 R4
CORN 0.3000000 0.0500000 0.2000000 0.1000000
GRAINS 0.1000000 0.3000000 0.1500000 0.1000000
MINERALS 0.2000000 0.2000000 0.2000000 0.3000000

AVAILABLE (kg):
CORN 1600.000
GRAINS 1200.000
MINERALS 1200.000

COST p/kg:
R1 250.0000
R2 300.0000
R3 320.0000
R4 150.0000

SOLUTION:
Global optimal solution found.
Objective value
❖ SOLUTION 1941176.
Infeasibilities: 0.00000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

Model Class: LP
SOLUTION:
Global optimal solution found.
IDEAL MIXING PROGRAM:
Objective value:
R1: 4941.2 Kg 1941176.
x Unit cost: $250.00 = Total: $1235294.12
Infeasibilities: 0.000000
R2: 2352.9 Kg x Unit cost: $300.00 = Total: $ 705882.35

IDEAL MIXING PROGRAM:


R1: 4941.2Kg x Unit cost: $250.00 = Total: $1235294.12 1
R2: 2352.9Kg x Unit cost: $300.00 = Total: $ 705882.35

SLACK/SURPLUS LIMIT = AVAILABLE:


R1 52 R3 R4 LIMIT VALUE
CORN 1482.353 117.6471 0.000000 0.000000 1600.000 0.000000
GRAINS 494.1176 705.8824 0.000000 0.000000 1200.000 0.000000
MINERALS 988.2353 470.5882 0.000000 0.000000 1200.000 258.8235

96
C2-B2 Solving Problems with LINGO Food Necessity | Case 4 | Blend

GOAL

4 The weekly dietary needs of a particular animal correspond to the formula described below, as
well as the availability of proteins and carbohydrates and costs of each type of feed:

RESOURCES / PRODUCTS RA RB RC RD RE AVAILABLE


Blocks
• Product Mix
PROTEINS % 25 25 45 35 25 200 kg
• Blend
FORMULA
• Finance CARBOHYDRATE
% 55 20 10 35 20 250 kg
• Investments S

• Diet
COST p/kg $ 3.00 2.00 4.00 3.00 3.00 -
• Aviation
• Transport
What mixture of these rations satisfies dietary requirements at the lowest cost to the owner?
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Ration
• Formula

97
C2-B2 Solving Problems with LINGO Food Necessity | Case 4 | Blend

MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
PROTEINS 200
CARBOHYDRATES 250;
! Products attributes;
PRODUCT, COST =
RA 3.00
RB 2.00
RC 4.00
RD 3.00
RE 3.00;

! Require ( formula) % RA RB RC RD RE;


USAGE = 0.25 0.25 0.45 0.35 0.25 ! PROTEINS;
0.55 0.20 0.10 0.35 0.20; ! CARBOHYDRATES;
ENDDATA
SUBMODEL MIN4:
[OBJ] MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! The Available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) >= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (kg):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " COST per kg:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN4);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE( J) #GT# 0: ' Product: ',product( J),' ',
@FORMAT(PRODUCE( J),'%6.1f'),' kg x cost p/kg: $',
@FORMAT(COST( J),'%4.2f'), ' = total: $',
@FORMAT(COST( J) * produce( J),'%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN4);
ENDCALC
END

98
C2-B2 Solving Problems with LINGO Food Necessity | Case 4 | Blend

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
RA RB RC RD RE
PROTEINS 0.250000 0.250000 0.450000 0.350000 0.250000
CARBOHYDRATES 0.550000 0.200000 0.100000 0.350000 0.200000

AVAILABLE (kg):
PROTEINS
DATA: 200.000
CARBOHYDRATES
FORMULA (%): 250.000
RA RB RC RD RE
COST per kg:
PROTEINS 0.250000 0.250000 0.450000 0.350000 0.250000
RA 3.00000
CARBOHYDRATES 0.550000 0.200000 0.100000 0.350000 0.200000
RB 2.00000
RC 4.00000
AVAILABLE (kg):
RD 3.00000
PROTEINS 200.000
RE 3.00000
CARBOHYDRATES 250.000

SOLUTION:
COST per kg:
Global optimal solution found.
RA 3.00000
Objective
RB 2.00000 value: 1857.14
Infeasibilities:
RC 4.00000 0.00000
❖ SOLUTION
RD 3.00000
IDEAL MIXING PROGRAM:
RE is3.00000
Below the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Product: RA 166.7 kg x cost p/kg: $3.00 = total: $ 500.00
Product: RD
SOLUTION: 452.4 kg x cost p/kg: $3.00 = total: $1357.14
Global optimal solution found.
SLACK/SURPLUS
Objective LIMIT = AVAILABLE:
value: 1857.14
Infeasibilities: RA RB RC RD RE LIMIT
0.00000 VALUE
PROTEINS 41.6667 0.00000 0.00000 158.333 0.00000 200.000 0.00000
CARBOHYDRATES 91.6667 0.00000 0.00000 158.333 0.00000 250.000 0.00000
IDEAL MIXING PROGRAM:
Product: RA 166.7 kg x cost p/kg: $3.00 = total: $ 500.00
Product: RD 452.4 kg x cost p/kg: $3.00 = total: $1357.14

SLACK/SURPLUS LIMIT = AVAILABLE:


RA RB RC RD RE LIMIT VALUE
PROTEINS 41.6667 0.00000 0.00000 158.333 0.00000 200.000 0.00000
CARBOHYDRATES 91.6667 0.00000 0.00000 158.333 0.00000 250.000 0.00000

99
C2-B2 Solving Problems with LINGO Nutrition of Pigs | Case 5 | Blend

GOAL

5
A farmer is raising pigs for market and wishes to determine the quantity of the available types of
feed that should be given to each pig to meet certain nutritional requirements at minimum cost.

The units of each type of basic nutritional ingredient contained in a pound of each feed type is
given in the following table along with the daily nutritional requirement and feed costs.

Blocks
• Product Mix Resources / Products Corn Tankage Alfalfa Required

• Blend
Carbohydrates pound 9 2 4 20 un
• Finance
Proteins pound 3 8 6 18 un
• Investments
• Diet Vitamins pound 1 2 6 15 un

• Aviation
Cost (cents)/pound $ 7 6 5 -
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Ration
• Formula

Source:
• Book 5
• Page 259

100
C2-B2 Solving Problems with LINGO Nutrition of Pigs | Case 5 | Blend

MODEL:
SETS:
PRODUCT : COST;
RESOURCE: REQUIRED;
RXP( RESOURCE, PRODUCT) : FORMULA, PRODUCE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, REQUIRED =
CARBOHYDRATES 20
PROTEINS 18
VITAMINS 15;

! Products attributes;
PRODUCT, COST =
CORN 7.00
TANKAGE 6.00
ALFALFA 5.00;

! Require CORN TANKAGE ALFALFA;


FORMULA = 9 2 4 ! CARBOHYDRATES;
3 8 6 ! PROTEINS;
1 2 6; ! VITAMINS;
ENDDATA
SUBMODEL MIN5:
[OBJ] MIN = @SUM( RXP( I,J): (COST( J) * FORMULA(I,J)) * PRODUCE( I,J));
! The Available constraints;
@FOR( RESOURCE( I):
[AVA] @SUM( PRODUCT( J): PRODUCE(I, J )) >= REQUIRED( I););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (pound):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " REQUIRED (pound):", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " COST (cents)/lb.", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN5);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I,J)| PRODUCE( I, J) #GT# 0: ' ',
@FORMAT(RESOURCE(I),'-14s'),' ',
@FORMAT(PRODUCT( J),'-7s'),' ',
@FORMAT(PRODUCE( I, J),'%2.0f'),' pound x cost: $',
@FORMAT(COST( J)* FORMULA(I,J),'%5.2f'), ' = total: $',
@FORMAT(COST( J)* FORMULA(I,J) * PRODUCE( I,J),'%6.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN5);
ENDCALC
END

101
C2-B2 Solving Problems with LINGO Nutrition of Pigs | Case 5 | Blend

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (pound):
CORN TANKAGE ALFALFA
CARBOHYDRATES 9.000000 2.000000 4.000000
PROTEINS 3.000000 8.000000 6.000000
VITAMINS 1.000000 2.000000 6.000000
DATA:
REQUIRED (pound):
FORMULA (pound):
CARBOHYDRATES 20.00000
CORN TANKAGE ALFALFA
PROTEINS 18.00000
CARBOHYDRATES 9.000000 2.000000 4.000000
VITAMINS 15.00000
PROTEINS 3.000000 8.000000 6.000000
VITAMINS
COST (cents)/lb. 1.000000 2.000000 6.000000
CORN 7.000000
REQUIRED (pound):
TANKAGE 6.000000
CARBOHYDRATES
ALFALFA 5.000000 20.00000
PROTEINS 18.00000
VITAMINS
SOLUTION: 15.00000
Global optimal solution found.
COST (cents)/lb.
Objective value: 723.0000
CORN
Infeasibilities:7.000000 0.000000
TANKAGE 6.000000
❖ SOLUTION
ALFALFA
Below 5.000000
is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
IDEAL MIXING PROGRAM:
CARBOHYDRATES TANKAGE 20 pound x cost: $12.00 = total: $240.00
SOLUTION:
PROTEINS
Global optimal CORN solution18found.
pound x cost: $21.00 = total: $378.00
VITAMINS value:
Objective CORN 15 pound x cost: $ 7.00 = total: $105.00 723.0000
Infeasibilities: 0.000000

IDEAL MIXING PROGRAM:


CARBOHYDRATES TANKAGE 20 pound x cost: $12.00 = total: $240.00
PROTEINS CORN 18 pound x cost: $21.00 = total: $378.00
VITAMINS CORN 15 pound x cost: $ 7.00 = total: $105.00

102
1
C2-B2 Solving Problems with LINGO Ice Cream | Case 6 | Blend

GOAL

6 An ice-cream maker wants to produce 100 kg of ice cream at a minimum cost, whose
composition in the details, in addition to the raw materials available.

Components / Cost FAT SLNG TSL SUGAR TS WATER STAB EMUL


Blocks Formula $ % % % % % % % %
• Product Mix
Cream 40% 27.00 40 5.4 45.4 - 45.4 54.6 - -
• Blend
• Finance Cream 38% 26.00 38 5.6 43.6 - 43.6 56.4 - -
• Investments
Milk 3,2% 3.00 3.2 8.7 11.9 - 11.9 88.1 - -
• Diet
Milk 4,0% 3.00 4.0 8.6 12.6 - 12.6 87.4 - -
• Aviation
• Transport Fatty Condensed
7.00 8 20 28 - 28 72 - -
Milk
• Agriculture
• Construction Lean Condensed
3.00 - 28 28 - 28 72 - -
Skin
• Refinery
• Schedule Butter 15.00 5 92 97 - 97 3 - -

• Cutting Whey Dried Solids 10.00 - 95 95 - 95 5 - -


• Metallurgy
Saccharose 10.00 - - - 100 100 - - -
• Fertilizer
• Clinic Cane Broth 9.00 - - - 67 67 33 - -

• Classic Stabilizer 55.00 - - - - 80 20 - -


• Dynamic
Emulsifier 78.00 - - - - - - - -
• Logistics
• Energy Water 0.00 - - - - - 100 - -

• Assembly Line MIN 10 10.5 20.5 11 32.5 58.5


Requirements 0.37 0.1
MAX 16 13 25 17 41.5 62.5
Keywords:
• Food
• Formula

Source:
• Book 1
• Page 50

103
C2-B2 Solving Problems with LINGO Ice Cream | Case 6 | Blend
MODEL:
SETS:
PRODUCTS: COST, PRODUCE;
RESOURCE: REQ_MIN, REQ_MAX;
XYZ( PRODUCTS, RESOURCE): U1;
RXP(RESOURCE, PRODUCTS) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, REQ_MIN, REQ_MAX =
FAT 10 16
SLNG 10.5 13
TSL 20.5 25
SUGAR 11 17
TS 32.5 41.5
WATER 58.5 62.5;

! Products attributes;
PRODUCTS, COST =
CREAM40 27 ! Cream 40% ;
CREAM38 26 ! Cream 38%;
MILK32 3 ! Milk 3.2%;
MILK40 3 ! Milk 4.0%;
FATCONDMILK 7 ! Fatty condensed milk;
LEACONDMILK 3 ! Lean condensed milk;
BUTTER 15 ! Butter;
WHEY 10 ! Whey proteins;
SACCHAROSE 10
CANE_BROTH 9
STABILIZER 55
EMULSIFIER 78
WATER 0;

! Require (formula) %;
USAGE =
0.4 0.38 0.032 0.04 0.08 0 0.5 0 0 0 0 0 0 !FAT;
0.054 0.056 0.087 0.086 0.20 0.28 0.92 0.95 0 0 0 0 0 !SLNG;
0.454 0.436 0.119 0.126 0.28 0.28 0.97 0.95 0 0 0 0 0 !TSL;
0 0 0 0 0 0 0 0 1.0 0.67 0 0 0 ! SUGAR;
0.454 0.436 0.119 0.126 0.28 0.28 0.97 0.95 1.0 0.67 0.8 0 0 !TS;
0.546 0.564 0.881 0.874 0.72 0.72 0.03 0.05 0 0.33 0.20 0 1.0; !WATER;
ENDDATA
SUBMODEL MIN6:
[OBJ]MIN = @SUM( PRODUCTS( p): COST( p) * PRODUCE( p));
! 100kg of ice cream;
@SUM( PRODUCTS( p): PRODUCE(p)) = 100;
! The minimum required constraints;
@FOR( RESOURCE( r):
[RMIN] @SUM( PRODUCTS( c): USAGE( r, c) * PRODUCE( c )) >= REQ_MIN( r));
! The maximum required constraints;
@FOR( RESOURCE( row):
[RMAX] @SUM( PRODUCTS( col): USAGE( row, col) * PRODUCE( col )) <= REQ_MAX( row););
! Min/Max Sugar;
USAGE(4,9) * PRODUCE(9) * USAGE(4,10) * PRODUCE(9) >= 11;
USAGE(4,9) * PRODUCE(10) * USAGE(4,10) * PRODUCE(10) <= 17;
! min and max Stabilizer and Emulsifier;
PRODUCE(11) = 0.37;
PRODUCE(12) = 0.1;
ENDSUBMODEL

104
C2-B2 Solving Problems with LINGO Ice Cream | Case 6 | Blend

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
!Precision in digits for standard solution reports;
@SET('PRECIS',5);
! Set page width;
@SET('LINLEN',120);
!Data block;
U1 = @TRANSPOSE(USAGE);
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(U1);
@WRITE(" ", @NEWLINE( 1), " REQUIREMENTS_MIN (%):", @NEWLINE( 1));
@TABLE(REQ_MIN);
@WRITE(" ", @NEWLINE( 1), " REQUIREMENTS_MAX (%):", @NEWLINE( 1));
@TABLE(REQ_MAX);
@WRITE(" ", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN6);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCTS( J) | produce(j) #GT# 0: ' Required: ',
@FORMAT(PRODUCTS( J),'-11s'),
@FORMAT(PRODUCE( J),'%8.4f'),'% x Cost: $',
@FORMAT(COST( J),'%5.2f'), ' = TOTAL: $',
@FORMAT(COST( J) * PRODUCE( J),'%6.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN6);
ENDCALC
END

105
DATA:
C2-B2 Solving Problems withFORMULA
LINGO (%):
FAT SLNG
Ice Cream | Case 6 | Blend
TSL SUGAR
CREAM40 0.40000 0.05400 0.45400 0.0000 0.454
❖ DATA CREAM38 0.38000 0.05600 0.43600 0.0000 0.436
MILK32 0.03200 0.08700 0.11900 0.0000 0.119
All problem data is organized in the MILK40
data block as a set of0.04000
members and value attributes, which
0.08600 can be viewed
0.12600 below.
0.0000 0.126
FATCONDMILK 0.08000 0.20000 0.28000 0.0000 0.280
DATA:DATA:
TA: DATA: DATA: LEACONDMILK 0.0000 0.28000 0.28000 0.0000 0.280
):
ARMULA
(%): FORMULA
FORMULA
(%): (%): (%): (%):
FORMULA
FORMULA (%): BUTTER 0.50000 0.92000 0.97000 0.0000 0.970
FAT FAT FAT SLNG FAT
FAT SLNG
FATSLNG FAT TSL
SLNG SLNG
TSL SLNG
WHEY SLNGTSLSUGAR
TSL TSL
SUGAR TSL
SUGAR
0.0000
TSL TS
SUGAR SUGAR
SUGAR
TS WATER
TS
0.95000
SUGAR TS
WATER
TS COST:
TS
WATER
0.95000
TS WATER
WATER WATER
0.0000
WATER 0.950
40 0.40000
CREAM40
REAM40 CREAM40
CREAM40
0.40000
CREAM40 0.054000.40000
0.05400
0.40000
0.40000 0.45400
0.40000
0.05400
0.05400
0.40000 0.05400
0.05400
0.45400
0.45400
SACCHAROSE
0.054000.0000
0.45400
0.0000
0.45400 0.45400
0.454000.0000
0.0000
0.0000
0.45400 0.0000
0.45400 0.54600
0.0000
0.45400
0.0000
0.0000 0.45400
0.54600
0.45400 CREAM40
0.454000.54600
0.54600
0.0000
0.45400 27.000
0.54600
0.546001.0000
0.54600 1.00
38 0.38000
CREAM38
CREAM38
0.38000
CREAM38 CREAM38
REAM38 0.056000.38000
0.05600
0.38000 0.05600
0.38000 0.43600
0.38000
0.38000 0.05600
0.05600
0.43600
0.05600 0.43600
CANE_BROTH
0.056000.0000
0.43600
0.0000
0.43600 0.436000.43600
0.43600
0.0000
0.0000 0.43600
0.0000 0.436000.56400
0.0000
0.0000
0.0000
0.0000 0.56400
0.43600 0.56400CREAM38
0.43600
0.43600 26.000
0.56400
0.56400
0.56400 0.56400
0.0000
0.43600 0.67000 0.670
2ILK32 0.03200
MILK32
MILK32
MILK32 0.03200
MILK32 0.087000.03200
0.08700
0.03200
0.03200 0.11900
0.03200
0.08700
0.08700
0.03200 0.08700
0.08700
0.11900
0.11900
STABILIZER
0.087000.0000
0.11900
0.0000
0.11900 0.11900
0.11900
0.0000
0.11900 0.0000
0.11900
0.0000
0.0000 0.88100
0.0000
0.11900
0.0000
0.0000 0.88100
0.11900 MILK32
0.11900
0.11900 3.0000
0.88100
0.88100
0.88100 0.88100
0.88100
0.0000
0.11900 0.0000 0.800
0ILK40 0.04000
MILK40 MILK40
MILK40
0.04000
MILK40 0.086000.04000
0.08600
0.04000
0.04000 0.12600
0.04000
0.08600
0.08600
0.04000 0.08600
0.08600
0.12600
0.12600
EMULSIFIER
0.086000.0000
0.12600
0.0000
0.12600 0.12600
0.12600
0.0000
0.0000
0.12600 0.0000
0.12600
0.0000 0.87400
0.0000
0.0000
0.0000 0.87400
0.12600
0.12600 MILK40
0.12600
0.12600 0.87400
0.87400
0.0000
0.12600 3.0000
0.87400
0.874000.0000
0.87400 0.00
LK
NDMILK 0.08000
FATCONDMILK
0.08000
FATCONDMILK
ATCONDMILK 0.20000
FATCONDMILK 0.08000
0.20000
0.08000 0.20000
0.08000
FATCONDMILK 0.28000
0.08000
0.08000 0.20000
0.20000
0.28000
0.20000 0.28000
WATER
0.200000.0000
0.28000
0.0000
0.28000 0.280000.28000
0.28000
0.0000
0.0000 0.28000
0.0000 0.280000.72000
0.0000
0.0000
0.0000
0.0000 0.72000
0.28000 0.72000FATCONDMILK
0.28000
0.28000 7.0000
0.72000
0.72000
0.72000 0.72000
0.0000
0.28000 0.0000 0.00
LK
NDMILK 0.0000
LEACONDMILK
0.0000
LEACONDMILK
EACONDMILK 0.28000
LEACONDMILK
0.0000
LEACONDMILK 0.0000
0.28000
0.0000 0.28000
0.0000
0.28000
0.0000 0.28000
0.28000
0.28000
0.28000 0.28000
0.280000.00000.0000
0.28000 0.28000
0.28000
0.28000 0.0000
0.28000 0.28000
0.0000 0.72000
0.0000
0.0000
0.28000
0.0000 0.72000
0.28000 LEACONDMILK
0.28000
0.28000 3.0000
0.72000
0.72000
0.72000 0.72000
0.72000
0.28000
RUTTER 0.50000
BUTTER BUTTER
BUTTER
0.50000
BUTTER 0.920000.50000
0.92000
0.50000
0.50000 0.97000
0.50000
0.50000 0.92000
0.92000
0.97000
0.92000
0.92000 0.970000.0000
REQUIREMENTS_MIN
0.92000 0.97000
0.0000
0.97000 0.97000
0.97000
0.0000
(%):
0.97000 0.97000
0.0000 0.03000
0.0000
0.0000
0.97000
0.0000 0.03000
0.97000 BUTTER
0.97000
0.97000 0.03000
0.03000
0.97000 15.000
0.03000
0.03000
0.03000
HEY WHEY 0.0000
WHEY WHEY
0.0000 0.95000
WHEY 0.0000 0.0000
0.95000
0.0000 0.95000
0.0000
0.95000
0.0000 0.95000
0.95000
0.95000
0.95000 FAT0.95000
0.950000.0000
0.95000
0.0000
0.95000
10.000 0.95000
0.95000
0.0000
0.95000 0.95000
0.0000 0.05000
0.0000
0.0000
0.95000
0.0000 0.05000
0.95000 WHEY
0.95000
0.95000 0.05000
0.05000
0.95000 10.000
0.05000
0.05000
0.05000
EAROSE 0.0000
SACCHAROSE
SACCHAROSE
SACCHAROSE
ACCHAROSE 0.0000 0.0000
0.0000
SACCHAROSE 0.0000
0.0000
0.0000 0.0000
0.00000.00000.0000
0.0000 0.0000
0.0000
SLNG0.0000 1.0000
0.0000 1.0000
0.0000
10.500 1.0000
0.0000
0.00001.0000
0.0000 1.0000
1.0000 0.0000
1.0000
1.0000
1.0000
1.0000 1.0000
0.0000
1.0000 SACCHAROSE
1.0000
0.0000
1.00000.0000 0.000010.000
0.0000
0.0000
HBROTH 0.0000
CANE_BROTH
CANE_BROTH
CANE_BROTH
ANE_BROTH 0.0000 0.0000
0.0000
CANE_BROTH 0.0000 0.0000
0.0000
0.0000
0.00000.0000
0.0000TSL 0.0000
0.0000
0.0000 0.67000
0.0000
0.0000 0.67000
0.0000 0.67000
0.0000
0.0000
0.67000
20.5000.0000 0.67000
0.67000 0.33000
0.67000
0.67000
0.67000
0.67000 0.33000
0.67000 CANE_BROTH
0.67000
0.67000 0.33000
0.33000
0.67000 9.0000
0.33000
0.33000
0.33000
RLIZER 0.0000
STABILIZER
STABILIZER
STABILIZER
TABILIZER 0.0000 0.0000
0.0000
STABILIZER 0.0000 0.0000
0.0000
0.0000
0.00000.0000
0.0000SUGAR0.0000
0.0000
0.00000.00000.0000
0.0000 0.0000
0.0000
11.000 0.80000
0.0000
0.00000.0000
0.0000 0.80000
0.0000 0.20000
0.0000
0.0000
0.80000
0.0000 0.20000
0.80000 STABILIZER
0.80000
0.80000 0.20000
0.20000
0.80000 55.000
0.20000
0.20000
0.20000
RIFIER EMULSIFIER
MULSIFIER
CREAM38
0.0000
EMULSIFIER
EMULSIFIER
0.0000 0.0000
0.0000
26.000
0.0000
0.0000
0.0000 0.0000 0.0000
0.0000 0.0000
0.0000
0.0000 0.00000.0000
0.0000
0.0000 0.0000
0.00000.00000.0000
0.0000 0.0000
0.0000 0.0000
0.0000
0.0000 EMULSIFIER
0.0000 0.0000
0.0000 0.000078.000
0.0000
EMULSIFIER 0.0000 TS 0.0000
0.0000 32.5000.0000
0.0000 0.0000 0.0000
WATER
ATER WATER MILK32
0.0000
WATER
0.0000
WATER 0.0000
0.00000.0000 3.0000
0.0000
0.0000
0.0000
0.00000.00000.0000
0.0000WATER0.0000
0.0000
0.00000.0000
0.0000 0.0000
0.0000
58.500 0.0000
0.0000
0.00000.0000
0.0000 0.0000
0.0000 1.0000
0.0000
0.0000
0.0000 0.0000
1.0000
0.0000 WATER
0.0000
1.0000
0.00001.0000 0.0000
1.0000
1.0000
1.0000
MILK40 3.0000
TS_MIN (%): REQUIREMENTS_MIN
(%): (%):(%): (%):
REQUIREMENTS_MIN
EMENTS_MIN (%):
REQUIREMENTS_MIN
QUIREMENTS_MIN SOLUTION:
10.000 FATCONDMILK
REQUIREMENTS_MIN
FAT
FAT 10.000
7.0000 REQUIREMENTS_MAX (%):
(%):
10.000
10.000 Local optimal solution found.
AT FAT 10.000 10.000
LNG 10.500
FAT
LEACONDMILK
SLNG
SLNG 10.500
SLNG10.500
SLNG 10.500
3.0000 FAT
10.000
10.500
10.500
10.500 SLNG
16.000
13.000 Objective value:
SL 20.500 BUTTER
TSL
TSL 20.500
TSL 20.500
TSL 20.500
20.500 15.000 TSL
20.500
20.500 25.000 Infeasibilities:
UGAR11.000
SUGARSUGAR
11.000
SUGAR 11.000
WHEY
SUGAR 11.000 11.000
11.000 10.000 SUGAR
11.000 17.000
S 32.500
TS 32.500TS
TS 32.500
TS 32.500 32.500
32.500
32.500 TS 41.500 IDEAL MIXING PROGRAM:
ATER58.500
WATERSACCHAROSE
WATER
58.500
WATER 10.000
58.500
58.500 Required: CREAM40 11.6719%
WATER58.500
58.500 58.500 WATER 62.500
CANE_BROTH 9.0000 Required: MILK40 63.8368%
TS_MAX (%): REQUIREMENTS_MAX
(%): (%):(%): (%):
REQUIREMENTS_MAX
EMENTS_MAX (%): Required: BUTTER 5.5556%
STABILIZER
REQUIREMENTS_MAX
QUIREMENTS_MAXREQUIREMENTS_MAX 55.000 COST:
(%):
Required: WHEY 1.8617%
16.000
AT FAT FAT
16.000FAT
16.000
FAT 16.000
16.000
16.000 16.000 CREAM40 27.000
13.000 ❖ EMULSIFIER
SOLUTION
SLNG
SLNG 13.000
LNG SLNG13.000
78.000
13.000
13.000 Required: SACCHAROSE 16.6040%
SLNG 13.000 13.000
SL 25.000 WATER
TSL
TSL Below
TSL 25.000TSL is the 25.000
25.00025.000 0.0000
25.000
25.000
solution
Required: STABILIZER
achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
0.3700%
17.000
SUGAR
17.000
UGAR SUGAR SUGAR 17.000
17.000
SUGAR17.000 17.000
17.000 Required: EMULSIFIER 0.1000%
S 41.500
TS 41.500 TS
TS 41.500
TS 41.500 41.500
41.50041.500
SOLUTION:
WATER 62.500 SLACK/SURPLUS LIMIT = MINIMUM
ATER62.500
WATER
62.500
WATER 62.500
WATER 62.500
62.500 62.500
Local optimal solution found. PROD LIMIT VA
COST:Objective
ST: COST: COST:
COST: value: FAT
802.79 10.000 10.000 0.0
40 27.000
27.000CREAM40
CREAM40
CREAM40
REAM40 27.000 27.000
27.000
27.000 SLNG 8.0000 10.500 -2.5
Infeasibilities:
CREAM40 27.000 0.0000
TSL 20.500 20.500 0.0
SUGAR
1 5.3960
1 11.000
1 1 -5.6
11
1
IDEAL MIXING PROGRAM: TS 27.600 32.500 -4.9
WATER 54.500 58.500 -4.0
Required: CREAM40 11.6719% x Cost: $27.00 = TOTAL: $315.14
Required: MILK40 63.8368% x Cost: $ 3.00 = TOTAL: $191.51
SLACK/SURPLUS LIMIT = MAXIMUM
Required: BUTTER 5.5556% x Cost: $15.00 = TOTAL: $ 83.33 PROD LIMIT
Required: WHEY 1.8617% x Cost: $10.00 = TOTAL: FAT
$ 18.62 10.000 16.000 -
SLNG 13.000 13.000
Required: SACCHAROSE 16.6040% x Cost: $10.00 = TOTAL: $166.04
TSL 20.500 25.000 -
Required: STABILIZER 0.3700% x Cost: $55.00 = TOTAL: $ SUGAR
20.35 16.604 17.000 -0
Required: EMULSIFIER 0.1000% x Cost: $78.00 = TOTAL: $ TS7.80 37.400 41.500 -
WATER 62.500 62.500

SLACK/SURPLUS LIMIT = MINIMUM REQUIREMENTS:


PROD LIMIT VALUE
FAT 10.000 10.000 0.0000
SLNG 8.0000 10.500 -2.5000
TSL 20.500 20.500 0.0000
SUGAR 5.3960 11.000 -5.6040
TS 27.600 32.500 -4.9000
WATER 54.500 58.500 -4.0000

106
C2-B2 Solving Problems with LINGO Ration | Case 7 | Blend

GOAL

7 In a farm you want to make 10000 kilos of feed at the lowest possible cost.

According to the recommendations of the veterinarian of the farm animals the same should
contain: 15% protein, minimum 8% fiber, minimum 1100 calories per kilo and maximum 2250
calories per kilo.
Blocks
To make the ration, 4 ingredients are available whose technical-economic characteristics are
• Product Mix shown in the details (data in%, except calories and costs).
• Blend
The ration must be made containing at least 20% of maize and at most 12% of soya.
• Finance
Nutritional Requirement Barley Oats Soya Corn Min Max
• Investments
• Diet Proteins % 6.9 8.5 9.0 27.1 kg 1500
• Aviation Fibers % 6 11 11 14 kg 800
• Transport Formula
Calories /kg cal 1,760 1,700 1,056 1,400 cal 1,100,000 2,250,000
• Agriculture
• Construction Limit kg 1,200 2,000 -

• Refinery Cost p/kg $ 43.00 48.00 44.00 56.00 -


• Schedule
Therefore, formulate a PL model for the problem.
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Ration
• Formula

Source:
• Book 9
• Page 18

107
C2-B2 Solving Problems with LINGO Ration | Case 7 | Blend

MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE_MIN, AVAILABLE_MAX;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Product attributes;
PRODUCT , COST =
BARLEY 30
OATS 48
SOYA 44
CORN 56;
! Resources attributes;
RESOURCE, AVAILABLE_MIN, AVAILABLE_MAX =
PROTEINS 1500 1500
FIBERS 800 1500
CALORIES 11000000 22500000;
! Required ( formula ) Barley Oats Soya Corn ;
USAGE = 0.069 0.085 0.090 0.271 ! PROTEINS (%);
0.060 0.110 0.110 0.140 ! FIBERS (%);
1760 1700 1056 1400; ! CALORIES (CAL);
ENDDATA
SUBMODEL MIN7:
[OBJ] MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! Amount of feed;
@SUM( PRODUCT( p): PRODUCE( p)) = 10000;
PRODUCE( 3) <= 1200; ! Soya ( 12%);
PRODUCE( 4) >= 2000; ! Corn ( 20%);
! The minimum available constraints;
@FOR( RESOURCE( r):
[AVA_MIN] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) >= AVAILABLE_MIN( r););
! The maximum available constraints;
@FOR( RESOURCE( r):
[AVA_MAX] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE_MAX(r));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%,CAL):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE_MIN (kg):", @NEWLINE( 1));
@TABLE(AVAILABLE_MIN);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE_MAX (kg):", @NEWLINE( 1));
@TABLE(AVAILABLE_MAX);
@WRITE(" ", @NEWLINE( 1), " COST p/kg:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN7);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-7s'),' ',
@FORMAT(PRODUCE( J),'%6.1f'),'Kg x Unit cost: $',
@FORMAT(COST( J), '%5.2f'),' = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%9.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN7);
ENDCALC
END

108
DATA:
FORMULA (%,CAL):
C2-B2 Solving Problems with LINGO BARLEY OATS Ration | Case 7 | Blend
SOYA
DATA:
PROTEINS 0.0690000 0.08500000 0.09000000 0.
❖ DATA
FORMULA
FIBERS (%,CAL):0.0600000 0.11000000 0.11000000 0.
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
CALORIES BARLEY
1760.0000 1700.0000OATS 1056.0000 SOYA 1
PROTEINS
DATA: 0.0690000 0.08500000 0.09000000 0.
FORMULA (%,CAL):
FIBERS
AVAILABLE_MIN 0.0600000 OATS 0.11000000
(kg):
BARLEY SOYA
0.11000000
CORN
0.
CALORIES
PROTEINS
PROTEINS 1760.0000
1500.0000
0.0690000 0.08500000 1700.0000
0.09000000 1056.0000
0.27100000 1
FIBERS 0.0600000 0.11000000 0.11000000 0.14000000
FIBERS
CALORIES
800.00000
1760.0000 1700.0000 1056.0000 1400.0000
AVAILABLE_MIN
CALORIES (kg):
11000000.
PROTEINS (kg):
AVAILABLE_MIN 1500.0000
PROTEINS
FIBERS 1500.0000 800.00000
AVAILABLE_MAX
FIBERS 800.00000 (kg):
CALORIES11000000.
PROTEINS
CALORIES 11000000.
1500.0000
FIBERS
AVAILABLE_MAX (kg):
1500.0000
AVAILABLE_MAX
CALORIES
PROTEINS
(kg):
22500000.
1500.0000
PROTEINS
FIBERS 1500.0000
1500.0000
CALORIES
FIBERS 22500000.
COST p/kg: 1500.0000
CALORIES
BARLEY
COST p/kg: 22500000.
30.000000
BARLEY 30.000000
OATS
OATS
48.000000
48.000000
COST
SOYA p/kg:
SOYA 44.000000
44.000000
BARLEY 56.000000
CORN
CORN 30.000000
56.000000
OATS 48.000000
SOLUTION:
SOYAoptimal44.000000
❖ SOLUTION
SOLUTION:
Global solution found.
CORN
Objective
Global
Below value:
optimal
is the solution56.000000
achievedsolution found.0, and the404257.43
by LINGO with infeasibilities detailed report that makes up the optimal
Infeasibilities: 0.0000000
Objective value: 404257.43
SOLUTION:
Infeasibilities:
Model Class: LP 0.0000000
Global optimal solution found.
IDEAL MIXING PROGRAM:
Objective
Model
BARLEY Class:
5990.1 value:
Kg x LPUnit cost: $30.00 = Total: $179702.97 404257.43
Infeasibilities:
CORN 4009.9 Kg x Unit cost: $56.00 = Total: $224554.46 0.0000000
IDEAL
SLACK/SURPLUSMIXING LIMIT PROGRAM:
= MINIMUM AVAILABLE:
Model
BARLEY 5990.1 Class: LP
PRODKg x Unit LIMIT cost: $30.00 = Total: $179702.97
VALUE
PROTEINS 1500.0000 1500.0000 0.0000000
CORN
FIBERS 4009.9
679.20792Kg 800.00000
x Unit cost: -120.79208 $56.00 = Total: $224554.46
IDEAL
CALORIES MIXING
5843564.4PROGRAM:11000000. -5156435.6
BARLEY 5990.1LIMIT
SLACK/SURPLUS Kg x = Unit cost:AVAILABLE:
MINIMUM $30.00 = Total: $179702.97
SLACK/SURPLUS
CORN LIMIT =
4009.9 KgPROD MAXIMUM AVAILABLE:
x Unit cost: $56.00 = VALUE Total: $224554.46
PROD LIMIT VALUE LIMIT
PROTEINS1500.0000
PROTEINS 1500.0000
1500.0000 1500.0000
0.0000000 0.0000000
SLACK/SURPLUS
FIBERS LIMIT
920.79208
FIBERS 16156436. = MINIMUM
1500.0000
679.20792 AVAILABLE:
-579.20792
800.00000 -120.79208
CALORIES 22500000. -6343564.4
CALORIES PROD
5843564.4 LIMIT -5156435.6
11000000. VALUE
PROTEINS 1500.0000 1500.0000 0.0000000
FIBERS 679.20792
SLACK/SURPLUS 800.00000
LIMIT = MAXIMUM -120.79208
AVAILABLE:
CALORIES 5843564.4
PROD 11000000.
LIMIT -5156435.6
VALUE
PROTEINS 1500.0000 1500.0000 0.0000000
SLACK/SURPLUS
FIBERS LIMIT =
920.79208 MAXIMUM AVAILABLE:
1500.0000 -579.20792
CALORIES PROD
16156436. LIMIT -6343564.4
22500000. VALUE
PROTEINS 1500.0000 1500.0000
109 0.0000000 1
FIBERS 920.79208 1500.0000 -579.20792
C2-B2 Solving Problems with LINGO Dog food | Case 8 | Blend

GOAL

8 A dog food company produces two types of feed: A and B. Cereals and meat are used for the
manufacture of feed, according to the table below:

Resources/Products A B Available Cost

Blocks Cereals lb. 5 2 30,000 1.00


• Product Mix
• Blend Meat lb. 1 4 10,000 4.00

• Finance
Price ( Pac, 6 lb.) lb. 20.00 30.00 -
• Investments
• Diet
How much of each feed is needed to maximize profit?
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Ration
• Formula

Source:
• Book 2
• Page 222

110
C2-B2 Solving Problems with LINGO Dog food | Case 8 | Blend
MODEL:
SETS:
RESOURCES: AVAILABLE, COST;
PRODUCTS: PRICE, PRODUCE;
RXP( RESOURCES, PRODUCTS): FORMULA;
ENDSETS
DATA:
! Products attributes;
PRODUCTS PRICE =
A 20
B 30;
! Brands attributes;
RESOURCES, AVAILABLE, COST =
CEREALS 30000 1
MEAT 10000 4;
! Required A B;
FORMULA = 5 2 ! CEREALS;
1 4; ! MEAT;
ENDDATA
SUBMODEL MAX8:
[OBJ] MAX = ((PRICE(1) - COST_C ) * PRODUCE(1)) + ((PRICE(2) - COST_M) * PRODUCE(2));
!Cost of cereals;
COST_C = FORMULA(1,1) * COST(1) + FORMULA(2,1) * COST(2);
!Cost of Meat;
COST_M = FORMULA(1,2) * COST(1) + FORMULA(2,2) * COST(2);
! The Available Constraints;
@FOR(RESOURCES( I):
@SUM(PRODUCTS(J): FORMULA(I,J) * PRODUCE(J)) <= AVAILABLE(I););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA - Resources vs Products (lb.):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (lb.):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PRICE (p/lb.):", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " COST (p/lb):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX8);
! Solution Report;
@WRITE( " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCTS(K): ' Product:',
@FORMAT(PRODUCTS( K),'4s'),', ',
@FORMAT(PRODUCE( K),'%8.3f'),' lb. x Cost: $',
@FORMAT(@IF(K #EQ# 1, COST_C, COST_M),'%5.2f'), ' = Total: $',
@FORMAT(@IF(K # EQ# 1, COST_C * PRODUCE(K), COST_M * PRODUCE(K)),'%9.2f'), @NEWLINE(1),44*' ',' - Revenue: $',
@FORMAT(@IF(K #EQ# 1, PRICE(1) * PRODUCE(K), PRICE(2) * PRODUCE(K)),'9.2f'), @NEWLINE(1),44*' ',' = Profit: $',
@FORMAT(@IF(K #EQ# 1, PRICE(1) * PRODUCE(K) - COST_C * PRODUCE(K),
PRICE(2) * PRODUCE(K) - COST_M * PRODUCE(K)), '%9.2f'),
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX8);
ENDCALC
END

111
C2-B2 Solving Problems with LINGO Dog food | Case 8 | Blend

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA - resources vs Products (lb.):
A B
CEREALS 5.000000 2.000000
MEAT 1.000000 4.000000
DATA:
AVAILABLE
FORMULA (lb.):
- resources vs Products (lb.):
CEREALS 30000.00 A B
CEREALS
MEAT 5.000000
10000.00 2.000000
MEAT 1.000000 4.000000
PRICE (p/lb.):
AVAILABLE
A 20.00000 (lb.):
CEREALS
B 30.00000 30000.00
MEAT 10000.00
COST (p/lb):
PRICE
CEREALS(p/lb.):1.000000
AMEAT
20.00000 4.000000
B 30.00000
SOLUTION:
COST
Global (p/lb):
optimal solution found.
❖ SOLUTION
Objective 1.000000
CEREALS value: 74444.44
MEAT
Below is the
Infeasibilities:4.000000
solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
0.000000
SOLUTION:
IDEAL MIXING PROGRAM:
Global optimal
Product: solution lb.
A, 5555.556 found.
x Cost: $ 9.00 = Total: $ 50000.00
Objective value: - Revenue: 74444.44
$111111.11
Infeasibilities: = Profit: $0.000000
61111.11
IDEAL MIXING PROGRAM:
Product: B, 1111.111 lb. x Cost: $18.00 = Total: $ 20000.00
Product: A, 5555.556 lb. x Cost: $ 9.00 = Total: $ 50000.00
- Revenue: $ 33333.33
- Revenue: $111111.11
= Profit: $ 13333.33
= Profit: $ 61111.11

Product: B, 1111.111 lb. x Cost: $18.00 = Total: $ 20000.00


- Revenue: $ 33333.33
= Profit: $ 13333.33

112
C2-B2 Solving Problems with LINGO Blending of Ingredients | Case 9 | Blend

GOAL

9 In blending problems, two or more raw materials are to be blended into one or more finished
goods, satisfying one or more quality requirements on the finished goods. In this example, we
blend mixed nuts into four different brands with a goal of maximizing revenue.

The Chess Snackfoods Co. markets four brands of mixed nuts. The four brands of nuts are
called Pawn, Knight, Bishop, and King. Each brand contains a specified ratio of peanuts and
Blocks
cashews.
• Product Mix
The table below lists the number of ounces of the two nuts contained in each pound of each
• Blend
brand and the profit the company receives per pound of each brand.
• Finance
• Investments
Resources/Products Pawn Knight Bishop King Available
• Diet
• Aviation
Peanut oz 15 10 6 2 750 pounds
• Transport
Formula
• Agriculture
Cashew Nut oz 1 6 10 14 250 pounds
• Construction
• Refinery
Price $ 2.00 3.00 4.00 5.00 -
• Schedule
• Cutting
• Metallurgy Chess has contracts with suppliers to receive 750 pounds of peanuts/day and 250 pounds of
cashews/day.
• Fertilizer
• Clinic Our problem is to determine the number of pounds of each brand to produce each day to
maximize total revenue without exceeding the available supply of nuts.
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Formula

Source:
• Book 4
• Chess

113
C2-B2 Solving Problems with LINGO Blending of Ingredients | Case 9 | Blend

MODEL:
SETS:
NUTS: SUPPLY;
BRANDS: PROFIT, PRODUCE;
RXP( NUTS, BRANDS): FORMULA;
ENDSETS
DATA:
! Nuts attributes;
NUTS, SUPPLY =
PEANUTS 750
CASHEWS 250;

! Brands attributes;
BRANDS, PROFIT =
PAWN 2
KNIGHT 3
BISHOP 4
KING 5;

! Required Pawn Knight bishop King;


FORMULA = 15 10 6 2 ! Peanuts;
1 6 10 14; ! Cashews;
ENDDATA
SUBMODEL MAX9:
[OBJ] MAX = @SUM( BRANDS( I):PROFIT( I) * PRODUCE( I));
! The Supply Constraints;
@FOR( NUTS( I):
[SUP] @SUM( BRANDS( J):FORMULA( I, J) * PRODUCE( J) / 16) <= SUPPLY( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (oz):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (pounds):", @NEWLINE( 1));
@TABLE(SUPPLY);
@WRITE(" ", @NEWLINE( 1), " PROFIT (p/oz):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX9);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( BRANDS( J)| PRODUCE( J) #GT# 0: ' Brand:',
@FORMAT(BRANDS( J),'4s'),', ',
@FORMAT(PRODUCE( J),'%6.2f'),' oz x Unit profit: $',
@FORMAT(PROFIT( J),'%4.2f'), ' = Total: $',
@FORMAT(PROFIT( J) * PRODUCE( J),'%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN9);
ENDCALC
END

114
C2-B2 Solving Problems with LINGO Blending of Ingredients | Case 9 | Blend

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (oz):
PAWN KNIGHT BISHOP KING
PEANUTS 15.00000 10.00000 6.000000 2.000000
DATA:
CASHEWS 1.000000 6.000000 10.00000 14.00000
FORMULA (oz):
DATA:
AVAILABLE (pounds): PAWN KNIGHT BISHOP KING
FORMULA
PEANUTS (oz):
PEANUTS 15.00000
750.0000 10.00000 6.000000 2.000000
CASHEWS
CASHEWS 250.0000 1.000000PAWN KNIGHT
6.000000 BISHOP
10.00000 14.00000KING
PEANUTS 15.00000 10.00000 6.000000 2.000000
CASHEWS
PROFIT
AVAILABLE 1.000000
(p/oz):
(pounds): 6.000000 10.00000 14.00000
PAWN
PEANUTS 2.000000
750.0000
KNIGHT
AVAILABLE 3.000000
CASHEWS 250.0000 (pounds):
BISHOP 4.000000
PEANUTS 750.0000
KING
CASHEWS 5.000000
250.0000
PROFIT (p/oz):
PAWN
SOLUTION: 2.000000
PROFIT
Global (p/oz):
KNIGHToptimal 3.000000 solution found.
PAWN
BISHOP
Objective 2.000000
4.000000
value: 2692.308
KNIGHT
KING
Infeasibilities:3.000000
5.000000 0.000000
❖ SOLUTION
BISHOP 4.000000
Below
KING
Modelis the solution
Class: achieved
5.000000
LP by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOLUTION:
Global optimal solution found.
IDEAL MIXING
SOLUTION:
Objective PROGRAM:
value: 2692.308
Brand:PAWN, 769.23oz
Global optimal solution found. x Unit profit: $2.00 = Total: $1538.46
Infeasibilities: 0.000000
Brand:KING,
Objective value: 230.77oz x Unit profit: $5.00 = Total: $1153.85 2692.308
Infeasibilities:
Model Class: LP 0.000000

Model MIXING
IDEAL Class: PROGRAM:
LP
Brand:PAWN, 769.23 oz x Unit profit: $2.00 = Total: $1538.46
IDEAL MIXING230.77
Brand:KING, PROGRAM:
oz x Unit profit: $5.00 = Total: $1153.85
Brand:PAWN, 769.23 oz x Unit profit: $2.00 = Total: $1538.46
Brand:KING, 230.77 oz x Unit profit: $5.00 = Total: $1153.85

115
BLOCK 3 Block: FINANCE

What actions should be included in a portfolio of investments so that the profit is maximum and the
forecasts of profitability and government restrictions are respected?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

116
C2-B3 Solving Problems with LINGO Purchase and Resale | Case 1 | Finance

GOAL

1 A company buys and resells a product that can be purchased at the following cost:

Resources / Periods M1 M2 M3 M4 M5 M6 Capacity

Supplier A $ 1.20 1.30 1.40 1.50 1.60 1.70 150 un


Blocks
• Product Mix Cost Supplier B $ 1.30 1.40 1.50 1.60 1.70 1.80 90 un
• Blend
Stockholm $ 0.05 0.05 0.05 0.05 0.05 0.05 50 un
• Finance
• Investments
Demand un 120 150 120 200 150 180
• Diet
• Aviation The company wants to minimize the total cost of operations for 6 months, which is the sum
of the cost of purchase and the cost of storage.
• Transport
• Agriculture The sales forecast for the next 6 months is: 120,150,120,200,150 and 180 unity.
• Construction
The storage cost from one period to another is $0.05 and the stock at the beginning of month
• Refinery 1 is zero.
• Schedule
What is the monthly scheme of purchases that implies total cost.
• Cutting
Consider the cost of any given month as the sum of the costs of purchasing the product from
• Metallurgy
the two suppliers plus the cost of the existing inventory at the end of the period.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Business
• Resells
• Purchase

117
C2-B3 Solving Problems with LINGO Purchase and Resale | Case 1 | Finance

MODEL:
SETS:
PERIOD : DEMAND, COST_TT;
RESOURCE: CAPACITY ;
RXP( PERIOD, RESOURCE) : COST, PRODUCE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , CAPACITY =
SUPPLIER_A 150
SUPPLIER_B 90
STOCK 50;
! Period attributes;
PERIOD, DEMAND =
MONTH1 120
MONTH2 150
MONTH3 120
MONTH4 200
MONTH5 150
MONTH6 180;
! Costs Supplier_A Supplier_B Stock;
COST = 1.20 1.30 0.05 ! MONTH1;
1.30 1.40 0.05 ! MONTH2;
1.40 1.50 0.05 ! MONTH3;
1.50 1.60 0.05 ! MONTH4;
1.60 1.70 0.05 ! MONTH5;
1.70 1.80 0.05; ! MONTH6;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM(PERIOD(J): COST_TT(J));
! Cost calculation;
@FOR(PERIOD(I):COST_TT(I) = @SUM(RESOURCE(J): COST(I,J) * PRODUCE(I,J)););
! The demand constraint;
@FOR( RXP(I,J) | J #EQ# 1: PRODUCE(I,1) + PRODUCE(I,2) - PRODUCE(I,3) >= DEMAND(I));
! The capacity constraint;
@FOR( PERIOD(I): @FOR( RESOURCE(J): PRODUCE(I,J) <= CAPACITY(J)););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(COST, 1);
@WRITE(" ", @NEWLINE( 1), " CAPACITY (un):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL OPERATION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J) | PRODUCE(I,J) #GT# 0: ' . ',
@FORMAT(PERIOD(I),'-6s'),', ',
@FORMAT(RESOURCE(J),'-10s'), ' Provide:',
@FORMAT(PRODUCE(I,J),'%4.0f'),' un x cost: $',
@FORMAT(COST( I,J),'%5.2f'), ' = Total: $',
@FORMAT(COST( I,J) * PRODUCE( I,J),'%7.2f'),
@NEWLINE( 1));
@WRITE(' TOTAL COST:',51*' ','$', @FORMAT(OBJ,'%7.2f'),@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

118
C2-B3 Solving Problems with LINGO Purchase and Resale | Case 1 | Finance

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COST:
SUPPLIER_A SUPPLIER_B STOCK
MONTH1 1.2000 1.3000 0.050000
MONTH2 1.3000 1.4000 0.050000
MONTH3 1.4000 1.5000 0.050000
MONTH4 1.5000 1.6000 0.050000
MONTH5 1.6000 1.7000 0.050000
MONTH6
DATA: 1.7000 1.8000 0.050000
COST:
CAPACITYSUPPLIER_A
DATA:
(un): SUPPLIER_B STOCK
SUPPLIER_A
MONTH1
COST: 150.00
1.2000 1.3000 0.050000
SUPPLIER_B
MONTH2 90.000
1.3000
SUPPLIER_A 1.4000
SUPPLIER_B 0.050000
STOCK
STOCK
MONTH3
MONTH1 50.000
1.4000
1.2000 1.5000
1.3000 0.050000
0.050000
MONTH4
MONTH2 1.5000
1.3000 1.6000
1.4000 0.050000
0.050000
MONTH5
DEMAND (un):1.6000
MONTH3 1.4000 1.7000
1.5000 0.050000
0.050000
MONTH6
MONTH1
MONTH4 1.7000
120.00
1.5000 1.8000
1.6000 0.050000
0.050000
MONTH2
MONTH5 150.00
1.6000 1.7000 0.050000
CAPACITY
MONTH3(un):1.7000
MONTH6 120.00 1.8000 0.050000
SUPPLIER_A 150.00
MONTH4 200.00
SUPPLIER_B
CAPACITY 90.000
MONTH5(un):50.000
STOCK
150.00
SUPPLIER_A
MONTH6 150.00
180.00
SUPPLIER_B 90.000
DEMAND
STOCK (un): 50.000
SOLUTION:
MONTH1 120.00
Global
MONTH2
DEMAND
optimal solution found.
(un): 150.00
Objective value:
MONTH3
MONTH1 120.00
120.00 1361.0
Infeasibilities:
MONTH4
MONTH2 200.00
150.00 0.0000
MONTH5
MONTH3 150.00
120.00
❖ SOLUTION
MONTH6
Model Class:
MONTH4 180.00
LP
200.00
MONTH5
Below 150.00
is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOLUTION:
IDEAL OPERATION
MONTH6 PROGRAM:
180.00
Global optimalSUPPLIER_A
. MONTH1, solution found.
Provide: 120 un x cost: $ 1.20 = Total: $ 144.00
Objective value:
SOLUTION: 1361.0
. MONTH2, SUPPLIER_A Provide: 150 un x cost: $ 1.30 = Total: $ 195.00
Infeasibilities:
Global optimal solution found. 0.0000
. MONTH3, SUPPLIER_A Provide: 120 un x cost: $ 1.40 = Total: $ 168.00
Objective value:
. MONTH4, 1361.0
Model Class: SUPPLIER_A
LP
Infeasibilities:
Provide: 150 un x cost: $ 1.50 = Total: $ 225.00
0.0000
. MONTH4, SUPPLIER_B Provide: 50 un x cost: $ 1.60 = Total: $ 80.00
.
IDEALMONTH5, SUPPLIER_A Provide: 150 un x cost: $ 1.60 = Total: $ 240.00
ModelOPERATION
Class: LPPROGRAM:
. MONTH6, SUPPLIER_A Provide:
. MONTH1, SUPPLIER_A Provide: 120 150
un x un x cost:
cost: $
$ 1.20 =1.70 = Total:
Total: $ 255.00
$ 144.00
. . MONTH6,
MONTH2, SUPPLIER_B
SUPPLIER_A Provide:
Provide:
IDEAL OPERATION PROGRAM: 150 30 un x cost:
un x cost: $ 1.30$ 1.80 = Total:
= Total: $ 195.00$ 54.00
. TOTAL COST:
. MONTH1, SUPPLIER_A Provide: 120
MONTH3, SUPPLIER_A Provide: 120 un
un x
x cost:
cost: $$ 1.40
1.20 == Total: $1361.00
Total: $$ 168.00
144.00
. MONTH2,
. MONTH4, SUPPLIER_A
SUPPLIER_A Provide:
Provide: 150
150 un
un x
x cost:
cost: $$ 1.50 ==
$$ 225.00
1.30195.00 Total:
Total:
. MONTH4, SUPPLIER_B
. MONTH3, SUPPLIER_A Provide:
Provide: 50
120 un
un x
x cost:
cost: $$ 1.60 ==
$$ 168.00
1.40 80.00 Total:
Total:
. MONTH5, SUPPLIER_A
. MONTH4, SUPPLIER_A Provide:
Provide: 150
150 un
un x
x cost:
cost: $$ 1.60 ==
$$ 240.00
1.50225.00 Total:
Total:
. MONTH4,
. MONTH6, SUPPLIER_B
SUPPLIER_A Provide:
Provide: 150
50 un
un x
x cost:
cost: $$ 1.70 ==
$$ 255.00
1.60 80.00 Total:
Total:
. MONTH6, SUPPLIER_B
. MONTH5, SUPPLIER_A Provide:
Provide: 30
150 un
un x
x cost:
cost: $$ 1.80 ==
$$ 240.00
1.60 54.00 Total:
Total:
TOTAL COST:
. MONTH6, SUPPLIER_A Provide: 150 un x cost: $ 1.70 = Total: $1361.00
$ 255.00
. MONTH6, SUPPLIER_B Provide: 30 un x cost: $ 1.80 = Total: $ 54.00
TOTAL COST: $1361.00

119
C2-B3 Solving Problems with LINGO Capital Analysis | Case 2 | Finance

GOAL

2 The technical head of a research institute has received 18 new project proposals from its
engineers and analysts.

Five of them were selected as being of interest because they agreed with the institute's
research lines. However, the institute does not have enough cash to carry out these projects
Blocks simultaneously.

• Product Mix Therefore, it is necessary to indicate the projects that must be executed in order to maximize
• Blend the NPV. The cash flows for each of the selected projects are shown below :

• Finance
Cash Flows Capital Necessary
• Investments
• Diet Projects VPL 2005 2006 2007 2008 2009
• Aviation
P1 $ 141 75 25 20 15 10
• Transport
• Agriculture P2 $ 187 90 35 0 0 30

• Construction
P3 $ 121 60 15 15 15 15
• Refinery
P4 $ 83 30 20 10 5 5
• Schedule
• Cutting P5 $ 265 100 25 20 20 20
• Metallurgy
P6 $ 127 50 20 10 30 40
• Fertilizer
• Clinic Available $ - 250 75 50 50 50

• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Business
• NPV

Source:
• Book 2
• Page 182

120
C2-B3 Solving Problems with LINGO Capital Analysis | Case 2 | Finance
MODEL:
SETS:
PERIOD : AVAILABLE;
PROJECT: PRODUCE, NPV;
RXP( PROJECT, PERIOD) : USAGE;
ENDSETS
DATA:
! Periods attributes;
PERIOD, AVAILABLE =
Y1 250
Y2 75
Y3 50
Y4 50
Y5 50;

! Projects attributes;
PROJECT, NPV =
P1 141
P2 187
P3 121
P4 83
P5 265
P6 127;

! Required Y1 Y2 Y3 Y4 Y5;
USAGE = 75 25 20 15 10 ! P1;
90 35 0 0 30 ! P2;
60 15 15 15 15 ! P3;
30 20 10 5 5 ! P4;
100 25 20 20 20 ! P5;
50 20 10 30 40; ! P6;
ENDDATA
SUBMODEL MAX2:
[OBJ] MAX = @SUM( PROJECT( p): NPV( p) * PRODUCE( p));
! The available constraint;
@FOR( PERIOD( L):
[AVA] @SUM( PROJECT( C): USAGE( C,L) * PRODUCE( C)) <= AVAILABLE( L););
@FOR(PROJECT(P): @BIN(PRODUCE(P)));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " CAPITAL NECESSARY:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " CAPITAL AVAILABLE:", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " NPV:", @NEWLINE( 1));
@TABLE(NPV);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL OPERATION PROGRAM: ", @NEWLINE( 1));
!@WRITE(' SELECTED PROJECTS:', @NEWLINE(1));
@WRITEFOR( PROJECT( J)|PRODUCE(J) #EQ# 1: ' . ',
@FORMAT(PROJECT( J),'-3s'), ' Year: ', PERIOD(J), ' = Net Present Value:',' $',
@FORMAT(NPV( J) * PRODUCE(J),'%6.2f'),
@NEWLINE( 1));
@WRITE(' TOTAL:',32*' ','$', @FORMAT(OBJ,'%6.2f'), @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX2);
ENDCALC
END

121
C2-B3 Solving Problems with LINGO Capital Analysis | Case 2 | Finance

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
CAPITAL NECESSARY:
Y1 Y2 Y3 Y4 Y5
P1 75.0000 25.0000 20.0000 15.0000 10.0000
P2 90.0000 35.0000 0.00000 0.00000 30.0000
DATA:
P3 60.0000
CAPITAL 15.0000 15.0000 15.0000 15.0000
NECESSARY:
P4 30.0000 Y1 20.0000 Y2 10.0000 Y3 5.00000Y4 5.00000Y5
P5 100.000 25.0000 20.0000 20.0000 20.0000
P1 75.0000 25.0000 20.0000 15.0000 10.0000
P6 50.0000 20.0000 10.0000 30.0000 40.0000
P2 90.0000 35.0000 0.00000 0.00000 30.0000
DATA:
P3 60.0000 15.0000 15.0000 15.0000 15.0000
CAPITAL
CAPITAL NECESSARY:
AVAILABLE:
P4
Y1 30.0000
250.000Y1 20.0000 Y2 10.0000 Y3 5.00000
Y4 5.00000 Y5
P5
P1 100.000
Y2 75.0000 25.0000 20.0000 20.0000
75.0000 25.0000 20.0000 15.0000 10.0000 20.0000
P6
P2 50.0000 20.0000 0.00000
Y3 50.0000 35.0000
90.0000 10.0000 0.00000
30.0000 30.0000
40.0000
P3 60.0000
Y4 50.0000 15.0000 15.0000 15.0000 15.0000
CAPITAL
P4 AVAILABLE:
Y5 30.0000
50.0000 20.0000 10.0000 5.00000 5.00000
P5 250.000
Y1 100.000 25.0000 20.0000 20.0000 20.0000
NPV: 50.0000 20.0000 10.0000 30.0000 40.0000
P6
Y2 75.0000
Y3
P1 50.0000
141.000
CAPITAL
Y4 AVAILABLE:
P2 50.0000
187.000
Y1
Y5 250.000
P3 50.0000
121.000
Y2
P4 75.0000
83.0000
Y3 50.0000
P5 265.000
NPV:
Y4 50.0000
P6 141.000
P1 127.000
Y5 50.0000
P2 187.000
SOLUTION:
P3 121.000
NPV:
Global optimal solution found.
P4 83.0000
P1 141.000
Objective
P5 265.000 value: 489.000
P2 187.000
Objective
P6 127.000 bound: 489.000
Infeasibilities:
P3 121.000 0.00000
Total
P4 solver
83.0000
SOLUTION
❖SOLUTION: iterations: 70
P5 265.000
Global
Below isoptimal solution
the solution achievedfound.
by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
P6 127.000
Objective value:
Model Class: LP 489.000
Objective bound: 489.000
SOLUTION:
Infeasibilities:
IDEAL OPERATION
Global PROGRAM:found.
optimal solution
0.00000
Total solver
SELECTED
Objective iterations:
PROJECTS:
value: 489.000 70
. P1 Year:
Objective Y1 = Net Present Value: $141.00
bound: 489.000
. P4 Year:
Infeasibilities:Y4 = Net Present Value: $ 83.00
0.00000
Model
. P5 Class:
Year: PILP
Y5 =
Total solver iterations: Net Present Value: $265.00 70
TOTAL: $489.00
IDEAL OPERATION PROGRAM:
SELECTED
Model Class:PROJECTS:
PILP
. P1 Year: Y1 = Net Present Value: $141.00
.IDEAL
P4 Year: Y4 PROGRAM:
OPERATION = Net Present Value: $ 83.00
.SELECTED
P5 Year: Y5 = Net Present Value: $265.00 1
PROJECTS:
TOTAL:
. P1 Year: Y1 = Net Present Value: $141.00 $489.00
. P4 Year: Y4 = Net Present Value: $ 83.00
. P5 Year: Y5 = Net Present Value: $265.00
TOTAL: $489.00

122
C2-B3 Solving Problems with LINGO Project Selection | Case 3 | Finance

GOAL

3
In this example the expectation is to obtain the lowest cost project, considering the different
attributes of each one, such as: number of beds, bath, footage and cost.

The information used in the model is described below:

Projects Beds Baths SQFT Cost


Blocks
P1 5 4 6,200 559,608
• Product Mix
P2 2 1 820 151,826
• Blend
P3 1 1 710 125,943
• Finance
P4 4 3 4,300 420,801
• Investments
P5 4 2 3,800 374,751
• Diet
P6 3 1 2,200 251,674
• Aviation
P7 3 2 3,400 332,426
• Transport
• Agriculture The model needs to estimate a value for each project that will be used in the objective ( est )
function.
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Business

Source:
• Book 4
• Costing

123
C2-B3 Solving Problems with LINGO Project Selection | Case 3 | Finance
MODEL:
SETS:
PROJECTS: BEDS , BATHS, SQFT, COST, EST;
ENDSETS
DATA:
PROJECTS, BEDS, BATHS, SQFT, COST =
P1 5 4 6200 559608
P2 2 1 820 151826
P3 1 1 710 125943
P4 4 3 4300 420801
P5 4 2 3800 374751
P6 3 1 2200 251674
77 3 2 3400 332426;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @MAX( PROJECTS: @ABS( COST - EST));
@FOR( PROJECTS: EST = A0 + A1 * BEDS + A2 * BATHS + A3 * SQFT);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " BATHS:", @NEWLINE( 1));
@TABLE(BATHS);
@WRITE(" ", @NEWLINE( 1), " BEDS:", @NEWLINE( 1));
@TABLE(BEDS);
@WRITE(" ", @NEWLINE( 1), " SQUARE FEET:", @NEWLINE( 1));
@TABLE(SQFT);
@WRITE(" ", @NEWLINE( 1), " PROJECT COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1));
@WRITEFOR( PROJECTS( J) : ' ',
@FORMAT(PROJECTS(J),'-3s'),' Baths:',
@FORMAT(BATHS( J),'%1.0f'),' Beds:',
@FORMAT(BEDS( J), '%1.0f'),' Square feet:',
@FORMAT(SQFT( J), '%4.0f'),' Cost: $',
@FORMAT(COST( J), '%6.0f'),' - Est: $',
@FORMAT(EST( J), '%6.0f'),' = Objective: $',
@FORMAT(COST( J) - EST( J), '%9.3f'),
@IF( @MIN(PROJECTS(J): SQFT(J)) #EQ# SQFT(J), ' Selected', ' No '),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE(1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

124
C2-B3 Solving Problems with LINGO Project Selection | Case 3 | Finance

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
BATHS:
P1 4.000000
P2 1.000000
P3 1.000000
P4 3.000000
P5 2.000000
P6 1.000000
P7 2.000000

BEDS:
P1 5.000000
P2 2.000000
P3 1.000000
P4 4.000000
P5 4.000000
P6 3.000000
P7 3.000000

SQUARE FEET:
P1 6200.000
P2 820.0000
P3 710.0000
P4 4300.000
P5 3800.000
P6 2200.000
P7 3400.000

PROJECT COST:
P1 559608.0
P2 151826.0
P3 125943.0
P4 420801.0
P5 374751.0
P6 251674.0
P7 332426.0

❖ SOLUTION
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOLUTION
Global optimal solution found.
SOLUTION
Objective value: 1426.660
Global optimal
Objective solution found.
bound: 1426.660
Objective value:
Infeasibilities: 1426.660
0.000000
Objective bound:
Total solver iterations: 1426.660
34
Infeasibilities: 0.000000
Total
Model solver
Class: iterations:
MILP 34

Model Class:
OPTIMAL MILP PROGRAM:
PLANNING
P1 Baths:4 Beds:5 Square feet:6200 Cost: $559608 - Est: $561035 = Objective: $-1426.660 No
OPTIMAL PLANNING
P2 Baths:1 PROGRAM:
Beds:2 Square feet: 820 Cost: $151826 - Est: $153253 = Objective: $-1426.660 No
P1
P3 Baths:4
Baths:1 Beds:5
Beds:1 Square
Square feet:6200
feet: 710 Cost:
Cost: $559608
$125943 -- Est:
Est: $561035
$124516 == Objective:
Objective: $-1426.660
$ 1426.660 No
Selected
P2
P4 Baths:1
Baths:3 Beds:2
Beds:4 Square
Square feet: 820
feet:4300 Cost:
Cost: $151826
$420801 -- Est:
Est: $153253
$419374 == Objective:
Objective: $-1426.660
$ 1426.660 No
No
P3
P5 Baths:1
Baths:2 Beds:1
Beds:4 Square
Square feet: 710
feet:3800 Cost:
Cost: $125943
$374751 -- Est:
Est: $124516
$375784 == Objective:
Objective: $$-1032.637
1426.660 Selected
No
P4
P6 Baths:3
Baths:1 Beds:4
Beds:3 Square
Square feet:4300
feet:2200 Cost:
Cost: $420801
$251674 -- Est:
Est: $419374
$250247 == Objective:
Objective: $$ 1426.660
1426.660 No
No
P5
P7 Baths:2
Baths:2 Beds:4
Beds:3 Square
Square feet:3800
feet:3400 Cost:
Cost: $374751
$332426 -- Est:
Est: $375784
$331461 == Objective:
Objective: $-1032.637
$ 965.237 No
No
P6 Baths:1 Beds:3 Square feet:2200 Cost: $251674 - Est: $250247 = Objective: $ 1426.660 No
P7 Baths:2 Beds:3 Square feet:3400 Cost: $332426 - Est: $331461 = Objective: $ 965.237 No

125
C2-B3 Solving Problems with LINGO Object Bundling Model | Case 4 | Finance

GOAL

4 A broker has eleven loans of size ranging from $55,000 to $910,000. The broker would like to
group the loans into packages so that each package has at least $1M in it, and the number of
packages is maximized;

Blocks Object Value ( $1M ) Range

• Product Mix A 910


• Blend
B 870
• Finance
C 810
• Investments
D 640
• Diet
• Aviation E 550

• Transport F 250 $55.000 $910.000


• Agriculture
G 120
• Construction
H 95
• Refinery
• Schedule I 55

• Cutting J 543

• Metallurgy K 449
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Business
• Bundling

Source:
• Book 4
• OBJBUNDL

126
C2-B3 Solving Problems with LINGO Object Bundling Model | Case 4 | Finance

MODEL:
SETS:
OBJECT: VALUE, OVER, IND;
OXO( OBJECT, OBJECT)| &1 #LE# &2: X;
ENDSETS
DATA:
OBJECT = A B C D E F G H I J K;
VALUE = 910 870 810 640 550 250 120 95 55 543 449;
! The value in each bundle must be >= PKSIZE;
PKSIZE = 1000;
ENDDATA
SUBMODEL MAX99:
! This method may be time consuming for more than 15 objects;
! Definition of variables;
! X( I, I) = 1 if object I is lowest numbered object in its package;
! X( I, J) = 1 if object j is assigned to package I;
! Maximize number of packages assembled;
[OBJ] MAX = @SUM( OBJECT( I): X( I, I));
@FOR( OBJECT( K):
! Each object can be assigned to at most one package;
@SUM( OXO( I, K): X( I, K)) <= 1;
! A package must be at least PSIZE in size;
@SUM( OXO( K, J): VALUE( J) * X( K, J)) - OVER( K) = PKSIZE * X( K, K););
! The X( I, J) must = 0 or 1;
@FOR( OXO( I, J): @BIN( X( I, J)););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), ' Object Value',@NEWLINE(1));
@FOR(OBJECT(I): @WRITE( ' ', @FORMAT(OBJECT(I),'6s'), ' ' ,
@FORMAT(VALUE(I),'%7.0f'),
@NEWLINE(1)));
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
@SOLVE(MAX99);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " PACKAGE: ", @NEWLINE( 1));
@WRITEFOR(OXO(I,J)|X(J,J) #EQ# 0 #AND# X(I,J) #GT# 0: ' Package: ',@NAME(X(I,J)), ' ',
@FORMAT(VALUE(I),'%4.0f'),' + ',
@FORMAT(VALUE(J),'%3.0f'),' = ',
@FORMAT(VALUE(I)+VALUE(J),'%4.0f'),' - 1000 = Over: ',
@FORMAT(VALUE(I)+VALUE(J)-1000,'%3.0f'),' ',
@NEWLINE(1));
@WRITE(' ',@NEWLINE(1));
@WRITE(' Note: ',@NEWLINE(1));
@WRITE(' As for the value of object B, the values of B+G+I were',@NEWLINE(1));
@WRITE(' added to meet the established premise of a minimum',@NEWLINE(1));
@WRITE(' value of 1000 for each package.',@NEWLINE(3));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX99);
ENDCALC
END

127
C2-B3 Solving Problems with LINGO Object Bundling Model | Case 4 | Finance

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
Object Value
A 910
B 870
C 810
D 640
E 550
F 250
G 120
H 95
I 55
J 543
K 449

SOLUTION
DATA: optimal solution found.
Global
Object
Objective Value
value: 5.000000
A 910
Objective
DATA: bound: 5.000000
B 870
Infeasibilities:
Object Value 0.000000
C 810
TotalA solver
D
910iterations:
640 59
BE 870
550
CF 810
250
ModelDG Class: 640
120MILP
EH 550
95
FI
PACKAGE: 250
55
GJ
Package: X(120A, H) 910 + 95 = 1005 - 1000 = Over:
543 5
HK
Package: 95
X(449B, G) 870 + 120 = 990 - 1000 = Over: -10
I
❖ SOLUTION
Package: X( 55B, I) 870 + 55 = 925 - 1000 = Over: -75
J
SOLUTION
Package: X(543C, F) 810 + 250 = 1060 - 1000 = Over: 60
BelowK is optimal
the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
449 solution
Package: X( D, K) 640 found.
Global + 449 = 1089 - 1000 = Over: 89
Objective X(
Package: value:
E, J) 550 + 543 = 1093 - 1000 =5.000000 Over: 93
SOLUTION
Objective bound: 5.000000
Global optimal solution found.
Infeasibilities: 0.000000
Note:
Objective value: 5.000000
Total
As forsolver iterations:
thebound:
value of object B, the values of 5.000000 B+G+I 59were
Objective
added to meet
Infeasibilities: the established premise of a minimum
0.000000
value
Total of 1000 for each package.
Model solver
Class: iterations:
MILP 59

PACKAGE:
Model Class:
Package: X( A,MILP
H) 910 + 95 = 1005 - 1000 = Over: 5
Package: X( B, G) 870 + 120 = 990 - 1000 = Over: -10
PACKAGE:
Package: X( B, I) 870 + 55 = 925 - 1000 = Over: -75
Package:
Package: X(
X( A,
C, H)
F) 910
810 ++ 250
95 =
= 1005
1060 -
- 1000
1000 =
= Over:
Over: 605
Package: X( B, G) 870 + 120 = 990 - 1000 = Over:
Package: X( D, K) 640 + 449 = 1089 - 1000 = Over: 89 -10
Package:
Package: X(
X( B,
E, I)
J) 870
550 ++ 543
55 = 925 -
= 1093 - 1000
1000 =
= Over:
Over: -75
93
Package: X( C, F) 810 + 250 = 1060 - 1000 = Over: 60
Package:
Note: X( D, K) 640 + 449 = 1089 - 1000 = Over: 89
Package: X( value
As for the E, J) of550 + 543
object B,= the
1093 - 1000
values of=B+G+I
Over:were
93
added to meet the established premise of a minimum
Note:
value of 1000 for each package.
As for the value of object B, the values of B+G+I were
added to meet the established premise of a minimum
value of 1000 for each package.

128
BLOCK 4 Block: DIET

What types of food should be selected for school meal composition, obeying minimum nutrition criteria at
the lowest cost?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

129
C2-B4 Solving Problems with LINGO Diet Preparation for Children | Case 1 | Diet

GOAL ✖

1 Four types of food are available in the preparation of a group of children: chocolate biscuit,
ice cream, soda and cheese pie.

The composition of these foods and their cost per serving are available below:

Blocks Formula Biscuit Ice Cream Soda Cheese Pie Available


• Product Mix
Calories cal 400 200 150 500 500
• Blend
• Finance Chocolate g 3 2 0 0 6

• Investments
Sugar g 2 2 2 4 10
• Diet
• Aviation FAT g 2 4 1 5 8

• Transport
Cost $ 0.50 0.20 0.30 0.80 -
• Agriculture
• Construction Children should eat at least 500 Calories, 6 g of Chocolate, 10 g of Sugar, and 8 g of FAT.
Formulate the problem so that the cost is minimized
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Formula
• Blend

Source:
• Book 11
• Slide 30

130
C2-B4 Solving Problems with LINGO Diet Preparation for Children | Case 1 | Diet

MODEL:
SETS:
COMPOSITION :;
RESOURCE: AVAILABLE, COST, PRODUCE;
RXP( COMPOSITION, RESOURCE) : FORMULA;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, COST, AVAILABLE =
BISCUIT 0.50 500
ICE_CREAM 0.20 6
SODA 0.30 10
CHEESE_PIE 0.8 8;
! Composition attributes;
COMPOSITION =
CALORIES
CHOCOLATE
SUGAR
FAT ;

! Required Biscuit Ice_cream Soda Cheese pie;


FORMULA = 400 200 150 500 ! Calories;
3 2 0 0 ! Chocolate;
2 2 2 4 ! Sugar;
2 4 1 5; ! fat;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM( RESOURCE( p): COST( p) * PRODUCE( p));
! The available constraint;
@FOR( RESOURCE( r):
[AVA] @SUM( COMPOSITION( p): FORMULA( r, p) * PRODUCE( p )) >= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (cal,g,g,g)):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (cal,g,g,g)):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " COST p/un:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL DIET PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RESOURCE( J)| PRODUCE( J) #GT# 0: ' ',
@FORMAT(RESOURCE( J),'-10s'),
@FORMAT(PRODUCE( J),'%6.0f'),' un x unit cost: $',
@FORMAT(COST( J), '%4.2f'),' = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%4.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

131
C2-B4 Solving Problems with LINGO Diet Preparation for Children | Case 1 | Diet

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (cal,g,g,g)):
BISCUIT ICE_CREAM SODA CHEESE_PIE
CALORIES 400.0000 200.0000 150.0000 500.0000
CHOCOLATE 3.000000 2.000000 0.000000 0.000000
SUGAR 2.000000 2.000000 2.000000 4.000000
FAT 2.000000 4.000000 1.000000 5.000000
DATA:
AVAILABLE(cal,g,g,g)):
FORMULA (cal,g,g,g)):
BISCUIT
DATA: 500.0000
BISCUIT ICE_CREAM SODA CHEESE_PIE
ICE_CREAM
FORMULA 6.000000
(cal,g,g,g)):
CALORIES 400.0000 200.0000 150.0000 500.0000
SODA 10.00000
BISCUIT ICE_CREAM SODA CHEESE_PIE
CHOCOLATE
CHEESE_PIE
3.000000
8.000000
2.000000 0.000000 0.000000
CALORIES
SUGAR 400.0000
2.000000 200.0000
2.000000 150.0000
2.000000 500.0000
4.000000
CHOCOLATE
FAT 3.000000
2.000000 2.000000
4.000000 0.000000
1.000000 0.000000
5.000000
COST p/un:
SUGAR 2.000000 2.000000 2.000000 4.000000
BISCUIT 0.5000000
FAT
AVAILABLE 2.000000
(cal,g,g,g)): 4.000000 1.000000 5.000000
ICE_CREAM 0.2000000
BISCUIT
SODA 500.0000
0.3000000
AVAILABLE
ICE_CREAM
CHEESE_PIE(cal,g,g,g)):
6.000000
0.8000000
BISCUIT
SODA 500.0000
10.00000
ICE_CREAM
SOLUTION:
CHEESE_PIE 6.000000
8.000000
SODA optimal 10.00000
Global solution found.
CHEESE_PIE
Objective
COST 8.000000
p/un:value: 1.000000
Infeasibilities: 0.000000
BISCUIT 0.5000000
COST p/un:
ICE_CREAM 0.2000000
Model
BISCUIT Class: LP0.5000000
SODA 0.3000000
ICE_CREAM
CHEESE_PIE
❖ SOLUTION 0.2000000
0.8000000
IDEAL
SODA DIET PROGRAM: 0.3000000
ICE_CREAM
Below 5 un by
is the solution achieved
CHEESE_PIE x LINGO
0.8000000 unit with
cost: $0.20 =0, and
infeasibilities Total: $1.00report that makes up the optimal solution.
the detailed
SOLUTION:
Global optimal solution found.
SOLUTION:
Objective value: 1.000000
Global optimal solution found.
Infeasibilities: 0.000000
Objective value: 1.000000
Infeasibilities: 0.000000
Model Class: LP
Model Class: LP
IDEAL DIET PROGRAM:
ICE_CREAM 5 un x unit cost: $0.20 = Total: $1.00
IDEAL DIET PROGRAM:
ICE_CREAM 5 un x unit cost: $0.20 = Total: $1.00

1
132 1
C2-B4 Solving Problems with LINGO Daily Nutrition | Case 2 | Diet

GOAL

2
It is known that milk, meat and eggs provide the amounts of vitamins reported in the table below:

Vitamin A Vitamin B Vitamin C Cost


Formula
(mg) (mg) (mg) ($)
Blocks
Milk L 0.25 2.0 10.0 2.20
• Product Mix
• Blend Meat kg 25.0 20.0 10.0 17.00
• Finance
• Investments Eggs 12un 2.5 200.0 10.0 4.20
• Diet
• Aviation Required mg 1.0 50.0 19.0

• Transport
• Agriculture Calculate the amount of milk, meat and eggs that meets the basic daily needs of nutrients at a
minimal cost
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Formula
• Blend
• Vitamins

Source:
• Book 2
• Page 226

133
C2-B4 Solving Problems with LINGO Daily Nutrition | Case 2 | Diet

MODEL:
SETS:
COMPOSITION : COST;
RESOURCE: REQUIRED, PRODUCE;
RXP( COMPOSITION, RESOURCE) : FORMULA;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, REQUIRED =
VIT_A 1
VIT_B 50
VIT_C 19;
! Composition attributes;
COMPOSITION, COST =
MILK 2.20
CARNE 17.00
OVOS 4.20;
! Formula in mg MILK (L) CARNE (kg) OVOS (12);
FORMULA = 0.25 2 10 ! VIT_A;
25 20 10 ! VIT_B;
2.50 200 10; ! VIT_C;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( RESOURCE( p): COST( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( COMPOSITION( p): FORMULA( r, p) * PRODUCE( p )) >= REQUIRED( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (mg)):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " REQUIRED (mg)):", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " COST ($):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN2);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL DIET PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( COMPOSITION( J)| PRODUCE( J) #GT# 0: ' ',
@FORMAT(COMPOSITION( J),'-8s'),
@FORMAT(PRODUCE( J),'%6.3f'),@IF(J #EQ# 1,' L ', @IF(J #EQ# 3, ' un',' kg')),' x Unit cost: $',
@FORMAT(COST( J), '%5.2f'),' = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%4.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

134
C2-B4 Solving Problems with LINGO Daily Nutrition | Case 2 | Diet

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (mg)):
VIT_A VIT_B VIT_C
MILK 0.250000 2.000000 10.00000
BEEF 25.00000 20.00000 10.00000
EGGS 2.500000 200.0000 10.00000
DATA:
REQUIRED (mg)):
FORMULA (mg)):
VIT_A 1.000000
DATA: VIT_A
VIT_B 50.00000 VIT_B VIT_C
MILK 19.00000
FORMULA
VIT_C 0.250000
(mg)): 2.000000 10.00000
BEEF 25.00000
VIT_A 20.00000
VIT_B 10.00000
VIT_C
EGGS
MILK($):2.500000
COST 0.250000 200.0000
2.000000 10.00000
10.00000
MILK
BEEF 2.200000
25.00000 20.00000 10.00000
REQUIRED
BEEF
EGGS (mg)):
17.00000
2.500000 200.0000 10.00000
EGGS
VIT_A 4.200000
1.000000
VIT_B 50.00000
REQUIRED (mg)):
SOLUTION:
VIT_C
VIT_A 19.00000
1.000000
Global optimal solution found.
VIT_B 50.00000
Objective
COST ($): value: 5.577315
VIT_C 19.00000
Infeasibilities: 0.000000
MILK 2.200000
BEEF ($):
COST 17.00000
Model Class: LP
EGGS
MILK 4.200000
2.200000
❖ SOLUTION
BEEF DIET
IDEAL 17.00000
PROGRAM:
Below is
SOLUTION:
EGGS the solution
4.200000 achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
MILK 1.930 L x Unit cost: $ 2.20 = Total: $4.25
Global
BEEF optimal
0.069 kg x Unitfound.
solution cost: $17.00 = Total: $1.17
Objective value:
SOLUTION:0.038 un x Unit cost: $ 4.20 = Total: $0.16
EGGS 5.577315
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 5.577315
Model Class:
Infeasibilities: LP 0.000000

IDEAL
Model DIET PROGRAM:
Class: LP
MILK 1.930 L x Unit cost: $ 2.20 = Total: $4.25
BEEF 0.069
IDEAL DIET kg x
PROGRAM: Unit cost: $17.00 = Total: $1.17
EGGS
MILK 0.038
1.930 Lun xx Unit
Unit cost:
cost: $$ 2.20
4.20 == Total:
Total: $0.16
$4.25
BEEF 0.069 kg x Unit cost: $17.00 = Total: $1.17
EGGS 0.038 un x Unit cost: $ 4.20 = Total: $0.16

135
C2-B4 Solving Problems with LINGO Diet for good Health | Case 3 | Diet

GOAL

3 Suppose that, for justifiable reasons, a diet is restricted to skimmed milk, lean beef, fish meat
and a salad of well-known composition.

Formula Milk (L) Meat (kg) Fish (kg) Salad (100 g) Daily Need

Blocks
Vitamin A mg 2.0 2.0 20.0 20.0 11.0
• Product Mix
• Blend
Vitamin B mg 50.0 20.0 10.0 30.0 70.0
• Finance
• Investments Vitamin C mg 80.0 70.0 10.0 80.0 250.0
• Diet
Cost $ 2.00 4.00 1.50 1.00 -
• Aviation
• Transport
It is also known that nutritional requirements are expressed in terms of vitamins A, C and D
• Agriculture and controlled by their minimum amounts (in milligrams), since they are indispensable to the
• Construction health of the person who are undergoing the diet.

• Refinery In the details it boils down to the amount of each vitamin in food availability and its daily
• Schedule requirement for a person's good health.

• Cutting Formulate the program to optimize the resources involved


• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Formula
• Vitamins

136
C2-B4 Solving Problems with LINGO Diet for good Health | Case 3 | Diet

MODEL:
SETS:
PRODUCT :COST, PRODUCE;
RESOURCE:NEED;
RXP( RESOURCE, PRODUCT ) : FORMULA;
ENDSETS
DATA:
! Products attributes;
PRODUCT, COST =
MILK 2
MEAT 4
FISH 1.5
SALAD 1;
! Resources attributes;
RESOURCE, NEED =
VIT_A 11
VIT_B 70
VIT_C 250;
! Required (mg) Milk Meat Fish Salad;
FORMULA = 2 2 10 20 ! VIT_A;
50 20 10 30 ! VIT_B;
80 70 10 80; ! VIT_C;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! The Minimum Required Constraints;
@FOR( RESOURCE( r):
@SUM( PRODUCT( p): FORMULA( r, p) * PRODUCE( p )) >= NEED( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (mg)):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " DAILY NEED (mg)):", @NEWLINE( 1));
@TABLE(NEED);
@WRITE(" ", @NEWLINE( 1), " COST per (L,kg, kg,100g):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL DIET PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-8s'),
@FORMAT(PRODUCE( J),'%5.3f'),' Grams x Unit cost: $',
@FORMAT(COST( J), '%4.2f'), ' = Total: $',
@FORMAT(COST( J) * produce( J),'%5.3f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

137
C2-B4 Solving Problems with LINGO Diet for good Health | Case 3 | Diet

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (mg)):
MILK MEAT FISH SALAD
VIT_A 2.000000 2.000000 10.00000 20.00000
VIT_B 50.00000 20.00000 10.00000 30.00000
VIT_C 80.00000 70.00000 10.00000 80.00000

DAILY NEED (mg)):


VIT_A 11.00000
VIT_B 70.00000
VIT_C 250.0000
DATA:
FORMULA
COST per(mg)):
(L,kg, kg,100g):
DATA:
MILK MILK
2.000000 MEAT FISH SALAD
FORMULA (mg)):
MEAT 4.000000
VIT_A 2.000000 2.000000 10.00000 20.00000
FISH MILK
1.500000 MEAT FISH SALAD
VIT_B 50.00000 20.00000 10.00000 30.00000
VIT_A
SALAD 2.000000
1.000000 2.000000 10.00000 20.00000
VIT_C 80.00000 70.00000 10.00000 80.00000
VIT_B 50.00000 20.00000 10.00000 30.00000
VIT_C 80.00000 70.00000 10.00000 80.00000
SOLUTION:
DAILY NEED (mg)):
Global
VIT_A optimal
11.00000 solution found.
DAILY NEED value:
Objective (mg)): 3.125000
VIT_B 70.00000
VIT_A 11.00000
Infeasibilities: 0.000000
VIT_C 250.0000
VIT_B 70.00000
VIT_C Class:
Model 250.0000
LP
COST per (L,kg, kg,100g):
MILK 2.000000
COST
IDEALperDIET(L,kg, kg,100g):
PROGRAM:
MEAT
SALAD 4.000000
3.125 Grams x Unit cost: $1.00 = Total: $3.125
MILK 2.000000
FISH 1.500000
MEAT
❖ SOLUTION 4.000000
SALAD 1.000000
FISH 1.500000
Below
SALADis the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
1.000000
SOLUTION:
Global optimal solution found.
SOLUTION:
Objective
Global value:
optimal solution found. 3.125000
Infeasibilities:
Objective value: 0.000000
3.125000
Infeasibilities: 0.000000
Model Class: LP
Model Class: LP
IDEAL DIET PROGRAM:
SALAD DIET
IDEAL 3.125 Grams x Unit cost: $1.00 = Total: $3.125
PROGRAM:
SALAD 3.125 Grams x Unit cost: $1.00 = Total: $3.125

138
C2-B4 Solving Problems with LINGO Rationale for Pig Filling | Case 4 | Diet

GOAL

4
The unit requirements of a pig fattening ration are those indicated in the MINREQ table, per kg of
feed.

To achieve these specific values, up to 50% of the requirements of Methionine for Cystine can be
substituted. In addition, a ratio of 1.5 to 2 : 1, and 1.5 to 2.0 parts of Calcium to 1 part of
Phosphorus, must be obeyed for the amount of Calcium and Phosphorus.
Blocks
The food used to make the feed, as well as its nutrient content and price are shown below:
• Product Mix
• Blend
Formula Corn Sorghum Soy-Flour Blood-Flour Bone-Flour Required
• Finance
• Investments Protein g 100.0 0.90 260.0 930.0 0 0.14

• Diet Methionine g 10.0 13.0 20.0 10.6 0 2.2


• Aviation
Cis-Tina g 1.5 1.6 6.5 11.5 0 2.2
• Transport
• Agriculture Calcium g 1.0 0.3 2.9 0.7 308.5 8.0

• Construction Phosphor g 2.5 3.0 10.5 11.2 141.3 4.0


• Refinery
Cost p/kg $ 1.20 0.96 2.30 4.30 1.83 -
• Schedule
• Cutting The objective is to determine the composition of ration that offers the minimum possible cost per
• Metallurgy kilo, taking into account the requirements placed in the formula.

• Fertilizer Elaborate a model of Linear Programming to achieve this goal.


• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Formula
• Vitamins

Source:
• Book 11
• Ex.: 20

139
C2-B4 Solving Problems with LINGO Rationale for Pig Filling | Case 4 | Diet

MODEL:
SETS:
COMPOSITION: MINREQ ;
RESOURCE: COST, PRODUCE;
RXP( COMPOSITION, RESOURCE) : FORMULA;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, COST =
CORN 1.20
SORGHUM 0.96
SOYFLOUR 2.30
BLOODFLOUR 4.30
BONEFLOUR 1.83;

! Composition attributes;
COMPOSITION, MINREQ =
PROTEIN 0.14
METHIONINE 2.2
CISTINA 2.2
CALCIUM 8.0 ! Ratio 2 : 1 or 2 parts Calcium from 1 part Phosphor;
PHOSPHOR 4.0;

! Required CORN SORGHUM SOYFLOUR BLOODFLOUR BONEFLOUR;


FORMULA = 100.0 0.90 260.0 930.0 0.00 ! PROTEIN (g/);
10.0 13.0 20.0 10.6 0.00 ! METHIONINE (g);
1.50 1.60 6.50 11.5 0.00 ! CISTINA (g);
1.00 0.30 2.90 0.70 308.5 ! CALCIUM (g);
2.50 3.00 10.5 11.2 141.3; ! PHOSPHOR (g);
ENDDATA
SUBMODEL MIN4:
[OBJ] MIN = @SUM( RESOURCE( p): COST( p) * PRODUCE( p));
! The Minimum Required Constraints;
@FOR( RESOURCE( r):
@SUM( COMPOSITION( p): FORMULA( r, p) * PRODUCE( p )) >= MINREQ( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (g):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " MINIMUM REQUIRED (g):", @NEWLINE( 1));
@TABLE(MINREQ);
@WRITE(" ", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN4);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL DIET PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RESOURCE( J)| PRODUCE( J) #GT# 0: ' ',
@FORMAT(RESOURCE( J),'-10s'),' ',
@FORMAT(PRODUCE( J),'%4.2f'),' kg x Unit cost: $',
@FORMAT(COST( J), '%4.2f'),' = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%4.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN4);
ENDCALC
END

140
C2-B4 Solving Problems with LINGO Rationale for Pig Filling | Case 4 | Diet

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (g):
CORN SORGHUM SOYFLOUR BLOODFLOUR BONEFLOUR
DATA:
PROTEIN 100.0000 0.9000000 260.0000 930.0000 0.000000
METHIONINE
FORMULA (g): 10.00000 13.00000 20.00000 10.60000 0.000000
CISTINA
DATA: 1.500000
CORN 1.600000
SORGHUM 6.500000 SOYFLOUR11.50000BLOODFLOUR 0.000000
BONEFLOUR
CALCIUM
FORMULA
PROTEIN(g): 1.000000
100.0000 0.3000000
0.9000000 2.900000
260.0000 0.7000000
930.0000 308.5000
0.000000
PHOSPHOR
METHIONINE 2.500000
CORN
10.00000 3.000000
SORGHUM
13.00000 10.50000
SOYFLOUR 11.20000
20.00000 BLOODFLOUR10.60000 141.3000
BONEFLOUR
0.000000
PROTEIN
CISTINA 100.0000
1.500000 0.9000000
1.600000 260.0000
6.500000 930.0000
11.50000 0.000000
0.000000
MINIMUM REQUIRED (g):
METHIONINE
CALCIUM 10.00000
1.000000 13.00000
0.3000000 20.00000
2.900000 10.60000
0.7000000 0.000000
308.5000
PROTEIN 0.1400000
CISTINA
PHOSPHOR
METHIONINE 1.500000
2.500000
2.200000 1.600000
3.000000 6.500000
10.50000 11.50000
11.20000 0.000000
141.3000
CALCIUM
CISTINA 1.000000
2.200000 0.3000000 2.900000 0.7000000 308.5000
PHOSPHOR
MINIMUM
CALCIUM REQUIRED 2.500000
(g):
8.000000 3.000000 10.50000 11.20000 141.3000
PROTEIN
PHOSPHOR 0.1400000
4.000000
METHIONINE
MINIMUM REQUIRED 2.200000
(g):
CISTINA
COST:
PROTEIN 2.200000
0.1400000
CORN
CALCIUM
METHIONINE 1.200000
8.000000
2.200000
SORGHUM
PHOSPHOR
CISTINA 0.960000
4.000000
2.200000
SOYFLOUR
CALCIUM 2.300000
8.000000
BLOODFLOUR
COST: 4.300000
PHOSPHOR 4.000000
BONEFLOUR 1.830000
CORN 1.200000
SORGHUM
COST:
SOLUTION: 0.960000
SOYFLOUR
CORN
Global 2.300000found.
1.200000
optimal solution
BLOODFLOUR
SORGHUM
Objective value: 4.300000
0.960000 0.820095
BONEFLOUR
SOYFLOUR
Infeasibilities: 1.830000
2.300000 0.000000
❖ SOLUTION
BLOODFLOUR 4.300000
SOLUTION:
Model Class:
BONEFLOUR
Below LP 1.830000
is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
IDEAL DIET value:
Objective
SOLUTION: PROGRAM: 0.820095
SOYFLOUR
Infeasibilities: 0.34 kg x Unit cost: $2.30 = Total: $0.78
0.000000
Global optimal solution found.
BONEFLOUR 0.02 kg x Unit cost: $1.83 = Total: $0.04
Objective value: 0.820095
Model Class:
Infeasibilities: LP 0.000000

IDEAL Class:
Model DIET PROGRAM:
LP
SOYFLOUR 0.34 kg x Unit cost: $2.30 = Total: $0.78
BONEFLOUR
IDEAL 0.02 kg
DIET PROGRAM: x Unit cost: $1.83 = Total: $0.04
SOYFLOUR 0.34 kg x Unit cost: $2.30 = Total: $0.78
BONEFLOUR 0.02 kg x Unit cost: $1.83 = Total: $0.04

1
141
C2-B4 Solving Problems with LINGO Diet Planning | Case 5 | Diet

GOAL

5
Suppose, for nutritional reasons, that a person has entered the Academy to lose weight and
acquire a more defined bodybuilding, when consulting the nutritionalist, he received a diet for
weight reduction and gain of lean mass. It intends to ingest the nutrients needed to maintain health
by minimizing the number of calories. Consider the formula below, as it should be her diet.

Blocks
Portion (100 g) Protein (g) Carbo (g) Lipids (g) Calories (kcal)
• Product Mix
• Blend Rice 2.6 25.8 1.0 123.5
• Finance
Eggs 13.3 0.6 9.5 145.7
• Investments
• Diet
Chicken 32.0 0 2.5 159.2
• Aviation
• Transport Meat 35.9 0 7.3 219.3
• Agriculture
Manioc 0.6 30.1 0.2 119.0
• Construction
• Refinery
Bean 4.8 13.6 0.5 76.4
• Schedule
• Cutting Required (g) 100.0 100.0 11.0 -

• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Formula
• Vitamins

142
C2-B4 Solving Problems with LINGO Diet Planning | Case 5 | Diet

MODEL:
SETS:
COMPOSITION : MINREQ;
RESOURCE: CALORIES, PRODUCE;
RXP( RESOURCE, COMPOSITION) : FORMULA;
ENDSETS
DATA:
! Resources attributes (CALORIES FOR EACH PORTION OF 100 g);
RESOURCE, CALORIES =
RICE 123.5
EGGS 145.7
CHICKEN 159.2
BEEF 219.3
MANIOC 119.0
BEAN 76.4;

! Composition attributes (g);


COMPOSITION, MINREQ =
PROTEIN 100
CARBO 320
LIPIDS 11;

! Required PROTEIN CARBO LIPIDs;


FORMULA = 2.6 25.8 1 ! RICE;
13.3 0.6 9.5 ! EGGS;
32.0 0 2.5 ! CHICKEN;
35.9 0 7.3 ! BEEF;
0.6 30.1 0.20 ! MANIOC;
4.8 13.6 0.5; ! BEAN;
ENDDATA
SUBMODEL MIN5:
[OBJ] MIN = @SUM( RESOURCE( p): CALORIES( p) * PRODUCE( p));
! The Minimum Required Constraints;
@FOR( COMPOSITION( COL ):
@SUM( RESOURCE( LIN ): FORMULA( LIN, COL) * PRODUCE( LIN )) >= MINREQ( COL ););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (g)):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " MINIMUM REQUIRED (g):", @NEWLINE( 1));
@TABLE(MINREQ);
@WRITE(" ", @NEWLINE( 1), " CALORIES (kcal):", @NEWLINE( 1));
@TABLE(CALORIES);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN5);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL DIET PROGRAM: ", @NEWLINE( 1));
@WRITE(" REQUIRED:", @NEWLINE( 1));
@WRITEFOR( RESOURCE( J)| PRODUCE( J) #GT# 0: ' .',
@FORMAT(RESOURCE( J),'-8s'), ' ',
@FORMAT(PRODUCE( J),'%7.2f'),' Portions x',
@FORMAT(CALORIES( J), '%6.1f'),' Kcal = ',
@FORMAT(CALORIES( J) * PRODUCE( J),'%8.3f'),' Kcal',
@NEWLINE( 1));
@WRITE(" .Total ",34*'.',' ',@FORMAT(OBJ, '%8.3f'),' Kcal', @NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN5);
ENDCALC
END

143
C2-B4 Solving Problems with LINGO Diet Planning | Case 5 | Diet

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (gr)):
DATA: PROTEIN CARBO LIPIDS
RICE
FORMULA 2.600000
(g)): 25.80000 1.000000
EGGS 13.30000
PROTEIN 0.600000
CARBO9.500000
LIPIDS
CHICKEN
RICE 32.00000
2.600000 0.000000
25.80000 2.500000
1.000000
DATA:
BEEF 35.90000 0.000000 7.300000
EGGS
FORMULA 13.30000 0.600000 9.500000
MANIOC (g)):
0.600000 30.10000 0.200000
CHICKEN
BEAN
32.00000 0.000000
PROTEIN 13.60000
4.800000
2.500000
CARBO 0.500000
LIPIDS
BEEF
RICE 35.90000 25.80000
2.600000 0.000000 1.000000
7.300000
MANIOC REQUIRED
EGGS
MINIMUM 0.600000
13.30000 30.10000 9.500000
(gr): 0.600000 0.200000
BEAN
CHICKEN
PROTEIN 4.800000 0.000000
32.00000
100.0000 13.60000 2.500000
0.500000
BEEF
CARBO 35.90000
320.0000 0.000000 7.300000
MANIOC 0.600000
LIPIDS REQUIRED
MINIMUM 11.00000(g):30.10000 0.200000
BEAN
PROTEIN 4.800000
100.0000 13.60000 0.500000
CALORIES
CARBO (kcal):
320.0000
RICE
MINIMUM 123.5000
REQUIRED (g):
LIPIDS 11.00000
EGGS
PROTEIN 145.7000
100.0000
CHICKEN
CARBO 159.2000
320.0000
CALORIES
BEEF (kcal):
219.3000
LIPIDS 11.00000
RICE
MANIOC 123.5000
119.0000
EGGS
BEAN
CALORIES 145.7000
76.40000
(kcal):
CHICKEN 123.5000
RICE 159.2000
SOLUTION:
BEEF 219.3000
EGGS 145.7000
Global
MANIOCoptimal solution found.
119.0000
CHICKEN 159.2000
Objective
BEAN value:
76.40000 1736.739
BEEF 219.3000
Infeasibilities: 0.000000
MANIOC
❖ SOLUTION 119.0000
SOLUTION:
BEANis the
Model
Below Class: 76.40000
solutionLP
achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
SOLUTION:
Objective
IDEAL DIET value:
PROGRAM: 1736.739
Global optimal solution found.
Infeasibilities:
REQUIRED: 0.000000
Objective
.EGGS value:
0.049 x 145.7 Kcal = 1736.739
7.129 Kcal
Infeasibilities:
.MANIOCClass:1.355
Model LP x 119.0 Kcal 0.000000
= 161.241 Kcal
.BEAN 20.528 x 76.4 Kcal = 1568.369 Kcal
Model Class: LP
.Total ................................. 1736.739 Kcal
IDEAL DIET PROGRAM:
REQUIRED:
IDEAL DIET PROGRAM:
.EGGS
REQUIRED: 0.05 Portions x 145.7 Kcal = 7.129 Kcal
.MANIOC
.EGGS 1.35Portions
0.05 Portionsx x145.7
119.0 Kcal
Kcal = = 7.129
161.241 Kcal
Kcal
.BEAN
.MANIOC 20.53 Portionsx x119.0
1.35 Portions 76.4 Kcal
Kcal = =161.241
1568.369 Kcal
Kcal
.Total .................................
.BEAN 1736.739
20.53 Portions x 76.4 Kcal = 1568.369 Kcal
Kcal
.Total ................................. 1736.739 Kcal

144
C2-B4 Solving Problems with LINGO Diet Planning 2 | Case 6 | Diet

GOAL

6
To elaborate a model of Linear Programming, that satisfies the feeding needs of a determined
animal. In the table below the specifications follow:

Formula Protein (un/k) Carbo (un/k) Cost ($)


Blocks
• Product Mix RA 25 55 3.00
• Blend
• Finance RB 25 20 2.00
• Investments
• Diet RC 45 10 4.00

• Aviation
RD 35 35 3.00
• Transport
• Agriculture
RE 25 20 3.00
• Construction
• Refinery Required (un/k) 200 250 -
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Food
• Formula
• Vitamins

Source:
• Book 1
• Page 55

145
C2-B4 Solving Problems with LINGO Diet Planning 2 | Case 6 | Diet

MODEL:
SETS:
COMPOSITION : MINREQ;
RESOURCE: COST, PRODUCE;
RXP( RESOURCE, COMPOSITION) : FORMULA;
ENDSETS
DATA:
! Resources attributes (COST /k);
RESOURCE, COST =
RA 3.00
RB 2.00
RC 4.00
RD 3.00
RE 3.00;

! Composition attributes (k);


COMPOSITION, MINREQ =
PROTEIN 200
CARBO 250;

! Required (k) PROTEIN CARBO;


FORMULA = 25 55 ! RA;
25 20 ! RB;
45 10 ! RC;
35 35 ! RD;
25 20; ! RE;
ENDDATA
SUBMODEL MIN6:
[OBJ] MIN = @SUM( RESOURCE( p): COST( p) * PRODUCE( p));
! The Minimum Required Constraints;
@FOR( COMPOSITION( COL ):
[REQ] @SUM( RESOURCE( LIN ): FORMULA( LIN, COL) * PRODUCE( LIN )) >= MINREQ( COL ););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (un/k):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " MINIMUM REQUIRED (un/k):", @NEWLINE( 1));
@TABLE(MINREQ);
@WRITE(" ", @NEWLINE( 1), " COST per/k:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN6);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL DIET PROGRAM: ", @NEWLINE( 1));
@WRITE(" REQUIRED:", @NEWLINE( 1));
@WRITEFOR( RESOURCE( J)| PRODUCE( J) #GT# 0: ' .',
@FORMAT(RESOURCE( J),'-5s'),
@FORMAT(PRODUCE( J),'%4.2f'),' k x Unit Cost: $',
@FORMAT(COST( J), '%4.2f'),' = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%5.2f'), @NEWLINE( 1));
@WRITE(" Minimum cost: ",32*' ',' $',@FORMAT(OBJ, '%5.2f'), @NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN6);
ENDCALC
END

146
C2-B4 Solving Problems with LINGO Diet Planning 2 | Case 6 | Diet

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (un/k):
PROTEIN CARBO
RA 25.00000 55.00000
RB 25.00000 20.00000
RC 45.00000 10.00000
RD 35.00000 35.00000
RE 25.00000 20.00000
DATA:
FORMULA (un/k):
MINIMUM REQUIRED (un/k):
DATA: PROTEIN CARBO
PROTEIN
RA 25.00000 200.0000
FORMULA (un/k):55.00000
CARBO 250.0000
RB 25.00000
PROTEIN 20.00000 CARBO
RC
RA 45.00000
25.00000 10.00000
55.00000
COST per/k:
RD
RB 35.00000
25.00000 35.00000
20.00000
RA 3.000000
RE
RC 25.00000
45.00000 20.00000
10.00000
RB 2.000000
RD 35.00000 35.00000
RC 4.000000
MINIMUM
RE REQUIRED20.00000
25.00000
RD 3.000000 (un/k):
PROTEIN
RE 3.000000 200.0000
CARBO REQUIRED
MINIMUM 250.0000 (un/k):
PROTEIN 200.0000
SOLUTION:
CARBO
COST
Globalper/k: 250.0000
optimal solution found.
RA 3.000000
Objective value: 18.57143
COST
RB per/k:
2.000000
Infeasibilities: 0.000000
RA 4.000000
RC 3.000000
RB 3.000000
RD
Model 2.000000
Class: LP
RC 4.000000
RE 3.000000
❖ SOLUTION
RD 3.000000
IDEAL DIET PROGRAM:
RE is3.000000
REQUIRED:
SOLUTION:
Below the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
.RA
Global 2.57 k
optimal x Unit Cost:
solution found.$3.00 = Total: $ 7.71
SOLUTION:
.RB 5.43value:
Objective k x Unit Cost: $2.00 = Total: 18.57143
$10.86
Minimum optimal
Global cost: solution found.
Infeasibilities: $18.57
0.000000
Objective value: 18.57143
Infeasibilities:
Model Class: LP 0.000000

Model DIET
IDEAL Class: LP
PROGRAM:
REQUIRED:
IDEAL 2.57
.RA DIET kPROGRAM:
x Unit Cost: $3.00 = Total: $ 7.71
REQUIRED:
.RB 5.43 k x Unit Cost: $2.00 = Total: $10.86
.RA 2.57
Minimum k
cost: x Unit Cost: $3.00 = Total: $$18.57
7.71
.RB 5.43 k x Unit Cost: $2.00 = Total: $10.86
Minimum cost: $18.57

147
BLOCK 5 Block: AVIATION

What is the best distribution of cargo or the best alternative fuel supply per airport or better distribution of
seats by class and by aircraft, so as to minimize costs and maximize profit?

OTHER AVAILABLE BLOCKS

• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy

148
C2-B5 Solving Problems with LINGO Load Distribution | Case 1 | Aviation

GOAL

1 A cargo plane has four cargo compartments: Front, Center, Tail and Basement.The first three
can only receive cargo in containers, while the hold receives bulk material.

In order to balance the flight, it is essential that the load distribution be proportional between
the compartments.
Blocks
There are 3 types of containers and two types of bulk cargoes to load the aircraft. The 2 types
• Product Mix of bulk cargo can be transported together.
• Blend
The cargo distribution must meet the capacity constraints of the airplane. The information is
• Finance detailed below:
• Investments
Compartments Front Center Tail Bulk Dump
• Diet
• Aviation
Volume m3 0.50 1.00 0.25 1.00
• Transport
• Agriculture Cargo Weight ton 1.10 1.80 0.25 1.2 1.7

• Construction
Container ton 0.35 0.90 0.05
• Refinery
• Schedule
Capacity ton 7 7 6 3.5 3.5
• Cutting Aircraft
• Metallurgy Volume m3 35 55 30 30
• Fertilizer
Profit $ 200.00 220.00 175.00 235.00 180.00
• Clinic
• Classic To elaborate the problem of the linear programming that optimizes the distribution of the load in
• Dynamic order to maximize the profit of the flight of the freighter.

• Logistics
• Energy
• Assembly Line

Keywords:
• Load
• Transport

Source:
• Book 3
• Chapter 2.4.25

149
C2-B5 Solving Problems with LINGO Load Distribution | Case 1 | Aviation
MODEL:
SETS:
HEADER1 / PROD, LIMIT, VALUE /:;
RESOURCE: CAR_VOL, CAR_WEI, PROFIT, AIR_CAP, AIR_VOL, PRODUCE;
PXR (RESOURCE,HEADER1) : SLASUR1;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , CAR_VOL, CAR_WEI, PROFIT, AIR_CAP, AIR_VOL =
FRONT 0.5 1.1 200 7 35
CENTER 1 1.8 220 7 55
TAIL 0.25 0.25 175 6 30
BULK1 1 1.2 235 3.5 15
BULK2 1 1.7 180 3.5 15;
ENDDATA
SUBMODEL MAX1:
[OBJ] MAX = @SUM( RESOURCE( J): PROFIT( J) * PRODUCE( J));
! Load weight restrictions;
@FOR(RESOURCE(K): [CARWEI] PRODUCE(K) <= CAR_WEI(K));
! Weight restrictions by compartment;
@FOR(RESOURCE(C): [AIRCAP] PRODUCE(C) <= AIR_CAP(C));
! Restriction of space by compartment;
@FOR(RESOURCE(J): [AIRVOL] CAR_VOL(J) * PRODUCE(J) <= AIR_VOL(J));
!The equilibrium was not calculated, because for each type of aircraft, its weight distribution is predetermined by the manufacturer.;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " PROFIT BY TON ($):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " AIRCRAFT LOAD CAPACITY (Ton):", @NEWLINE( 1));
@TABLE(AIR_CAP);
@WRITE(" ", @NEWLINE( 1), " AIRCRAFT LOAD CAPACITY (Ton):", @NEWLINE( 1));
@TABLE(AIR_VOL);
@WRITE(" ", @NEWLINE( 1), " VOLUME OF LOAD (m3):", @NEWLINE( 1));
@TABLE(CAR_VOL);
@WRITE(" ", @NEWLINE( 1), " LOAD WEIGHT (Ton):", @NEWLINE( 1));
@TABLE(CAR_WEI);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL SUPPLY PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RESOURCE(J) : ' Load in: ',
@FORMAT(RESOURCE(J),'-6s'), ' ',
@FORMAT(PRODUCE(J),'%4.2f'), ' ton x unit profit: $',
@FORMAT(PROFIT(J),'%4.2f'), ' = Total: $',
@FORMAT(PRODUCE(J) * PROFIT(J),'%6.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

150
FRONT 7.000000
CENTER 7.000000
TAIL 6.000000
BULK1 3.500000
BULK2 3.500000
C2-B5 Solving Problems with LINGO Load Distribution | Case 1 | Aviation
AIRCRAFT LOAD CAPACITY (Ton):
FRONT 35.00000
CENTER 55.00000
❖ DATA
TAIL 30.00000
BULK1 15.00000and value attributes, which can be viewed below.
All problem data is organized in the data block as a set of members
BULK2 15.00000
DATA:
PROFIT BY TON ($): VOLUME OF LOAD (m3):
FRONT 200.0000 FRONT 0.500000
CENTER 220.0000 CENTER 1.000000
TAIL 175.0000 TAIL 0.250000
BULK1 235.0000 BULK1 1.000000
BULK2 180.0000 BULK2 1.000000

AIRCRAFT LOAD CAPACITY (Ton): LOAD WEIGHT (Ton):


FRONT 7.000000 FRONT 1.100000
CENTER 7.000000 CENTER 1.800000
TAIL 6.000000 TAIL 0.250000
BULK1 3.500000 BULK1 1.200000
BULK2 3.500000 BULK2 1.700000

AIRCRAFT LOAD CAPACITY (Ton): SOLUTION:


FRONT 35.00000 Global optimal solution found.
CENTER 55.00000 Objective value: 1247.750
TAIL 30.00000 Infeasibilities: 0.000000
BULK1 15.00000
BULK2 15.00000 IDEAL SUPPLY PROGRAM:
Load in: FRONT 1.10 ton x unit profit: $200.00 = Total: $220.00
VOLUME OF LOAD (m3): Load in: CENTER 1.80 ton x unit profit: $220.00 = Total: $396.00
FRONT 0.500000 Load in: TAIL 0.25 ton x unit profit: $175.00 = Total: $ 43.75
CENTER 1.000000 Load in: BULK1 1.20 ton x unit profit: $235.00 = Total: $282.00
TAIL 0.250000 Load in: BULK2 1.70 ton x unit profit: $180.00 = Total: $306.00
BULK1 1.000000
BULK2 1.000000 SLACK/SURPLUS LIMIT = CARGO WEIGHT:
PROD LIMIT VALUE
LOAD WEIGHT (Ton):
❖ SOLUTION FRONT 1.100000 1.100000 0.000000
FRONT 1.100000 CENTER 1.800000 1.800000 0.000000
Below is the 1.800000
CENTER solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
TAIL 0.250000 1
BULK1
SOLUTION: 1.200000
BULK2 1.700000
Global optimal solution found.
Objective value: 1247.750
SOLUTION:
Infeasibilities: 0.000000
Global optimal solution found.
Objective
IDEAL value:
SUPPLY PROGRAM: 1247.750
Infeasibilities:
Load in: FRONT 1.10 ton x unit profit: $200.00 = Total: 0.000000
$220.00
Load in: CENTER 1.80 ton x unit profit: $220.00 = Total: $396.00
IDEALin:
Load SUPPLY
TAIL PROGRAM:
0.25 ton x unit profit: $175.00 = Total: $ 43.75
Load in:
Load in: BULK1
FRONT 1.10 ton
1.20 ton xx unit
unit profit:
profit: $200.00
$235.00 == Total: $282.00
Total: $220.00
Load in: CENTER
Load in: BULK2 1.80 ton x unit profit:
1.70 ton x unit profit: $220.00
$180.00 == Total: $396.00
Total: $306.00
Load in: TAIL 0.25 ton x unit profit: $175.00 = Total: $ 43.75
Load in: BULK1LIMIT
SLACK/SURPLUS 1.20 ton x WEIGHT:
= CARGO unit profit: $235.00 = Total: $282.00
Load in: BULK2PROD1.70 ton x unit profit:
LIMIT VALUE $180.00 = Total: $306.00
FRONT 1.100000 1.100000 0.000000
SLACK/SURPLUS
CENTER LIMIT =1.800000
1.800000 CARGO WEIGHT:
0.000000
TAIL PROD 0.2500000
0.2500000 LIMIT VALUE
0.000000
FRONT
BULK1 1.100000
1.200000 1.100000
1.200000 0.000000
0.000000
CENTER
BULK2 1.800000
1.700000 1.800000
1.700000 0.000000
0.000000

SLACK/SURPLUS LIMIT = AIRCRAFT CAPACITY (ton): 1


PROD LIMIT VALUE
FRONT 1.100000 7.000000 -5.900000
CENTER 1.800000 7.000000 -5.200000
TAIL 0.2500000 6.000000 -5.750000
BULK1 1.200000 3.500000 -2.300000
BULK2 1.700000 3.500000 -1.800000

SLACK/SURPLUS LIMIT = AIRCRAFT CAPACITY (m3):


PROD LIMIT VALUE
FRONT 0.5500000 35.00000 151
-34.45000
CENTER 1.800000 55.00000 -53.20000
C2-B5 Solving Problems with LINGO Fuel Supply | Case 2 | Aviation

GOAL

2 An aviation company wants to buy fuel for its planes, which can be supplied at 5 Airports
served by it and in which the needs are 100, 200, 500, 800 and 100 thousand gallons.

The maximum fuel availability available in the four supplying companies in gallons is 1000,
1300, 400 and 1000 thousand.
Blocks
• Product Mix
Airport / Supplier S1 S2 S3 S4 Demand (gal)
• Blend
• Finance A $ 1.10 1.20 1.15 1.20 100,000
• Investments
B $ 1.25 1.20 1.22 1.30 200,000
• Diet
• Aviation C $ 1.30 1.25 1.27 1.25 500,000

• Transport D $ 1.20 1.21 1.21 1.20 800,000


• Agriculture
E $ 1.30 1.20 1.25 1.30 100,000
• Construction
• Refinery Capacity gal 1,000,000 1,300,000 400,000 1,000,000 -

• Schedule
• Cutting Are the fuel delivery cost detailed below, thereby determining the most economical
• Metallurgy purchasing scheme?

• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Fuel
• Purchase

Source:
• Book 1
• Page 193

152
C2-B5 Solving Problems with LINGO Fuel Supply | Case 2 | Aviation
MODEL:
SETS:
SUPPLIER: CAPACITY;
CONSUMER: DEMAND;
ROUTES( CONSUMER, SUPPLIER): COST, VOLUME;
ENDSETS
DATA:
! Capacity attributes (gal);
SUPPLIER, CAPACITY =
SUPPLIER_1 1000000
SUPPLIER_2 1300000
SUPPLIER_3 4000000
SUPPLIER_4 1000000;
! Consumer attributes (gal);
CONSUMER, DEMAND =
AIRPORT_A 100000
AIRPORT_B 200000
AIRPORT_C 500000
AIRPORT_D 800000
AIRPORT_E 100000;
! Cost required SUP1 SUP2 SUP3 SUP4;
COST = 1.10 1.20 1.15 1.20 ! Airport A;
1.25 1.20 1.22 1.30 ! Airport B;
1.30 1.25 1.27 1.25 ! Airport C;
1.20 1.21 1.21 1.20 ! Airport D;
1.30 1.20 1.25 1.30; ! Airport E;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
! Restrictions to ensure that the demand for each airport will be carried out;
@FOR(CONSUMER(I):
[DEM] @SUM(SUPPLIER(J): VOLUME(I,J)) = DEMAND(I););
! Restrictions to ensure the capacity of each supplier;
@FOR(SUPPLIER(J):
[CAP] @SUM(CONSUMER(I): VOLUME( I, J) + VOLUME( I, J)) <= CAPACITY(J););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " COST FOR GAL ($):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SUPPLY CAPABILITY (gal):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND (gal):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL SUPPLY PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' ',
@FORMAT(CONSUMER(I),'-9s'), ', ',
@FORMAT(SUPPLIER(J),'-8s'), ', Provides:',
@FORMAT(VOLUME( I, J),'%6.0f'),' Gal', ' x Unit profit:$',
@FORMAT(COST(I,J),'%4.2f'), ' = Total:$',
@FORMAT(COST(I, J) * VOLUME(I,J),'%9.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

153
C2-B5 Solving Problems with LINGO Fuel Supply | Case 2 | Aviation

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COST FOR GAL ($):
SUPPLIER_1 SUPPLIER_2 SUPPLIER_3 SUPPLIER_4
AIRPORT_A 1.100000 1.200000 1.150000 1.200000
AIRPORT_B 1.250000 1.200000 1.220000 1.300000
AIRPORT_C 1.300000 1.250000 1.270000 1.250000
AIRPORT_D 1.200000 1.210000 1.210000 1.200000
AIRPORT_E 1.300000 1.200000 1.250000 1.300000

SUPPLY CAPABILITY (gal):


SUPPLIER_1 1000000.
SUPPLIER_2 1300000.
SUPPLIER_3 400000.0
SUPPLIER_4 1000000.

DEMAND (gal):
AIRPORT_A 100000.0
AIRPORT_B 200000.0
AIRPORT_C 500000.0
AIRPORT_D 800000.0
AIRPORT_E 100000.0

SOLUTION:
Global optimal solution found.
Objective value: 2055500
Infeasibilities: 0.00000

AIRPORT_A, SUPPLIER_1, Provides: 100000 Gal x Cost per gallon:$ 1.10 = Total:$ 110000
AIRPORT_B, SUPPLIER_2, Provides: 200000 Gal x Cost per gallon:$ 1.20 = Total:$ 240000
❖ SOLUTION
AIRPORT_C, SUPPLIER_2, Provides: 350000 Gal x Cost per gallon:$ 1.25 = Total:$ 437500
AIRPORT_C,
Below is the SUPPLIER_4,
solution Provides:
achieved 150000
by LINGO Gal x Cost0,per
with infeasibilities and gallon:$ 1.25
the detailed = Total:$
report 187500
that makes up the optimal

SOLUTION: 1
Global optimal solution found.
Objective value: 2055500.
Infeasibilities: 0.000000

IDEAL SUPPLY PROGRAM:


AIRPORT_A, SUPPLIER_1, Provides:100000 Gal x Unit profit:$1.10 = Total:$110000.00
AIRPORT_B, SUPPLIER_2, Provides:200000 Gal x Unit profit:$1.20 = Total:$240000.00
AIRPORT_C, SUPPLIER_2, Provides:350000 Gal x Unit profit:$1.25 = Total:$437500.00
AIRPORT_C, SUPPLIER_4, Provides:150000 Gal x Unit profit:$1.25 = Total:$187500.00
AIRPORT_D, SUPPLIER_1, Provides:400000 Gal x Unit profit:$1.20 = Total:$480000.00
AIRPORT_D, SUPPLIER_3, Provides: 50000 Gal x Unit profit:$1.21 = Total:$ 60500.00
AIRPORT_D, SUPPLIER_4, Provides:350000 Gal x Unit profit:$1.20 = Total:$420000.00
AIRPORT_E, SUPPLIER_2, Provides:100000 Gal x Unit profit:$1.20 = Total:$120000.00

SLACK/SURPLUS LIMIT = CONSUMER DEMAND (gal):


PROD LIMIT VALUE
AIRPORT_A 100000.0 100000.0 0.000000
AIRPORT_B 200000.0 200000.0 0.000000
AIRPORT_C 500000.0 500000.0 0.000000
AIRPORT_D 800000.0 800000.0 0.000000
AIRPORT_E 100000.0 100000.0 0.000000

SLACK/SURPLUS LIMIT = SUPPLIER CAPACITY (gal):


PROD LIMIT VALUE
SUPPLIER_1 1000000. 1000000. 0.000000
SUPPLIER_2 1300000. 1300000. 0.000000
SUPPLIER_3 100000.0 4000000. -3900000.
SUPPLIER_4 1000000. 1000000. 0.000000

154
1
C2-B5 Solving Problems with LINGO Cargo Transport | Case 3 | Aviation

GOAL

3 A freight agent wants to set the next day's minimum cost schedule for cities A, B through
aircraft A1, A2 and A3.

The information below shows the maximum load of each aircraft, as well as the respective
cost, demands and limits.
Blocks
• Product Mix resources / Aircraft A1 A2 A3 Demand
• Blend
• Finance Maximum un 5 5 10
• Investments Containers Qty

• Diet Available un 10 15 20
• Aviation
A $ 20.00 25.00 35.00 100 un
• Transport
Cost City
• Agriculture
B $ 25.00 30.00 33.00 150 un
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Transport
• Load

Source:
• Book 1
• Page 196

155
C2-B5 Solving Problems with LINGO Cargo Transport | Case 3 | Aviation

MODEL:
SETS:
PRODUCTS: AVAILABLE, NMAX_CONT;
RESOURCES: DEMAND;
ROUTES( RESOURCES, PRODUCTS): COST, VOLUME;
ENDSETS
DATA:
! Resource attributes;
RESOURCES, DEMAND =
CITY_A 100
CITY_B 500;
! Products attributes;
PRODUCTS, AVAILABLE, NMAX_CONT =
AIRCRA_1 10 5
AIRCRA_2 15 7
AIRCRA_3 20 10;

! Required AIRCRA_1 AIRCRA_2 AIRCRA_3;


COST = 20 25 35 ! cost per container per aircraft for city A;
25 30 33; ! cost per container per aircraft for city B;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
! Restrictions of containers demand for city A and B;
@FOR(RESOURCES(I):
[DEM] @SUM(PRODUCTS(J): VOLUME(I,J)) <= DEMAND(I););
! Maximum container for aircraft;
@FOR(PRODUCTS(J):
[NMC] @SUM(RESOURCES(I): VOLUME(I,J)) >= NMAX_CONT(J););
! Available container for aircraft;
@FOR(PRODUCTS(J):
[AVA] @SUM(RESOURCES(I): VOLUME(I,J)) <= AVAILABLE(J););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " COST OF FREIGHT FOR CONTAINER:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " MAXIMUM CONTAINERS LOAD PER AIRCRAFT (un):", @NEWLINE( 1));
@TABLE(NMAX_CONT);
@WRITE(" ", @NEWLINE( 1), " CONTAINERS AVAILABLE (un):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN3)
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORTATION PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' ',
@FORMAT(RESOURCES(I),'-6s'), ', ',
@FORMAT(PRODUCTS(J),'-8s'), ' Carries:',
@FORMAT(VOLUME( I, J),'%3.0f'),' Containers', ' x Unit cost: $',
@FORMAT(COST(I,J),'%4.2f'), ' = Total: $',
@FORMAT(COST(I, J) * VOLUME(I,J),'%5.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

156
C2-B5 Solving Problems with LINGO Cargo Transport | Case 3 | Aviation

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COST OF FREIGHT FOR CONTAINER:
AIRCRA_1 AIRCRA_2 AIRCRA_3
CITY_A 20.00000 25.00000 35.00000
CITY_B 25.00000 30.00000 33.00000

MAXIMUM CONTAINERS LOAD PER AIRCRAFT (un):


AIRCRA_1 5.000000
AIRCRA_2 7.000000
AIRCRA_3 10.00000

CONTAINERS AVAILABLE (un):


AIRCRA_1 10.00000
AIRCRA_2 15.00000
AIRCRA_3 20.00000

DEMAND (un):
CITY_A 100.0000
CITY_B 500.0000

SOLUTION:
Global optimal solution found.
Objective value: 605.0000
Infeasibilities: 0.000000

Model Class: LP

IDEAL TRANSPORTATION PROGRAM:


CITY_A, AIRCRA_1 , carries: 5 Containers x Unit cost: $20.00 = Total: $100.00
❖ SOLUTION
CITY_A, AIRCRA_2 , carries: 7 Containers x Unit cost: $25.00 = Total: $175.00
CITY_B, AIRCRA_3 , carries: 10 Containers x Unit cost: $33.00 = Total: $330.00
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SLACK/SURPLUS LIMIT = DEMAND (un):
CARRIES LIMIT VALUE
SOLUTION:
CITY_A 12.00000 100.0000 -88.00000
Global
CITY_Boptimal solution
10.00000 found. -490.0000
500.0000
Objective value: 605.0000
Infeasibilities:
SLACK/SURPLUS LIMIT = AVAILABLE (un): 0.000000
CARRIES LIMIT VALUE
IDEAL TRANSPORTATION
AIRCRA_1 5.000000 PROGRAM:
10.00000 -5.000000
CITY_A, AIRCRA_1
AIRCRA_2 Carries:
7.000000 5 Containers
15.00000 -8.000000 x Unit cost: $20.00 = Total: $100.00
CITY_A, AIRCRA_2
AIRCRA_3 Carries:
10.00000 7 Containers
20.00000 -10.00000 x Unit cost: $25.00 = Total: $175.00
CITY_B, AIRCRA_3 Carries: 10 Containers x Unit cost: $33.00 = Total: $330.00
SLACK/SURPLUS LIMIT = NUMBER MAXIMUM CONTAINER:
CARRIES
SLACK/SURPLUS LIMIT LIMIT
= DEMAND (un): VALUE
AIRCRA_1 5.000000
CARRIES 5.000000
LIMIT 0.000000
VALUE
AIRCRA_2
CITY_A 7.000000
12.00000 7.000000
100.0000 0.000000
-88.00000
AIRCRA_3
CITY_B 10.00000 10.00000
10.00000 500.0000 0.000000
-490.0000

SLACK/SURPLUS LIMIT = AVAILABLE (un):


CARRIES LIMIT VALUE
AIRCRA_1 5.000000 10.00000 -5.000000
AIRCRA_2 7.000000 15.00000 -8.000000
AIRCRA_3 10.00000 20.00000 -10.00000

SLACK/SURPLUS LIMIT = NUMBER MAXIMUM CONTAINER:


CARRIES LIMIT VALUE
AIRCRA_1 5.000000 5.000000 0.000000
AIRCRA_2 7.000000 7.000000 0.000000 1
AIRCRA_3 10.00000 10.00000 0.000000

157
C2-B5 Solved Problems with LINGO Air Traffic Flow Model Ground Delays | Case 4 | Aviation

GOAL
Determine when each of a set of flights should take off. Each flight is described by a desired/

4
scheduled take off time, and the time intervals at which it will use various resources (take off
runway, flight control sectors, landing runway).

Each resource (runway or flight control sector) is described by how many aircraft can
simultaneously use it.

The objective is to minimize the total ground delay suffered by all flights, subject to no resource
Blocks being over-utilized at any point in time.
• Product Mix
The flights to be scheduled:
• Blend FLIGHT:
ORDDAL1 O'Hare to Dallas
• Finance DCADEN1 WashingtonDC to Denver
• Investments BOSABQ1 Boston to Albuquerque

• Diet Their scheduled start times;


• Aviation FLIGHT:
ORDDAL1 10
• Transport DCADEN1 0
BOSABQ1 25
• Agriculture
• Construction Description of flight, resource, start, end of usage of flight from Chicago to Dallas
FLIGHT SECTOR TMENT TMOUT
• Refinery ORDDAL1 ORDRNWY 0 5
• Schedule ORDDAL1 SECTORN 5 20
ORDDAL1 SECTORC 20 110
• Cutting ORDDAL1 SECTORS 110 135
ORDDAL1 DFWRNWY 135 140
• Metallurgy
• Fertilizer of flight from Washington National to Denver
FLIGHT SECTOR TMENT TMOUT
• Clinic DCADEN1 DCARNWY 0 5
• Classic DCADEN1 SECTORE 5 60
DCADEN1 SECTORC 60 140
• Dynamic DCADEN1 SECTORW 140 245
DCADEN1 DENRNWY 245 250
• Logistics
• Energy of flight from Boston to Albuquerque;
FLIGHT SECTOR TMENT TMOUT
• Assembly Line BOSABQ1 BOSRNWY 0 5
BOSABQ1 SECTORNE 5 60
BOSABQ1 SECTORC 60 140
Keywords: BOSABQ1 SECTORSW 140 355
BOSABQ1 ABQRNWY 355 360 ;
• Planning
• Operation For this data set, if:

• Control • ORDDAL1 departs on time it is in SECTORC from 30 to 120,

• Air Traffic • DCADEN1 departs on time it is in SECTORC from 60 to 140,


• BOSABQ1 departs on time it is in SECTORC from 85 to 165,

Source: •
So there would be 3 planes in SECTORC from 85 to 120, exceeding the capacity of 2, so one
• Book 4
must be delayed.
• AirTrafficFloGrnDlay

158
C2-B5 Solved Problems with LINGO Air Traffic Flow Model Ground Delays | Case 4 | Aviation

MODEL:
! Air Traffic Flow Model with Ground Delays;

SETS:
! Declare the various sets and the attributes associate with each member of the set;
sector: scap;
flight: tmbgn;
time;
sxt( sector, time): overload;
fxt( flight, time): z;
fxs( flight, sector): TMENT, TMOUT;
ENDSETS

DATA:
! Assume all times are in minutes;
! Minutes in a discrete time period/time bucket.the larger the bucket, the smaller the model and
faster it solves. A smaller bucket providesa more accurate model;
tmbkt = 5;
! Number discrete time periods in plan horizon;
time = 1..80;
! Maximum delay tolerated for any flight;
delaymx = 45;
! Weight in objective on total delay;
delaywgt = 1;
! Wgt in objective on total overcongestion;
congestwgt = 100;
! The possible bottlenecks in the system. the runways, and the various air control sectors;
sector = ORDRNWY DCARNWY DFWRNWY DENRNWY BOSRNWY ABQRNWY SECTORN
SECTORNE SECTORE SECTORS SECTORSW SECTORW SECTORC;
! Number planes/tasks that each resource can simultaneously handle.
Each runway can handle only 1 plane at a time,
Each sector can handle two simultaneously;
scap = 1 1 1 1 1 1 2 2 2 2 2 2 2;
! The flights to be scheduled, O'Hare to Dallas, WashingtonDC to Denver, Boston to Albuquerque;
flight = ORDDAL1 DCADEN1 BOSABQ1;
! Their scheduled start times;
tmbgn = 10 0 25;
! Description of flight, resource, start, end of usage...;
fxs, tment, tmout =
! of flight from Chicago to Dallas;
ORDDAL1 ORDRNWY 0 5
ORDDAL1 SECTORN 5 20
ORDDAL1 SECTORC 20 110
ORDDAL1 SECTORS 110 135
ORDDAL1 DFWRNWY 135 140
! of flight from Washington National to Denver;
DCADEN1 DCARNWY 0 5
DCADEN1 SECTORE 5 60
DCADEN1 SECTORC 60 140
DCADEN1 SECTORW 140 245
DCADEN1 DENRNWY 245 250
! of flight from Boston to Albuquerque;
BOSABQ1 BOSRNWY 0 5
BOSABQ1 SECTORNE 5 60
BOSABQ1 SECTORC 60 140
BOSABQ1 SECTORSW 140 355
BOSABQ1 ABQRNWY 355 360 ;
! For this data set, if:
ORDDAL1 departs on time it is in SECTORC from 30 to 120,
DCADEN1 departs on time it is in SECTORC from 60 to 140,
BOSABQ1 departs on time it is in SECTORC from 85 to 165,
so there would be 3 planes in SECTORC from 85 to 120, exceeding the capacity of 2, so one must be delayed;
ENDDATA

159
C2-B5 Solved Problems with LINGO Air Traffic Flow Model Ground Delays | Case 4 | Aviation

SUBMODEL groundlay:
! Parameters:
scap(s) = number planes allowed in sector s simultaneously,
tmbgn( f) = scheduled begin time of flight f,
tment( f, s) = time flight f enters sector s minus depart time,
tmout( f, s) = time flight f exits sector s minus depart time;
! Variables: z(f,b) = 1 if flight f takes off at time bucket b ;
! Bucket b begins at tmbkt*(b-1) and ends at tmbkt*b;
! An activity starting at p and ending at q overlaps bucket b if p < b*tmbkt, and q > tmbkt*(b-1),
We say a flight f is delayed if it does not start in its earliest possible bucket, i.e.,
bucket b so (b-1)*tmbkt >= tmbgn(f);

! Objective: Minimize the cost of ground delay + congestion;


Min = delaywgt * delaytot + congestwgt * overloadtot;
overloadtot = @sum( sxt(s,b): overload(s,b));
delaytot = @sum( fxt(f,b): tmbkt*(b-1 - @floor(tmbgn(f)/tmbkt))*z(f,b));
! Each flight f must depart in some time bucket b;
@for( flight(f):
[MUSTDO] @sum( time(b): z(f,b)) = 1;);
! Number aircraft in sector s in time period t <= capacity + tolerated_congestion;
@for( sector( s):
@for( time(b):
! Sum over departure times t1 that would put plane in this sector at time bucket b;
[SCTCAP] @sum( fxs(f,s):
@sum( time(b1) | (b1 + tment(f,s)/tmbkt #le# b) #and# (b1 + tmout(f,s)/tmbkt #gt# b):
z(f,b1))) <= scap(s) + overload(s,b););
);
! The z(f,b) must be binary/(0 or 1);
@for( fxt(f,b): @bin( z(f,b)));
! Set to zero infeasible departure times;
@for( fxt( f,b) | (b-1)*tmbkt #lt# tmbgn(f) #or# (b-1)*tmbkt #gt# tmbgn(f) + delaymx:
z(f,b) = 0;);
! Possible extensions:
Flight connections: Flight f2 cannot depart any earlier than x minutes after arrival of flight f1,
Alternate flight paths: There are two or more alternate paths for a flight, exactly one must be taken.;
ENDSUBMODEL
CALC:
! Output level (0:verb, 1:terse, 2:only errors, 3:none);
@SET( 'TERSEO',1);
! Set ending relative optimality tolerance;
@SET( 'IPTOLR', .02);
! Time in seconds to apply optimality tolerance;
@SET( 'TIM2RL', 5);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Solve the model;
@SOLVE( groundlay);
! Solution report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(' Scheduling of Ground Delays for a Set of Flights',@NEWLINE(2));
@WRITE(' Flight Sched_depart Actual Total Delay',@NEWLINE(1));
@FOR( flight(f):
dtime = @sum( fxt(f,b): tmbkt*(b-1)*z(f,b));
@WRITE( ' ',@format( flight(f),'10s'),' ',
@FORMAT( tmbgn(f),'7.0f'),' ',
@FORMAT( dtime,'7.0f'),' ',
@FORMAT( dtime - tmbgn(f) ,'7.0f'), ' min',@NEWLINE(1))
);
ENDCALC
END

160
C2-B5 Solved Problems with LINGO Air Traffic Flow Model Ground Delays | Case 4 | Aviation

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
The flights to be scheduled:
FLIGHT:
ORDDAL1 O'Hare to Dallas
DCADEN1 WashingtonDC to Denver
BOSABQ1 Boston to Albuquerque

Their scheduled start times;


FLIGHT:
ORDDAL1 10
DCADEN1 0
BOSABQ1 25

Description of flight, resource, start, end of usage of flight from Chicago to Dallas
FLIGHT SECTOR TMENT TMOUT
ORDDAL1 ORDRNWY 0 5
ORDDAL1 SECTORN 5 20
ORDDAL1 SECTORC 20 110
ORDDAL1 SECTORS 110 135
ORDDAL1 DFWRNWY 135 140

of flight from Washington National to Denver


FLIGHT SECTOR TMENT TMOUT
DCADEN1 DCARNWY 0 5
DCADEN1 SECTORE 5 60
DCADEN1 SECTORC 60 140
DCADEN1 SECTORW 140 245
DCADEN1 DENRNWY 245 250

of flight from Boston to Albuquerque;


FLIGHT SECTOR TMENT TMOUT
BOSABQ1 BOSRNWY 0 5
BOSABQ1 SECTORNE 5 60
BOSABQ1 SECTORC 60 140
BOSABQ1 SECTORSW 140 355
BOSABQ1 ABQRNWY 355 360 ;

❖ SOLUTION
Below
Globalis optimal
the solution achievedfound.
solution by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Objective value: 35.00000
Global optimal
Objective solution found.
bound: 35.00000
Objective value:
Infeasibilities: 35.00000
0.000000
Objective bound: steps:
Extended solver 35.000000
Infeasibilities:
Total solver iterations: 0.0000000
Extended solver steps:
Elapsed runtime seconds: 0
0.68
Total solver iterations: 0
Elapsed runtime
Model Class: seconds:
MILP 0.68

Model Class:
Scheduling ofMILP
Ground Delays for a Set of Flights

Scheduling
Flight of Ground Delays for Actual
Sched_depart a Set of Flights
Total Delay
ORDDAL1 10 10 0 min
Flight
DCADEN1 Sched_depart
0 Actual
0 Total Delay
0 min
ORDDAL1
BOSABQ1 10
25 10
60 0 min
35 min
DCADEN1 0 0 0 min
BOSABQ1 25 60 35 min

161
C2-B5 Solving Problems with LINGO Operation | Case 5 | Aviation

GOAL

5 A regional air transport company serves the following cities: A, B, C and D, which generate
six possible routes shown in the data below.

Except A-B and C-D are operated with 160-seat aircraft (type 1) divided into two classes
(executive and economy), while B-C is covered by a 140-seat aircraft (type 2), which also has
Blocks two similar class options.

• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy Resources / Routes A-B B-C C-D A-C A-D B-D

• Fertilizer Demand pax 90 30 40 50 50 25 70 30 80 40 60 30


• Clinic Class
• Classic Category Y C Y C Y C Y C Y C Y C

• Dynamic T1 pax 160 - 160 160 160 160


Capacity
• Logistics / Aircraft T2 pax - 140 - 140 140 140
• Energy
• Assembly Line Profit $ 300 400 200 250 300 360 400 480 700 840 400 450

Keywords:
• Planning
Considering that the call demand estimates were obtained through the application of a
• Transport directional traffic model, and the type of aircraft fleet planning, and that the company does
not practice overbooking, a strategy that involves the sale of a larger number of seats than
• Operation
available, the effects of cancellations, formulate a model of allocation of fleet to maximize the
revenue of this network.

162
C2-B5 Solving Problems with LINGO Operation | Case 5 | Aviation
MODEL:
SETS:
PRODUCT: PROFIT_EXEC, PROFIT_ECON, DEM_EXEC, DEM_ECON, AIRCRAFT_T1, AIRCRAFT_T2, PROD_EXEC, PROD_ECON;
ENDSETS
DATA:
! Products attributes;
PRODUCT, PROFIT_EXEC, PROFIT_ECON, DEM_EXEC, DEM_ECON, AIRCRAFT_T1, AIRCRAFT_T2 =
A_TO_B 300 400 90 30 160 0
B_TO_C 200 250 40 50 0 140
C_TO_D 300 360 50 25 160 0
A_TO_C 400 480 70 30 160 140
A_TO_D 700 840 80 40 160 140
B_TO_D 400 450 60 30 160 140;
ENDDATA
SUBMODEL MAX5:
[OBJ] MAX = @SUM( PRODUCT(J): PROFIT_EXEC(J) * PROD_EXEC( J)) +
@SUM( PRODUCT(J): PROFIT_ECON(J) * PROD_ECON( J)) ;
! Demand restriction for business class;
@FOR(PRODUCT(J):
[DEM_ECO] PROD_EXEC(J) <= DEM_EXEC(J));
@FOR(PRODUCT(J):
[DEM_EXE] PROD_ECON(J) <= DEM_ECON(J));
! 160 PAX AIRCRAFT ROUTES (A-B, A-C, A-D);
[A160A]
PROD_EXEC(1) + PROD_ECON(1) +
PROD_EXEC(4) + PROD_ECON(4) +
PROD_EXEC(5) + PROD_ECON(5) <= 160;
! 140 PAX AIRCRAFT ROUTES (B-C, A-C, A-D, B-D);
[A140]
PROD_EXEC(2) + PROD_ECON(2) +
PROD_EXEC(4) + PROD_ECON(4) +
PROD_EXEC(5) + PROD_ECON(5) +
PROD_EXEC(6) + PROD_ECON(6) <= 140;
! 160 PAX AIRCRAFT ROUTES (C-D, A-D, B-D);
[A160B]
PROD_EXEC(3) + PROD_ECON(3) +
PROD_EXEC(5) + PROD_ECON(5) +
PROD_EXEC(6) + PROD_ECON(6) <= 160;
ENDSUBMODEL;
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " PROFIT EXECUTIVE CLASS P/PAX:", @NEWLINE( 1));
@TABLE(PROFIT_EXEC);
@WRITE(" ", @NEWLINE( 1), " PROFIT ECONOMIC CLASS P/PAX:", @NEWLINE( 1));
@TABLE(PROFIT_ECON);
@WRITE(" ", @NEWLINE( 1), " DEMAND EXECUTIVE CLASS P/PAX:", @NEWLINE( 1));
@TABLE(DEM_EXEC);
@WRITE(" ", @NEWLINE( 1), " DEMAND ECONOMIC CLASS P/PAX:", @NEWLINE( 1));
@TABLE(DEM_ECON);
@WRITE(" ", @NEWLINE( 1), " ROUTES OPERATED WITH AIRCRAFT T1 (160PAX):", @NEWLINE( 1));
@TABLE(AIRCRAFT_T1);
@WRITE(" ", @NEWLINE( 1), " ROUTES OPERATED WITH AIRCRAFT T2 (140PAX):", @NEWLINE( 1));
@TABLE(AIRCRAFT_T2);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX5);
! Solution Report;
@WRITE(" EXECUTIVE CLASS:", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PROD_EXEC(J) #GT# 0: ' Route: ',
@FORMAT(PRODUCT(J),'-8s'), ' #pax:',
@FORMAT(PROD_EXEC(J),'%3.0F'), ' x Profit p/pax: ' ,
@FORMAT(PROFIT_EXEC(J),'%3.0f'), ' = Total:$ ',
@FORMAT(PROFIT_EXEC(J) * PROD_EXEC(J),'%6.0f'),
@NEWLINE( 1));
@WRITE(" ECONOMIC CLASS:", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PROD_ECON(J) #GT# 0: ' Route: ',
@FORMAT(PRODUCT(J),'-8s'), ' #pax:',
@FORMAT(PROD_ECON(J),'%3.0F'), ' x Profit p/pax: ' ,
@FORMAT(PROFIT_ECON(J),'%3.0f'), ' = Total:$ ',
@FORMAT(PROFIT_ECON(J) * PROD_ECON(J),'%6.0f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

163
PROFIT EXECUTIVE CLASS P/PAX:
A_TO_B 300.0000
B_TO_C 200.0000
C_TO_D 300.0000
A_TO_C 400.0000
A_TO_D 700.0000
B_TO_D 400.0000
C2-B5 Solving Problems with LINGO Operation | Case 5 | Aviation
PROFIT ECONOMIC CLASS P/PAX:
A_TO_B 400.0000
B_TO_C 250.0000
❖ DATA C_TO_D 360.0000
A_TO_C 480.0000
All problem data is organized in the data block 840.0000
A_TO_D as a set of members and value attributes, which can be viewed below.
B_TO_D 450.0000
DATA:
DATA:
PROFIT EXECUTIVE
PROFIT EXECUTIVECLASS
CLASSP/PAX:
P/PAX: DEMAND EXECUTIVE CLASS P/PAX: ROUTES OPERATED WITH AIRCRAFT T1 (160PAX):
A_TO_B 300.0000
A_TO_B 300.0000 A_TO_B 90.00000 A_TO_B 160.0000
B_TO_C 200.0000
B_TO_C 200.0000 B_TO_C 40.00000 B_TO_C 0.000000
C_TO_D 300.0000
C_TO_D 300.0000 C_TO_D 50.00000 C_TO_D 160.0000
A_TO_C 400.0000
A_TO_C 400.0000 A_TO_C 70.00000 A_TO_C 160.0000
A_TO_D 700.0000
A_TO_D 700.0000 A_TO_D 80.00000 A_TO_D 160.0000
B_TO_D 400.0000
B_TO_D 400.0000 B_TO_D 60.00000 B_TO_D 160.0000

PROFIT ECONOMIC
PROFIT ECONOMICCLASS
CLASSP/PAX:
P/PAX: DEMAND ECONOMIC CLASS P/PAX: ROUTES OPERATED WITH AIRCRAFT T2 (140PAX):
A_TO_B
A_TO_B 400.0000
400.0000 A_TO_B 30.00000 A_TO_B 0.000000
B_TO_C
B_TO_C 250.0000
250.0000 B_TO_C 50.00000 B_TO_C 140.0000
C_TO_D
C_TO_D 360.0000
360.0000 C_TO_D 25.00000 C_TO_D 0.000000
A_TO_C A_TO_C 140.0000
A_TO_C 480.0000
480.0000 A_TO_C 30.00000
A_TO_D A_TO_D 140.0000
A_TO_D 840.0000
840.0000 A_TO_D 40.00000
B_TO_D 140.0000
B_TO_D
B_TO_D 450.0000
450.0000 B_TO_D 30.00000

DEMAND EXECUTIVE CLASS P/PAX: SOLUTION:


ROUTES OPERATED WITH AIRCRAFT T1 (160PAX):
DEMAND EXECUTIVE CLASS P/PAX: Global optimal solution found.
A_TO_B 90.00000 A_TO_B 160.0000
A_TO_B 90.00000 Objective value: 129600.0
B_TO_C 40.00000 B_TO_C 0.000000
B_TO_C 40.00000 Infeasibilities: 0.000000
C_TO_D 50.00000 C_TO_D 160.0000
C_TO_D 70.00000
A_TO_C 50.00000 A_TO_C 160.0000
Total solver iterations: 5
A_TO_C 80.00000
70.00000 Elapsed runtime seconds: 0.04
A_TO_D A_TO_D 160.0000
A_TO_D 80.00000
B_TO_D 60.00000 B_TO_D 160.0000
B_TO_D 60.00000 EXECUTIVE CLASS:
Route: A_TO_B #pax: 75 x Profit p/pax: 300 = Total:$ 22
DEMAND ECONOMIC CLASS P/PAX: ROUTES OPERATED WITH AIRCRAFT T2 (140PAX):
Route: B_TO_C #pax: 5 x Profit p/pax: 200 = Total:$ 1
DEMAND
A_TO_B ECONOMIC
30.00000 CLASS P/PAX: A_TO_B 0.000000 Route: C_TO_D #pax: 50 x Profit p/pax: 300 = Total:$ 15
A_TO_B 50.00000
B_TO_C 30.00000 B_TO_C 140.0000 Route: A_TO_D #pax: 15 x Profit p/pax: 700 = Total:$ 10
B_TO_C 25.00000
C_TO_D 50.00000 ECONOMIC CLASS:
C_TO_D 30.00000
A_TO_C 25.00000 1
Route: A_TO_B #pax: 30 x Profit p/pax: 400 = Total:$ 12
A_TO_D
A_TO_C 40.00000
30.00000 Route: B_TO_C #pax: 50 x Profit p/pax: 250 = Total:$ 12
B_TO_D
A_TO_D 30.00000
40.00000 Route: C_TO_D #pax: 25 x Profit p/pax: 360 = Total:$ 9
B_TO_D 30.00000 Route: A_TO_D #pax: 40 x Profit p/pax: 840 = Total:$ 33
ROUTES OPERATED WITH AIRCRAFT T1 (160PAX): Route: B_TO_D #pax: 30 x Profit p/pax: 450 = Total:$ 13
A_TO_B OPERATED
ROUTES 160.0000 WITH AIRCRAFT T1 (160PAX):
B_TO_C
A_TO_B 0.000000
160.0000 SLACK/SURPLUS LIMIT = DEMAND EXECUTIVE CLASS (pax):
❖ SOLUTION
C_TO_D
B_TO_C 160.0000
0.000000 PAX LIMIT VALUE
A_TO_C 160.0000 A_TO_B 90.00000 90.00000 0.000000
C_TO_D
Below 160.0000
A_TO_Dis the solution achieved by LINGO with infeasibilities 0, and the detailed
160.0000 B_TO_C report that makes
40.00000 up the0.000000
40.00000 optimal
A_TO_C 160.0000
SOLUTION:
B_TO_D 160.0000 C_TO_D 50.00000 50.00000 0.000000
A_TO_D optimal
Global 160.0000solution found. A_TO_C 40.00000 70.00000 -30.00000
SOLUTION:
B_TO_D 160.0000
Objective
ROUTES value:
OPERATED WITH AIRCRAFT T2 (140PAX): 129600.0 A_TO_D 80.00000 80.00000 0.000000
Global optimal solution found.
Infeasibilities:
A_TO_B 0.000000 0.000000
Objective
ROUTES value: WITH AIRCRAFT T2 (140PAX):
OPERATED 129600.0
Model
B_TO_Cclass: LP
140.0000
Infeasibilities:
A_TO_B 0.000000 0.000000
Model class:
B_TO_C 140.0000LP 1
EXECUTIVE CLASS:
Route: A_TO_B #pax: 75 x Profit p/pax: 300 = Total:$ 22500
EXECUTIVE CLASS: 1
Route: B_TO_C #pax: 5 x Profit p/pax: 200 = Total:$ 1000
Route: A_TO_B #pax: 75 x Profit p/pax: 300 = Total:$ 22500
Route: C_TO_D #pax: 50 x Profit p/pax: 300 = Total:$ 15000
Route: B_TO_C #pax: 5 x Profit p/pax: 200 = Total:$ 1000
Route: A_TO_D #pax: 15 x Profit p/pax: 700 = Total:$ 10500
Route: C_TO_D #pax: 50 x Profit p/pax: 300 = Total:$ 15000
ECONOMIC CLASS:
Route: A_TO_D #pax: 15 x Profit p/pax: 700 = Total:$ 10500
Route: A_TO_B
ECONOMIC CLASS:
#pax: 30 x Profit p/pax: 400 = Total:$ 12000
Route:
Route: B_TO_C
A_TO_B #pax:
#pax: 50
30 xx Profit
Profit p/pax:
p/pax: 250
400 == Total:$
Total:$ 12500
12000
Route: C_TO_D
Route: B_TO_C #pax: 25 x Profit p/pax: 360 = Total:$ 9000
#pax: 50 x Profit p/pax: 250 = Total:$ 12500
Route: A_TO_D
Route: C_TO_D #pax: 40 x Profit p/pax: 840 = Total:$
#pax: 25 x Profit p/pax: 360 = Total:$ 33600
9000
Route:
Route: B_TO_D
A_TO_D #pax:
#pax: 30
40 xx Profit
Profit p/pax:
p/pax: 450
840 == Total:$
Total:$ 13500
33600
Route: B_TO_D #pax: 30 x Profit p/pax: 450 = Total:$ 13500
SLACK/SURPLUS LIMIT = DEMAND EXECUTIVE CLASS (pax):
PAX = DEMAND
SLACK/SURPLUS LIMIT LIMIT EXECUTIVE
VALUECLASS (pax):
A_TO_B 90.00000
PAX 90.00000
LIMIT 0.000000
VALUE
B_TO_C
A_TO_B 40.00000
90.00000 40.00000
90.00000 0.000000
0.000000
C_TO_D
B_TO_C 50.00000
40.00000 50.00000
40.00000 0.000000
0.000000
A_TO_C
C_TO_D 40.00000
50.00000 70.00000
50.00000 -30.00000
0.000000
A_TO_D
A_TO_C 80.00000
40.00000 80.00000 0.000000
70.00000 -30.00000
B_TO_D
A_TO_D 60.00000
80.00000 60.00000
80.00000 0.000000
0.000000
B_TO_D 60.00000 60.00000 0.000000
SLACK/SURPLUS LIMIT = DEMAND ECONOMIC CLASS (pax):
PAX = DEMAND
SLACK/SURPLUS LIMIT LIMIT ECONOMIC
VALUE
CLASS (pax):
A_TO_B 15.00000
PAX 30.00000
LIMIT -15.00000
VALUE
B_TO_C
A_TO_B 15.00000
15.00000 50.00000
30.00000 -35.00000
-15.00000
C_TO_D
B_TO_C 25.00000
15.00000 25.00000 0.000000
50.00000 -35.00000
A_TO_C
C_TO_D -40.00000
25.00000 30.00000
25.00000 -70.00000
0.000000
A_TO_D
A_TO_C -25.00000
-40.00000 40.00000
30.00000 -65.00000
-70.00000
B_TO_D
A_TO_D -30.00000
-25.00000 30.00000
40.00000 -60.00000
-65.00000
B_TO_D -30.00000 30.00000 -60.00000
SLACK/SURPLUS LIMIT = AIRCRAFT T1 ROUTES (A-B, A-C, A-D):
PAX = AIRCRAFT
SLACK/SURPLUS LIMIT LIMIT T1 VALUE 164
ROUTES (A-B, A-C, A-D):
A_TO_B 160.0000
PAX 160.0000
LIMIT 0.000000
VALUE
B_TO_C
A_TO_B 0.000000
160.0000 0.000000
160.0000 0.000000
0.000000
C2-B5 Solving Problems with LINGO Planning of Aircraft Purchase | Case 6 | Aviation

GOAL

6 An airline wants to re-equip its fleet of aircraft by purchasing three different types:

Effort in
Cost Revenue Pilots
AIRCRAFT For Flights in: maintenance
(millions) (millions) enabled
Workshop
Blocks
Embraer 190 33.0 120.0 25 Domestic 1/15
• Product Mix
Airbus A350 230.0 300.0 10 Americas and Europe 4/15
• Blend
Boing 787-8 170.0 260.0 9 Asia 3/15
• Finance
Available 730.0 ≤4
• Investments
• Diet • The Boing pilot can pilot all three types of aircraft.

• Aviation • The Airbus pilot also pilots Embraer.

• Transport • The Embraer pilot does not pilot the others.

• Agriculture • In a Boing is required three pilots, the Airbus and Embraer only two.

• Construction
Required/ AIircraft Embraer Airbus Boing
• Refinery
Embraer 2 2 3
• Schedule
• Cutting Airbus 0 2 3
Pilots
• Metallurgy Boing 0 0 3

• Fertilizer Available 25 10 9
• Clinic
The workshops can meet the simultaneous maintenance of 3 Boing 787-8. A Boing requires
• Classic
a maintenance effort equivalent to 3 Embraer and 0.75 Arbus.
• Dynamic
It is estimated that 15% of the aircraft are always under preventive maintenance. Formulate
• Logistics
the problem of optimization of the purchase of these aircraft by the company.
• Energy
• Assembly Line

Keywords:
• Planning
• Purchase

Source:
• Book 2
• Chapter 2.5.9

165
C2-B5 Solving Problems with LINGO Planning of Aircraft Purchase | Case 6 | Aviation
MODEL:
SETS:
PRODUCT:
REVENUE,
PURCHASE,
PILOTS_190,
PILOTS_350,
PILOTS_787,
PILOTS_AVAILABLE,
PRODUCE;
ENDSETS
DATA:
! Products attributes;
PRODUCT =
EMBRAER_190
AIRBUS_A350
BOING_787_8;
! Products attributes 190 350 787;
REVENUE = 120 300 260; ! Expected Revenue in millions;
PURCHASE = 33 230 170; ! Unit purchase cost of aircraft in million;
PILOTS_190 = 2 2 3; ! Number of pilots qualified for the Embraer 190;
PILOTS_350 = 0 2 3; ! Number of pilots qualified for the Airbus A350;
PILOTS_787 = 0 0 3; ! Number of pilots qualified for the Boing 787-8;
PILOTS_AVAILABLE = 25 10 9; ! Number of pilots available for these aircraft;
ENDDATA
SUBMODEL MAX6:
[OBJ] MAX = @SUM( PRODUCT(J): Purchase(J) * PRODUCE( J));
! Capital Available for Acquisition;
@SUM(PRODUCT(J): PURCHASE(J) * PRODUCE( J)) <= 730;
! Number of Pilots enable To Pilot or Embraer;
@SUM(PRODUCT(J): PILOTS_190(J) * PRODUCE(j)) <= 25;
! Number of Pilots enable To Pilot or AirBus;
@SUM(PRODUCT(K): PILOTS_350(K) * PRODUCE(K)) <= 10;
! Number of Pilots enable To Pilot or Boing;
@SUM(PRODUCT(L): PILOTS_787(L) * PRODUCE(L)) <= 9;
@FOR(PRODUCT(J): @GIN(PRODUCE(J)));
! Effort in Maintenance Workshops;
1/15*PRODUCE(1) + 4/15*PRODUCE(2) + 3/15*PRODUCE(3) <= 4;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " Expected Revenue in millions:", @NEWLINE( 1));
@TABLE(REVENUE);
@WRITE(" ", @NEWLINE( 1), " Unit purchase PROFIT of aircraft in million:", @NEWLINE( 1));
@TABLE(PURCHASE);
@WRITE(" ", @NEWLINE( 1), " Number of pilots qualified for the Embraer 190:", @NEWLINE( 1));
@TABLE(PILOTS_190);
@WRITE(" ", @NEWLINE( 1), " Number of pilots qualified for the Airbus A350:", @NEWLINE( 1));
@TABLE(PILOTS_350);
@WRITE(" ", @NEWLINE( 1), " Number of pilots qualified for the Boing 787-8:", @NEWLINE( 1));
@TABLE(PILOTS_787);
@WRITE(" ", @NEWLINE( 1), " Number of pilots available for these aircraft:", @NEWLINE( 1));
@TABLE(PILOTS_AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX6)
! Solution report;
@WRITE(" ", @NEWLINE( 1), " PROPOSAL OF PURCHASE (values in millions) :", @NEWLINE( 2));
@WRITEFOR( PRODUCT(J) : ' [',
@FORMAT(PRODUCT(J),'-11s'), '] ',
@FORMAT(PRODUCE(J),'%2.0f'), ' un x Purchase: $' ,
@FORMAT(PURCHASE(J),'%4.0f'), ' = Total: $',
@FORMAT(PURCHASE(J) * PRODUCE(J),'%3.0f'), @NEWLINE(1), 26*' ','Revenue: $',
@FORMAT(REVENUE(J) * PRODUCE(J),'%4.0f'),
@NEWLINE( 2));
@WRITE(' Investment value', 34*' ', '$',@FORMAT(OBJ,'%3.0f'),@NEWLINE(1));
@WRITE(' Gross Revenue', 21*' ', '$', @FORMAT(@SUM(PRODUCT(J):REVENUE(J)*PRODUCE(J)),'%4.0f'), @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX6);
ENDCALC
END

166
C2-B5 Solving Problems with LINGO Planning of Aircraft Purchase | Case 6 | Aviation

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
DATA:
Expected Revenue
Expected Revenue in
in millions:
millions:
EMBRAER_190 120.0000
EMBRAER_190 120.0000
AIRBUS_A350 300.0000
AIRBUS_A350 300.0000
BOING_787_8 260.0000
BOING_787_8 260.0000

Unit purchase
Unit purchase PROFIT
PROFIT of
of aircraft
aircraft in
inmillion:
million:
EMBRAER_190 33.00000
EMBRAER_190 33.00000
AIRBUS_A350 230.0000
AIRBUS_A350 230.0000
BOING_787_8 170.0000
BOING_787_8 170.0000

Number of
Number of pilots
pilots qualified
qualified for
for the
theEmbraer
Embraer190:
190:
EMBRAER_190 2.000000
EMBRAER_190 2.000000
AIRBUS_A350 2.000000
AIRBUS_A350 2.000000
BOING_787_8 3.000000
BOING_787_8 3.000000

Number of
Number of pilots
pilots qualified
qualified for
for the
theAirbus
AirbusA350:
A350:
EMBRAER_190 0.000000
EMBRAER_190 0.000000
AIRBUS_A350
AIRBUS_A350 2.000000
2.000000
BOING_787_8
BOING_787_8 3.000000
3.000000

Number
Number of
of pilots
pilots qualified
qualified for
for the
theBoing
Boing787-8:
787-8:
EMBRAER_190
EMBRAER_190 0.000000
0.000000
AIRBUS_A350
AIRBUS_A350 0.000000
0.000000
BOING_787_8
BOING_787_8 3.000000
3.000000

Number
Number of
of pilots
pilots available
available for
for these
theseaircraft:
aircraft:
EMBRAER_190
EMBRAER_190 25.00000
25.00000
AIRBUS_A350
AIRBUS_A350 10.00000
10.00000
BOING_787_8
BOING_787_8 9.000000
9.000000

SOLUTION:
SOLUTION:
Global
Global optimal
optimal solution
solution found.
found.
Objective value:
Objective value: 730.0000
730.0000
Objective
Objective bound:
bound: 730.0000
730.0000
❖ SOLUTION
Infeasibilities:
Infeasibilities: 0.000000
0.000000
SOLUTION:
Below
Model is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Model Class:
Class: PILP
PILP
Global optimal solution found.
SOLUTION:
Objective
PROPOSAL value: 730.0000
PROPOSAL OFOF PURCHASE
PURCHASE (values
(values in
in millions)
millions): :
Global
Objectiveoptimal
bound:solution found. 730.0000
Objective
[EMBRAER_190]value:
Infeasibilities: 10 un x Purchase: $ 33 =
[EMBRAER_190] 10 un x Purchase: $ 33 = Total: $330Total: 730.0000
0.000000
$330
Objective bound: Revenue: $1200
Revenue: $1200 730.0000
Infeasibilities:
Model Class: PILP 0.000000
11
Model Class:
PROPOSAL PILP
OF PURCHASE (values in millions) :

PROPOSAL OF PURCHASE
[EMBRAER_190] 10 un x(values in millions)
Purchase: $ 33 = :Total: $330
Revenue: $1200
[EMBRAER_190] 10 un x Purchase: $ 33 = Total: $330
[AIRBUS_A350] 1 un x Revenue:
Purchase: $1200
$ 230 = Total: $230
Revenue: $ 300
[AIRBUS_A350] 1 un x Purchase: $ 230 = Total: $230
[BOING_787_8] 1 un x Revenue:
Purchase: $$ 300
170 = Total: $170
Revenue: $ 260
[BOING_787_8] 1 un x Purchase: $ 170 = Total: $170
Investment value Revenue: $ 260 $730
Gross Revenue $1760
Investment value $730
Gross Revenue $1760

167
C2-B5 Solving Problems with LINGO Overbook 2 | Case 7 | Aviation

GOAL

7 Closely related to the newsboy problem (in a mathematical sense) is the airline overbooking
problem.

Given that a certain percentage of fliers with reservations will not show up for a flight, airlines
that don't overbook will be sending most planes up with empty seats.

Blocks Assuming the penalty cost for overbooking is not too high, an airline that hopes to maximize
revenue should overbook its flights.
• Product Mix
• Blend The following model determines the optimal number of reservations to allow on a flight, and
assumes the number of no-shows on a flight has a binomial distribution.
• Finance
• Investments This model uses a brut force method to compute the expected profits from overbooking 1 to 6
seats.
• Diet
• Aviation
• Transport
Items Value
• Agriculture
• Construction 1 Total seats available seat 16
• Refinery
• Schedule 2 Revenue from sold seat $ 225.00
• Cutting
• Metallurgy 3 Penalty for turned down customer $ 100.00
• Fertilizer
• Clinic 4 Probability a customer is no-show % 0.04

• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• No Show
• Transport

Source:
• Book 4
• obbok2

168
C2-B5 Solving Problems with LINGO Overbook 2 | Case 7 | Aviation

MODEL:
! A strategy for airlines to minimize the loss from no-shows is to overbook flights.
Too little overbooking results in lost revenue.
Too much overbooking results in excessive penalties.
This model computes expected profits for various levels of overbooking.;
SETS:
SEAT/1..16/; ! seats available ;
EXTRA/1..6/: EPROFIT; ! expected profits from overbooking 1-6 seats;
ENDSETS
DATA:
! Available data;
V = 225; ! Revenue from a sold seat;
P = 100; ! Penalty for a turned down customer;
Q = .04; ! Probability customer is a no-show;
! No. of seats available;
ENDDATA
SUBMODEL S10:
N = @SIZE( SEAT);
! Expected profit with no overbooking;
EPROFIT0 = V * @SUM( SEAT(I): (1 - @PBN(1- Q, N, I - 1)));
! Expected profit if we overbook by 1 is:
EPROFIT0 + Prob(he shows) * ( V - (V + P) * Prob(we have no room));
EPROFIT( 1) = EPROFIT0 + ( 1 - Q) * ( V - ( V + P) * @PBN( Q, N, 0));
! In general;
@FOR( EXTRA( I)| I #GT# 1: EPROFIT( I) = EPROFIT( I - 1) + (1 - Q) * ( V - ( V + P) * @PBN( Q, N + I - 1, I - 1)););
ENDSUBMODEL
CALC:
! Output level (0:verb, 1:terse, 2:only errors, 3:none);
@SET( 'TERSEO',2);
! Post status windows, 1 Yes, 0 No;
@SET( 'STAWIN',0);
! Execute sub-model;
@SOLVE(S10);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Total seats available: ",38*'.', @FORMAT(N,'%5.0f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Revenue from a sold seat: ",35*'.', @FORMAT(V,'%9.2f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Penalty for a turned down customer: ",25*'.', @FORMAT(P,'%6.0f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Probability a customer is a no-show: ",24*'.', @FORMAT(Q,'%7.2f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 2), " SOLUTION:", @NEWLINE( 1));
! Solution report;
@WRITE(" ", @NEWLINE( 1), " . This model computes expected profits for various levels of overbooking: ",@NEWLINE( 2));
@WRITE(" Profit with ", 0, ' Overbooking: $',@FORMAT(EPROFIT0,'%7.3f'), @NEWLINE(1));
@FOR(EXTRA(I):
@WRITE(" Profit with ", I, ' Overbooking: $',@FORMAT(EPROFIT(I),'%7.3f'),
@NEWLINE(1)));
ENDCALC
END

169
C2-B5 Solving Problems with LINGO Overbook 2 | Case 7 | Aviation

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:

. Total seats available: ...................................... 16

. Revenue from a sold seat: ................................... 225.00

. Penalty for a turned down customer: ......................... 100

. Probability a customer is a no-show: ........................ 0.04

SOLUTION:

. This model computes expected profits for various levels of overbooking:

Profit with 0 Overbooking: $3456.000


Profit with 1 Overbooking: $3509.634
Profit with 2 Overbooking: $3459.355
Profit with 3 Overbooking: $3373.744
Profit with 4 Overbooking: $3279.654
Profit with 5 Overbooking: $3183.953
Profit with 6 Overbooking: $3087.994

DATA:

. Total seats available: ...................................... 16

. Revenue from a sold seat: ................................... 225.00

. Penalty for a turned down customer: ......................... 100


❖ SOLUTION
. Probability a customer is a no-show: ........................ 0.04
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

SOLUTION:

. This model computes expected profits for various levels of overbooking:

Profit with 0 Overbooking: $3456.000


Profit with 1 Overbooking: $3509.634
Profit with 2 Overbooking: $3459.355
Profit with 3 Overbooking: $3373.744
Profit with 4 Overbooking: $3279.654
Profit with 5 Overbooking: $3183.953
Profit with 6 Overbooking: $3087.994

170
C2-B5 Solving Problems with LINGO Large Combination | Case 8 | Aviation

GOAL

8 Large airlines tend to base their route structure around the hub concept.

An airline will try to have a large number of flights arrive at the hub airport during a certain short
interval time (e.g., 9 a.m. to 10 a.m.) and then have a large number of flights depart the hub shortly
thereafter (e.g., 10 a.m. to 11 a.m.).

Blocks This allows customers of that airline to travel between a large combination of origin/destination cities
with one stop and at most one change of planes.
• Product Mix For example, United Airlines uses one stop and at most one change of planes.
• Blend
For example, United Airlines uses Chicago as a hub, Delta Airlines uses Atlanta, TWA uses St.
• Finance Louis, and American uses Dallas/Fort Worth.
• Investments
A desirable goal in using a hub structure is minimize the amount of changing of planes (and the
• Diet resulting moving of baggage) at the hub.
• Aviation This model illustrates how to apply the assignment model:
• Transport
• A certain airline has six flights arriving at O'Hare airport between 9 and 9:30 a.m.
• Agriculture • The same six airplanes depart on different flights between 9:40 and 10:20 a.m.
• Construction • You know the average number of people transferring between incoming and leaving flights.

• Refinery All the planes are identical. A decision problem is which incoming flight should be assigned to which
outgoing flight.
• Schedule
• Cutting This model helps determine how incoming flights should be assigned to leaving flights so that a
minimum number of people need to change planes at the O'Hare stop.
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• Operation
• Control
• Ground delays
• Air Traffic

Source:
• Book 4

171
C2-B5 Solving Problems with LINGO Large Combination | Case 8 | Aviation
MODEL:
SETS:
FLIGHT;
ASSIGN( FLIGHT, FLIGHT): X, CHANGE;
ENDSETS
DATA:
FLIGHT = 1..6;
! The value of assigning i to j;
CHANGE = 20 15 16 5 4 7
17 15 33 12 8 6
9 12 18 16 30 13
12 8 11 27 19 14
-999 7 10 21 10 32
-999 -999 -999 6 11 13;
ENDDATA
SUBMODEL MAX8:
! Maximize value of assignments;
[OBJ] MAX = @SUM(ASSIGN: X * CHANGE);
@FOR( FLIGHT( I):
! Each I must be assigned to some J;
@SUM( FLIGHT( J): X( I, J)) = 1;
! Each I must receive an assignment;
@SUM( FLIGHT( J): X( J, I)) = 1; );
ENDSUBMODEL
CALC:
! Output level (0:verb, 1:terse, 2:only errors, 3:none);
@SET( 'TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " Arrival of passengers on six aircraft between 9 and 9:30 am:", @NEWLINE( 1));
@TABLE(CHANGE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Solve the model;
@SOLVE(MAX8);
! Solution report;
@WRITE(" LOGICAL SELECTION: ", @NEWLINE( 1));
@TABLE(X);
@WRITE(" ", @NEWLINE( 2));
@WRITE(" Move pax between aircraft (large combination of origin/destination).", @NEWLINE( 1));
@WRITE(" Passenger departure on six aircraft between 9 and 9:40 am:", @NEWLINE( 2));
@WRITEFOR( ASSIGN(K,L) | X(K,L) #GT# 0: ' PAX: ', CHANGE(K,L),@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX8);
ENDCALC
END

172
C2-B5 Solving Problems with LINGO Large Combination | Case 8 | Aviation

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
Arrival of passengers on six aircraft between 9 and 9:30 am:
1 2 3 4 5 6
1 20.00000 15.00000 16.00000 5.000000 4.000000 7.000000
2 17.00000 15.00000 33.00000 12.00000 8.000000 6.000000
3 9.000000 12.00000 18.00000 16.00000 30.00000 13.00000
4 12.00000 8.000000 11.00000 27.00000 19.00000 14.00000
5 -999.0000 7.000000 10.00000 21.00000 10.00000 32.00000
6 -999.0000 -999.0000 -999.0000 6.000000 11.00000 13.00000

SOLUTION:
Global optimal solution found.
Objective value: 135.0000
Infeasibilities: 0.000000

LOGICAL SELECTION:
1 2 3 4 5 6
1 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000
2 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000
3 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000
6 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000

Move pax between aircraft (large combination of origin/destination).


Passenger
DATA: departure on six aircraft between 9 and 9:40 am:
Arrival of passengers on six aircraft between 9 and 9:30 am:
PAX: 20.000001 2 3 4 5 6
PAX:
1 33.00000
20.00000 15.00000 16.00000 5.000000 4.000000 7.000000
PAX:
2 12.00000
17.00000 15.00000 33.00000 12.00000 8.000000 6.000000
PAX:
3 27.00000
9.000000 12.00000 18.00000 16.00000 30.00000 13.00000
PAX: 32.00000
4 12.00000 8.000000 11.00000 27.00000 19.00000 14.00000
PAX: 11.00000
5 -999.0000
❖ SOLUTION 7.000000 10.00000 21.00000 10.00000 32.00000
6 -999.0000 -999.0000 -999.0000 6.000000 11.00000 13.00000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOLUTION:
Global optimal solution found.
Objective value: 135.0000
Infeasibilities: 0.000000

LOGICAL SELECTION:
1 2 3 4 5 6
1 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000
2 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000
3 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000
6 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 1

Move pax between aircraft (large combination of origin/destination).


Passenger departure on six aircraft between 9 and 9:40 am:

PAX: 20.00000
PAX: 33.00000
PAX: 12.00000
PAX: 27.00000
PAX: 32.00000
PAX: 11.00000

173
C2-B5 Solving Problems with LINGO Overbook | Case 9 | Aviation

GOAL

9 Closely related to the newsboy problem (in a mathematical sense) is the airline overbooking
problem.

Given that a certain percentage of fliers with reservations will not show up for a flight, airlines that
don't overbook will be sending most planes up with empty seats.

Blocks Assuming the penalty cost for overbooking is not too high, an airline that hopes to maximize
revenue should overbook its flights.
• Product Mix
• Blend The following model determines the optimal number of reservations to allow on a flight, and
assumes the number of no-shows on a flight has a binomial distribution.
• Finance
This overbooking model determines the number of reservations, M, to allow on a flight if the no-
• Investments
show distribution is binomial.
• Diet
• Aviation
Items Value
• Transport
• Agriculture
1 Total seats available seat 16
• Construction
• Refinery
2 Revenue from sold seat $ 225.00
• Schedule
• Cutting
3 Penalty for turned down customer $ 100.00
• Metallurgy
• Fertilizer
4 Probability a customer is no-show % 0.04
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• No Show
• Transport

Source:
• Book 4
• overbook

174
C2-B5 Solving Problems with LINGO Overbook | Case 9 | Aviation

MODEL:

! This overbooking model determines the number of reservations, M, to allow on a flight if the
no-show distribution is binomial;
DATA:
! Some available data ;
N = 16; ! Total seats available;
V = 225; ! Revenue from a sold seat;
P = 100; ! Penalty for a turned down customer;
Q = .04; ! Probability a customer is a no-show;
ENDDATA
SUBMODEL SM9:
! The probability to turn down customers is @PBN( Q, M, M - N), therefore the corresponding
expected loss due to imperfect information is:( V + P) * @PBN( Q, M, M - N), and we want the
loss to equal the revenue V on the margin. So,
the break-even equation is:;
( V + P) * @PBN( Q, M, M - N) = V;
! Note, you should round up if M is fractional;
ENDSUBMODEL
CALC:
! Output level (0:verb, 1:terse, 2:only errors, 3:none);
@SET( 'TERSEO',2);
! Post status windows, 1 Yes, 0 No;
@SET( 'STAWIN',0);
! Execute sub-model;
@SOLVE(SM9);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Total seats available: ",38*'.', @FORMAT(N,'%5.0f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Revenue from a sold seat: ",35*'.', @FORMAT(V,'%9.2f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Penalty for a turned down customer: ",25*'.', @FORMAT(P,'%6.0f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(" . Probability a customer is a no-show: ",24*'.', @FORMAT(Q,'%7.2f'), @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 2), " SOLUTION:", @NEWLINE( 1));
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " . This overbooking model determines the number of reservations: ",
@FORMAT(M,'%7.2f'), @NEWLINE( 2));
ENDCALC
END

175
C2-B5 Solving Problems with LINGO Overbook | Case 9 | Aviation

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:

. Total seats available: ...................................... 16

. Revenue from a sold seat: ................................... 225.00

. Penalty for a turned down customer: ......................... 100

. Probability a customer is a no-show: ........................ 0.04

SOLUTION:

. This overbooking model determines the number of reservations: 16.52

DATA:

. Total seats available: ...................................... 16

. Revenue from a sold seat: ................................... 225.00

. Penalty for a turned down customer: ......................... 100


❖ SOLUTION
. Probability a customer is a no-show: ........................ 0.04
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

SOLUTION:

. This overbooking model determines the number of reservations: 16.52

176
BLOCK 6 Block: TRANSPORT

What should be the route for transporting cargo vehicles so that they deliver the entire cargo in the
shortest time and at the lowest total cost?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

177
C2-B6 Solving Problems with LINGO Transport Solution | Case 1 | Transport

GOAL

1 Three warehouse, four Customer Transportation Problem.

Warehouse / Customer C1 C2 C3 C4 Available

Blocks W1 $ 6 2 6 7 30 un

• Product Mix
W2 $ 4 9 5 3 25 un
• Blend
• Finance W3 $ 8 8 1 5 21 un
• Investments
• Diet Demand un 15 17 22 12 -
• Aviation
• Transport This model contains report writing statements that mimic the standard Lingo solution report;
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Consumer
• Logistics

Source:
• Book 2
• Page 231

178
C2-B6 Solving Problems with LINGO Transport Solution | Case 1 | Transport

MODEL:
CALC:
! We need to enable range analysis for this model;
@SET( 'DUALCO', 2);
ENDCALC
SETS:
HEADER1 / PROD, LIMIT, VALUE /:;
WAREHOUSE: CAPACITY;
CUSTOMER : DEMAND;
ROUTES( WAREHOUSE, CUSTOMER): COST, VOLUME;
PXR (WAREHOUSE,HEADER1): SLASUR;
RXP (CUSTOMER, HEADER1): SLASUR1;
ENDSETS
SUBMODEL TS:
! The objective;
[OBJ] MIN = @SUM( ROUTES: COST * VOLUME);
! The demand constraints;
@FOR( CUSTOMER( J): [R_DEM]
@SUM( WAREHOUSE( I): VOLUME( I, J)) >= DEMAND( J));
! The supply constraints;
@FOR( WAREHOUSE( I): [R_SUP]
@SUM( CUSTOMER( J): VOLUME( I, J)) <= CAPACITY( I));
ENDSUBMODEL
DATA:
! Warehouse attributes;
WAREHOUSE, CAPACITY =
W1 30
W2 25
W3 21;

! Customer attributes;
CUSTOMER, DEMAND =
C1 15
C2 17
C3 22
C4 12;

! Cost C1 C2 C3 C4;
COST = 6, 2, 6, 7, ! W1;
4, 9, 5, 3, ! W2;
8, 8, 1, 5; ! W3;

INFINITY = 1.E30;
LENF1S = 18;
LENF1R = 18;
ENDDATA

179
C2-B6 Solving Problems with LINGO Transport Solution | Case 1 | Transport

CALC:
! STANDARD REPORT SOLUTION;
@WRITE( @NEWLINE( 1),'STANDARD REPORT SOLUTION', @NEWLINE( 1));
! Execute sub-model TS;
@SOLVE(TS);
! MIMIC THE STANDARD LINGO SOLUTION REPORT;
@WRITE( @NEWLINE( 1),'SIMILAR SOLUTION REPORT', @NEWLINE( 1));
! OBJECTIVE VALUE;
@WRITE( 3*' ',
@IF( @STATUS() #EQ# 0, 'Global optimal', '**** Non-global ***'), ' solution found at iteration:',
@FORMAT( @ITERS(), '8.14G'),
@NEWLINE( 1));
@WRITE( 3*' ', 'Objective value:', @FORMAT( OBJ, '#35.7G'), @NEWLINE( 2));
! HEADER - VARIABLE, VALUE AND REDUCED COST;
@WRITE( 10*' ', 'Variable Value Reduced Cost', @NEWLINE( 1) );
! Variable and Reduced Cost: CAPACITY;
@WRITEFOR( WAREHOUSE( I): ( LENF1S - @STRLEN( @NAME( CAPACITY( I))))*' ', @NAME( CAPACITY( I)),
@FORMAT( CAPACITY( I), '#16.7G'),
@FORMAT( @DUAL( CAPACITY( I)), '#20.6G'),
@NEWLINE( 1) );
! Variable and Reduced Cost: DEMAND;
@WRITEFOR( CUSTOMER( I):
( LENF1S - @STRLEN( @NAME( DEMAND( I))))*' ', @NAME( DEMAND( I)),
@FORMAT( DEMAND( I), '#16.7G'),
@FORMAT( @DUAL( DEMAND( I)), '#20.6G'),
@NEWLINE( 1));
! Variable and Reduced Cost: COST;
@WRITEFOR( ROUTES( I, J):
( LENF1S - @STRLEN( @NAME( COST( I, J))))*' ', @NAME( COST( I, J)),
@FORMAT( COST( I, J), '#16.7G'),
@FORMAT( @DUAL( COST( I, J)), '#20.6G'),
@NEWLINE( 1));
! Variable and Reduced Cost: VOLUME;
@WRITEFOR( ROUTES( I, J): ( LENF1S - @STRLEN( @NAME( VOLUME( I, J))))*' ', @NAME( VOLUME( I, J)),
@FORMAT( VOLUME( I, J), '#16.7G'),
@FORMAT( @DUAL( VOLUME( I, J)), '#20.7G'),
@NEWLINE( 1));
! HEADER - SLACK OR SURPLUS AND DUAL PRICE;
@WRITE( @NEWLINE( 1), 15*' ','Row Slack or Surplus Dual Price', @NEWLINE( 1) );
@WRITE(15*' ','OBJ',
@FORMAT( OBJ, '#16.7G'),
@FORMAT( @DUAL( OBJ), '#20.7G'),
@NEWLINE( 1));
! Slack or Surplus and Dual Price: DEMAND;
@WRITEFOR( CUSTOMER( I): ( LENF1S - @STRLEN( @NAME( R_DEM( I))))*' ', @NAME( R_DEM( I)),
@FORMAT( R_DEM( I), '#16.7G'),
@FORMAT( @DUAL( R_DEM( I)), '#20.7G'),
@NEWLINE( 1));
! Slack or Surplus and Dual Price: CAPACITY;
@WRITEFOR( WAREHOUSE( I): ( LENF1S - @STRLEN( @NAME( R_SUP( I))))*' ', @NAME( R_SUP( I)),
@FORMAT( R_SUP( I), '#16.7G'),
@FORMAT( @DUAL( R_SUP( I)), '#20.7G'),
@NEWLINE( 1));

180
C2-B6 Solving Problems with LINGO Transport Solution | Case 1 | Transport

! MIMIC THE STANDARD LINGO RANGE REPORT;


! Header;
@WRITE( @NEWLINE( 1), ' Ranges in which the basis is unchanged:', @NEWLINE( 2));
! Objective Coefficient Ranges;
@WRITE( ' ', 'Objective Coefficient Ranges', @NEWLINE( 1));
@WRITE( 28*' ', 'Current Allowable Allowable', @NEWLINE( 1));
@WRITE( 10*' ', 'Variable Coefficient Increase Decrease', @NEWLINE( 1));
! COST/VOLUME;
! @TEXT() = ;
@WRITEFOR( ROUTES( I, J): ( LENF1R - @STRLEN( @NAME( VOLUME( I, J))))*' ',
@NAME( VOLUME( I, J)), @FORMAT( COST( I, J), '#17.7G'),
@IF( @RANGEU( VOLUME( I, J)) #LT# INFINITY,
@FORMAT( @RANGEU( VOLUME( I, J)), '#17.7G'),' INFINITY'),
@IF( @RANGED( VOLUME( I, J)) #LT# INFINITY,
@FORMAT( @RANGED( VOLUME( I, J)), '#17.7G'),' INFINITY'),
@NEWLINE( 1) );
! Righthand Side Ranges:
@WRITE( @NEWLINE( 1), ' ', 'Righthand Side Ranges', @NEWLINE( 1));
@WRITE( 15*' ','Row Current Allowable Allowable', @NEWLINE( 1));
@WRITE( 32*' ', 'RHS Increase Decrease', @NEWLINE( 1));
! DEMAND;
@WRITEFOR( CUSTOMER( I): ( LENF1R - @STRLEN( @NAME( R_DEM( I))))*' ',
@NAME( R_DEM( I)), @FORMAT( DEMAND( I), '#17.7G'),
@IF( @RANGEU( R_DEM( I)) #LT# INFINITY,
@FORMAT( @RANGEU( R_DEM( I)), '#17.7G'), ' INFINITY'),
@FORMAT( @RANGED( R_DEM( I)), '#17.7G'),
@NEWLINE( 1));
! CAPACITY;
@WRITEFOR( WAREHOUSE( I): ( LENF1R - @STRLEN( @NAME( R_SUP( I))))*' ', @NAME( R_SUP( I)),
@FORMAT( CAPACITY( I), '#17.7G'),
@IF( @RANGEU( R_SUP( I)) #LT# INFINITY,
@FORMAT( @RANGEU( R_SUP( I)), '#17.7G'), ' INFINITY'),
@FORMAT( @RANGED( R_SUP( I)), '#17.7G'),
@NEWLINE( 1));

181
C2-B6 Solving Problems with LINGO Transport Solution | Case 1 | Transport

! COMPACT REPORT SOLUTION;


@WRITE( @NEWLINE( 1),'COMPACT REPORT SOLUTION', @NEWLINE( 1));
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE:", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND:", @NEWLINE( 1));
@TABLE(DEMAND);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' From: ',
@FORMAT(WAREHOUSE( I),'-3s'), ' Ship to: ' ,
@FORMAT(CUSTOMER( J),'-3s'), ' ',
@FORMAT(VOLUME( I, J),'%2.0f'),'Un x Unit cost: $',
@FORMAT(COST( I, J),'%3.2f') ,' = Total: $',
@FORMAT(COST( I, J) * VOLUME(I,J),'%6.2f'),
@NEWLINE( 1));
! Slack/Surplus Product report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = CONSUMER DEMAND (un): ", @NEWLINE( 1));
@FOR(RXP(L,C):
SLASUR1(L,2) = DEMAND(L);
SLASUR1(L,1) = SLASUR1(L,2) - R_DEM(L);
SLASUR1(L,3) = SLASUR1(L,1) - SLASUR1(L,2););
@TABLE(SLASUR1);
! Slack/Surplus Product report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = WAREHOUSES CAPACITY (un): ", @NEWLINE( 1));
@FOR(PXR(L,C):
SLASUR(L,2) = CAPACITY(L);
SLASUR(L,1) = SLASUR(L,2) - R_SUP(L);
SLASUR(L,3) = SLASUR(L,1) - SLASUR(L,2););
@TABLE(SLASUR);
@WRITE( @NEWLINE( 1),' ALTERNATIVE TO GENERATE THE SCALAR MODEL', @NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(TS);
ENDCALC
END

182
Infeasibilities: 0.000000
Total solver iterations: 6
Elapsed runtime seconds: 0.05

Model Class: LP

C2-B6
Total variables:
Solving Problems with LINGO
Nonlinear variables:
12
0
Transport Solution | Case 1 | Transport
Integer variables: 0
Total constraints: 8
❖ DATA
Nonlinear constraints: 0
Total nonzeros: 36
All problem data is organized in the data block as a set of
Nonlinear nonzeros: 0
members and value attributes, which can be viewed below.

Variable Value Reduced Cost


INFINITY 0.1000000E+31 0.000000
LENF1S 18.00000 0.000000
LENF1R 18.00000 0.000000
CAPACITY( W1) 30.00000 0.000000
STANDARD REPORT
CAPACITY( W2)SOLUTION 25.00000 0.000000
Global optimal
CAPACITY( W3) solution21.00000
found. 0.000000
Objective value: 161.0000
DEMAND( C1) 15.00000 0.000000
Infeasibilities: 0.000000
DEMAND( C2) 17.00000 0.000000
Total solver iterations: 6
DEMAND( C3) 22.00000 0.000000
Elapsed runtime seconds: 0.05
DEMAND( C4) 12.00000 0.000000
COST( W1,
Model Class: C1) 6.000000 0.000000
LP
COST( W1, C2) 2.000000 0.000000
COST( variables:
Total W1, C3) 6.000000 0.000000
12
COST( W1, C4)
Nonlinear variables: 7.000000 0.0000000
COST( W2,
Integer C1)
variables: 4.000000 0.0000000
COST( W2, C2)
Total constraints: 9.000000 0.0000008
COST( W2, C3)
Nonlinear constraints: 5.000000 0.0000000
COST( nonzeros:
Total W2, C4) 3.000000 0.000000
36
COST( W3, nonzeros:
Nonlinear C1) 8.000000 0.0000000
COST( W3, C2) 8.000000 0.000000
COST( W3, C3)
Variable 1.000000
Value 0.000000
Reduced Cost
COST( W3,INFINITY
C4) 0.1000000E+31
5.000000 0.000000
0.000000
VOLUME( W1, LENF1S
C1) 18.00000
2.000000 0.000000
0.000000
VOLUME( W1, LENF1R
C2) 18.00000
17.00000 0.000000
0.000000
CAPACITY(
VOLUME( W1, C3) W1) 30.00000
1.000000 0.000000
0.000000
CAPACITY(
VOLUME( W1, C4) W2) 25.00000
0.000000 0.000000
2.000000
CAPACITY(
VOLUME( W2, C1) W3) 21.00000
13.00000 0.000000
0.000000
VOLUME(DEMAND(
W2, C2) C1) 15.00000
0.000000 0.000000
9.000000
VOLUME(DEMAND(
W2, C3) C2) 17.00000
0.000000 0.000000
1.000000
DEMAND(
VOLUME( W2, C4) C3) 22.00000
12.00000 0.000000
0.000000
DEMAND(
VOLUME( W3, C1) C4) 12.00000
0.000000 0.000000
7.000000
COST( W1, C1) 6.000000 0.000000
VOLUME( W3, C2) 0.000000 11.00000
COST( W1, C2) 2.000000 0.000000
VOLUME( W3, C3) 21.00000 0.000000
COST( W1, C3) 6.000000 0.000000
VOLUME( W3, C4) 0.000000 5.000000
COST( W1, C4) 7.000000 0.000000
COST( W2, C1) 4.000000 0.000000
❖ SOLUTION - Row
COST( W2, C2) Slack
STANDARD or Surplus
REPORT
9.000000 SOLUTIONDual Price
0.000000
OBJ
COST( W2, C3) 161.0000
5.000000 -1.000000
0.000000
R_DEM(
COST( W2,C1)
C4) 0.000000 -6.000000
STANDARD REPORT SOLUTION 3.000000 0.000000
COST(optimal
Global W3, C1)solution 8.000000
found. 0.000000
COST( W3,
Objective C2)
value: 8.000000 0.000000
161.0000 1
COST( W3, C3)
Infeasibilities: 1.000000 0.000000
0.000000
COST(
Total W3, C4)
solver iterations:5.000000 0.000000
6
VOLUME( runtime
Elapsed W1, C1) seconds:2.000000 0.000000
0.05
VOLUME( W1, C2) 17.00000 0.000000
VOLUME(
Model W1, C3)
Class: 1.000000 0.000000
LP
VOLUME( W1, C4) 0.000000 2.000000
VOLUME(
Total W2, C1)
variables: 13.00000 0.000000
12
VOLUME( W2,
Nonlinear C2)
variables: 0.000000 9.000000
0
Integer
VOLUME( variables:
W2, C3) 0.000000 0
1.000000
Total constraints:
VOLUME( W2, C4) 12.00000 8
0.000000
Nonlinear
VOLUME( W3,constraints:
C1) 0.000000 0
7.000000
Total nonzeros:
VOLUME( W3, C2) 0.000000 36
11.00000
Nonlinear
VOLUME( W3,nonzeros:
C3) 21.00000 0
0.000000
VOLUME( W3, C4) 0.000000 5.000000
Variable Value Reduced Cost
INFINITY
Row 0.1000000E+31
Slack or Surplus 0.000000
Dual Price
LENF1S
OBJ 18.00000
161.0000 0.000000
-1.000000
LENF1R
R_DEM( C1) 18.00000
0.000000 0.000000
-6.000000
CAPACITY( W1) 30.00000 0.000000
CAPACITY( W2) 25.00000 0.000000
1
CAPACITY( W3) 21.00000 0.000000
DEMAND( C1) 15.00000 0.000000
DEMAND( C2) 17.00000 0.000000
DEMAND( C3) 22.00000 0.000000
DEMAND( C4) 12.00000 0.000000
COST( W1, C1) 6.000000 0.000000
COST( W1, C2) 2.000000 0.000000
COST( W1, C3) 6.000000 0.000000
COST( W1, C4) 7.000000 0.000000
COST( W2, C1) 4.000000 183
0.000000
COST( W2, C2) 9.000000 0.000000
COST( W2, C3) 5.000000 0.000000
R_DEM( C2) 0.000000 -2.000000
R_DEM( C3) 0.000000 -6.000000
R_DEM( C4) 0.000000 -5.000000
R_SUP( W1) 10.00000 0.000000
R_SUP( W2) 0.000000 2.000000
C2-B6 Solving
R_SUP( W3) Problems with LINGO
0.000000 5.000000 Transport Solution | Case 1 | Transport

❖ DATA SOLUTION REPORT


SIMILAR
Global R_DEM(
optimalC2) solution found
0.000000at iteration: -2.000000 6
All problem
Objective data is
value:
R_DEM( C3) organized in the
0.000000 data block as a set of
161.0000
-6.000000 members and value attributes, which can be viewed below.
R_DEM( C4) 0.000000 -5.000000
Variable
R_SUP( W1) Value
10.00000 Reduced Cost
0.000000
CAPACITY( W1)
R_SUP( W2) 30.00000
0.000000 0.00000
2.000000
CAPACITY(
R_SUP(W2) W3) 25.00000
0.000000 0.00000
5.000000
CAPACITY( W3) 21.00000 0.00000
DEMAND( C1) 15.00000 0.00000
SIMILAR DEMAND(
SOLUTIONC2) REPORT 17.00000 0.00000
DEMAND(
Global C3) solution
optimal 22.00000
found at iteration:0.00000 6
DEMAND( value:
Objective C4) 12.00000 0.00000
161.0000
COST( W1, C1) 6.000000 0.00000
COST( W1, C2)
Variable 2.000000
Value 0.00000
Reduced Cost
COST( W1, C3)
CAPACITY( W1) 6.000000
30.00000 0.00000
0.00000
COST( W1, C4)
CAPACITY( W2) 7.000000
25.00000 0.00000
0.00000
COST( W2, C1)
CAPACITY( W3) 4.000000
21.00000 0.00000
0.00000
COST( W2, C2)
DEMAND( C1) 9.000000
15.00000 0.00000
0.00000
COST( W2, C3)
DEMAND( C2) 5.000000
17.00000 0.00000
0.00000
COST( W2, C4)
DEMAND( C3) 3.000000
22.00000 0.00000
0.00000
COST( W3, C1)
DEMAND( C4) 8.000000
12.00000 0.00000
0.00000
COST(
COST(W3, W1,C2)
C1) 8.000000
6.000000 0.00000
0.00000
COST(
COST(W3, W1,C3)
C2) 1.000000
2.000000 0.00000
0.00000
COST(
COST(W3, W1,C4)
C3) 5.000000
6.000000 0.00000
0.00000
VOLUME(
COST(W1, W1,C1)
C4) 2.000000
7.000000 0.000000
0.00000
VOLUME(
COST(W1, W2,C2)
C1) 17.00000
4.000000 0.000000
0.00000
VOLUME(
COST(W1, W2,C3)
C2) 1.000000
9.000000 0.000000
0.00000
VOLUME(
COST(W1, W2,C4)
C3) 0.000000
5.000000 2.000000
0.00000
VOLUME(
COST(W2, W2,C1)
C4) 13.00000
3.000000 0.000000
0.00000
VOLUME(
COST(W2, W3,C2)
C1) 0.000000
8.000000 9.000000
0.00000
VOLUME(
COST(W2, W3,C3)
C2) 0.000000
8.000000 1.000000
0.00000
VOLUME(
COST(W2, W3,C4)
C3) 12.00000
1.000000 0.000000
0.00000
VOLUME(
COST(W3, W3,C1)
C4) 0.000000
5.000000 7.000000
0.00000
VOLUME(
VOLUME(W3, W1,C2)
C1) 0.000000
2.000000 11.00000
0.000000
VOLUME(
VOLUME( W3,W1,C3)
R_DEM( C2)
C2) 21.00000
17.00000
0.000000 0.000000
0.000000
-2.000000
VOLUME(
VOLUME( W3, C4)
W1, C3)
R_DEM( C3) 0.000000
1.000000
0.000000 5.000000
0.000000
-6.000000
VOLUME( W1, C4)
R_DEM( C4) 0.000000
0.000000 2.000000
-5.000000
VOLUME( W2,Row
R_SUP( W1) Slack 13.00000
C1) or Surplus
10.00000 Dual0.000000
Price
0.000000
VOLUME( W2,OBJ
R_SUP( W2)C2) 161.0000
0.000000
0.000000 -1.000000
9.000000
2.000000
R_DEM(
VOLUME( W2,C1)
R_SUP( C3)
W3) -0.000000
0.000000
0.000000 -6.000000
1.000000
5.000000
❖ SOLUTION R_DEM(
VOLUME( -W2,C2)
C4)
SIMILAR -0.000000
12.00000
SOLUTION REPORT -2.000000
0.000000
R_DEM(
VOLUME( W3,C3)
C1) -0.000000
0.000000 -6.000000
7.000000
R_DEM(
VOLUME( W3,C4)
C2) -0.000000
0.000000 -5.000000
11.00000
SIMILAR SOLUTION REPORT
R_SUP(
VOLUME( W1) 10.00000 -0.000000
Global optimal solution found at iteration:0.0000006
W3, C3) 21.00000
R_SUP(
VOLUME( W2)
W3,value:
C4) 0.000000
0.000000 2.000000
5.000000
Objective 161.0000
R_SUP( W3) 0.000000 5.000000
Row
Variable Slack orValue
Surplus Dual Price
Reduced Cost
SIMILAR RANGE REPORT OBJ 161.0000 -1.000000
CAPACITY( W1) 30.00000 0.00000
R_DEM( C1)
CAPACITY( W2) -0.000000
25.00000 -6.000000
0.00000
R_DEM(
CAPACITY( W3)C2) -0.000000
21.00000 -2.000000
0.00000
R_DEM( C3)
DEMAND( C1) -0.000000
15.00000 -6.000000
0.00000 2
R_DEM( C4) -0.000000 -5.000000
DEMAND( C2) 17.00000 0.00000
R_SUP( W1) 10.00000 -0.000000
DEMAND( C3) 22.00000 0.00000
R_SUP( W2) 0.000000 2.000000
DEMAND( C4) 12.00000 0.00000
R_SUP( W3) 0.000000 5.000000
COST( W1, C1) 6.000000 0.00000
COST( W1, C2) 2.000000 0.00000
SIMILAR RANGE REPORT
COST( W1, C3) 6.000000 0.00000
COST( W1, C4) 7.000000 0.00000
COST( W2, C1) 4.000000 0.00000
COST( W2, C2) 9.000000 0.00000 2
COST( W2, C3) 5.000000 0.00000
COST( W2, C4) 3.000000 0.00000
COST( W3, C1) 8.000000 0.00000
COST( W3, C2) 8.000000 0.00000
COST( W3, C3) 1.000000 0.00000
COST( W3, C4) 5.000000 0.00000
VOLUME( W1, C1) 2.000000 0.000000
VOLUME( W1, C2) 17.00000 0.000000
VOLUME( W1, C3) 1.000000 0.000000
VOLUME( W1, C4) 0.000000 2.000000
VOLUME( W2, C1) 13.00000 0.000000
VOLUME( W2, C2) 0.000000 9.000000
VOLUME( W2, C3) 0.000000 1.000000
VOLUME( W2, C4) 12.00000
184
0.000000
VOLUME( W3, C1) 0.000000 7.000000
R_DEM( C4) 0.000000 -5.000000
R_SUP( W1) 10.00000 0.000000
R_SUP( W2) 0.000000 2.000000
R_SUP( W3) 0.000000 5.000000
C2-B6 Solving Problems with LINGO Transport Solution | Case 1 | Transport

SIMILAR SOLUTION REPORT


❖ DATA
Global optimal solution found at iteration: 6
Objective
All problem data value:
is organized in the data block as a set of members 161.0000
and value attributes, which can be viewed below.

Variable Value Reduced Cost


CAPACITY( W1) 30.00000 0.00000
CAPACITY( W2) 25.00000 0.00000
CAPACITY( W3) 21.00000 0.00000
DEMAND( C1) 15.00000 0.00000
DEMAND( C2) 17.00000 0.00000
DEMAND( C3) 22.00000 0.00000
DEMAND( C4) 12.00000 0.00000
COST( W1, C1) 6.000000 0.00000
COST( W1, C2) 2.000000 0.00000
COST( W1, C3) 6.000000 0.00000
COST( W1, C4) 7.000000 0.00000
COST( W2, C1) 4.000000 0.00000
COST( W2, C2) 9.000000 0.00000
COST( W2, C3) 5.000000 0.00000
COST( W2, C4) 3.000000 0.00000
COST( W3, C1) 8.000000 0.00000
COST( W3, C2) 8.000000 0.00000
COST( W3, C3) 1.000000 0.00000
COST( W3, C4) 5.000000 0.00000
VOLUME( W1, C1) 2.000000 0.000000
VOLUME( W1, C2) 17.00000 0.000000
VOLUME( W1, C3) 1.000000 0.000000
VOLUME( W1, C4) 0.000000 2.000000
VOLUME( W2, C1) 13.00000 0.000000
VOLUME( W2, C2) 0.000000 9.000000
❖ SOLUTION - SIMILAR
VOLUME( W2, C3) RANGE REPORT0.000000 1.000000
VOLUME(
Ranges W2, the
in which C4)basis is unchanged:
12.00000 0.000000
VOLUME( W3, C1) 0.000000 7.000000
Objective Coefficient Ranges
VOLUME( W3, C2) 0.000000Allowable
Current
11.00000
Allowable
VOLUME( W3, C3) Coefficient
Variable 21.00000 Increase 0.000000
Decrease
VOLUME( W3,
VOLUME( W1, C1)C4) 0.000000 0.000000
6.000000 5.000000
0.000000
VOLUME( W1, C2) 2.000000 0.000000 0.000000
VOLUME( W1, C3) 6.000000 0.000000 0.000000
VOLUME( W1, C4)Row Slack or Surplus
7.000000 0.000000 Dual0.000000
Price
VOLUME( W2, C1)OBJ 161.0000 0.000000
4.000000 -1.000000
0.000000
VOLUME( W2, C2) 9.000000
R_DEM( C1)
VOLUME( W2, C3)
-0.000000 0.000000
5.000000 0.000000
0.000000
-6.000000
0.000000
R_DEM(
VOLUME( W2, C4)C2) -0.000000 0.000000
3.000000 -2.000000
0.000000
R_DEM(
VOLUME( W3, C1)C3) -0.000000 0.000000
8.000000 -6.000000
0.000000
VOLUME( W3, C2) 8.000000
R_DEM( C4)
VOLUME( W3, C3)
-0.000000 0.000000
1.000000 0.000000
0.000000
-5.000000
0.000000
R_SUP(
VOLUME( W3, C4)W1) 10.00000 0.000000
5.000000 -0.000000
0.000000
R_SUP( W2) 0.000000 2.000000
Righthand Side Ranges
R_SUP( W3) 0.000000 5.000000
Row Current Allowable Allowable
RHS Increase Decrease
SIMILAR R_DEM(
RANGEC1)
REPORT 15.00000 0.000000 0.000000
R_DEM( C2) 17.00000 0.000000 0.000000
R_DEM( C3) 22.00000 0.000000 0.000000
R_DEM( C4) 12.00000 0.000000 0.000000
R_SUP( W1) 30.00000 0.000000 0.000000 2
R_SUP( W2) 25.00000 0.000000 0.000000
R_SUP( W3) 21.00000 0.000000 0.000000

COMPACT REPORT SOLUTION


DATA: 185
SHIPPING COST:
C1 C2 C3 C4
C2-B6 Solving Problems with LINGO Transport Solution | Case 1 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

COMPACT REPORT SOLUTION


DATA:
SHIPPING COST:
C1 C2 C3 C4
W1 6.000000 2.000000 6.000000 7.000000
W2 4.000000 9.000000 5.000000 3.000000
W3 8.000000 8.000000 1.000000 5.000000

AVAILABLE:
W1 30.00000
W2 25.00000
W3 21.00000
COMPACT REPORT SOLUTION
DEMAND:
DATA:
C1 15.00000
SHIPPING COST:
C2 17.00000
C1 C2 C3 C4
W1C36.000000
22.000002.000000 6.000000 7.000000
W2C44.000000
12.000009.000000 5.000000 3.000000
W3 8.000000 8.000000 1.000000 5.000000
SOLUTION
Model Class: LP
AVAILABLE:
W1 30.00000
IDEAL
W2 TRANSPORT PROGRAM:
25.00000
From:
W3 W1
21.00000 Ship to: C1 2Un x Unit cost: $6.00 = Total: $ 12.00
From: W1 Ship to: C2 17Un x Unit cost: $2.00 = Total: $ 34.00
From: W1
DEMAND: Ship to: C3 1Un x Unit cost: $6.00 = Total: $ 6.00
From: W2
C1 15.00000 Ship to: C1 13Un x Unit cost: $4.00 = Total: $ 52.00
From:
C2 W2
17.00000 Ship to: C4 12Un x Unit cost: $3.00 = Total: $ 36.00
From: W3
C3 22.00000 Ship to: C3 21Un x Unit cost: $1.00 = Total: $ 21.00
C4 12.00000
SLACK/SURPLUS LIMIT = CONSUMER DEMAND (un):
❖ SOLUTION
SOLUTION PROD LIMIT VALUE
C1 15.00000
Below isClass:
Model the solution 15.00000 0.000000
LP achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
C2 17.00000 17.00000 0.000000
C3 TRANSPORT
IDEAL 22.00000 PROGRAM:
22.00000 0.000000
C4
From: W1 12.00000
Ship to:12.00000
C1 0.000000
2Un x Unit cost: $6.00 = Total: $ 12.00
From: W1 Ship to: C2 17Un x Unit cost: $2.00 = Total: $ 34.00
SLACK/SURPLUS
From: W1 LIMIT
Ship to: C3 = WAREHOUSES
1Un x UnitCAPACITY
cost: (un):
$6.00 = Total: $ 6.00
From: W2 PRODto: C1 LIMIT
Ship 13Un x VALUE
Unit cost: $4.00 = Total: $ 52.00
W1 W220.00000
From: Ship to: 30.00000
C4 12Un -10.00000
x Unit cost: $3.00 = Total: $ 36.00
W2
From: W3 25.00000 25.00000
Ship to: C3 21Un 0.000000
x Unit cost: $1.00 = Total: $ 21.00
W3 21.00000 21.00000 0.000000
SLACK/SURPLUS LIMIT = CONSUMER DEMAND (un):
ALTERNATIVE
PROD TO GENERATE
LIMIT THE SCALAR MODEL
VALUE
C1 15.00000 15.00000 0.000000
C2 17.00000 17.00000 0.000000
C3 22.00000 22.00000 0.000000
C4 12.00000 12.00000 0.000000

SLACK/SURPLUS LIMIT = WAREHOUSES CAPACITY (un):


PROD LIMIT VALUE
W1 20.00000 30.00000 -10.00000 1
W2 25.00000 25.00000 0.000000
W3 21.00000 21.00000 0.000000

ALTERNATIVE TO GENERATE THE SCALAR MODEL

186
1
C2-B6 Solving Problems with LINGO Minimize the use of Trucks | Case 2 | Transport

GOAL

2
A mining company wants to minimize the use of trucks carrying ore (from where it is removed) and
deposits (where it is stored).

The table below gives the distances involved in feet:

Destination Deposits Available


Blocks
• Product Mix Minimum Maximum
Origin D1 D2
( ton ) ( ton )
• Blend
• Finance A feet 300 400 20,000 40,000

• Investments B feet 600 700 40,000 60,000


• Diet
C feet 800 300 45,000 60,000
• Aviation
• Transport Capacity Ton 50,000 60,000 - -

• Agriculture The maximum capacity of receiving deposits 1 and 2 are respectively 50,000 and 60,000 tons.
• Construction Knowing that each truck journey carries 100 tons, we ask for the transportation scheme that
minimizes the total distance covered
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Distribution
• Consumer
• Logistics

Source:
• Book 1
• Page 81

187
C2-B6 Solving Problems with LINGO Minimize the use of Trucks | Case 2 | Transport
MODEL:
SETS:
ORIGIN: AVAILABLE_MIN, AVAILABLE_MAX;
DESTINATION: CAPACITY ;
ROUTES( ORIGIN, DESTINATION): DISTANCE, VOLUME;
ENDSETS
DATA:
! Supplier attributes;
ORIGIN, AVAILABLE_MIN, AVAILABLE_MAX =
A 20000 40000
B 40000 60000
C 45000 60000;
! Consumer attributes;
DESTINATION, CAPACITY =
D1 50000
D2 60000;
! Distance D1 D2;
DISTANCE = 300 400 ! A;
600 700 ! B;
800 300; ! C;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( ROUTES( I, J): DISTANCE( I, J) * VOLUME( I, J));
! Origin A constraints;
@SUM(DESTINATION(J):VOLUME(1,J)) >= AVAILABLE_MIN(1)/100;
@SUM(DESTINATION(J):VOLUME(1,1)) <= AVAILABLE_MAX(1)/100;
! Origin B constraints;
@SUM(DESTINATION(J): VOLUME(2,J)) >= AVAILABLE_MIN(2)/100;
@SUM(DESTINATION(J): VOLUME(2,J)) <= AVAILABLE_MIN(2)/100;
! Origin C constraints;
@SUM(DESTINATION(J): VOLUME(3,J)) >= AVAILABLE_MIN(3)/100;
@SUM(DESTINATION(J): VOLUME(3,J)) <= AVAILABLE_MIN(3)/100;
! The Capacity constraints;
@SUM(ORIGIN(I): VOLUME(I,1)) <= CAPACITY(1)/100;
@SUM(ORIGIN(I): VOLUME(I,2)) <= CAPACITY(2)/100;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " DISTANCE (feet):", @NEWLINE( 1));
@TABLE(DISTANCE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE MINIMUM (Ton):", @NEWLINE( 1));
@TABLE(AVAILABLE_MIN);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE MAXIMUM (Ton):", @NEWLINE( 1));
@TABLE(AVAILABLE_MAX);
@WRITE(" ", @NEWLINE( 1), " CAPACITY (Ton):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN2);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( K, L) | VOLUME(K,L) #GT# 0: ' ',@NAME(VOLUME(K,L)),
@FORMAT(VOLUME( K, L),'%4.0f'), ' Travel x Distance:',
@FORMAT(DISTANCE(K, L),'%4.0f'),'Feet = ',
@FORMAT(DISTANCE (K, L) * VOLUME(K,L),'%6.0f'),
@NEWLINE( 1));
@WRITE( " Total:", 8*' ',
@SUM(ROUTES(K,L): VOLUME(K,L))," Travel", 23*' ',
@SUM(ROUTES(K,L): DISTANCE (K, L) * VOLUME(K,L)), @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

188
C2-B6 Solving Problems with LINGO Minimize the use of Trucks | Case 2 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
DISTANCE (feet):
D1 D2
A 300.0000 400.0000
B 600.0000 700.0000
C 800.0000 300.0000

AVAILABLE MINIMUM (Ton):


A 20000.00
B 40000.00
C 45000.00

AVAILABLE MAXIMUM (Ton):


A 40000.00
B 60000.00
C 60000.00

CAPACITY (Ton):
D1 50000.00
D2 60000.00

SOLUTION:
Global optimal solution found.
Objective value: 445000.0
Infeasibilities: 0.000000
Total solver iterations: 0
Elapsed runtime seconds: 0.04
DATA:
DISTANCE (feet):
IDEAL TRANSPORT
D1 PROGRAM:
D2
VOLUME(
A A,
300.0000
❖ SOLUTION D1) 200 Travel
400.0000 x Distance: 300Feet = 60000
VOLUME( B, D1)
B 600.0000 700.0000300 Travel x Distance: 600Feet = 180000
VOLUME(
Below B, D2) 100
is the solution
C 800.0000 achieved byx LINGO
Travel
300.0000 Distance: 700Feet = 0,70000
with infeasibilities and the detailed report that makes up the optimal
VOLUME( C, D2) 450 Travel x Distance: 300Feet = 135000
Total:
SOLUTION: 1050 Travel 445000
Global optimal solution found.
Objective value: 445000.0
Infeasibilities: 0.000000

IDEAL TRANSPORT PROGRAM:


VOLUME( A, D1) 100 Travel x Distance: 300Feet = 30000
VOLUME( A, D2) 100 Travel x Distance: 400Feet = 40000
VOLUME( B, D1) 400 Travel x Distance: 600Feet = 240000
VOLUME( C, D2) 450 Travel x Distance: 300Feet = 135000
Total: 1050 Travel 445000

189
C2-B6 Solving Problems with LINGO Delivery 2 | Case 3 | Transport

GOAL

3 A company has two branches and provides the delivery service to six different store.

Answer which customers to attend, from each affiliate, in order to minimize their cost of
delivery.

All the data for the development of the model are described below:
Blocks
• Product Mix
Store Store Store Store Store Store Available
• Blend Shipping
1 2 3 4 5 6 (un)
• Finance
• Investments Branch 1 $ 7.00 9.00 1.00 12.00 7.00 4.00 2,500

• Diet
• Aviation Branch 2 $ 4.00 5.00 12.00 1.00 3.00 8.00 2,000

• Transport
Demand un 1400 1560 300 150 570 520 -
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Distribution
• Consumer
• Logistics

190
C2-B6 Solving Problems with LINGO Delivery 2 | Case 3 | Transport
MODEL:
SETS:
SUPPLIER: AVAILABLE;
CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): COST, VOLUME;
ENDSETS
DATA:
! Supplier attributes;
SUPPLIER, AVAILABLE =
BRANCH1 2500
BRANCH2 2000;
! Consumer attributes;
CONSUMER, DEMAND =
STORE1 1400
STORE2 1560
STORE3 300
STORE4 150
STORE5 570
STORE6 520;
! Cost STO1 STO2 STO3 STO4 STO5 STO6;
COST = 7 9 1 12 7 4 ! Branch1;
4 5 12 1 3 8; ! Branch2;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( CONSUMER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) = DEMAND( J));
! The available constraints;
@FOR( SUPPLIER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) <= AVAILABLE( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING COST ($):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Unity):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (Unity):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' ', SUPPLIER( I), ' Ship ',
@FORMAT(VOLUME( I, J),'%4.0f'), 'Un To ',
@FORMAT(CONSUMER( J),'-6s'), ' Shipping cost: $',
@FORMAT(COST (I, J),'%4.2f'), ' Total: $',
@FORMAT(COST (I, J) * VOLUME(I,J),'%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

191
C2-B6 Solving Problems with LINGO Delivery 2 | Case 3 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
SHIPPING COST ($):
STORE1 STORE2 STORE3 STORE4 STORE5 STORE6
BRANCH1 7.000000 9.000000 1.000000 12.00000 7.000000 4.000000
BRANCH2 4.000000 5.000000 12.00000 1.000000 3.000000 8.000000

AVAILABLE (Unity):
BRANCH1 2500.000
BRANCH2 2000.000

DEMAND (Unity):
STORE1 1400.000
STORE2 1560.000
STORE3 300.0000
DATA:
STORE4 150.0000
SHIPPING
STORE5 COST ($):
570.0000
DATA:
STORE6 STORE1
520.0000 STORE2 STORE3 STORE4 STORE5 STORE6
BRANCH1COST
SHIPPING 7.000000
($): 9.000000 1.000000 12.00000 7.000000 4.000000
SOLUTION:
BRANCH2 4.000000
STORE1 5.000000
STORE2 12.00000
STORE3 1.000000
STORE4 3.000000 STORE5 8.000000
STORE6
Global optimal solution found.
BRANCH1 7.000000 9.000000 1.000000 12.00000 7.000000 4.000000
Objective
AVAILABLE value:
BRANCH2 (Unity):
4.000000 5.000000 12.00000 1.000000 3.000000 22960.00
8.000000
Infeasibilities:
BRANCH1 2500.000 0.000000
BRANCH2 2000.000
AVAILABLE (Unity):
Model Class: LP
BRANCH1 2500.000
DEMAND
BRANCH2
IDEAL (Unity):
2000.000
TRANSPORT PROGRAM:
STORE1 1400.000
BRANCH1 Ship 1400Un To STORE1 Shipping cost: $7.00 Total: $9800.00
STORE2(Unity):
DEMAND
BRANCH1 1560.000
Ship 300Un To STORE3 Shipping cost: $1.00 Total: $ 300.00
STORE3
STORE1
BRANCH1 Ship300.0000
1400.000
280Un To STORE5 Shipping cost: $7.00 Total: $1960.00
STORE4
STORE2 Ship
BRANCH1 150.0000
1560.000
520Un To STORE6 Shipping cost: $4.00 Total: $2080.00
STORE5
STORE3 Ship
BRANCH2 570.0000
300.0000
1560Un To STORE2 Shipping cost: $5.00 Total: $7800.00
STORE6
STORE4 Ship
BRANCH2
❖ SOLUTION 520.0000
150.0000
150Un To STORE4 Shipping cost: $1.00 Total: $ 150.00
BRANCH2
STORE5 Ship 290Un To STORE5 Shipping cost: $3.00 Total: $ 870.00
570.0000
Below is the520.0000
SOLUTION:
STORE6 solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
Objective
SOLUTION: value: 22960.00
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 22960.00
Model Class: LP
Infeasibilities: 0.000000

IDEAL
Model TRANSPORT
Class: LP PROGRAM:
BRANCH1 Ship 1400Un To STORE1 Shipping cost: $7.00 Total: $9800.00
BRANCH1 Ship 300Un
IDEAL TRANSPORT To STORE3
PROGRAM: Shipping cost: $1.00 Total: $ 300.00
BRANCH1 Ship 1400Un
280Un To STORE5
STORE1 Shipping cost: $7.00 Total: $1960.00
$9800.00
BRANCH1 Ship 520Un
300Un To STORE6
STORE3 Shipping cost: $4.00
$1.00 Total: $2080.00
$ 300.00
BRANCH2
BRANCH1 Ship 1560Un
280Un To STORE2
STORE5 Shipping cost: $5.00
$7.00 Total: $7800.00
$1960.00
BRANCH2
BRANCH1 Ship 150Un
520Un To STORE4
STORE6 Shipping cost: $1.00
$4.00 Total: $ 150.00
$2080.00
BRANCH2 Ship 1560Un
290Un To STORE5
STORE2 Shipping cost: $3.00
$5.00 Total: $ 870.00
$7800.00
BRANCH2 Ship 150Un To STORE4 Shipping cost: $1.00 Total: $ 150.00
BRANCH2 Ship 290Un To STORE5 Shipping cost: $3.00 Total: $ 870.00

192
C2-B6 Solving Problems with LINGO Cost of Shipment | Case 4 | Transport

GOAL

4 Three warehouses supply five stores, each warehouse is limited to the total number of units to
be shipped and the demand of the Stores too.

All the data for the development of the model are described below:

Blocks Store Store Store Store Store Available


Shipping
1 2 3 4 5 (un)
• Product Mix
• Blend 1 $ 16.00 14.00 12.00 12.00 16.00 170

• Finance Warehouse 2 $ 12.00 4.00 14.00 8.00 8.00 60


• Investments
3 $ 8.00 6.00 4.00 14.00 10.00 90
• Diet
• Aviation Demand un 23 69 76 70 82 -
• Transport
• Agriculture Determine the amount that should be sent from each deposit to each Store in order to
minimize the cost of shipping.
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Consumer
• Logistics

193
C2-B6 Solving Problems with LINGO Cost of Shipment | Case 4 | Transport
MODEL:
SETS:
SUPPLIER: AVAILABLE;
CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): COST, VOLUME;
ENDSETS
DATA:
! Supplier attributes;
SUPPLIER, AVAILABLE =
WAREHOUSE1 170
WAREHOUSE2 60
WAREHOUSE3 90;
! Consumer attributes;
CONSUMER, DEMAND =
STORE1 23
STORE2 69
STORE3 76
STORE4 70
STORE5 82;
! Cost values STO1 STO2 STO3 STO4 STO5;
COST = 16 14 12 12 16 ! WAREHOUSE1;
12 4 14 8 8 ! WAREHOUSE2;
8 6 4 14 10; ! WAREHOUSE3;
ENDDATA
SUBMODEL MIN4:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( CONSUMER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) = DEMAND( J));
! The capacity constraints;
@FOR( SUPPLIER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) <= AVAILABLE( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING COST ($):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (un):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN4);
! Solution report;
@WRITE(" IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1) );
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' ',
@FORMAT(SUPPLIER( I), '-10s'),' Ship ',
@FORMAT(VOLUME( I, J),'%3.0f'),'Un To ',
@FORMAT(CONSUMER( J), '-7s'),'x Shipping cost: $',
@FORMAT(COST (I, J),'%5.2f'),' = Total: $',
@FORMAT(VOLUME(I,J) * COST(I,J), '%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN4;
ENDCALC
END

194
C2-B6 Solving Problems with LINGO Cost of Shipment | Case 4 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
SHIPPING COST ($):
STORE1 STORE2 STORE3 STORE4 STORE5
WAREHOUSE1 16.00000 14.00000 12.00000 12.00000 16.00000
WAREHOUSE2 12.00000 4.000000 14.00000 8.000000 8.000000
WAREHOUSE3 8.000000 6.000000 4.000000 14.00000 10.00000

AVAILABLE (Unity):
WAREHOUSE1 170.0000
WAREHOUSE2 60.00000
WAREHOUSE3 90.00000

DEMAND (Un):
STORE1 23.00000
STORE2 69.00000
STORE3 76.00000
DATA:
STORE4 70.00000
SHIPPING
STORE5 COST82.00000
($):
DATA: STORE1 STORE2 STORE3 STORE4 STORE5
SHIPPING COST ($):
WAREHOUSE1 16.00000 14.00000 12.00000 12.00000 16.00000
SOLUTION:
WAREHOUSE2
Global STORE1 found.
optimal12.00000
solution STORE2
4.000000 STORE3
14.00000 STORE4
8.000000 STORE5
8.000000
WAREHOUSE1
Objective
WAREHOUSE3 16.00000
value:
8.000000 14.00000
6.000000 12.00000
4.000000 12.000003078.000
14.00000 16.00000
10.00000
WAREHOUSE2 12.00000
Infeasibilities: 4.000000 14.00000 8.0000000.000000
8.000000
WAREHOUSE3 8.000000
AVAILABLE (Unity): 6.000000 4.000000 14.00000 10.00000
Model Class: LP
WAREHOUSE1 170.0000
AVAILABLE
WAREHOUSE2 (Unity):
60.00000
WAREHOUSE1
IDEAL TRANSPORT
WAREHOUSE3 170.0000
PROGRAM:
90.00000
WAREHOUSE1 Ship
WAREHOUSE2 60.0000018Un To STORE3 x Shipping cost: $12.00 = Total: $ 216.00
WAREHOUSE1
WAREHOUSE3 Ship 70Un To STORE4 x Shipping cost: $12.00 = Total: $ 840.00
DEMAND (Un): 90.00000
WAREHOUSE1 Ship 82Un To STORE5 x Shipping cost: $16.00 = Total: $1312.00
STORE1 23.00000
WAREHOUSE2
DEMAND Ship 60Un To STORE2 x Shipping cost: $ 4.00 =
(Un): Total: $ 240.00
STORE2
WAREHOUSE3 Ship69.00000
23Un To STORE1 x Shipping cost: $ 8.00 = Total: $ 184.00
STORE1
STORE3 23.00000
76.00000
WAREHOUSE3 Ship 9Un To STORE2 x Shipping cost: $ 6.00 = Total: $ 54.00
STORE2
STORE4 69.00000
70.00000
WAREHOUSE3 Ship 58Un To STORE3 x Shipping cost: $ 4.00 = Total: $ 232.00
STORE3
❖ SOLUTION
STORE5 76.00000
82.00000
STORE4 70.00000
Below is the solution
STORE5
SOLUTION: achieved by LINGO with infeasibilities 0, and
82.00000 the detailed report that makes up the optimal
Global optimal solution found.
SOLUTION:
Objective value: 3078.000
Global optimal solution found.
Infeasibilities: 0.000000
Objective value: 3078.000
Infeasibilities:
Model Class: LP 0.000000

IDEAL Class:
Model TRANSPORT
LP PROGRAM:
WAREHOUSE1 Ship 18Un To STORE3 x Shipping cost: $12.00 = Total: $ 216.00
WAREHOUSE1
IDEAL Ship PROGRAM:
TRANSPORT 70Un To STORE4 x Shipping cost: $12.00 = Total: $ 840.00
WAREHOUSE1
WAREHOUSE1 Ship 82Un
18Un To STORE5
STORE3 xx Shipping
Shipping cost:
cost: $16.00
$12.00 == Total:
Total: $1312.00
$ 216.00
WAREHOUSE2 Ship 60Un
WAREHOUSE1 70Un To STORE2
STORE4 xx Shipping
Shipping cost:
cost: $$12.00
4.00 == Total:
Total: $$ 240.00
840.00
WAREHOUSE3 Ship 23Un
WAREHOUSE1 82Un To STORE1
STORE5 xx Shipping
Shipping cost:
cost: $$16.00
8.00 == Total:
Total: $$1312.00
184.00
WAREHOUSE3 Ship 60Un
WAREHOUSE2 9Un To STORE2
STORE2 xx Shipping
Shipping cost:
cost: $$ 6.00
4.00 == Total:
Total: $$ 240.00
54.00
WAREHOUSE3 Ship
WAREHOUSE3 Ship 58Un
23Un To
To STORE3
STORE1 xx Shipping
Shipping cost:
cost: $$ 4.00
8.00 == Total:
Total: $$ 232.00
184.00
WAREHOUSE3 Ship 9Un To STORE2 x Shipping cost: $ 6.00 = Total: $ 54.00
WAREHOUSE3 Ship 58Un To STORE3 x Shipping cost: $ 4.00 = Total: $ 232.00

195
C2-B6 Solving Problems with LINGO Schedule Shipment | Case 5 | Transport

GOAL

5 A company must schedule shipment schedules for its products, which are shipped from three
factories to four warehouses located at strategic points on the market.

Taking into account the type of transport that can be used in each case, as well as the
distances between the factories and the warehouses, the costs are differentiated for each
factory / warehouse combination.
Blocks
• Product Mix All the data for the development of the model are described below:

• Blend
Available
Destiny W1 W2 W3 W4
• Finance (un)
• Investments 1 $ 8.00 14.00 14.00 2.00 200
• Diet
Plant 2 $ 24.00 16.00 16.00 16.00 400
• Aviation
3 $ 16.00 32.00 32.00 10.00 300
• Transport
• Agriculture Demand un 160 180 240 320 -
• Construction
• Refinery Determine the amount that should be shipped from each factory to each warehouse in order to
• Schedule minimize the cost of shipping.

• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Consumer
• Logistics

196
C2-B6 Solving Problems with LINGO Schedule Shipment | Case 5 | Transport

MODEL:
SETS:
SUPPLIER: AVAILABLE;
CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): COST, VOLUME;
ENDSETS
DATA:
! Supplier attributes;
SUPPLIER, AVAILABLE =
PLANT1 200
PLANT2 400
PLANT3 300;
! Consumer attributes;
CONSUMER, DEMAND =
WAREHOUSE1 160
WAREHOUSE2 180
WAREHOUSE3 240
WAREHOUSE4 320;

! Cost attributes WRH1 WRH2 WRH3 WRH4;


COST = 8 14 14 2 ! PLANT1;
24 16 16 16 ! PLANT2;
16 32 32 10; ! PLANT3;
ENDDATA
SUBMODEL MIN5:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( CONSUMER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) = DEMAND( J));
! The capacity constraints;
@FOR( SUPPLIER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) <= AVAILABLE( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING COST ($):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (ton):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (ton):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN5);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' ',
@FORMAT(SUPPLIER( I),'-6s'), ' Ship ',
@FORMAT(VOLUME( I, J),'%3.0f'), 'ton To ',
@FORMAT(CONSUMER( J),'-10s'), ' Shipping cost: $',
@FORMAT(COST (I, J) * VOLUME(I,J),'%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN5);
ENDCALC
END

197
C2-B6 Solving Problems with LINGO Schedule Shipment | Case 5 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
SHIPPING COST ($):
WAREHOUSE1 WAREHOUSE2 WAREHOUSE3 WAREHOUSE4
PLANT1 8.000000 14.00000 14.00000 2.000000
PLANT2 24.00000 16.00000 16.00000 16.00000
PLANT3 16.00000 32.00000 32.00000 10.00000

AVAILABLE (ton):
PLANT1 200.0000
PLANT2 400.0000
PLANT3 300.0000

DEMAND (ton):
WAREHOUSE1 160.0000
WAREHOUSE2 180.0000
DATA:
WAREHOUSE3
SHIPPING 240.0000
COST ($):
DATA:
WAREHOUSE4 WAREHOUSE1
320.0000 WAREHOUSE2 WAREHOUSE3 WAREHOUSE4
SHIPPING COST ($):
PLANT1 8.000000 14.00000 14.00000 2.000000
SOLUTION: WAREHOUSE1 WAREHOUSE2 WAREHOUSE3 WAREHOUSE4
PLANT2 24.00000 16.00000 16.00000 16.00000
Global
PLANT1optimal8.000000
solution found.
14.00000 14.00000 2.000000
PLANT3
Objective
16.00000 32.00000 32.00000 10.00000
PLANT2 value: 24.00000 16.00000 16.00000 11000.00 16.00000
Infeasibilities:
PLANT3 16.00000 32.00000 32.00000 0.000000 10.00000
AVAILABLE (ton):
PLANT1
Model Class: 200.0000
LP
AVAILABLE (ton):
PLANT2 400.0000
PLANT1 200.0000
PLANT3
IDEAL TRANSPORT 300.0000
PROGRAM:
PLANT2 400.0000
PLANT1 Ship 20ton To WAREHOUSE2 Shipping cost: $ 280.00
PLANT3
PLANT1
300.0000
DEMAND Ship 180ton To WAREHOUSE4 Shipping cost: $ 360.00
(ton):
PLANT2 Ship 160ton
WAREHOUSE1 To WAREHOUSE2 Shipping cost: $2560.00
160.0000
DEMAND
PLANT2 (ton):
Ship 240ton To WAREHOUSE3 Shipping cost: $3840.00
WAREHOUSE2 180.0000
WAREHOUSE1
PLANT3 Ship 160.0000
160ton To WAREHOUSE1 Shipping cost: $2560.00
WAREHOUSE3 240.0000
WAREHOUSE2
❖ SOLUTION
PLANT3 Ship 180.0000
140ton To WAREHOUSE4 Shipping cost: $1400.00
WAREHOUSE4 320.0000
WAREHOUSE3 240.0000
Below is the solution
WAREHOUSE4 achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
320.0000
SOLUTION:
Global optimal solution found.
SOLUTION:
Objective value: 11000.00
Global optimal solution found.
Infeasibilities: 0.000000
Objective value: 11000.00
Infeasibilities: 0.000000
Model Class: LP
Model Class: LP
IDEAL TRANSPORT PROGRAM:
PLANT1 Ship 20ton To WAREHOUSE2 Shipping cost: $ 280.00
IDEAL TRANSPORT PROGRAM:
PLANT1 Ship 180ton To WAREHOUSE4 Shipping cost: $ 360.00
PLANT1 Ship 20ton To WAREHOUSE2 Shipping cost: $ 280.00
PLANT2 Ship 160ton To WAREHOUSE2 Shipping cost: $2560.00
PLANT1 Ship 180ton To WAREHOUSE4 Shipping cost: $ 360.00
PLANT2 Ship 240ton To WAREHOUSE3 Shipping cost: $3840.00
PLANT2 Ship 160ton To WAREHOUSE2 Shipping cost: $2560.00
PLANT3 Ship 160ton To WAREHOUSE1 Shipping cost: $2560.00
PLANT2 Ship 240ton To WAREHOUSE3 Shipping cost: $3840.00
PLANT3 Ship 140ton To WAREHOUSE4 Shipping cost: $1400.00
PLANT3 Ship 160ton To WAREHOUSE1 Shipping cost: $2560.00
PLANT3 Ship 140ton To WAREHOUSE4 Shipping cost: $1400.00

198
C2-B6 Solving Problems with LINGO Cement | Case 6 | Transport

GOAL

6 A construction company has signed a contract to build 4 lots in different cities of the state.
Each building requires a large amount of cement to be sent to each building.

The developer can buy from more than one company for the same project. All the data for
the development of the model are described below:

Blocks Available
Building B1 B2 B3 B4
• Product Mix (ton)

• Blend 1 $ 120.00 115.00 130.00 125.00 525


• Finance
Provider 2 $ 100.00 150.00 110.00 105.00 450
• Investments
• Diet 3 $ 40.00 95.00 145.00 165.00 550
• Aviation
Demand ton 450 275 300 350 -
• Transport
• Agriculture The problem is to determine how much to buy from each supplier in order to meet the
demands at the lowest cost possible.
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Consumer
• Logistics

Source:
• Book 2
• Page 192

199
C2-B6 Solving Problems with LINGO Cement | Case 6 | Transport
MODEL:
SETS:
SUPPLIER: AVAILABLE;
CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): COST, VOLUME;
ENDSETS
DATA:
! Supplier attributes;
SUPPLIER , AVAILABLE =
PROVIDER1 525
PROVIDER2 450
PROVIDER3 550;
! Consumer attributes;
CONSUMER , DEMAND =
BUILDING1 450
BUILDING2 275
BUILDING3 300
BUILDING4 350;
! Cost value B1 B2 B3 B3;
COST = 120 115 130 125 ! PROVIDER1;
100 150 110 105 ! PROVIDER2;
40 95 145 165; ! PROVIDER3;
ENDDATA
SUBMODEL MIN6:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( CONSUMER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) = DEMAND( J));
! The Available constraints;
@FOR( SUPPLIER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) <= AVAILABLE( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING COST ($):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (ton):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (ton):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN6);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' ',
@FORMAT(SUPPLIER( I), '-10s'),' Ship ',
@FORMAT(VOLUME( I, J),'%2.0f'), 'ton To ',
@FORMAT(CONSUMER( J), '-10s'),' x Shipping cost $',
@FORMAT(COST (I, J),'%6.2f'), ' = Total: $',
@FORMAT(COST (I, J) * VOLUME(I,J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN6);
ENDCALC
END

200
C2-B6 Solving Problems with LINGO Cement | Case 6 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
SHIPPING COST ($):
BUILDING1 BUILDING2 BUILDING3 BUILDING4
PROVIDER1 120.0000 115.0000 130.0000 125.0000
PROVIDER2 100.0000 150.0000 110.0000 105.0000
PROVIDER3 40.00000 95.00000 145.0000 165.0000

AVAILABLE (ton):
PROVIDER1 525.0000
PROVIDER2 450.0000
PROVIDER3 550.0000

DEMAND (ton):
BUILDING1 450.0000
BUILDING2 275.0000
BUILDING3 300.0000
DATA:
BUILDING4 350.0000
SHIPPING COST ($):
DATA: BUILDING1 BUILDING2 BUILDING3 BUILDING4
SOLUTION:
PROVIDER1
SHIPPING COST 120.0000
($): 115.0000 130.0000 125.0000
Global optimal
PROVIDER2 solution
100.0000
BUILDING1 found. BUILDING3
150.0000
BUILDING2 110.0000 BUILDING4
105.0000
Objective
PROVIDER3 value:
PROVIDER1 40.00000
120.0000 95.00000
115.0000 145.0000
130.0000 165.0000
125.0000 121375.0
Infeasibilities:
PROVIDER2 100.0000 150.0000 110.0000 105.0000 0.000000
AVAILABLE
PROVIDER3 (ton):
40.00000 95.00000 145.0000 165.0000
PROVIDER1
Model Class:525.0000
LP
PROVIDER2(ton):
AVAILABLE 450.0000
PROVIDER3
PROVIDER1
IDEAL 550.0000
525.0000
TRANSPORT PROGRAM:
PROVIDER2 450.0000
PROVIDER1 Ship 175ton To BUILDING2 x Shipping cost $115.00 = Total: $20125.00
DEMAND (ton):550.0000
PROVIDER3
PROVIDER1 Ship 200ton To BUILDING3 x Shipping cost $130.00 = Total: $26000.00
BUILDING1 450.0000
PROVIDER2
BUILDING2 Ship 100ton To BUILDING3 x Shipping cost $110.00 = Total: $11000.00
DEMAND (ton): 275.0000
PROVIDER2
BUILDING3 Ship
BUILDING1 350ton To BUILDING4 x Shipping cost $105.00 = Total: $36750.00
300.0000
450.0000
PROVIDER3
❖ SOLUTION
BUILDING4
BUILDING2 Ship 450ton To BUILDING1 x Shipping cost $ 40.00 = Total: $18000.00
350.0000
275.0000
PROVIDER3
BUILDING3 Ship 100ton To BUILDING2 x Shipping cost $ 95.00 = Total: $ 9500.00
300.0000
Below is the solution
SOLUTION:
BUILDING4 achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
350.0000
Global optimal solution found.
Objective value:
SOLUTION: 121375.0
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 121375.0
Model Class: LP
Infeasibilities: 0.000000

IDEAL Class:
Model TRANSPORT
LP PROGRAM:
PROVIDER1 Ship 175ton To BUILDING2 x Shipping cost $115.00 = Total: $20125.00
PROVIDER1
IDEAL Ship PROGRAM:
TRANSPORT 200ton To BUILDING3 x Shipping cost $130.00 = Total: $26000.00
PROVIDER2 Ship 175ton
PROVIDER1 100ton To BUILDING2
BUILDING3 x Shipping cost $110.00
$115.00 = Total: $11000.00
$20125.00
PROVIDER2 Ship 200ton
PROVIDER1 350ton To BUILDING3
BUILDING4 x Shipping cost $105.00
$130.00 = Total: $36750.00
$26000.00
PROVIDER3 Ship 100ton
PROVIDER2 450ton To BUILDING3
BUILDING1 x Shipping cost $ 40.00
$110.00 = Total: $18000.00
$11000.00
PROVIDER3 Ship 350ton
PROVIDER2 100ton To BUILDING4
BUILDING2 x Shipping cost $ 95.00
$105.00 = Total: $ 9500.00
$36750.00
PROVIDER3 Ship 450ton To BUILDING1 x Shipping cost $ 40.00 = Total: $18000.00
SLACK/SURPLUS
PROVIDER3 ShipLIMIT = CONSUMER
100ton DEMANDx (ton):
To BUILDING2 Shipping cost $ 95.00 = Total: $ 9500.00
PROD LIMIT VALUE
BUILDING1
SLACK/SURPLUS 450.0000 450.0000
LIMIT = CONSUMER 0.000000
DEMAND (ton):
BUILDING2 275.0000
PROD 275.0000
LIMIT 0.000000
VALUE
BUILDING1
BUILDING3 450.0000
300.0000 450.0000
300.0000 0.000000
BUILDING2
BUILDING4 275.0000
350.0000 275.0000
350.0000 0.000000
BUILDING3 300.0000 300.0000 0.000000
BUILDING4 350.0000 350.0000 0.000000
SLACK/SURPLUS LIMIT = SUPPLIER DEMAND (ton):
PROD LIMIT VALUE
SLACK/SURPLUS
PROVIDER1 LIMIT = SUPPLIER
375.0000 DEMAND
525.0000 (ton):
-150.0000
PROVIDER2 PROD
450.0000 LIMIT
450.0000 VALUE
0.000000
PROVIDER1
PROVIDER3 375.0000
550.0000 525.0000
550.0000 -150.0000
0.000000
PROVIDER2 450.0000 450.0000 0.000000
PROVIDER3 550.0000 550.0000 0.000000
1

201
C2-B6 Solving Problems with LINGO Farm to Processing Center | Case 7 | Transport

GOAL

7 A producer and distributor of citrus products that has three orange producing farms in Farm
1, Farm 2 and Farm 3, 200,000, 600,000 and 225,000 boxes of oranges are available in these
locations respectively.

The processing plants for oranges are in City A, City B and City C, where the demand of
each plant is 275,000, 400,000 and 300,000 respectively of boxes. All the data for the
Blocks development of the model are described below:
• Product Mix
Farmer / City A B C Available (box)
• Blend
F1 km 120 115 130 200,000
• Finance
• Investments F2 km 100 150 110 450,000

• Diet F3 km 40 95 145 550,000


• Aviation
Demand box 275,000 400,000 300,000 -
• Transport
• Agriculture The company hires a local carrier that takes the orange boxes from the farms to the
processing units.
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Supplier
• Logistics

Source:
• Book 2
• Page 166

202
C2-B6 Solving Problems with LINGO Farm to Processing Center | Case 7 | Transport
MODEL:
SETS:
SUPPLIER: AVAILABLE;
CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): ROUTE, VOLUME;
ENDSETS
DATA:
!Supplier attributes;
SUPPLIER, AVAILABLE =
FARM_1 200000
FARM_2 600000
FARM_3 225000;
! Consumer attributes;
CONSUMER, DEMAND =
CITY_A 275000
CITY_B 400000
CITY_C 300000;
! Route CITY_A CITY_B CITY_C;
ROUTE = 21 50 40 ! FARM_1;
35 30 22 ! FARM_2;
55 20 25; ! FARM_3;
ENDDATA
SUBMODEL MIN7:
MIN = @SUM( ROUTES( I, J): ROUTE( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( SUPPLIER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) = DEMAND( J));
! The capacity constraints;
@FOR( CONSUMER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) <= AVAILABLE( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING BOXES:", @NEWLINE( 1));
@TABLE(ROUTE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Boxes): ", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (Boxes):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN7);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' ',
@FORMAT(SUPPLIER( I),'-6s'), ' Shipping to ',
@FORMAT(CONSUMER( J),'6s'),' ',
@FORMAT(VOLUME( I, J),'%8.0f'), ' Box x Distance: ',
@FORMAT(ROUTE(I,J),'%2.0f'),' Km = ',
@FORMAT(VOLUME(i,J) * ROUTE(I, J),'%8.0f'),' Km',
@NEWLINE( 1));
@WRITE(' TOTAL DISTANCE:',13*' ',
@FORMAT(@SUM(ROUTES(I,J):VOLUME(i,J)),'%8.0f'),' Box', 22*' ',
@FORMAT(@SUM(ROUTES(I,J):VOLUME(i,J) * ROUTE(I, J)),'%8.0f'),' Km', @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN7);
ENDCALC
END

203
C2-B6 Solving Problems with LINGO Farm to Processing Center | Case 7 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
DISTANCE ( Km ):
CITY_A CITY_B CITY_C
FARM_1 21.00000 50.00000 40.00000
FARM_2 35.00000 30.00000 22.00000
FARM_3 55.00000 20.00000 25.00000

AVAILABLE (Boxes):
FARM_1 200000.0
FARM_2 600000.0
FARM_3 225000.0

DEMAND (Boxes):
CITY_A 275000.0
CITY_B 400000.0
CITY_C 300000.0

SOLUTION:
Global optimal solution found.
Objective
DATA: value: 0.2317500E+08
Infeasibilities:
DISTANCE ( Km ): 0.000000
CITY_A CITY_B CITY_C
DATA:
Model Class:
FARM_1 LP
21.00000 50.00000 40.00000
DISTANCE ( Km ): 30.00000 22.00000
FARM_2 35.00000
IDEAL CITY_A
TRANSPORT
FARM_3 55.00000 CITY_B 25.00000
PROGRAM:
20.00000 CITY_C
FARM_1 Shipping
FARM_1 21.00000to50.00000
CITY_A 40.00000
200000 Box x Distance: 21 Km = 4200000 Km
FARM_2 Shipping
FARM_2
AVAILABLE 35.00000
(Boxes): to30.00000
CITY_A 22.00000
75000 Box x Distance: 35 Km = 2625000 Km
FARM_3
FARM_2 55.00000
Shipping
FARM_1 200000.0 to 20.00000
CITY_B 25.00000
175000 Box x Distance: 30 Km = 5250000 Km
FARM_2 Shipping
FARM_2 600000.0 to CITY_C 300000 Box x Distance: 22 Km = 6600000 Km
AVAILABLE
FARM_3 (Boxes):
Shipping
FARM_3 225000.0 to CITY_B 225000 Box x Distance: 20 Km = 4500000 Km
FARM_1
TOTAL 200000.0
DISTANCE: 975000 Box 23175000 Km
FARM_2(Boxes):
DEMAND 600000.0
FARM_3
CITY_A 225000.0
SLACK/SURPLUS LIMIT = CONSUMER DEMAND (box):
275000.0
CITY_B 400000.0 PROD LIMIT VALUE
DEMAND
❖ SOLUTION
FARM_1 (Boxes):
275000.0
CITY_C 300000.0 275000.0 0.000000
CITY_A 275000.0
FARM_2 400000.0 400000.0 0.000000
Below
CITY_B
FARM_3is the
SOLUTION: solution achieved
400000.0
300000.0 by LINGO
300000.0 with infeasibilities
0.000000 0, and the detailed report that makes up the optimal
CITY_Coptimal
Global 300000.0solution found.
SLACK/SURPLUS
Objective value: LIMIT = SUPPLIER AVAILABLE (box): 0.2317500E+08
SOLUTION:
Infeasibilities: PROD LIMIT VALUE 0.000000
Global
CITY_Aoptimal solution
200000.0 found. 0.000000
200000.0
Objective
CITY_B
Model value:
550000.0
Class: LP 600000.0 -50000.00 23175000
Infeasibilities:
CITY_C 225000.0 225000.0 0.000000 0.000000
IDEAL TRANSPORT PROGRAM:
Model
FARM_1Class: LP to CITY_A
Shipping 200000 Box x Distance: 21 Km = 4200000 Km
FARM_2 Shipping to CITY_A 75000 Box x Distance: 35 Km = 2625000 Km
IDEAL
FARM_2TRANSPORT
ShippingPROGRAM:
to CITY_B 175000 Box x Distance: 30 Km = 5250000 Km
FARM_1
FARM_2 Shipping
Shipping toto CITY_A
CITY_C 200000
300000 Box
Box x
x Distance:
Distance: 21
22 Km
Km = 6600000
= 4200000 Km
Km
FARM_2 Shipping to
FARM_3 Shipping to CITY_B CITY_A 225000 Box x Distance:
75000 Box x Distance: 35
20 Km
Km = 2625000 Km
= 4500000 Km
FARM_2 Shipping to CITY_B
TOTAL DISTANCE: 175000
975000 Box
Box x Distance: 30 Km = 23175000
5250000 Km
Km
FARM_2 Shipping to CITY_C 300000 Box x Distance: 22 Km = 6600000 Km
FARM_3
SLACK/SURPLUS LIMIT = CONSUMER225000
Shipping to CITY_B DEMANDBox x Distance:
(box): 20 Km = 4500000 Km
TOTAL DISTANCE: PROD LIMIT 975000 Box
VALUE 23175000 Km
FARM_1 275000.0 275000.0 0.000000
SLACK/SURPLUS
FARM_2 LIMIT =400000.0
400000.0 CONSUMER DEMAND (box):
0.000000 1
FARM_3 PROD
300000.0 LIMIT
300000.0 VALUE
0.000000
FARM_1 275000.0 275000.0 0.000000
SLACK/SURPLUS LIMIT = SUPPLIER AVAILABLE (box):
PROD LIMIT VALUE 1
CITY_A 200000.0 200000.0 0.000000
CITY_B 550000.0 600000.0 -50000.00
CITY_C 225000.0 225000.0 0.000000

204
C2-B6 Solving Problems with LINGO Plant To Warehouse | Case 8 | Transport

GOAL

8
Three factories 1,2 and 3 wish to transport their products to four different A, B, C, and D
Warehouses. Information on costs, manufacturing capacity and demand can be found bellow:

Capacity
Cost To WA WB WC WD
( un )

Blocks P1 $ 2.00 5.00 4.00 8.00 400

• Product Mix From P2 $ 3.00 2.00 5.00 4.00 500

• Blend P3 $ 5.00 3.00 9.00 5.00 700


• Finance MIN un 400 300 250 200 1,150
Demand
• Investments MAX un 800 800 400 400 2,400
• Diet
Design the model so as to minimize transport costs.
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Distribution
• Logistics

205
C2-B6 Solving Problems with LINGO Plant To Warehouse | Case 8 | Transport
MODEL:
SETS:
WAREHOUSES: DEM_MAX, DEM_MIN ;
PLANT: CAPACITY;
ROUTES( PLANT, WAREHOUSES): COST, VOLUME;
ENDSETS
DATA:
! Warehouses attributes;
WAREHOUSES, DEM_MIN, DEM_MAX =
WA 400 800
WB 300 800
WC 250 800
WD 200 400;
! Plant attributes;
PLANT, CAPACITY =
P1 400
P2 500
P3 700;
! Cost values WA WB WC WD;
COST = 2 5 4 8 ! P1;
3 2 5 4 ! P2;
5 3 9 5; ! P3;
ENDDATA
SUBMODEL MIN8:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( WAREHOUSES( J):
[DEM0] @SUM( PLANT( I): VOLUME( I, J)) >= DEM_MIN( J);
[DEM1] @SUM( PLANT( I): VOLUME( I, J)) <= DEM_MAX( J););
! The capacity constraints;
@FOR( PLANT( I):
[CAP] @SUM( WAREHOUSES( J): VOLUME( I, J)) <= CAPACITY( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA", @NEWLINE(1), " SHIPPING COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE:", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " MINIMUM DEMAND:", @NEWLINE( 1));
@TABLE(DEM_MIN);
@WRITE(" ", @NEWLINE( 1), " MAXIMUM DEMAND:", @NEWLINE( 1));
@TABLE(DEM_MAX);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
@SOLVE(MIN8);
! Solution Report;
@WRITE(" ", @NEWLINE(1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' From: ',
@FORMAT(PLANT( I),'-3s'), ' Ship to: ' ,
@FORMAT(WAREHOUSES( J),'-3s'), ' ',
@FORMAT(VOLUME( I, J),'%3.0f'),'Un x Cost: $',
@FORMAT(COST( I, J), '%3.2f'),' = Total: $',
@FORMAT(COST( I, J) * VOLUME(I,J),'%7.2f'),
@NEWLINE( 1));
!@GEN(MIN8); ! To see the corresponding model scalar, remove (!);
ENDCALC
END

206
C2-B6 Solving Problems with LINGO Plant To Warehouse | Case 8 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA
SHIPPING COST:
WA WB WC WD
P1 2.000000 5.000000 4.000000 8.000000
P2 3.000000 2.000000 5.000000 4.000000
P3 5.000000 3.000000 9.000000 5.000000

AVAILABLE:
P1 400.0000
P2 500.0000
P3 700.0000
DATA
SHIPPING COST:
MINIMUM DEMAND:
WA WB WC WD
WA 400.0000
P1 2.000000 5.000000 4.000000 8.000000
WB 3.000000
P2 300.0000 2.000000 5.000000 4.000000
WC 250.0000 3.000000
P3 5.000000 9.000000 5.000000
WD 200.0000
AVAILABLE:
MAXIMUM DEMAND:
P1 400.0000
WA 800.0000
P2 500.0000
WB 700.0000
P3 800.0000
WC 800.0000
WD 400.0000
MINIMUM DEMAND:
WA 400.0000
SOLUTION
WB 300.0000
Global optimal solution found.
WC 250.0000
Objective value:
WD 200.0000 3700.000
Infeasibilities: 0.000000
MAXIMUM DEMAND:
IDEAL TRANSPORT PROGRAM:
WA 800.0000
From: P1 Ship to: WA 400Un x Cost: $2.00 = Total: $ 800.00
WB 800.0000
❖ SOLUTION
From: P2 Ship to: WB 250Un x Cost: $2.00 = Total: $ 500.00
WC 800.0000
From:
Below isP2the Ship
WD 400.0000 to:
solution WC 250Un
achieved x Cost:
by LINGO with $5.00 = Total:
infeasibilities 0, and$1250.00
the detailed report that makes up the optimal
From: P3 Ship to: WB 50Un x Cost: $3.00 = Total: $ 150.00
From: P3 Ship to: WD 200Un x Cost: $5.00 = Total: $1000.00
SOLUTION
Global optimal solution found.
Objective value: 3700.000
Infeasibilities: 0.000000

IDEAL TRANSPORT PROGRAM:


From: P1 Ship to: WA 400Un x Cost: $2.00 = Total: $ 800.00
From: P2 Ship to: WB 250Un x Cost: $2.00 = Total: $ 500.00
From: P2 Ship to: WC 250Un x Cost: $5.00 = Total: $1250.00
From: P3 Ship to: WB 50Un x Cost: $3.00 = Total: $ 150.00
From: P3 Ship to: WD 200Un x Cost: $5.00 = Total: $1000.00

207
C2-B6 Solving Problems with LINGO Transportation to Distributors | Case 9 | Transport

GOAL
A four-plant zipper company, whose production capacity, unit price of each product, demand of

9 each distributor and the unit cost of transportation, are shown below:

Plant To Unit Cost of Transport Unit Capacity


Distributors D1 D2 D3 D4 D5 D6 D7 Cost ( Unit )
Blocks
P1 $ 2.50 2.75 1.75 2.00 2.10 1.80 1.65 35.50 18,000
• Product Mix
• Blend P2 $ 1.85 1.90 1.50 1.60 1.00 1.90 1.85 37.50 15,000
• Finance
P3 $ 2.30 2.25 1.85 1.25 1.50 2.25 2.00 39.00 25,000
• Investments
• Diet P4 $ 1.90 0.90 1.60 1.75 2.00 2.50 2.65 36.25 20,000

• Aviation Demand un 8,500 14,500 13,500 12,600 18,000 15,000 9,000 - -


• Transport
• Agriculture The Company wants to determine the cheapest way to send its distributors from the various
factories, in order to minimize cost.
• Construction
• Refinery As total demand exceeds the production capacity of all plants, it has been determined that at least
80% of each demand should be met.
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Distribution
• Logistics

Source:
• Book 2
• Page 242

208
C2-B6 Solving Problems with LINGO Transportation to Distributors | Case 9 | Transport
MODEL:
SETS:
DISTRIBUTORS: DEMAND ;
PLANT: COST, CAPACITY;
ROUTES( PLANT, DISTRIBUTORS): SHIPPING_COST, VOLUME;
ENDSETS
DATA:
! Distributors attributes;
DISTRIBUTORS, DEMAND =
D1 8500
D2 14500
D3 13500
D4 12600
D5 18000
D6 15000
D7 9000;

! Plant attributes;
PLANT, COST, CAPACITY =
P1 35.50 18000
P2 37.50 15000
P3 39.00 25000
P4 36.25 20000;

! Shipping_Cost D1 D2 D3 D4 D5 D6 D7;
SHIPPING_COST = 2.50 2.75 1.75 2.00 2.10 1.80 1.65 ! P1;
1.85 1.90 1.50 1.60 1.00 1.90 1.85 ! P2;
2.30 2.25 1.85 1.25 1.50 2.25 2.00 ! P3;
1.90 0.90 1.60 1.75 2.00 2.50 2.65; ! P4;
ENDDATA
SUBMODEL MAX9:
[OBJ] MIN = @SUM( ROUTES( I, J): (COST( I) + SHIPPING_COST(I,J)) * VOLUME( I, J));
! The demand constraints;
@FOR( DISTRIBUTORS( J):
[DEM0] @SUM( PLANT( I): VOLUME( I, J)) >= DEMAND( J) * 0.80;);
! The capacity constraints;
@FOR( PLANT( I):
[CAP] @SUM( DISTRIBUTORS( J): VOLUME( I, J)) <= CAPACITY( I));
ENDSUBMODEL

209
C2-B6 Solving Problems with LINGO Transportation to Distributors | Case 9 | Transport

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA", @NEWLINE(1), " SHIPPING COST:", @NEWLINE( 1));
@TABLE(SHIPPING_COST);
@WRITE(" ", @NEWLINE( 1), " COST (un):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " CAPACITY:", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND:", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX9);
! Solution Report;
@WRITE(" ", @NEWLINE(1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 2));
@WRITE( " ", "PRODUCTION COST: ", @NEWLINE(1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' From: ',
@FORMAT(PLANT( I),'-3s'), ' Ship to: ' ,
@FORMAT(DISTRIBUTORS( J),'-3s'), ' ',
@FORMAT(VOLUME( I, J),'%5.0f'),'un x Cost: $',
@FORMAT(COST( I), '%3.2f'),' = Total: $',
@FORMAT(COST( I) * VOLUME(I,J),'%10.2f'),
@NEWLINE( 1));
! Total;
@WRITE(" ", "Total:", 49*' ','$',
@FORMAT(@SUM( ROUTES( I, J): COST( I) * VOLUME( I, J)),'%9.2f'),
@NEWLINE(2),);
@WRITE(" ", "SHIPPING COST: ", @NEWLINE(1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' From: ',
@FORMAT(PLANT( I),'-3s'), ' Ship to: ' ,
@FORMAT(DISTRIBUTORS( J),'-3s'), ' ',
@FORMAT(VOLUME( I, J),'%5.0f'),'un x Cost: $',
@FORMAT(SHIPPING_COST( I,J), '%5.2f'),' = Total: $',
@FORMAT(SHIPPING_COST( I,J) * VOLUME(I,J),'%10.2f'),
@NEWLINE( 1));
! Total;
@WRITE(" ", "Total:", 49*' ','$',
@FORMAT(@SUM( ROUTES( I, J): SHIPPING_COST( I,J) * VOLUME( I, J)),'%10.2f'),
@NEWLINE(2));
! Total;
@WRITE(" ", "Total Cost:", 44*' ','$',
@FORMAT(@SUM( ROUTES( I, J): (COST(I) + SHIPPING_COST( I,J)) * VOLUME( I, J)),'%10.2f'),
@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX9);
ENDCALC
END

210
C2-B6 Solving Problems with LINGO Transportation to Distributors | Case 9 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA
SHIPPING COST:
D1 D2 D3 D4 D5 D6 D7
P1 2.500000 2.750000 1.750000 2.000000 2.100000 1.800000 1.650000
P2 1.850000 1.900000 1.500000 1.600000 1.000000 1.900000 1.850000
P3 2.300000 2.250000 1.850000 1.250000 1.500000 2.250000 2.000000
P4 1.900000 0.9000000 1.600000 1.750000 2.000000 2.500000 2.650000

COST (un):
P1 35.50000
P2 37.50000
P3 39.00000
P4 36.25000

CAPACITY:
P1 18000.00
P2 15000.00
P3 25000.00
P4 20000.00

DEMAND:
D1 8500.000
D2 14500.00
D3 13500.00
D4 12600.00
D5 18000.00
D6 15000.00
D7 9000.000

SOLUTION
Global optimal solution found.
Objective value: 3072402.
❖ Infeasibilities:
SOLUTION 0.000000

IDEAL TRANSPORT PROGRAM:


Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
PRODUCTION COST:
SOLUTION
Global optimal solution found. 1
Objective value: 2805450.00
Infeasibilities: 0.00000000

IDEAL TRANSPORT PROGRAM:

PRODUCTION COST:
From: P1 Ship to: D6 12000un x Cost: $35.50 = Total: $ 426000.00
From: P1 Ship to: D7 6000un x Cost: $35.50 = Total: $ 213000.00
From: P2 Ship to: D3 600un x Cost: $37.50 = Total: $ 22500.00
From: P2 Ship to: D5 14400un x Cost: $37.50 = Total: $ 540000.00
From: P3 Ship to: D3 8600un x Cost: $39.00 = Total: $ 335400.00
From: P3 Ship to: D4 10080un x Cost: $39.00 = Total: $ 393120.00
From: P3 Ship to: D7 1200un x Cost: $39.00 = Total: $ 46800.00
From: P4 Ship to: D1 6800un x Cost: $36.25 = Total: $ 246500.00
From: P4 Ship to: D2 11600un x Cost: $36.25 = Total: $ 420500.00
From: P4 Ship to: D3 1600un x Cost: $36.25 = Total: $ 58000.00
Total: $2701820.00

SHIPPING COST:
From: P1 Ship to: D6 12000un x Cost: $ 1.80 = Total: $ 21600.00
From: P1 Ship to: D7 6000un x Cost: $ 1.65 = Total: $ 9900.00
From: P2 Ship to: D3 600un x Cost: $ 1.50 = Total: $ 900.00
From: P2 Ship to: D5 14400un x Cost: $ 1.00 = Total: $ 14400.00
From: P3 Ship to: D3 8600un x Cost: $ 1.85 = Total: $ 15910.00
From: P3 Ship to: D4 10080un x Cost: $ 1.25 = Total: $ 12600.00
From: P3 Ship to: D7 1200un x Cost: $ 2.00 = Total: $ 2400.00
From: P4 Ship to: D1 6800un x Cost: $ 1.90 = Total: $ 12920.00
From: P4 Ship to: D2 11600un x Cost: $ 0.90 = Total: $ 10440.00
From: P4 Ship to: D3 1600un x Cost: $ 1.60 = Total: $ 2560.00
Total: $ 103630.00

Total Cost: $2805450.00

211
C2-B6 Solving Problems with LINGO Widget | Case 10 | Transport

GOAL
Suppose the Wireless Widget (WW) company has six warehouses that provide eight vendors with

10 Available
Warehouses / Vendor V1 V2 V3 V4 V5 V6 V7 V8
(un)

WH1 $ 6 2 6 7 4 2 5 9 60
Blocks
• Product Mix WH2 $ 4 9 5 3 8 5 8 2 55

• Blend
WH3 $ 5 2 1 9 7 4 3 3 51
• Finance
• Investments WH4 $ 7 6 7 3 9 2 7 1 43

• Diet
WH5 $ 2 3 9 5 7 2 6 5 41
• Aviation
• Transport WH6 $ 5 5 2 2 8 1 4 3 52

• Agriculture
Demand un 35 37 22 32 41 32 43 38 -
• Construction
• Refinery their widgets. All the data for the development of the model are described below:
• Schedule
Each warehouse has a set of widgets that can't be exceeded and each vendor has demand for
• Cutting widgets that must be satisfied.
• Metallurgy
WW wants to determine how many widgets to send from each warehouse to each vendor in order
• Fertilizer to minimize the total cost of shipping.
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Warehouse
• Distribution
• Logistics

Source:
• Book 4
• WIDGET

212
C2-B6 Solving Problems with LINGO Widget | Case 10 | Transport
MODEL:
SETS:
WAREHOUSES: CAPACITY;
VENDORS: DEMAND;
ROUTES( WAREHOUSES, VENDORS): COST, VOLUME;
ENDSETS
DATA:
! Warehouses attributes;
WAREHOUSES, CAPACITY =
WH1 60
WH2 55
WH3 51
WH4 43
WH5 41
WH6 52;
! Vendor attributes;
VENDORS, DEMAND =
V1 35
V2 37
V3 22
V4 32
V5 41
V6 32
V7 43
V8 38;
! Cost values V1 V2 V3 V4 V5 V6 V7 V8;
COST = 6 2 6 7 4 2 5 9 ! WH1;
4 9 5 3 8 5 8 2 ! WH2;
5 2 1 9 7 4 3 3 ! WH3;
7 6 7 3 9 2 7 1 ! WH4;
2 3 9 5 7 2 6 5 ! WH5;
5 5 2 2 8 1 4 3; ! WH6;
ENDDATA
SUBMODEL MIN10:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J) * VOLUME( I, J));
@FOR( VENDORS( J): ! The demand constraints;
[DEM] @SUM( WAREHOUSES( I): VOLUME( I, J)) = DEMAND( J));
@FOR( WAREHOUSES( I): ! The capacity constraints;
[CAP] @SUM( VENDORS( J): VOLUME( I, J)) <= CAPACITY( I));
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
@WRITE(" DATA”, @NEWLINE(1), “ SHIPPING COST:", @NEWLINE( 1)); ! Data Block;
@TABLE(COST);
@WRITE(" “, @NEWLINE( 1), “AVAILABLE:", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" “, @NEWLINE( 1), “DEMAND:", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" “, @NEWLINE( 1), “SOLUTION ", @NEWLINE( 1));
@SOLVE(MIN10); ! Execute sub-model;
@WRITE(" “, @NEWLINE(1), “IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1)); ! Solution Report;
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' From: ',
@FORMAT(WAREHOUSES( I),'-3s'), ' Ship to: ' ,
@FORMAT(VENDORS( J),'-3s'), ' ',
@FORMAT(VOLUME( I, J),'%2.0f'),'Un x Unit cost: $',
@FORMAT(COST( I, J), '%3.2f'),' = Total: $',
@FORMAT(COST( I, J) * VOLUME(I,J),'%6.2f'), @NEWLINE( 1));
!@GEN(MIN10); ! To see the corresponding model scalar, remove (!);
ENDCALC
END

213
C2-B6 Solving Problems with LINGO Widget | Case 10 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
SHIPPING COST:
V1 V2 V3 V4 V5 V6 V7 V8
WH1 6.000000 2.000000 6.000000 7.000000 4.000000 2.000000 5.000000 9.000000
WH2 4.000000 9.000000 5.000000 3.000000 8.000000 5.000000 8.000000 2.000000
WH3 5.000000 2.000000 1.000000 9.000000 7.000000 4.000000 3.000000 3.000000
DATA:
WH4 7.000000 6.000000 7.000000 3.000000 9.000000 2.000000 7.000000 1.000000
SHIPPING COST:
WH5 2.000000 3.000000 9.000000 5.000000 7.000000 2.000000 6.000000 5.000000
WH6 5.000000
DATA: V1 5.000000V2 2.000000 V32.000000 V4
8.000000 V5
1.000000 4.000000
V6 3.000000
V7 V8
WH1 6.000000
SHIPPING COST: 2.000000 6.000000 7.000000 4.000000 2.000000 5.000000 9.000000
AVAILABLE (un): 9.000000 5.000000 3.000000 8.000000 5.000000 8.000000 2.000000
WH2 4.000000 V1 V2 V3 V4 V5 V6 V7 V8
WH1
WH3 60.00000
5.000000
WH1 6.000000 2.000000
WH2 55.00000 2.000000 1.000000
6.000000 9.000000
7.000000 7.000000
4.000000 4.000000
2.000000 3.000000
5.000000 3.000000
9.000000
WH4
WH2 7.000000
4.000000 6.000000
9.000000 7.000000
5.000000 3.000000
3.000000 9.000000
8.000000 2.000000
5.000000 7.000000
8.000000 1.000000
2.000000
WH3 51.00000
WH5
WH3 2.000000
5.000000 2.000000 1.000000 9.000000 7.000000 4.000000 3.000000 5.000000
WH4 43.00000 3.000000 9.000000 5.000000 7.000000 2.000000 6.000000 3.000000
WH6
WH4 5.000000
7.000000 5.000000
WH5 41.00000 6.000000 2.000000
7.000000 2.000000
3.000000 8.000000
9.000000 1.000000
2.000000 4.000000
7.000000 3.000000
1.000000
WH5 2.000000 3.000000 9.000000 5.000000 7.000000 2.000000 6.000000 5.000000
WH6 52.00000
AVAILABLE:
WH6 5.000000 5.000000 2.000000 2.000000 8.000000 1.000000 4.000000 3.000000
WH1 60.00000
DEMAND (un):
WH2 55.00000
V1 35.00000
AVAILABLE:
V2 37.00000
WH3
WH1 51.00000
60.00000
V3 22.00000
WH4
WH2 43.00000
55.00000
V4 32.00000
WH5
WH3 41.00000
51.00000
V5
WH6 41.00000
52.00000
WH4 43.00000
V6 32.00000
WH5 41.00000
V7 43.00000
DEMAND:
WH6 52.00000
V8 38.00000
V1 35.00000
V2 37.00000
DEMAND:
SOLUTION
V3
V1 22.00000
Global optimal solution found.
35.00000
V4
V2 32.00000
Objective value:
37.00000 664.0000
V5
V3 41.00000
Infeasibilities:
22.00000 0.000000
V6 32.00000
V4 32.00000
Model
V7 Class: LP
V5 43.00000
41.00000
❖ SOLUTION
V8
V6 38.00000
32.00000
IDEAL TRANSPORT PROGRAM:
From: 43.00000
V7 WH1
Below
SOLUTIONis theShip
V8 38.00000
From: WH1 Ship
to: V2
solution 19Un
to: V5achieved
41Un by
x Unit cost: $2.00 = Total: $ 38.00
x LINGO with infeasibilities
Unit cost: $4.00 = Total: 0, and the detailed report that
$164.00 makes up the optimal
Global optimal
From: WH2 solution
Ship to: V1 found.
1Un x Unit cost: $4.00 = Total: $ 4.00
Objective
From: WH2 value:
SOLUTION Ship to: V4 32Un x Unit cost: $3.00 = Total: $ 96.00 664.0000
Infeasibilities:
Global optimal
From: WH3 Shipsolution
to: V2 found.
11Un x Unit cost: $2.00 = Total: $ 22.00 0.000000
From: WH3 value:
Objective Ship to: V7 40Un x Unit cost: $3.00 = Total: $120.00 664.0000
Model Class:Ship
From: WH4
Infeasibilities:LP to: V6 5Un x Unit cost: $2.00 = Total: $ 10.00 0.000000
From: WH4 Ship to: V8 38Un x Unit cost: $1.00 = Total: $ 38.00
From: WH5
IDEAL
Model Class:Ship
TRANSPORT to: V1
LP PROGRAM: 34Un x Unit cost: $2.00 = Total: $ 68.00
From: WH5
From: WH1 Ship
Ship to:
to:V2V2 7Un
19Un x x Unit cost:
Unit $3.00
cost: =
$2.00 Total: $ 21.00
= Total: $ 38.00
From: WH6
From: WH1 Ship
Ship to:
to:V3V5 22Un
41Un x x Unit cost:
Unit $2.00
cost: =
$4.00 Total: $ 44.00
= Total: $164.00
IDEAL TRANSPORT
From: WH6 Ship
PROGRAM:
to: V6V1 27Un x x Unit cost: $1.00 = Total: $ 27.00
From:
From: WH2 Ship
WH1 Ship to:
Shipto:
to:V7V2 1Un
19Un x x UnitUnit
Unit cost:
cost: $4.00
$2.00 = Total:
= Total: $ 4.00
$ 38.00
From: WH6 3Un cost: $4.00 = Total: $ 12.00
From:
From: WH2
WH1 Ship
Ship to:
to: V4
V5 32Un
41Un x
x Unit
Unit cost:
cost: $3.00
$4.00 =
= Total:
Total: $ 96.00
$164.00
From: WH3
From: WH2 Ship to:
Ship to: V1V2 11Un
1Un x
x Unit cost: $2.00
Unit cost: $4.00 =
= Total:
Total: $
$ 22.00
4.00
From:
From: WH3
WH2 Ship
Ship to:
to: V7
V4 40Un
32Un x
x Unit
Unit cost:
cost: $3.00
$3.00 =
= Total:
Total: $120.00
$ 96.00
From: WH4
From: WH3 Ship to:
Ship to: V2V6 5Un
11Un x
x Unit
Unit cost: $2.00
cost: $2.00 =
= Total:
Total: $
$ 10.00
22.00
From:
From: WH4
WH3 Ship
Ship to:
to: V8
V7 38Un
40Un x
x Unit
Unit cost:
cost: $1.00
$3.00 =
= Total:
Total: $ 38.00
$120.00
From:
From: WH5
WH4 Ship
Ship to:
to: V1
V6 34Un
5Un x
x Unit
Unit cost:
cost: $2.00
$2.00 =
= Total:
Total: $
$ 68.00
10.00
From:
From: WH5
WH4 Ship
Ship to:
to: V2
V8 7Un
38Un x
x Unit
Unit cost:
cost: $3.00
$1.00 =
= Total:
Total: $
$ 21.00
38.00
From:
From: WH6
WH5 Ship
Ship to:
to: V3
V1 22Un
34Un x
x Unit
Unit cost:
cost: $2.00
$2.00 =
= Total:
Total: $
$ 44.00
68.00
From:
From: WH6
WH5 Ship
Ship to:
to: V6
V2 27Un
7Un x
x Unit
Unit cost:
cost: $1.00
$3.00 =
= Total:
Total: $
$ 27.00
21.00
From:
From: WH6
WH6 Ship
Ship to:
to: V7
V3 3Un
22Un x
x Unit
Unit cost:
cost: $4.00
$2.00 =
= Total:
Total: $ 1
$ 12.00
44.00
From: WH6 Ship to: V6 27Un x Unit cost: $1.00 = Total: $ 27.00
SLACK/SURPLUS
From: WH6 LIMIT
Ship to:= V7
CONSUMER
3UnDEMAND
x (un):
Unit cost: $4.00 = Total: $ 12.00
PROD LIMIT VALUE
V1 35.00000
SLACK/SURPLUS LIMIT35.00000
= CONSUMER0.000000
DEMAND (un):
V2 37.00000
PROD 37.00000
LIMIT 0.000000
VALUE
V3
V1 22.00000
35.00000 22.00000
35.00000 0.000000
0.000000
V4
V2 32.00000
37.00000 32.00000
37.00000 0.000000
0.000000
V5
V3 41.00000
22.00000 41.00000
22.00000 0.000000
0.000000
V6
V4 32.00000
32.00000 32.00000
32.00000 0.000000
0.000000
V5 41.00000 41.00000 0.000000
1
V6 32.00000 32.00000 0.000000

214
C2-B6 Solving Problems with LINGO Multilevel Distribution | Case 11 | Transport

GOAL

11 Minimize shipping costs in a three-tiered distribution system involves plants, distribution


centers and customers.

The plants produce multiple products, which are sent to distribution centers. If a distribution
center is used, it incurs a fixed cost.

Blocks Plant / Distribution Center Shipping Cost

• Product Mix Products Plant Capacity DC1 DC2 DC3 DC4


• Blend P1 80 1.00 3.00 3.00 5.00
• Finance PA P2 40 4.00 4.50 1.50 3.80
• Investments
P3 75 2.00 3.30 2.20 3.20
• Diet
P1 20 1.00 2.00 2.00 5.00
• Aviation
PB P2 60 4.00 4.60 1.30 3.50
• Transport
P3 75 1.80 3.00 2.00 3.50
• Agriculture
• Construction DC Fixed Cost 100.00 150.00 160.00 139.00

• Refinery
Customers are provided by a single distribution center. Four DC1, DC2, DC3 and DC4
• Schedule distribution centers Intermediate receipt of production and deliver to customers and cost of
• Cutting shipping to consumers in tons. Fixed cost for each DC that delivers deliveries.

• Metallurgy Each consumer has a specific demand and will be served by a single DC.
• Fertilizer
SHIPPING COST
• Clinic
Distribution DC To C (PA) DC To C (PB)
• Classic
Center C1 C2 C3 C4 C5 C1 C2 C3 C4 C5
• Dynamic
• Logistics DC1 $ 5.00 5.00 3.00 2.00 4.00 5.00 4.90 3.30 2.50 4.10

• Energy DC2 $ 5.10 4.90 3.30 2.50 2.70 5.00 4.80 3.00 2.20 2.50
• Assembly Line DC3 $ 3.50 2.00 1.90 4.00 4.30 3.20 2.00 1.70 3.50 4.00

DC4 $ 1.00 1.80 4.90 4.80 2.00 1.50 2.00 5.00 5.00 2.30
Keywords:
Demand ton 25 30 50 15 35 25 8 0 30 30
• Delivery
This model applies to any multi-level solution as long as the data structure meets;
• Warehouse
• Distribution
• Consumer
• Logistics

Source:
• Book 6
• Page 836

215
C2-B6 Solving Problems with LINGO Multilevel Distribution | Case 11 | Transport

MODEL:
SETS:
PRODUCT/ A, B/; ! Two products;
PLANT/ P1, P2, P3/; ! Three plants;
DISTCTR/ DC1, DC2, DC3, DC4/: F, Z; ! Each DC has an associated fixed cost, F, and an "open" indicator, Z.;
CUSTOMER/ C1, C2, C3, C4, C5/; ! Five customers;
DEMLINK( PRODUCT, CUSTOMER): D; ! D = Demand for a product by a customer.;
SUPLINK( PRODUCT, PLANT): S; ! S = Capacity for a product at a plant.;
YLINK( DISTCTR, CUSTOMER): Y; ! Each customer is served by one DC, indicated by Y.;
CLINK( PRODUCT, PLANT, DISTCTR): C, X; ! C = cost/ton of a product from a plant to a DC, X=tons shipped.;
GLINK( PRODUCT, DISTCTR, CUSTOMER): G; ! G = cost/ton of a product from a DC to a customer.;
ENDSETS
DATA:
! Plant Capacities P1 P2 P3;
S= 80, 40, 75, ! Product: A;
20, 60, 75; ! Product: B;
! Shipping cost - Plant to DC DC1 DC2 DC3 DC4;
C= 1, 3, 3, 5, ! Product A;
4, 4.5, 1.5, 3.8,
2, 3.3, 2.2, 3.2,
1, 2, 2, 5, ! Product B;
4, 4.6, 1.3, 3.5,
1.8, 3, 2, 3.5;

! DC Fixed cost DC1 DC2 DC3 DC4;


F= 100, 150, 160, 139;
! Shipping cost - DC to customer C1 C2 C3 C4 C5;
G= 5, 5, 3, 2, 4, ! Product A;
5.1, 4.9, 3.3, 2.5, 2.7,
3.5, 2, 1.9, 4, 4.3,
1, 1.8, 4.9, 4.8, 2,
5, 4.9, 3.3, 2.5, 4.1, ! Product B;
5, 4.8, 3, 2.2, 2.5,
3.2, 2, 1.7, 3.5, 4,
1.5, 2, 5, 5, 2.3;
! Customer Demands C1 C2 C3 C4 C5;
D= 25, 30, 50, 15, 35,
25, 8, 0, 30, 30;
ENDDATA
SUBMODEL MIN11:
[OBJ] MIN = SHIPDC + SHIPCOST + FXCOST;
[SHPDC] SHIPDC = @SUM( CLINK: C * X);
[SHCUS] SHIPCOST = @SUM( GLINK( I, K, L): G( I, K, L) * D( I, L) * Y( K, L));
[FCOS] FXCOST = @SUM( DISTCTR: F * Z);
! Supply Constraints;
@FOR( PRODUCT( I): @FOR( PLANT( J):
[SUP] @SUM( DISTCTR( K): X( I, J, K)) <= S( I, J)));
! DC balance constraints;
@FOR( PRODUCT( I): @FOR( DISTCTR( K):
[BAL] @SUM( PLANT( J): X( I, J, K)) = @SUM( CUSTOMER( L): D( I, L)* Y( K, L))));
! Demand constraints;
@FOR( CUSTOMER( L):
[DEM] @SUM( DISTCTR( K): Y( K, L)) = 1);
! Force DC K open if it serves customer L;
@FOR( CUSTOMER( L):
@FOR( DISTCTR( K): [DCK] Y( K, L) <= Z( K)));
! Y Binary;
@FOR( DISTCTR( K):
@FOR( CUSTOMER( L): [BIN] @BIN( Y( K,L))));
ENDSUBMODEL

216
C2-B6 Solving Problems with LINGO Multilevel Distribution | Case 11 | Transport

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Fixed line length
@SET('LINLEN',120);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " Shipping cost, Plant to Distribution Center ($/ton):", @NEWLINE( 1));
@TABLE(C);
@WRITE(" ", @NEWLINE( 1), " Plant capacity (ton):", @NEWLINE( 1));
@TABLE(S);
@WRITE(" ", @NEWLINE( 1), " Consumer demand (ton):", @NEWLINE( 1));
@TABLE(D);
@WRITE(" ", @NEWLINE( 1), " Fixed cost distribution Center:", @NEWLINE( 1));
@TABLE(F);
@WRITE(" ", @NEWLINE( 1));
@WRITE(" Shipping cost, Distribution Center to Consumer ($/ton): ", @NEWLINE( 1));
@TABLE(G);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1), " ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN11);
! Solution report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(" IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITE(" PRODUCT/PLANT TO DISTRIBUTION CENTER ", @NEWLINE(1));
@WRITEFOR( CLINK( I, K, L)| C( I, K, L) * X( i, K, L ) #GT# 0:
' Product: ', PRODUCT(I),' ',' Plant: ', PLANT(I), ' ',' TO Distctr: ', DISTCTR(L), ' ', ' Shipping cost: $',
@FORMAT(C( I, K, L) * X( i, K, L ) ,'%6.2f'),
@NEWLINE( 1));
@WRITE(' Total:',51*' ','$',@FORMAT(SHIPDC,'%3.2f'),@NEWLINE( 2));
@WRITE(" DISTRIBUTION CENTER FIXED COST ", @NEWLINE(1));
@WRITEFOR( CLINK( I, K, L) | C( I, K, L) * X( i, K, L ) #GT# 0:
' Product: ', Product(I), ' Plant: ', Plant(I), ' TO Distctr: ', DISTCTR(L),
@NEWLINE( 1));
@WRITE(' Total:',50*' ',' $',@FORMAT(FXCOST,'%3.2f'),@NEWLINE( 2));
@WRITE(" DISTRIBUTION CENTER TO CONSUMER ", @NEWLINE(1));
@WRITEFOR( GLINK( I, K, L)| G( I, K, L) * D( I, L) * Y( K, L) #GT# 0:
' Product: ', PRODUCT(I),' Distctr: ', DISTCTR(K), ' TO',' Customer: ',CUSTOMER(L), ' ', ' Shipping cost: $',
@FORMAT(G( I, K, L) * D( I, L) * Y( K, L),'%6.2f'),
@NEWLINE( 1));
@WRITE(' Total:',50*' ',' $',@FORMAT(SHIPCOST,'%3.2f'),@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN11);
ENDCALC
END

217
C2-B6 Solving Problems with LINGO Multilevel Distribution | Case 11 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
Shipping cost, Planta to Distribution Center ($/ton):
DC1 DC2 DC3 DC4
A P1 1.000000 3.000000 3.000000 5.000000
A P2 4.000000 4.500000 1.500000 3.800000
A P3 2.000000 3.300000 2.200000 3.200000
B P1 1.000000 2.000000 2.000000 5.000000
B P2 4.000000 4.600000 1.300000 3.500000
B P3 1.800000 3.000000 2.000000 3.500000

Plant capacity (ton):


P1 P2 P3
A 80.00000 40.00000 75.00000
B 20.00000 60.00000 75.00000

Consumer demand (ton):


C1 C2 C3 C4 C5
A 25.00000 30.00000 50.00000 15.00000 35.00000
B 25.00000 8.000000 0.000000 30.00000 30.00000

Fixed cost distribution Center:


DC1 100.0000
DC2 150.0000
DC3 160.0000
DC4 139.0000

Shipping cost, Distribution Center to Consumer ($/ton):


C1 C2 C3 C4 C5
A DC1 5.000000 5.000000 3.000000 2.000000 4.000000
A DC2 5.100000 4.900000 3.300000 2.500000 2.700000
A DC3 3.500000 2.000000 1.900000 4.000000 4.300000
A DC4 1.000000 1.800000 4.900000 4.800000 2.000000
B DC1 5.000000 4.900000 3.300000 2.500000 4.100000
B DC2 5.000000 4.800000 3.000000 2.200000 2.500000
B DC3 3.200000 2.000000 1.700000 3.500000 4.000000
B DC4 1.500000 2.000000 5.000000 5.000000 2.300000

SOLUTION
❖ SOLUTION
Global optimal solution found.
Below is the
Objective solution achieved by LINGO with infeasibilities
value: 1354.400 0, and the detailed report that makes up the optimal
Objective bound: 1354.400
Infeasibilities: 0.000000
Global optimal solution found.
Objective
Model Class: value:
MILP 1354.400
Objective bound: 1354.400
Infeasibilities:
IDEAL TRANSPORT PROGRAM: 0.000000
PRODUCT/PLANT TO DISTRIBUTION CENTER
Product: A Plant: P1 TO Distctr: DC1 Shipping cost: $ 50.00
IDEAL TRANSPORT PROGRAM:
Product: A Plant: P1 TO Distctr: DC3 Shipping cost: $ 60.00
PRODUCT/PLANT
Product: A TO DISTRIBUTION
Plant: P1 TO Distctr:CENTER
DC3 Shipping cost: $143.00
Product:
Product: B A Plant:
Plant: P1 Distctr:
P2 TO TO Distctr: DC1 Shipping
DC1 Shipping cost: $ 50.00
cost: $ 20.00
Product:
Product: B A Plant:
Plant: P1 Distctr:
P2 TO TO Distctr: DC3 Shipping
DC3 Shipping cost: $ 60.00
cost: $ 42.90
Product:
Product:B A Plant: P2 TO
Plant: P1 Distctr: DC1 Shipping
TO Distctr: cost: $ 72.00
DC3 Shipping cost: $143.00
Product: B Plant: P2 TO Distctr: DC1 Shipping cost: $ 20.00
DISTRIBUTION CENTER FIXED PROFIT
Product: B Plant:
Product: A
Plant: P2 TO Distctr: DC3
P1 TO Distctr: DC1
Shipping cost: $ 42.90
Product: B Plant: P2 TO Distctr: DC1 Shipping cost: $ 72.00
Total: $387.90
1

DISTRIBUTION CENTER FIXED COST


Product: A Plant: P1 TO Distctr: DC1
Product: A Plant: P1 TO Distctr: DC3
Product: A Plant: P1 TO Distctr: DC3
Product: B Plant: P2 TO Distctr: DC1
Product: B Plant: P2 TO Distctr: DC3
Product: B Plant: P2 TO Distctr: DC1
Total: $260.00

DISTRIBUTION CENTER TO CONSUMER


Product: A Distctr: DC1 TO Customer: C4 Shipping cost: $ 30.00
Product: A Distctr: DC1 TO Customer: C5 Shipping cost: $140.00
Product: A Distctr: DC3 TO Customer: C1 Shipping cost: $ 87.50
Product: A Distctr: DC3 TO Customer: C2 Shipping cost: $ 60.00
Product: A Distctr: DC3 TO Customer: C3 Shipping cost: $ 95.00
Product: B Distctr: DC1 TO Customer: C4 Shipping cost: $ 75.00
Product: B Distctr: DC1 TO Customer: C5 Shipping cost: $123.00
Product: B Distctr: DC3 TO Customer: C1 Shipping cost: $ 80.00
Product: B Distctr: DC3 TO Customer: C2 Shipping cost: $ 16.00
Total: $706.50

SLACK/SURPLUS LIMIT = CONSUMER DEMAND (ton):


PROD LIMIT VALUE 218
C1 50.00000 50.00000 0.000000
C2 38.00000 38.00000 0.000000
C2-B6 Solving Problems with LINGO Advanced Transport | Case 12 | Transport

GOAL

12
The simplified problem of transport always has that a trajectory starts at an origin and there is a
single path to a destination. In the advanced problem we can have any composition of trajectories.

Blocks
• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic The mass balance at any intermediate station should be zero. Build a model to get the lowest cost
• Dynamic of transportation that meets all requirements.

• Logistics
Routes / Cost To WS WR WQ WP W1 W2 P1 P2
• Energy
P1 $ 2.00
• Assembly Line
P2 $ 4.00 2.00 5.00

Keywords: W1 $ 3.00 2.00

• Delivery W2 $
From
• Warehouse WS $ 4.00 3.00
• Distribution WR $ 4.00
• Logistics WQ $ 1.00 2.00 3.00

WP $ 2.00
Source:
Demand un 15 25
• Book 6
Maximum Production 40 15
• Page 836

219
C2-B6 Solving Problems with LINGO Advanced Transport | Case 12 | Transport
MODEL:
SETS:
ROUTE:COST, VOL;
PLANT: MAX_PROD;
WAREHOUSE:DEMAND;
ENDSETS
DATA:
! Routes attributes;
ROUTE, COST =
P1_WS 2 ! VOL(1) Plant 1 to Warehouse S;
WS_WR 4 ! VOL(2) Warehouse S to Warehouse R;
WS_P2 3 ! VOL(3) Warehouse S to Plant 2;
WR_W1 4 ! VOL(4) Warehouse R to Warehouse 1;
W1_WP 2 ! VOL(5) Warehouse 1 to Warehouse P;
W1_WQ 3 ! VOL(6) Warehouse 1 to Warehouse Q;
WP_WQ 2 ! VOL(7) Warehouse P to Warehouse Q;
WQ_W1 1 ! VOL(8) Warehouse Q to Warehouse 1;
WQ_W2 2 ! VOL(9) Warehouse Q to Warehouse 2;
WQ_P2 3 ! VOL(10) Warehouse Q to Plant 2;
P2_WQ 2 ! VOL(11) Plant 2 to Warehouse Q;
P2_W2 5 ! VOL(12) Plant 2 to Warehouse 2;
P2_WS 4; ! VOL(13) Plant 2 to Warehouse S;
! Plants attributes;
PLANT, MAX_PROD =
P1 40
P2 15;
! Warehouse attributes;
WAREHOUSE, DEMAND =
W1 15
W2 25;
ENDDATA
SUBMODEL MIN12:
[OBJ] MIN = @SUM( ROUTE( I): COST( I) * VOL( I));
! Factory Production Restriction
VOL(1) <= MAX_PROD(1);
VOL(13) + VOL(11) + VOL(12) - VOL(3) - VOL(10) <= MAX_PROD(2);
! Demand Restriction ;
VOL(4) + VOL(8) - VOL(6) - VOL(5) = DEMAND(1);
VOL(9) + VOL(12) = DEMAND(2);
! Balance ; ;
VOL(1) + VOL(13) - VOL(2) - VOL(3) = 0;
VOL(2) - VOL(4) = 0;
VOL(5) - VOL(7) = 0;
VOL(6) + VOL(11) + VOL(7) - VOL(8) - VOL(10) - VOL(9) = 0;
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
@WRITE(" DATA", @NEWLINE(1)," SHIPPING COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " PRODUCTION (un):", @NEWLINE( 1));
@TABLE(MAX_PROD);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION", @NEWLINE( 1));
@SOLVE(MIN12); ! Execute sub-model;
@WRITE(" ", @NEWLINE(1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1)); ! Solution Report;
@WRITEFOR( ROUTE( I)| VOL(I) #GT# 0:' Route: ',
@FORMAT(ROUTE( I),'-3s'), ' Ship: ',
@FORMAT(VOL( I),'%2.0f'),'un x Cost: $',
@FORMAT(COST( I), '%3.2f'),' = Total: $',
@FORMAT(COST( I) * VOL(I),'%6.2f'),
@NEWLINE( 1));
!@GEN(MIN12); !To see the corresponding model scalar, remove (!);
ENDCALC
END

220
C2-B6 Solving Problems with LINGO Advanced Transport | Case 12 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA
SHIPPING COST:
P1_WS 2.000000
WS_WR 4.000000
WS_P2 3.000000
WR_W1 4.000000
W1_WP 2.000000
DATA
W1_WQ 3.000000
SHIPPING COST:
WP_WQ 2.000000
P1_WS
WQ_W1 2.000000
1.000000
WS_WR
WQ_W2 4.000000
2.000000
WS_P2
WQ_P2 3.000000
WR_W1
P2_WQ 4.000000
2.000000
W1_WP
P2_W2 2.000000
5.000000
W1_WQ 3.000000
P2_WS 4.000000
WP_WQ 2.000000
WQ_W1 1.000000
PRODUCTION (un):
WQ_W2 2.000000
P1 40.00000
WQ_P2 3.000000
P2 15.00000
P2_WQ 2.000000
P2_W2 (un):
DEMAND 5.000000
P2_WS 4.000000
W1 15.00000
W2 25.00000
PRODUCTION (un):
P1 40.00000
SOLUTION
P2 15.00000
Global optimal solution found.
Objective value: 270.0000
❖ DEMAND
SOLUTION (un):
Infeasibilities: 0.000000
W1 15.00000
Below isTRANSPORT
the solutionPROGRAM:
W2 25.00000
IDEAL achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Route: P1_WS Ship: 25un x Cost: $2.00 = Total: $ 50.00
SOLUTION
Route: WS_P2 Ship: 25un x Cost: $3.00 = Total: $ 75.00
Global
Route: optimal solution
WQ_W1 Ship: 15un found.
x Cost: $1.00 = Total: $ 15.00
Objective
Route: WQ_W2value:
Ship: 25un x Cost: $2.00 = Total:270.0000 $ 50.00
Infeasibilities:
Route: P2_WQ Ship: 40un x Cost: $2.00 = Total: $ 80.00 0.000000

IDEAL TRANSPORT PROGRAM:


Route: P1_WS Ship: 25un x Cost: $2.00 = Total: $ 50.00
Route: WS_P2 Ship: 25un x Cost: $3.00 = Total: $ 75.00
Route: WQ_W1 Ship: 15un x Cost: $1.00 = Total: $ 15.00
Route: WQ_W2 Ship: 25un x Cost: $2.00 = Total: $ 50.00
Route: P2_WQ Ship: 40un x Cost: $2.00 = Total: $ 80.00

221
C2-B6 Solving Problems with LINGO Minimum Distance | Case 13 | Transport

GOAL

13 A network of building material stores has four stores that must be supplied with: This sand
can be loaded into three ports PORT1, PORT2 and PORT3, whose distances (in km) can be
seen below.

Available
Blocks Port / Shop To S1 S2 S3 S4
(m3)
• Product Mix
Port-1 km 30 20 24 18 1,000
• Blend
• Finance
Port-2 km 12 36 30 24 1,000
• Investments
• Diet Port-3 km 8 15 25 20 1,000

• Aviation
Demand m3 50 80 40 100
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Distribution
• Supplier
• Logistics

Source:
• Book 2
• Page 228

222
C2-B6 Solving Problems with LINGO Minimum Distance | Case 13 | Transport
MODEL:
SETS:
SUPPLIER: AVAILABLE;
CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): DISTANCE, VOLUME;
ENDSETS
DATA:
! Available attributes;
SUPPLIER, AVAILABLE =
PORT1 1000
PORT2 1000
PORT3 1000;

! Consumer attributes;
CONSUMER, DEMAND =
SHOP1 50
SHOP2 80
SHOP3 40
SHOP4 100;

! Distance SHOP1 SHOP2 SHOP3 SHOP4;


DISTANCE = 30 20 24 18 ! PORT1;
12 36 30 24 ! PORT2;
8 15 25 20; ! PORT3;
ENDDATA
SUBMODEL MIN13:
[OBJ] MIN = @SUM( ROUTES( I, J): DISTANCE( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( CONSUMER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) = DEMAND( J));
! The available constraints;
@FOR( SUPPLIER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) <= AVAILABLE( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING DISTANCE ( km )", @NEWLINE( 1));
@TABLE(DISTANCE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE ( m3 )", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND ( m3 ):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " NOTE: A Truck can carry 10m3 per trip.",
@NEWLINE( 2), " SOLUTION ", @NEWLINE( 1));
@SOLVE(MIN13);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' Ship: ',
@FORMAT(VOLUME( I, J),'%3.0f'), 'm3 From: ',
@FORMAT(SUPPLIER( I),'-6s'),' To: ',
@FORMAT(CONSUMER( J),'-6s'),' Traveled: ',
@FORMAT(DISTANCE (I, J) * VOLUME(I,J),'%4g'),'km', @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN11);
ENDCALC
END

223
C2-B6 Solving Problems with LINGO Minimum Distance | Case 13 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
SHIPPING DISTANCE ( km )
SHOP1 SHOP2 SHOP3 SHOP4
PORT1 30.00000 20.00000 24.00000 18.00000
PORT2 12.00000 36.00000 30.00000 24.00000
PORT3 8.000000 15.00000 25.00000 20.00000

AVAILABLE ( m3 )
PORT1 1000.000
DATA:
PORT2 1000.000
SHIPPING DISTANCE ( km )
PORT3 1000.000
SHOP1 SHOP2 SHOP3 SHOP4
DATA:
PORT1 30.00000 20.00000 24.00000 18.00000
DEMAND
PORT2 (12.00000
SHIPPING m3 ):
DISTANCE (36.00000
km ) 30.00000 24.00000
SHOP1 50.00000
SHOP1 15.00000
PORT3 8.000000 SHOP2 SHOP3
25.00000 SHOP4
20.00000
SHOP2 30.00000
PORT1 80.00000 20.00000 24.00000 18.00000
SHOP3 12.00000
PORT2
AVAILABLE 40.00000
( m3 ) 36.00000 30.00000 24.00000
SHOP4 100.0000 15.00000 25.00000 20.00000
PORT3 8.000000
PORT1 1000.000
PORT2 1000.000
NOTE:
PORT3 A 1000.000
AVAILABLE Truck can carry 10m3 per trip.
( m3 )
PORT1 1000.000
PORT2 (1000.000
SOLUTION
DEMAND m3 ):
PORT3 optimal
Global
SHOP1 1000.000
50.00000solution found.
Objective value:
SHOP2 80.00000 4360.000
DEMAND
SHOP3 ( 40.00000
m3 ):
Infeasibilities: 0.000000
SHOP1 50.00000
SHOP4 100.0000
SHOP2 Class:
Model 80.00000LP
SHOP3 40.00000
NOTE: A Truck can carry 10m3 per trip.
SHOP4 TRANSPORT
❖ SOLUTION
IDEAL 100.0000 PROGRAM:
Ship: 40m3 From: PORT1 To: SHOP3
SOLUTION Traveled: 960km
Below
Ship: is
NOTE:
Global the
A100m3 solution
Truck
optimal
can
From:achieved
carry byTo:
10m3
PORT1
solution LINGO
per
found. with infeasibilities
trip.
SHOP4 0, and the detailed report that makes up the optimal
Traveled: 1800km
Ship: 50m3
Objective From: PORT3 To: SHOP1
value: Traveled: 400km
4360.000
SOLUTION
Ship: 80m3
Infeasibilities: From: PORT3 To: SHOP2 Traveled: 1200km
0.000000
Global optimal solution found.
Objective value: 4360.000
Model Class: LP
Infeasibilities: 0.000000
IDEAL TRANSPORT
Model Class: LP PROGRAM:
Ship: 40m3 From: PORT1 To: SHOP3 Traveled: 960km
Ship: 100m3 From: PORT1
IDEAL TRANSPORT PROGRAM: To: SHOP4 Traveled: 1800km
Ship: 50m3 From: PORT3 To:
Ship: 40m3 From: PORT1 To: SHOP3 SHOP1 Traveled: 960km
Traveled: 400km
Ship: 80m3 From: PORT3 To:
Ship: 100m3 From: PORT1 To: SHOP4SHOP2 Traveled: 1200km
Traveled: 1800km
Ship: 50m3 From: PORT3 To: SHOP1 Traveled: 400km
SLACK/SURPLUS LIMITPORT3
Ship: 80m3 From: = CONSUMER DEMANDTraveled:
To: SHOP2 (m3): 1200km
PROD LIMIT VALUE
SHOP1 50.00000
SLACK/SURPLUS LIMIT =50.00000 0.000000
CONSUMER DEMAND (m3):
SHOP2 80.00000
PROD 80.00000
LIMIT 0.000000
VALUE
SHOP3
SHOP1 40.00000
50.00000 40.00000 0.000000
50.00000 0.000000
SHOP4
SHOP2 100.0000
80.00000 100.0000 0.000000
80.00000 0.000000
SHOP3 40.00000 40.00000 0.000000
SLACK/SURPLUS
SHOP4 LIMIT 100.0000
100.0000 = SUPPLIER 0.000000
AVAILABLE (m3):
PROD LIMIT VALUE
SLACK/SURPLUS
PORT1 LIMIT =1000.000
140.0000 SUPPLIER -860.0000
AVAILABLE (m3):
PORT2 PROD
0.000000 LIMIT
1000.000 VALUE
-1000.000
PORT1
PORT3 140.0000
130.0000 1000.000
1000.000 -860.0000
-870.0000
PORT2 0.000000 1000.000 -1000.000
PORT3 130.0000 1000.000 -870.0000

224
C2-B6 Solving Problems with LINGO Gasoline Distribution | Case 14 | Transport

GOAL

14
Four gas stations SA, SB, SC and SD require 50, 40, 60 and 40 thousand gallons of gas,
respectively.

It is possible to meet these demands through distributors D1, D2 and D3 which have 80, 100
and 50 thousand liters, respectively.

Blocks The costs of shipping 1 thousand gallons of gasoline are shown in the table below:
• Product Mix
• Blend
Cost of shipping for every 1,000 gallons
• Finance Available
(gal)
• Investments Distributor To Station A Station B Station C Station D

• Diet
D1 $ 70.00 60.00 60.00 60.00 80,000
• Aviation
• Transport D2 $ 50.00 80.00 60.00 70.00 100,000
• Agriculture
D3 $ 80.00 50.00 80.00 60.00 50,000
• Construction
• Refinery Demand gal 50,000 40,000 60,000 40,000 -
• Schedule
• Cutting
It is possible to meet these demands through distributors D1, D2 and D3 which has availability
• Metallurgy of 80, 100 and 50 thousand liters, respectively.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Delivery
• Distribution
• Supplier
• Logistics

Source:
• Book 2
• Page 202

225
C2-B6 Solving Problems with LINGO Gasoline Distribution | Case 14 | Transport

MODEL:
SETS:
SUPPLIER: AVAILABLE;
CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): COST, VOLUME;
ENDSETS
DATA:
! Supplier attributes;
SUPPLIER, AVAILABLE =
D1 80000
D2 100000
D3 50000;
! Consumer attributes;
CONSUMER, DEMAND =
S1 50000
S2 40000
S3 60000
S4 40000;
! Cost SA SB SC SD;
COST = 70 60 60 60 ! Distributor 1;
50 80 60 70 ! Distributor 2;
80 50 80 60; ! Distributor 3;
ENDDATA
SUBMODEL MIN14:
[OBJ] MIN = @SUM( ROUTES( I, J): COST( I, J)/1000 * VOLUME( I, J));
! The demand constraints;
@FOR( CONSUMER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) = DEMAND( J));
! The available constraints;
@FOR( SUPPLIER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) <= AVAILABLE( I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " COST (for every 1000 gal):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE ( gal )", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND ( gal ):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(@NEWLINE( 2), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN14);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0:' From:',
@FORMAT(SUPPLIER( I),'-2s'),' To:',
@FORMAT(CONSUMER( J),'-2s')," ",
@FORMAT(VOLUME( I, J),'%3.0f'), 'gal x Cost: $',
@FORMAT(COST(I,J)/1000, '%4.2f'), ' = Total: $',
@FORMAT(COST (I, J)/1000 * VOLUME(I,J),'%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN14);
ENDCALC
END

226
C2-B6 Solving Problems with LINGO Gasoline Distribution | Case 14 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COST (for every 1000 gal):
S1 S2 S3 S4
D1 70.00000 60.00000 60.00000 60.00000
D2 50.00000 80.00000 60.00000 70.00000
D3 80.00000 50.00000 80.00000 60.00000

AVAILABLE ( gal )
D1 80000.00
D2 100000.0
D3 50000.00

DATA:
DEMAND ( gal ):
COST
S1 (for every 1000 gal):
50000.00
S1
S2 40000.00 S2 S3 S4
D1
S3 70.00000
60000.00 60.00000 60.00000 60.00000
D2
S4 50.00000
40000.00 80.00000 60.00000 70.00000
D3 80.00000 50.00000 80.00000 60.00000

AVAILABLE
SOLUTION ( gal )
D1 80000.00
Global optimal solution found.
D2 100000.0
Objective value: 10500.00
D3 50000.00
Infeasibilities: 0.000000

DEMAND ( gal ): PROGRAM:


IDEAL TRANSPORT
S1 50000.00
From:D1 To:S3 40000gal x Cost: $0.06 = Total: $2400.00
S2 40000.00
From:D1 To:S4 40000gal x Cost: $0.06 = Total: $2400.00
❖ SOLUTION
S3 60000.00
From:D2 To:S1 50000gal x Cost: $0.05 = Total: $2500.00
S4 40000.00
From:D2 To:S3 20000gal
Below is the solution achievedxby
Cost: $0.06
LINGO = Total: $1200.00
with infeasibilities 0, and the detailed report that makes up the optimal
From:D3 To:S2 40000gal x Cost: $0.05 = Total: $2000.00

SOLUTION
Global optimal solution found.
Objective value: 10500.00
Infeasibilities: 0.000000

IDEAL TRANSPORT PROGRAM:


From:D1 To:S3 40000gal x Cost: $0.06 = Total: $2400.00
From:D1 To:S4 40000gal x Cost: $0.06 = Total: $2400.00
From:D2 To:S1 50000gal x Cost: $0.05 = Total: $2500.00
From:D2 To:S3 20000gal x Cost: $0.06 = Total: $1200.00
From:D3 To:S2 40000gal x Cost: $0.05 = Total: $2000.00

1
227
C2-B6 Solving Problems with LINGO Garbage Collection | Case 15 | Transport

GOAL

15 The removal of garbage from a large Brazilian City is an important and cost activity. Garbage
needs to be collected from streets, sidewalks, industries, residences, etc., and arranged in
appropriate places.

To enable rapid and efficient collection, the city has been divided into several sectors.

Blocks The garbage is collected and sent to dumps or to companies that do the waste treatment in
order to take advantage of materials such as plastic and aluminum for recycling and
• Product Mix
produce fertilizer.
• Blend
The capacity of each of the dumps, as well as the distance that the trucks accurately travel
• Finance
from the collection sectors to the delivery, besides the annual collection estimates, whose
• Investments distances (in km) can be seen in the data block.
• Diet
All problem data is organized in the data block as a set of members and value attributes,
• Aviation which can be viewed below.
• Transport
Sectors / Destiny D1 D2 D3 D4 D5 Available
• Agriculture
• Construction Distance Between Origin/ Destination 1000/m3

• Refinery S1 Km 3.4 1.4 4.9 7.4 9.3 153


• Schedule S2 Km 2.4 2.1 8.3 9.1 8.8 152
• Cutting
S3 Km 1.4 2.9 3.7 9.4 8.6 154
• Metallurgy
S4 Km 2.6 3.6 4.5 8.2 8.9 138
• Fertilizer
Sectors S5 Km 1.5 3.1 2.1 7.9 8.8 127
• Clinic
• Classic S6 Km 4.2 4.9 6.5 7.7 6.1 129

• Dynamic S7 Km 4.8 6.2 9.9 6.2 5.7 111


• Logistics S8 Km 5.4 6.0 5.2 7.6 4.9 110
• Energy
S9 Km 3.1 4.1 6.6 7.5 7.2 130
• Assembly Line
S10 Km 3.2 6.5 7.1 6.0 8.3 135

Demand 1000/m3 350 250 500 400 200 -


Keywords:
• Delivery Construct a model that minimizes the total distance to be covered by the trucks.
• Consumer
• Supplier
• Logistics

Source:
• Book 2
• Page 238

228
C2-B6 Solving Problems with LINGO Garbage Collection | Case 15 | Transport

MODEL:
SETS:
SUPPLIER: AVAILABLE; CONSUMER: DEMAND;
ROUTES( SUPPLIER, CONSUMER): DISTANCE, VOLUME;
ENDSETS
DATA:
!Supplier attributes;
SUPPLIER , AVAILABLE =
S1 153
S2 152
S3 154
S4 138
S5 127
S6 129
S7 111
S8 110
S9 130
S10 135;

! Consumer attributes;
CONSUMER , DEMAND =
D1 350
D2 250
D3 500
D4 400
D5 200;

! Distance D1 D2 D3 D4 D5;
DISTANCE = 3.4 1.4 4.9 7.4 9.3 ! S1;
2.4 2.1 8.3 9.1 8.8 ! S2;
1.4 2.9 3.7 9.4 8.6 ! S3;
2.6 3.6 4.5 8.2 8.9 ! S4;
1.5 3.1 2.1 7.9 8.8 ! S5;
4.2 4.9 6.5 7.7 6.1 ! S6;
4.8 6.2 9.9 6.2 5.7 ! S7;
5.4 6.0 5.2 7.6 4.9 ! S8;
3.1 4.1 6.6 7.5 7.2 ! S9;
3.2 6.5 7.1 6.0 8.3; ! S10;
ENDDATA
SUBMODEL MIN15:
[OBJ] MIN = @SUM( ROUTES( I, J): DISTANCE( I, J) * VOLUME( I, J));
! The demand constraints;
@FOR( CONSUMER( J):
[DEM] @SUM( SUPPLIER( I): VOLUME( I, J)) <= DEMAND( J));
! The capacity constraints;
@FOR( SUPPLIER( I):
[AVA] @SUM( CONSUMER( J): VOLUME( I, J)) = AVAILABLE( I));
ENDSUBMODEL

229
C2-B6 Solving Problems with LINGO Garbage Collection | Case 15 | Transport

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " SHIPPING DISTANCE ( km )", @NEWLINE( 1));
@TABLE(DISTANCE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE ( 1000/m3 )", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND ( 1000/m3 ):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN15);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL TRANSPORT PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES( I, J) | VOLUME( I, J) #GT# 0: ' Ship ',
@FORMAT(VOLUME( I, J),'%5.1f'), 'm3 From:',
@FORMAT(SUPPLIER( I),'3s'), ' To:',
@FORMAT(CONSUMER( J),'3s'), ' Traveled:',
@FORMAT(DISTANCE (I, J) * VOLUME(I,J),'6.1f'),'km',
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
! @GEN(MIN11);
ENDCALC
END

230
C2-B6 Solving Problems with LINGO Garbage Collection | Case 15 | Transport

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
SHIPPING DISTANCE ( km )
D1 D2 D3 D4 D5
S1 3.400000 1.400000 4.900000 7.400000 9.300000
S2 2.400000 2.100000 8.300000 9.100000 8.800000
S3 1.400000 2.900000 3.700000 9.400000 8.600000
DATA:
S4 2.600000 3.600000 4.500000 8.200000 8.900000
S5 1.500000
SHIPPING 3.100000
DISTANCE ( km 2.100000
) 7.900000 8.800000
S6 4.200000 4.900000 6.500000 7.700000 6.100000
DATA: D1 D2 D3 D4 D5
S7 4.800000 6.200000 9.900000 6.200000 5.700000
S1 3.400000
SHIPPING
S8 DISTANCE 1.400000
( km ) 4.900000 7.400000
5.400000 6.000000 5.200000 7.600000 4.900000 9.300000
S2
S9 2.400000
3.100000 2.100000
D14.100000 D2 8.300000
6.600000 D3 9.100000
7.500000 D4 8.800000
7.200000 D5
S3
S1 1.400000
S10 3.200000 2.900000
3.4000006.500000
1.400000 3.700000
7.100000 9.400000
6.000000
4.900000 8.3000008.600000
7.400000 9.300000
S4
S2 2.600000
2.400000 3.600000
2.100000 4.500000
8.300000 8.200000
9.100000 8.900000
8.800000
AVAILABLE ( 1000/m3 )
S5
S3 1.500000
1.400000 3.100000
2.900000 2.100000
3.700000 7.900000
9.400000 8.800000
8.600000
S1 153.0000
S6
S4
S2 4.200000
2.600000 4.900000
152.0000 3.600000 6.500000
4.500000 7.700000
8.200000 6.100000
8.900000
S7
S5
S3 4.800000
1.500000 6.200000
154.0000 3.100000 9.900000
2.100000 6.200000
7.900000 5.700000
8.800000
S8
S4
S6 5.400000
4.200000 6.000000
138.0000 4.900000 5.200000
6.500000 7.600000
7.700000 4.900000
6.100000
S5
S9
S7 127.0000
3.100000
4.800000 4.100000
6.200000 6.600000
9.900000 7.500000
6.200000 7.200000
5.700000
S6
S10 129.0000
3.200000 6.500000 7.100000 6.000000 8.300000
S8
S7 5.400000
111.0000 6.000000 5.200000 7.600000 4.900000
S9
S8 3.100000 4.100000
110.0000 6.600000 7.500000 7.200000
AVAILABLE
S10
S9 ( 1000/m3
3.200000
130.0000 )
6.500000 7.100000 6.000000 8.300000
S1 153.0000
S10 135.0000
S2 152.0000
AVAILABLE ( 1000/m3 )
DEMAND
S3 ( 1000/m3 ):
154.0000
S1 153.0000
D1 350.0000
S4
S2 138.0000
152.0000
D2 250.0000
S5
S3 127.0000
154.0000
D3 500.0000
S6 129.0000
D4 400.0000
S4 138.0000
D5 200.0000
S7
S5 111.0000
127.0000
S8
S6 110.0000
129.0000
SOLUTION
S9
S7
Global
130.0000
111.0000
optimal solution found.
S10
S8 135.0000
110.0000
Objective value: 4784.900
S9 130.0000
Infeasibilities: 0.000000
DEMAND ( 1000/m3 ):
S10 135.0000
Model
D1 Class: LP
350.0000
D2
DEMAND 250.0000
( 1000/m3
IDEAL TRANSPORT ):
PROGRAM:
D3
Ship 500.0000
D1 153.0m3
350.0000From: S1 To: D2
Traveled: 214.2km
D4
D2
Ship 400.0000
250.0000From: S2
55.0m3 To: D1
Traveled: 132.0km
❖ SOLUTION
D5
Ship
D3 200.0000
97.0m3
500.0000From: S2 To: D2
Traveled: 203.7km
Ship 30.0m3 From: S3 To: D1
Traveled: 42.0km
D4 400.0000
Ship 124.0m3 From: S3 To: D3
Below
SOLUTION
D5 is the
200.0000
Ship 138.0m3 solution
From: S4 byTraveled:
achieved
To: D3 LINGO 458.8km
Traveled: with infeasibilities
621.0km 0, and the detailed report that makes up the optimal
Global optimal From:
Ship 127.0m3 solution
S5 found.
To: D3
Traveled: 266.7km
Objective
SOLUTION
Ship 1.0m3value:
From: S6 To: D3
Traveled: 6.5km4784.900
Infeasibilities:
Ship 128.0m3
Global optimalFrom: S6
solution Traveled: 780.8km0.000000
To: D5
found.
Ship 39.0m3value:
Objective From: S7 To: D4
Traveled: 241.8km4784.900
Ship 72.0m3 From: S7 To: D5
Traveled: 410.4km
Model Class: LP
Infeasibilities:
Ship 110.0m3 From: S8 To: D3 Traveled: 572.0km0.000000
Ship 130.0m3 From: S9 To: D1 Traveled: 403.0km
IDEAL
Model TRANSPORT
Class: LP
Ship 135.0m3 PROGRAM: To: D1
From:S10 Traveled: 432.0km
Ship 153.0m3 From: S1 To: D2 Traveled: 214.2km
Ship
IDEAL 55.0m3
TRANSPORT From: S2
PROGRAM: To: D1 Traveled: 132.0km
Ship 153.0m3
97.0m3 From: S2
S1 To: D2 Traveled: 203.7km
214.2km
1
Ship 30.0m3
55.0m3 From: S3
S2 To: D1 Traveled: 132.0km
42.0km
Ship 124.0m3
97.0m3 From: S3
S2 To: D3
D2 Traveled: 458.8km
203.7km
Ship 138.0m3
30.0m3 From: S4
S3 To: D3
D1 Traveled: 621.0km
42.0km
Ship 127.0m3
124.0m3 From: S5
S3 To: D3 Traveled: 266.7km
458.8km
Ship 138.0m3
1.0m3 From: S6
S4 To: D3 Traveled: 621.0km
6.5km
Ship 128.0m3
127.0m3 From: S6
S5 To: D5
D3 Traveled: 780.8km
266.7km
Ship 39.0m3
1.0m3 From: S7
S6 To: D4
D3 Traveled: 241.8km
6.5km
Ship 128.0m3
72.0m3 From: S7
S6 To: D5 Traveled: 410.4km
780.8km
Ship 110.0m3
39.0m3 From: S8
S7 To: D3
D4 Traveled: 572.0km
241.8km
Ship 130.0m3
72.0m3 From: S9
S7 To: D1
D5 Traveled: 403.0km
410.4km
Ship 135.0m3
110.0m3 From:S10
From: S8 To: D1
D3 Traveled: 432.0km
572.0km
Ship 130.0m3 From: S9 To: D1 Traveled: 403.0km
SLACK/SURPLUS
Ship 135.0m3 LIMIT = CONSUMER
From:S10 To:DEMAND
D1 ( 1000/m3 432.0km
Traveled: ):
PROD LIMIT VALUE
SLACK/SURPLUS
D1 350.0000LIMIT = CONSUMER
350.0000 DEMAND ( 1000/m3 ):
0.000000
D2 PROD
250.0000 LIMIT
250.0000 VALUE
0.000000 1
D3 500.0000 500.0000 0.000000
D4 39.00000 400.0000 -361.0000 1
D5 200.0000 200.0000 0.000000

SLACK/SURPLUS LIMIT = SUPPLIER DEMAND ( 1000/m3 ):


PROD LIMIT VALUE
S1 153.0000 153.0000 0.000000
S2 152.0000 152.0000 0.000000
S3 154.0000 154.0000 0.000000
S4 138.0000 138.0000 0.000000
S5 127.0000 127.0000 0.000000 231
S6 129.0000 129.0000 0.000000
S7 111.0000 111.0000 0.000000
BLOCK 7 Block: AGRICULTURE

What food should be planted so that profit is maximized and the characteristics of the soil, the buyer
market and the available resources are respected?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

232
C2-B7 Solving Problems with LINGO Activity Study | Case 1 | Agriculture

GOAL

1 A farmer is studying the division of his property in the following productive activities:

A (Let)
To allocate a certain amount of bushel for the sugarcane plantation, to a local power plant,
which is in charge of the activity and pays for the rent of the land $300.00 per bushel per
year.
Blocks
• Product Mix P (Livestock)

• Blend Use another part for raising cattle. The recovery of pastures requires fertilization (100 kg /
bushel) and irrigation (100,000 liters of water per bushel) per year. The estimated profit for
• Finance
this activity is $400.00 per bushel per year.
• Investments
S (Planting of soybeans)
• Diet
Use a third part to plant soybeans. This crop requires 200 kg per bushel of fertilizers and
• Aviation
200,000 l of water / acre for irrigation per year. The estimated profit in these activities is
• Transport $500.00 / bushel in the year.
• Agriculture
Resources / Products Sugar Cane Cattle Soy Available
• Construction
• Refinery Water L 0 100,000 200,000 12,750,000
• Schedule
Fertilizer kg 0 100 100 14,000
• Cutting
• Metallurgy Area % 1 1 1 100
• Fertilizer
Profit $ 300.00 400.00 500.00 -
• Clinic
• Classic Availability of resources per year: 12,750,000 liters of water, 14,000 kg of fertilizer and 100
• Dynamic bushels of land. How many fields should you allocate to each activity to provide the best
return
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation
• Livestock
• Rent
• Supplier

Source:
• Book 2
• Page 226

233
C2-B7 Solving Problems with LINGO Activity Study | Case 1 | Agriculture
MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
WATER 12750000
FERTILIZER 14000
AREA 100;
! Products attributes;
PRODUCT, PROFIT =
CANE 300
CATTLE 400
SOY 500;

! Required attributes CANE CATTLE SOY;


USAGE = 0 100000 200000 ! Water;
0 100 100 ! Fertilizer;
1 1 1; ! Area;
ENDDATA
SUBMODEL MAX1:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',8);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " USAGE(L, Kg, %):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (L, KG, %):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)|PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-6s'),' Unit profit: $',
@FORMAT(PROFIT( J),'%6.2f'),' x Area: ',
@FORMAT(PRODUCE( J),'%5.2f'), 'm2 = Total: $',
@FORMAT(PROFIT( J) * PRODUCE( J),'%8.2f'),
@NEWLINE( 1));
@CHARTPIE('Agriculture model', 'Area', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

234
C2-B7 Solving Problems with LINGO Activity Study | Case 1 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
USAGE(L, Kg, %):
CANE CATTLE SOY
WATER 0.0000000 100000.00 200000.00
FERTILIZER 0.0000000 100.00000 100.00000
AREA 1.0000000 1.0000000 1.0000000

AVAILABLE (L, KG, %):


WATER 12750000.
FERTILIZER 14000.000
AREA 100.00000
DATA:
PROFIT:
USAGE(L, Kg, %):
DATA:
CANE 300.00000
CANE CATTLE SOY
USAGE(L,
CATTLE
WATER Kg, %):
400.00000
0.0000000 100000.00 200000.00
SOY
FERTILIZER CANE 100.00000
500.00000
0.0000000 CATTLE 100.00000SOY
WATER
AREA 0.0000000 100000.00 200000.00
1.0000000 1.0000000 1.0000000
FERTILIZER 0.0000000 100.00000 100.00000
SOLUTION:
AREA
AVAILABLE (L, 1.0000000
KG, %): 1.0000000 1.0000000
Global optimal solution found.
WATER
Objective 12750000.
value: 42750.000
AVAILABLE
FERTILIZER(L,14000.000
KG, %):
Infeasibilities:
WATER 12750000. 0.0000000
AREA 100.00000
FERTILIZER 14000.000
Model
AREA Class: 100.00000
PROFIT: LP
CANE 300.00000
SOLUTION
❖ IDEAL PLANNING
PROFIT:
CATTLE 400.00000 PROGRAM:
CANE
CANE Unit profit:
300.00000
SOY is the500.00000 $300.00 x Area: 36.25m2 = Total: $ 10875.00
Below solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOY
CATTLEUnit profit: $500.00 x Area: 63.75m2 = Total: $ 31875.00
400.00000
SOY
SOLUTION: 500.00000
Global optimal solution found.
SOLUTION: value:
Objective 42750.000
Global optimal solution found.
Infeasibilities: 0.0000000
Objective value: 42750.000
Infeasibilities:
Model Class: LP 0.0000000

IDEAL
Model PLANNING
Class: LPPROGRAM:
CANE Unit profit: $300.00 x Area: 36.25m2 = Total: $10875.00
SOY PLANNING
IDEAL Unit profit: $500.00 x Area: 63.75m2 = Total:
PROGRAM: $31875.00
CANE Unit profit: $300.00 x Area: 36.25m2 = Total: $10875.00
SLACK/SURPLUS
SOY LIMIT = $500.00
Unit profit: AVAILABLE (L, KG,
x Area: %): = Total:
63.75m2 $31875.00
PROD LIMIT VALUE
WATER
SLACK/SURPLUS 12750000. 12750000.
LIMIT = AVAILABLE 0.0000000
(L, KG, %):
FERTILIZER 6375.0000
PROD 14000.000
LIMIT -7625.0000
VALUE
AREA
WATER 100.00000
12750000. 100.00000
12750000. 0.0000000
0.0000000
FERTILIZER 6375.0000 14000.000 -7625.0000
AREA 100.00000 100.00000 0.0000000

235 1
C2-B7 Solving Problems with LINGO Planting Strategy | Case 2 | Agriculture

GOAL

2 A farmer is planning his planting strategy for next year. From information obtained from
government agencies, he knows that wheat, rice and corn crops will be the most profitable
in the next harvest.

Resources / Products Wheat Rice Corn Available


Blocks
• Product Mix
Area m2 400 800 10,000 200,000
• Blend
• Finance Productivity kg/m2 0.2 0.3 0.4 60,000
• Investments
• Diet Cost p/kg $ 2.16 1.26 0.812

• Aviation
• Transport In the absence of a separate storage site, maximum production is limited to 60 tonnes.

• Agriculture The cultivable area of the site is 200,000 m2, but to meet the demands of its own site it is
• Construction imperative to plant 400 m2 of wheat, 800 m2 of rice and 10,000 m2 of corn.

• Refinery It is asked to formulate the problem of optimizing the choice of areas to be cultivated in each
• Schedule different type of crop.

• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation

236
C2-B7 Solving Problems with LINGO Planting Strategy | Case 2 | Agriculture
MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
AREA 1200000
PRODUCTIVITY 60000;

! Products attributes;
PRODUCT, COST =
WHEAT 2.16
RICE 1.26
CORN 0.812;

! Required WHEAT RICE CORN;


USAGE = 400 800 10000 ! Area;
0.2 0.3 0.4; ! Productivity;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! Restrictions associated with the site's demand (in unit area m2);
@FOR(PRODUCT(I): PRODUCE(I) >= USAGE(1,I));
! Restriction associated with total available area;
[AVA_AREA] @SUM( PRODUCT( p): PRODUCE( p )) <= 200000;
! Restriction associated with storage (in kilograms;
! Productivity ratios shall be used per unit area to obtain a final value in kilos;
[AVA_PROD] @SUM( PRODUCT( p): USAGE( 2, p) * PRODUCE( p )) <= 60000;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE(m2, kg/m2:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (m2, kg/m2):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " COST P/KG:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN2);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J): ' ',
@FORMAT(PRODUCT( J),'-6s'),' Unit cost: $',
@FORMAT(COST( J),'%4.2f'),' x Area:',
@FORMAT(PRODUCE( J),'%5.0f'), 'm2 = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%7.2f'),
@NEWLINE( 1));
@CHARTPIE('Agriculture model', 'Area', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

237
C2-B7 Solving Problems with LINGO Planting Strategy | Case 2 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCE(m2, kg/m2:
WHEAT RICE CORN
AREA 400.00000 800.00000 10000.000
PRODUCTIVITY 0.20000000 0.30000000 0.40000000

AVAILABLE (m2, kg/m2):


AREA 1200000.0
PRODUCTIVITY 60000.000

COST P/KG:
WHEAT
DATA:
2.1600000
RICE 1.2600000
RESOURCE(m2, kg/m2:
CORN
DATA: 0.8120000
WHEAT RICE CORN
AREA
RESOURCE(m2, 400.00000
kg/m2: 800.00000 10000.000
PRODUCTIVITY
SOLUTION: 0.2000000
WHEAT 0.3000000
RICE 0.4000000
CORN
AREA
Global optimal 400.00000 800.00000
solution found. 10000.000
AVAILABLE (m2, kg/m2):
PRODUCTIVITY 0.2000000 0.3000000 0.4000000
Objective
AREA value:
1200000.0 9992.0000
Infeasibilities:
PRODUCTIVITY
AVAILABLE 60000.000
(m2, kg/m2): 0.0000000
AREA 1200000.0
COST
Model P/KG:
Class: 60000.000
PRODUCTIVITY LP
WHEAT 2.1600000
❖ SOLUTION
RICEP/KG:
COST 1.2600000
IDEAL
CORN PLANNING PROGRAM:
0.8120000
WHEAT 2.1600000
WHEAT
Below
RICE is Unit
the cost:
solution $2.16by LINGO
achieved
1.2600000 x Area: 400m2 = Total:
with infeasibilities $ detailed
0, and the 864.00report that makes up the optimal
RICE
SOLUTION:
CORN Unit cost: $1.26 x Area: 800m2 = Total: $1008.00
0.8120000
Global
CORN optimal solution
Unit cost: found. x Area:10000m2 = Total: $8120.00
$0.81
Objective
SOLUTION: value: 9992.0000
Infeasibilities:
Global optimal solution found. 0.0000000
Objective value: 9992.0000
Model Class: LP
Infeasibilities: 0.0000000

IDEAL Class:
Model PLANNINGLP PROGRAM:
WHEAT Unit cost: $ 2.16 x Area: 400m2 = Total: $ 864.00
RICE Unit cost: $
IDEAL PLANNING PROGRAM:1.26 x Area: 800m2 = Total: $ 1008.00
CORN
WHEAT Unit cost:
Unit cost: $$ 2.16
0.81 xx Area:
Area:10000m2
400m2 == Total:
Total: $
$ 8120.00
864.00
RICE Unit cost: $ 1.26 x Area: 800m2 = Total: $ 1008.00
SLACK/SURPLUS
CORN LIMIT
Unit cost: $ =0.81
AVAILABLE AREA (m2)/Productivity
x Area:10000m2 = Total: $ (kg/m2):
8120.00
PROD LIMIT VALUE
AREA
SLACK/SURPLUS 1011200.0
LIMIT 1200000.0
= AVAILABLE -188800.00
AREA (m2)/Productivity (kg/m2):
PRODUCTIVITY 4320.0000
PROD 60000.000
LIMIT -55680.000
VALUE
AREA 1011200.0 1200000.0 -188800.00
PRODUCTIVITY 4320.0000 60000.000 -55680.000

238
1
C2-B7 Solving Problems with LINGO Landfilled Lands | Case 3 | Agriculture

GOAL

3 The government has put 14 hectares of deforested land at the disposal of local farmers.

Resources / Products Soy Cotton Available

Blocks Area Available ha 1 1 14

• Product Mix
Men Time by/ha hr 20 120 1,200
• Blend
• Finance Credit Line by/ha $ 1,200 400 12,000
• Investments
• Diet Profit by/ha $ 100.00 50.00 -
• Aviation
Ensure that such area is used for planting soybeans and cotton. It is estimated that there are
• Transport
1200 man-hours available during the sowing period; and that it takes 20 man-hours per
• Agriculture hectare of soy and 120 per hectare of cotton.
• Construction
It also offers a maximum credit line of $12,000, divided as follows: $1,200 per hectare of soy
• Refinery and $400 per hectare of cotton.It is desired to organize this area of plantation in order to
• Schedule obtain maximum profit, knowing that the expected profit margins are $100 per hectare of soy
and $50 per hectare of cotton.
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation
• Supplier

239
C2-B7 Solving Problems with LINGO Landfilled Lands | Case 3 | Agriculture

MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
!Resource attribute;
RESOURCE, AVAILABLE =
AREA 14
MEN_TIME 1200
CREDIT 12000;

! product attributes;
PRODUCT, PROFIT =
SOY 100
COTTON 50;

! Required SOY COTTON;


USAGE = 1 1 ! Area;
20 120 ! Men time by hectare;
1200 400; ! Credit line by hectare;
ENDDATA
SUBMODEL MAX3:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! RESTRICTION OF MAXIMUM HECTAR LIMIT FOR PLANTS;
[AVA_AREA] @SUM( PRODUCT( p): PRODUCE( p )) <= AVAILABLE(1);
! RESTRICTION OF MAN-HOURS BY SOYBEAN HECTARES;
[AVA_HRS] @SUM(PRODUCT(I): USAGE(2,I)* PRODUCE(I)) <= AVAILABLE(2);
! RESTRICTION OF MAXIMUM CREDIT LIMIT $12 THOUSAND ;
! $1200 PER HECTAR OF SOYA / $400 PER HECTAR OF COTTON;
[AVA_CRE] @SUM( PRODUCT( p): USAGE( 3, p) * PRODUCE( p )) <= AVAILABLE(3);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE(m2, kg/m2:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (ha, hr, $):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT BY HECTARE:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J): ' ',
@FORMAT(PRODUCT( J),'-6s'),' Unit profit: $',
@FORMAT(PROFIT( J),'%6.2f'),' x Area:',
@FORMAT(PRODUCE( J),'%2.0f'), 'ha = Total: $',
@FORMAT(PROFIT( J) * PRODUCE( J),'%6.2f'),
@NEWLINE( 1));
@CHARTPIE('Agriculture model', 'Area', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX3);
ENDCALC
END

240
C2-B7 Solving Problems with LINGO Landfilled Lands | Case 3 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCE(m2, kg/m2:
SOY COTTON
AREA 1.0000000 1.0000000
MEN_TIME 20.000000 120.00000
CREDIT 1200.0000 400.00000

AVAILABLE (ha, hr, $):


AREA 14.000000
MEN_TIME 1200.0000
CREDIT 12000.000

PROFIT BY HECTARE:
SOY 100.00000
COTTON 50.000000
DATA:
SOLUTION: kg/m2:
RESOURCE(m2,
Global optimal SOY
DATA: solution found.
COTTON
RESOURCE(m2,
Objective
AREA kg/m2:
value:
1.0000000 1.0000000 1100.0000
MEN_TIME 20.000000
Infeasibilities: SOY 120.00000
COTTON 0.0000000
AREA
CREDIT 1.0000000 1.0000000
1200.0000 400.00000
MEN_TIME 20.000000 120.00000
Model Class: LP
CREDIT
AVAILABLE 1200.0000
(ha, hr, $):400.00000
AREA 14.000000
IDEAL
AVAILABLEPLANNING
MEN_TIME (ha, hr,PROGRAM:
1200.0000 $):
SOY
AREA
CREDIT Unit profit:
14.000000
12000.000 $100.00 x Area: 8ha = Total: $800.00
COTTON
MEN_TIME Unit profit: $ 50.00 x Area: 6ha = Total: $300.00
1200.0000
CREDITBY HECTARE:
PROFIT 12000.000
❖ SOLUTION
SOY 100.00000
COTTON 50.000000
PROFIT BY HECTARE:
Below
SOY is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
100.00000
SOLUTION:
COTTON 50.000000
Global optimal solution found.
Objective value:
SOLUTION: 1100.0000
Infeasibilities:
Global optimal solution found. 0.0000000
Objective value: 1100.0000
Model Class: LP
Infeasibilities: 0.0000000

IDEAL Class:
Model PLANNING
LPPROGRAM:
SOY Unit profit: $100.00 x Area: 8ha = Total: $800.00
COTTONPLANNING
IDEAL Unit profit: $ 50.00 x Area: 6ha = Total:
PROGRAM: $300.00
SOY Unit profit: $100.00 x Area: 8ha = Total: $800.00
SLACK/SURPLUS
COTTON LIMIT =
Unit profit: $ AVAILABLE
50.00 x (he,
Area:hr,
6ha$):= Total: $300.00
PROD LIMIT VALUE
AREA
SLACK/SURPLUS14.000000 14.000000
LIMIT = AVAILABLE (he,0.0000000
hr, $):
MEN_TIME 880.00000
PROD 1200.0000
LIMIT -320.00000
VALUE
CREDIT
AREA 12000.000
14.000000 12000.000
14.000000 0.0000000
0.0000000
MEN_TIME 880.00000 1200.0000 -320.00000
CREDIT 12000.000 12000.000 0.0000000

241
C2-B7 Solving Problems with LINGO Best Use of Earth | Case 4 | Agriculture

GOAL

4 A farmer is planning his planting strategy for next year. From information obtained from
government agencies, he knows that wheat, rice and corn crops will be the most profitable in
the next harvest.

From experience, you know that the productivity of your land for the crops you want is on the
Blocks assumptions.

• Product Mix The total availability of area on the farm is 400 hectares to be used, $ 500 thousand in cash
and 10 thousand men / day, in addition each hectare of corn generates a profit of $ 600.00 ...
• Blend
as can be observed below:
• Finance
• Investments
• Diet Resources / Products Corn Wheat Soy Sugar Cane Available

• Aviation
Man Day head 20 30 25 28 10,000
• Transport
• Agriculture Preparing Earth $ 1,000.00 1,200.00 1,500.00 1,200.00 500,000.00
• Construction
• Refinery Area ha 1 1 1 1 400

• Schedule
Profit by/ha $ 600.00 800.00 900.00 500.00 -
• Cutting
• Metallurgy
• Fertilizer It is asked to formulate the problem of optimizing the choice of areas to be cultivated in each
• Clinic different type of crop.

• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation
• Supplier

Source:
• Book 1
• Page 52

242
C2-B7 Solving Problems with LINGO Best Use of Earth | Case 4 | Agriculture
MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE , AVAILABLE =
MAN_DAY 10000
PREP_EARTH 500000
AREA 400;
! Product attributes;
PRODUCT, PROFIT =
CORN 600
WHEAT 800
SOY 900
CANE 500;

! Required CORN WHEAT SOY CANE;


USAGE = 20 30 25 28 ! Work man men/day;
1000 1200 1500 1200 ! Preparing earth;
1 1 1 1; ! Area available;
ENDDATA
SUBMODEL MAX4:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! Manpower 10,000 (Men/day);
[ AVA_MANP] @SUM( PRODUCT( p): USAGE( 1, p) * PRODUCE( p )) <= AVAILABLE(1);
! Cost of preparing the land $ 500 thousand;
[AVA_PREP] @SUM(PRODUCT(I): USAGE(2,I)* PRODUCE(I)) <= AVAILABLE(2);
! Area of 400 hectares available;
[AVA_AREA] @SUM( PRODUCT( p): PRODUCE( p )) <= AVAILABLE(3);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE(head, $, ha):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (head, $, ha):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT BY HECTARE:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX4);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-6s'),'Unit profit:$',
@FORMAT(PROFIT( J),'%6.2f'),' x Area:',
@FORMAT(PRODUCE( J),'%3.0f'), 'ha = Total:$',
@FORMAT(PROFIT( J) * PRODUCE( J),'%7.2f'),
@NEWLINE( 1));
@CHARTPIE('Agriculture model', 'Area', PRODUCE);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX4);
ENDCALC
END

243
C2-B7 Solving Problems with LINGO Best Use of Earth | Case 4 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCE(head, $, ha):
CORN WHEAT SOY CANE
MAN_DAY 20.000000 30.000000 25.000000 28.000000
PREP_EARTH 1000.0000 1200.0000 1500.0000 1200.0000
AREA 1.0000000 1.0000000 1.0000000 1.0000000

AVAILABLE (head, $, ha):


MAN_DAY 10000.000
PREP_EARTH 500000.00
AREA 400.00000

PROFIT BY HECTARE:
CORN
DATA: 600.00000
WHEAT
RESOURCE(head, 800.00000
$, ha):
SOY
DATA: 900.00000
CORN WHEAT SOY CANE
CANE
RESOURCE(head,
MAN_DAY 500.00000
$, ha):
20.000000 30.000000 25.000000 28.000000
PREP_EARTH 1000.0000 CORN 1200.0000
WHEAT 1500.0000
SOY 1200.0000 CANE
SOLUTION:
MAN_DAY
AREA 20.000000 30.000000 25.000000
1.0000000 1.0000000 1.0000000 1.000000028.000000
Global optimal1000.0000
PREP_EARTH solution found.
1200.0000 1500.0000 1200.0000
Objective value:
AVAILABLE (head, $, ha):1.0000000 1.0000000 1.0000000
AREA 1.0000000 313333.33
Infeasibilities:
MAN_DAY 10000.000 0.0000000
AVAILABLE
PREP_EARTH(head, $, ha):
500000.00
Model
AREA Class: LP
MAN_DAY 10000.000
400.00000
PREP_EARTH 500000.00
IDEAL
AREA PLANNING
PROFIT PROGRAM:
400.00000
BY HECTARE:
WHEAT
CORN Unit profit:$800.00
600.00000 x Area:167ha = Total:$133333.33
SOY
WHEATUnit
PROFIT profit:$900.00
BY HECTARE:
800.00000 x Area:200ha = Total:$180000.00
CORN
SOY 600.00000
900.00000
❖ SOLUTION
WHEAT
CANE 800.00000
500.00000
SOY 900.00000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
CANE
SOLUTION: 500.00000
Global optimal solution found.
SOLUTION:
Objective value: 313333.33
Global optimal solution found.
Infeasibilities: 0.0000000
Objective value: 313333.33
Infeasibilities:
Model Class: LP 0.0000000

Model
IDEAL Class: LPPROGRAM:
PLANNING
WHEAT Unit profit:$800.00 x Area:167ha = Total:$133333.33
SOY
IDEAL Unit profit:$900.00
PLANNING PROGRAM: x Area:200ha = Total:$180000.00
WHEAT Unit profit:$800.00 x Area:167ha = Total:$133333.33
SLACK/SURPLUS
SOY LIMIT = AVAILABLE
Unit profit:$900.00 (head, =
x Area:200ha $,Total:$180000.00
he):
PROD LIMIT VALUE
MAN_DAY 10000.000 10000.000 0.0000000
SLACK/SURPLUS LIMIT = AVAILABLE (head, $, he):
PREP_EARTH 500000.00
PROD 500000.00
LIMIT 0.0000000
VALUE
AREA
MAN_DAY 366.66667
10000.000 400.00000 -33.333333
10000.000 0.0000000
PREP_EARTH 500000.00 500000.00 0.0000000
AREA 366.66667 400.00000 -33.333333

244
C2-B7 Solving Problems with LINGO Watermelon and Melon | Case 5 | Agriculture

GOAL

5 A farm has 100 acres of land where it grows watermelon and melon.. Each acre of
watermelon requires 150 liters of water per day and 20 kg of fertilizer.

It is estimated that it will take two hours of labor for each acre of watermelon and two and a
half hours of labor for each acre of melon.
Blocks There is a forecast to sell each watermelon for $3 and each melon for $1. Each acre of
• Product Mix watermelon produces 90 units and each acre of melon produces 300 units.

• Blend The farmer can pump 18,000 liters of water per day, can buy fertilizers for $10 a bag of 50 kg
• Finance and can hire temporary labor for $5 an hour.

• Investments
Resources / Products Watermelon Melon Available
• Diet
• Aviation Required for acre kg 20 15 3,500
• Transport Fertilizer Bag w/50 kg $ 10.00 700.00
• Agriculture
Cost p/acre $ 3.00 2.00 -
• Construction
Required for acre hr 2.0 2.5 450.0
• Refinery Manpower
• Schedule Cost/hr $ 5.00 5.00 2,250.00

• Cutting Demand for acre un 90 300 -


• Metallurgy
Unity Price $ 3.00 1.00 -
• Fertilizer
Sale Estimate un 270 300 -
• Clinic
• Classic Assuming that the farmer can the whole harvest of watermelon and melon, determine how
many acres of each crop the farmer must plant in order to maximize the profit. Water cost
• Dynamic
were not considered.
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation
• Supplier

Source:
• Book 2
• Page 241

245
C2-B7 Solving Problems with LINGO Watermelon and Melon | Case 5 | Agriculture

MODEL:
SETS:
PRODUCT : PRICE, CFERT, CMANP, SALE, DEMAND, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
FERT_ACRE 3500
FERT_COST 700
MANP_HR 450
MANP_COST 2250;
! Product attributes;
PRODUCT, PRICE, CFERT, CMANP, SALE, DEMAND =
WATERMELON 3 3 2 270 90
MELON 1 2 2.5 300 300;
! Required WATERMELON MELON;
USAGE = 20 15 ! (kg) Fertilizer by acre;
10 10 ! ( $) Fertilizer bag with 50kg ;
2 2.5 ! (hr) Manpower by acre;
5 5; ! ( $) Manpower PROFIT hour;
ENDDATA
SUBMODEL MAX5:
[OBJ] MAX = SALE(1) * PRODUCE(1) + SALE(2) * PRODUCE(2) - (USAGE(1,1)*CFERT(1)) * PRODUCE(1) -
(USAGE(1,2)*CFERT(2)) * PRODUCE(2) - (CMANP(1)*5) * PRODUCE(1) - (CMANP(2)*5) * PRODUCE(2);
! Area of 100 hectares available;
[AREA] @SUM( PRODUCT( p): PRODUCE( p )) <= 100;
! Demand;
[DEM] DEMAND(1)* PRODUCE(1) + DEMAND(2) * PRODUCE(2) <= (DEMAND(1) + DEMAND(2)) * 100;
! Manpower consumption;
[MAN] USAGE(3,1) * PRODUCE(1) + USAGE(3,2) * PRODUCE(2) <= AVAILABLE(3);
! Consumption of fertilizers for 100 acres;
[FER] USAGE(1,1) * PRODUCE(1) + USAGE(1,2) * PRODUCE(2) <= AVAILABLE(1);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',8);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE(Kg, $, hr, $):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (kg, $, hr, $):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND per Acre:", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " UNIT PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SALE ESTIMATED:", @NEWLINE( 1));
@TABLE(SALE);
@WRITE(" ", @NEWLINE( 1), " COST OF FERTILIZER p/acre:", @NEWLINE( 1));
@TABLE(CFERT);
@WRITE(" ", @NEWLINE( 1), " COST OF LABOR p/acre:", @NEWLINE( 1));
@TABLE(CMANP);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute Sub-model;
@SOLVE(MAX5);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-9s'),@NEWLINE(1),' Price:$',
@FORMAT(SALE( J),'%6.2f'),' x Planted:',
@FORMAT(PRODUCE(J),'%3.0f'), ' Acres = Revenue:$',
@FORMAT(PRODUCE( J)* PRICE(J) * DEMAND(J),'%7.2f'), @NEWLINE(1),42*' ','Cost:$',
@FORMAT(CFERT(J)*USAGE(1,J)*PRODUCE(J) + CMANP(J)*USAGE(4,J)*PRODUCE(J),'%8.2f'),
@NEWLINE(1),40*' ','Profit:$',
@FORMAT((PRODUCE( J)* PRICE(J)* DEMAND(J)) - (CFERT(J)*USAGE(1,J)*PRODUCE(J) +
CMANP(J)*USAGE(4,J)*PRODUCE(J)),'%8.2f'),
@NEWLINE(1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

246
C2-B7 Solving Problems with LINGO Watermelon and Melon | Case 5 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
RESOURCE(Kg,$,hr,$):
WATERMELON MELON
FERT_ACRE 20.000000 15.000000
FERT_COST 10.000000 10.000000
MANP_HR 2.0000000 2.5000000
MANP_COST 5.0000000 5.0000000

AVAILABLE (kg,$,hr,$):
FERT_ACRE 3500.0000
FERT_COST 700.00000
MANP_HR 450.00000
MANP_COST 2250.0000

DEMAND p/acre:
WATERMELON 90.000000
MELON 300.00000

UNIT PRICE:
WATERMELON 3.0000000
MELON 1.0000000

SALE ESTIMATED:
WATERMELON 270.00000
MELON 300.00000

COST OF FERTILIZER p/acre:


WATERMELON 3.0000000
MELON 2.0000000

COST OF LABOR p/acre:


WATERMELON 2.0000000
MELON 2.5000000

SOLUTION:
Global optimal solution found.
Objective value: 25750.000
❖ Infeasibilities:
SOLUTION 0.0000000
SOLUTION:
Below is the solution
Model Class: LP achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
Objective value:
IDEAL PLANNING
SOLUTION: PROGRAM: 25750.000
MELON
Infeasibilities: 0.0000000
Global optimal solution found.
Price:$300.00 x Planted:100 Acres = Revenue:$30000.00
Objective value: 25750.000
Model Class: LP
Infeasibilities: 1
0.0000000

IDEAL
Model PLANNING
Class: LPPROGRAM:
MELON
Price:$300.00
IDEAL PLANNING x Planted:100 Acres = Revenue:$30000.00
PROGRAM:
MELON Cost:$ 4250.00
Profit:$25750.00
Price:$300.00 x Planted:100 Acres = Revenue:$30000.00
Cost:$ 4250.00
SLACK/SURPLUS: Profit:$25750.00
PROD LIMIT VALUE
_AREA
SLACK/SURPLUS: 100.00000 100.00000 0.0000000
_DEMAND 30000.000
PROD 39000.000
LIMIT -9000.0000
VALUE
_MANPOWER
_AREA 250.00000
100.00000 450.00000
100.00000 -200.00000
0.0000000
_FERTILIZER
_DEMAND 1500.0000
30000.000 3500.0000
39000.000 -2000.0000
-9000.0000
_MANPOWER 250.00000 450.00000 -200.00000
_FERTILIZER 1500.0000 3500.0000 -2000.0000

247
C2-B7 Solving Problems with LINGO Reforestation | Case 6 | Agriculture

GOAL

6 A reforestation company has plantation areas in 4 municipalities. The company considers the
use of 4 tree species: Pines, Oak, Walnut and Araucaria. The data for elaboration of the
model are below:

Expected Annual Income

Blocks Resources / Products Pine Oak Walnut Araucaria

• Product Mix City A $/he 16.00 12.00 20.00 18.00


• Blend City B $/he 14.00 13.00 24.00 20.00
• Finance City C $/he 17.00 10.00 28.00 20.00
• Investments
City D $/he 12.00 11.00 18.00 17.00
• Diet
• Aviation
Expected Annual Production
• Transport
Resources / Products Pine Oak Walnut Araucaria Available
• Agriculture
City A m3/he 17 14 10 9 1,500
• Construction
City B m3/he 15 16 12 11 1,700
• Refinery
• Schedule City C m3/he 13 12 14 8 900

• Cutting City D m3/he 10 11 8 6 600

• Metallurgy Minimum Production m3/he 22,500 9,000 28,800 3,500 -


• Fertilizer
Formulate the problem to designate the areas of planting by municipality in order to
• Clinic
maximize the income.
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation
• Supplier

248
C2-B7 Solving Problems with LINGO Reforestation | Case 6 | Agriculture

MODEL:
SETS:
PRODUCT : PROD_MIN;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT): INCOME, PRODUCTION, PRODUCE;
ENDSETS
DATA:
! Resources (Available Area (m3/Hectare) ;
RESOURCE, AVAILABLE =
CITY_A 1500
CITY_B 1700
CITY_C 900
CITY_D 600;
! Products attributes;
PRODUCT, PROD_MIN =
PINUS 22500
OAK 9000
WALNUT 28800
ARAUCARIA 3500;
! Required PINUS OAK WALNUT ARAUCARIA;
INCOME = 16 12 20 18 ! Expected annual income City A;
14 13 24 20 ! Expected annual income City B;
17 10 28 20 ! Expected annual income City C;
12 11 18 17; ! Expected annual income City D;
PRODUCTION = 17 14 10 9 ! Expected annual production City A;
15 16 12 11 ! Expected annual production City B;
13 12 14 8 ! Expected annual production City C;
10 11 8 6; ! Expected annual production City D;
ENDDATA
SUBMODEL MAX6:
MAX = @SUM(PRODUCT(J): INCOME(1,J) * PRODUCE(1,J)) + @SUM(PRODUCT(J): INCOME(2,J) * PRODUCE(2,J)) +
@SUM(PRODUCT(J): INCOME(3,J) * PRODUCE(3,J)) + @SUM(PRODUCT(J): INCOME(4,J) * PRODUCE(4,J)) ;
! Available Area (m3/Hectare);
[AVA1] @SUM(PRODUCT(J): PRODUCE(1,J)) = AVAILABLE(1);
[AVA2] @SUM(PRODUCT(J): PRODUCE(2,J)) = AVAILABLE(2);
[AVA3] @SUM(PRODUCT(J): PRODUCE(3,J)) = AVAILABLE(3);
[AVA4] @SUM(PRODUCT(J): PRODUCE(4,J)) = AVAILABLE(4);
! Minimal Production;
[MP1] @SUM( RESOURCE(I): PRODUCTION(I,1) * PRODUCE(I,1)) >= PROD_MIN(1);
[MP2] @SUM( RESOURCE(I): PRODUCTION(I,2) * PRODUCE(I,2)) >= PROD_MIN(2);
[MP3] @SUM( RESOURCE(I): PRODUCTION(I,3) * PRODUCE(I,3)) >= PROD_MIN(3);
[MP4] @SUM( RESOURCE(I): PRODUCTION(I,4) * PRODUCE(I,4)) >= PROD_MIN(4);
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
@SET('PRECIS',8); ! Precision in digits for standard solution reports;
@WRITE(" DATA:", @NEWLINE( 1), " EXPECTED ANNUAL INCOME ($/he):", @NEWLINE( 1));
@TABLE(INCOME);
@WRITE(" ", @NEWLINE( 1), " EXPECTED ANNUAL PRODUCTION (m3/he):", @NEWLINE( 1));
@TABLE(PRODUCTION);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (m3/he):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " MINIMUM PRODUCTION (m3/he):", @NEWLINE( 1));
@TABLE(PROD_MIN);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX6)
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP(i,j) : ' ',
@FORMAT(RESOURCE( I),'-6s'),', Production: ',
@FORMAT(PRODUCE(I,J),'%8.3f'), 'ha of ',
@FORMAT(PRODUCT( J), '-9s'),' x Income: $',
@FORMAT(INCOME(I,J),'%4.2f'),' = Revenue: $',
@FORMAT(PRODUCE(I,J) * INCOME( I,J),'%8.2f'),
@NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

249
C2-B7 Solving Problems with LINGO Reforestation | Case 6 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
EXPECTED ANNUAL INCOME ($/he):
PINUS OAK WALNUT ARAUCARIA
CITY_A 16.000000 12.000000 20.000000 18.000000
CITY_B 14.000000 13.000000 24.000000 20.000000
DATA:
CITY_C 17.000000 10.000000 28.000000 20.000000
CITY_D 12.000000
EXPECTED 11.000000
ANNUAL INCOME 18.000000
($/he): 17.000000
PINUS OAK WALNUT ARAUCARIA
EXPECTED ANNUAL PRODUCTION (m3/he):
CITY_A 16.000000
PINUS
12.000000
OAK
20.000000 18.000000
WALNUT ARAUCARIA
CITY_B 14.000000 13.000000 24.000000
CITY_A 17.000000 14.000000 10.000000 20.000000
9.0000000
CITY_C 15.000000
CITY_B 17.000000 10.000000
16.000000 28.000000
12.000000 20.000000
11.000000
CITY_D 13.000000
CITY_C 12.000000 11.000000
12.000000 18.000000
14.000000 17.000000
8.0000000
CITY_D 10.000000 11.000000 8.0000000 6.0000000
EXPECTED ANNUAL PRODUCTION (m3/he):
AVAILABLE (m3/he):
PINUS
CITY_A 1500.0000 OAK WALNUT ARAUCARIA
CITY_A 17.000000
CITY_B 1700.0000 14.000000 10.000000 9.0000000
CITY_B 900.00000
CITY_C 15.000000 16.000000 12.000000 11.000000
CITY_C 600.00000
CITY_D 13.000000 12.000000 14.000000 8.0000000
CITY_D 10.000000 11.000000 8.0000000 6.0000000
MINIMUM PRODUCTION (m3/he):
PINUS 22500.000
AVAILABLE
OAK (m3/he):
9000.0000
CITY_A 1500.0000
WALNUT 28800.000
CITY_B 1700.0000
ARAUCARIA 3500.0000
CITY_C 900.00000
SOLUTION:
CITY_D 600.00000
Global optimal solution found.
Objective value: 94827.882
MINIMUM PRODUCTION (m3/he):
Infeasibilities: 0.0000000
PINUS 22500.000
OAK
❖ SOLUTION 9000.0000 1
WALNUT 28800.000
Below is the solution
ARAUCARIA achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
3500.0000

SOLUTION:
Global optimal solution found.
Objective
Model value:
Class: LP 94827.882
Infeasibilities: 0.0000000
IDEAL PLANNING PROGRAM:
CITY_A, Production: 1323.529 m3/he of PINUS x Income: $16.00 = Revenue: 1
$21176.47
CITY_A, Production: 176.471 m3/he of OAK x Income: $12.00 = Revenue: $ 2117.65
CITY_A, Production: 0.000 m3/he of WALNUT x Income: $20.00 = Revenue: $ 0.00
CITY_A, Production: 0.000 m3/he of ARAUCARIA x Income: $18.00 = Revenue: $ 0.00
CITY_B, Production: 0.000 m3/he of PINUS x Income: $14.00 = Revenue: $ 0.00
CITY_B, Production: 170.941 m3/he of OAK x Income: $13.00 = Revenue: $ 2222.24
CITY_B, Production: 1350.000 m3/he of WALNUT x Income: $24.00 = Revenue: $32400.00
CITY_B, Production: 179.059 m3/he of ARAUCARIA x Income: $20.00 = Revenue: $ 3581.18
CITY_C, Production: 0.000 m3/he of PINUS x Income: $17.00 = Revenue: $ 0.00
CITY_C, Production: 0.000 m3/he of OAK x Income: $10.00 = Revenue: $ 0.00
CITY_C, Production: 900.000 m3/he of WALNUT x Income: $28.00 = Revenue: $25200.00
CITY_C, Production: 0.000 m3/he of ARAUCARIA x Income: $20.00 = Revenue: $ 0.00
CITY_D, Production: 0.000 m3/he of PINUS x Income: $12.00 = Revenue: $ 0.00
CITY_D, Production: 344.941 m3/he of OAK x Income: $11.00 = Revenue: $ 3794.35
CITY_D, Production: 0.000 m3/he of WALNUT x Income: $18.00 = Revenue: $ 0.00
CITY_D, Production: 255.059 m3/he of ARAUCARIA x Income: $17.00 = Revenue: $ 4336.00

SLACK/SURPLUS LIMIT = AVAILABLE (m3/he):


PROD LIMIT VALUE
CITY_A 1500.0000 1500.0000 0.0000000
CITY_B 1700.0000 1700.0000 0.0000000
CITY_C 900.00000 900.00000 0.0000000
CITY_D 600.00000 600.00000 0.0000000 250
C2-B7 Solving Problems with LINGO Plant Planning | Case 7 | Agriculture

GOAL

7
A farmer has a land area of 5 km2 to be sown with Wheat and Barley. It has a limited amount of
Fertilizer and Insecticide allowed to be used. Both Wheat and Barley require different amounts per
unit area planted.

Resources / Products Barley Wheat Available


Blocks
Fertilizer kg 30 20 50
• Product Mix
• Blend Insecticide kg 15 10 22
• Finance
Area km2 3 2 5
• Investments
• Diet Price p/km2 $ 16,000.00 12,000.00 -
• Aviation
• Transport Prices expected to be sold should be $16,000 and $12,000, respectively for Wheat and Barley per
Km2. Develop a Linear Programming model in order to obtain the best recipe for this combination
• Agriculture
of planting.
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation
• Supplier

251
C2-B7 Solving Problems with LINGO Plant Planning | Case 7 | Agriculture
MODEL:
SETS:
HEADER1 / PROD, LIMIT, VALUE /:;
PRODUCT : PRICE, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
PXR( RESOURCE, HEADER1) : SLASUR;
ENDSETS
DATA:
! Resource attributes;
RESOURCE , AVAILABLE =
FERTILIZER 50
INSECTICIDE 22
AREA 5;
! Product attributes;
PRODUCT, PRICE =
WHEAT 16000
BARLEY 12000;

! Required WHEAT BARLEY;


USAGE = 30 20 ! Fertilizer Limit;
15 10 ! Insecticide limit;
3 2; ! Area available in km2;
ENDDATA
SUBMODEL MAX7:
[OBJ] MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p));
! Fertilizer Availability Constraints;
[FERT] @SUM( PRODUCT( p): USAGE( 1, p) * PRODUCE( p )) <= AVAILABLE(1);
! Insecticide Availability Constraints;
[INSEC] @SUM(PRODUCT(I): USAGE(2,I)* PRODUCE(I)) <= AVAILABLE(2);
! Area Availability Constraints (5km2);
[AVA_AREA] @SUM( PRODUCT( p): PRODUCE( p )) <= AVAILABLE(3);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',8);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE(Kg, Kg, Km2):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (head, $, ha):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PRICE BY KM2:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX7);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J) | PRODUCE( J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-7s'),' Price:$',
@FORMAT(PRICE( J),'%6.2f'),' x ',
@FORMAT(PRODUCE( J),'%4.2f'), ' Km2 = Revenue:$',
@FORMAT(PRICE( J) * PRODUCE( J),'%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX7);
ENDCALC
END

252
C2-B7 Solving Problems with LINGO Plant Planning | Case 7 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCE(Kg, Kg, Km2):
WHEAT BARLEY
FERTILIZER 30.000000 20.000000
INSECTICIDE 15.000000 10.000000
AREA 3.0000000 2.0000000

AVAILABLE (head, $, ha):


FERTILIZER 50.000000
INSECTICIDE 22.000000
AREA 5.0000000

PRICE BY KM2:
WHEAT
DATA: 16000.000
BARLEY 12000.000
RESOURCE(Kg, Kg, Km2):
DATA: WHEAT BARLEY
SOLUTION:
FERTILIZER Kg, 30.000000 20.000000
RESOURCE(Kg,
Global Km2): found.
optimal 15.000000
solution
INSECTICIDE WHEAT 10.000000
BARLEY
Objective
AREA value:
3.0000000 2.0000000 26400.000
FERTILIZER
Infeasibilities: 30.000000 20.000000 0.0000000
INSECTICIDE 15.000000 10.000000
AVAILABLE
AREA Class: (head, $, ha):
Model LP3.0000000 2.0000000
FERTILIZER 50.000000
INSECTICIDE
AVAILABLE 22.000000
(head, $, ha):
IDEAL PLANNING PROGRAM:
AREA
FERTILIZER 5.0000000
50.000000 x 2.20 Km2 = Revenue:$26400.00
BARLEY Price:$12000.00
INSECTICIDE 22.000000
PRICE
AREA BY KM2: LIMIT
SLACK/SURPLUS 5.0000000
= AVAILABLE (Kg, Kg, Km2):
WHEAT 16000.000 PROD LIMIT VALUE
BARLEY
PRICE BY 12000.000
❖ SOLUTION
FERTILIZERKM2: 44.000000 50.000000 -6.0000000
WHEAT 16000.000
INSECTICIDE 22.000000 22.000000 0.0000000
Below is
SOLUTION:
BARLEY
AREA the solution
12000.000 achieved
2.2000000 by 5.0000000 -2.8000000 0, and the detailed report that makes up the optimal
LINGO with infeasibilities
Global optimal solution found.
Objective
SOLUTION: value: 26400.000
Infeasibilities:
Global optimal solution found. 0.0000000
Objective value: 26400.000
Model Class:
Infeasibilities: LP 0.0000000

IDEAL
Model PLANNING
Class: LPPROGRAM:
BARLEY Price:$12000.00 x 2.20 Km2 = Revenue:$26400.00
IDEAL PLANNING PROGRAM:
SLACK/SURPLUS LIMIT = AVAILABLE
BARLEY Price:$12000.00 (Kg,
x 2.20 Km2 = Kg, Km2):
Revenue:$26400.00
PROD LIMIT VALUE
FERTILIZER 44.000000 50.000000 -6.0000000
SLACK/SURPLUS LIMIT = AVAILABLE (Kg, Kg, Km2):
INSECTICIDE 22.000000
PROD 22.000000
LIMIT 0.0000000
VALUE
AREA
FERTILIZER 2.2000000
44.000000 5.0000000
50.000000 -2.8000000
-6.0000000
INSECTICIDE 22.000000 22.000000 0.0000000
AREA 2.2000000 5.0000000 -2.8000000

253
C2-B7 Solving Problems with LINGO Plant Planning 2 | Case 8 | Agriculture

GOAL

8
A farmer has 200 hectares of arable land for corn and / or soy. The data are as follows:

Resources / Products Corn Soy Available

Area he 1 1 200

Preparation $ 500.00 700.00 200,000.00


Blocks
Labor men/day 15 18 20,000
• Product Mix
• Blend Profit p/he $ 900.00 1,300.00 -

• Finance
• Investments What should be the allocation of land to the various types of crop in order to maximize profits?
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Farm
• Plantation

Source:
• Book 1
• Page 55

254
C2-B7 Solving Problems with LINGO Plant Planning 2 | Case 8 | Agriculture
MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: MINREQ;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attribute (hectares, $, Men/Day;
RESOURCE, MINREQ =
AREA 200
PREPARATION 200000
LABOR 20000;
! Product attributes;
PRODUCT, PROFIT =
CORN 900
SOY 1300;

! Required CORN SOY;


USAGE = 1 1 ! AREA;
500 700 ! PREPARATION;
15 18; ! LABOR;
ENDDATA
SUBMODEL MAX8:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The Area constraints;
[AVA_AREA] @SUM( PRODUCT( p): PRODUCE( p )) <= MINREQ(1);
! The Preparation Constraints;
[AVA_PRE] @SUM(PRODUCT(I): USAGE(2,I)* PRODUCE(I)) <= MINREQ(2);
! The Labor constraints;
[AVA_LAB] @SUM( PRODUCT( p): USAGE( 3, p) * PRODUCE( p )) <= MINREQ(3);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',8);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE :", @NEWLINE( 1));
@TABLE(MINREQ);
@WRITE(" ", @NEWLINE( 1), " PROFIT BY HECTARE:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX8);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J): ' ',
@FORMAT(PRODUCT( J),'-5s'),' Profit: $',
@FORMAT(PROFIT( J),'%7.2f'),' x ',
@FORMAT(PRODUCE( J),'%3.0f'), ' ha = Total: $',
@FORMAT(PROFIT( J) * PRODUCE( J),'%9.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX8);
ENDCALC
END

255
C2-B7 Solving Problems with LINGO Plant Planning 2 | Case 8 | Agriculture

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCE:
CORN SOY
AREA 1.0000000 1.0000000
PREPARATION 500.00000 700.00000
LABOR 15.000000 18.000000

AVAILABLE:
AREA 200.00000
PREPARATION 200000.00
LABOR 20000.000

PROFIT BY HECTARE:
CORN
DATA: 900.00000
SOY
RESOURCE: 1300.0000
DATA:
RESOURCE: CORN SOY
SOLUTION:
AREA 1.0000000 1.0000000
Global CORN found. SOY
optimal500.00000
solution
PREPARATION 700.00000
AREA
Objective 1.0000000 1.0000000
value: 260000.00
LABOR 15.000000 18.000000
PREPARATION 500.00000 700.00000
Infeasibilities: 0.0000000
LABOR 15.000000 18.000000
AVAILABLE:
Model
AREA Class: LP 200.00000
AVAILABLE:
PREPARATION 200000.00
AREA
IDEAL 200.00000
LABOR PLANNING20000.000
PROGRAM:
PREPARATION
CORN 200000.00
LABOR
Profit: 20000.000
$ 900.00 x Area: 0 ha = Total: $ 0.00
PROFIT p/he:
SOY
CORN 900.00000
SOLUTION
❖ PROFIT p/he:
Profit: $1300.00 x Area:200 ha = Total: $260000.00
SOY 1300.0000
CORN 900.00000
Below
SOY is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
1300.0000
SLACK/SURPLUS
SOLUTION: LIMIT = AVAILABLE (he, hr, $):
Global optimal solution PRODfound. LIMIT VALUE
SOLUTION:
AREA
Objective value:200.00000 200.00000 0.0000000260000.00
Global optimal
PREPARATION
Infeasibilities: solution
140000.00 found.
200000.00 -60000.000 0.0000000
Objective
LABOR value:3600.0000 20000.000 -16400.000 260000.00
Infeasibilities:
Model Class: LP 0.0000000

Model PLANNING
IDEAL Class: LPPROGRAM:
CORN Profit: $ 900.00 x 0 ha = Total: $ 0.00
IDEAL
SOY PLANNING PROGRAM:
Profit: $1300.00 x 200 ha = Total: $260000.00
CORN Profit: $ 900.00 x 0 ha = Total: $ 0.00
SOY Profit:
SLACK/SURPLUS $1300.00
LIMIT x 200
= AVAILABLE ha =
(he, Total:
hr, $): $260000.00
PROD LIMIT VALUE
SLACK/SURPLUS
AREA LIMIT = AVAILABLE (he, hr, $):
200.00000 200.00000 0.0000000
PREPARATION PROD LIMIT VALUE
200000.00 200000.00 0.0000000
AREA
LABOR 200.00000 20000.000
20000.000 200.00000 0.0000000
0.0000000
PREPARATION 200000.00 200000.00 0.0000000 1
LABOR 20000.000 20000.000 0.0000000

256 1
BLOCK 8 Block: CONSTRUCTION

How to know the best number of apartment houses according to the resources available for Manpower?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

257
C2-B8 Solving Problems with LINGO Popular Houses | Case 1 | Construction

GOAL

1 What is the ideal amount of popular homes and apartments that the builder must build
to get the maximum profit considering the information below.

Resources / Products House Apartments Available


Blocks
Bricklayer head 3 2 30
• Product Mix
• Blend Servant head 4 3 70
• Finance
Woodwork head 3 2 30
• Investments
• Diet Plumber head 2 1 20
• Aviation
Electrician head 1 1 20
• Transport
• Agriculture Painter head 3 2 20

• Construction
Gardening head 1 0 20
• Refinery
• Schedule Profit p/unit $ 6,120.00 4,100.00 -

• Cutting
• Metallurgy For a strategic reason of the constructor, at least three houses must be made.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• House
• Apartment

258
C2-B8 Solving Problems with LINGO Popular Houses | Case 1 | Construction

MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
BRICKLAYER 30
SERVANT 70
WOODWORK 30
PLUMBER 20
ELECTRICIAN 20
PAINTER 20
GARDENING 20;
! Products attributes;
PRODUCT, PROFIT =
HOUSE 6120
APTO 4100;
! Required HOUSE APTO;
USAGE = 3 2 ! BRICKLAYER;
4 3 ! SERVANT;
3 2 ! WOODWORK;
2 1 ! PLUMBER;
1 1 ! ELECTRICIAN;
3 2 ! PAINTER;
1 0; ! GARDENING;
ENDDATA
SUBMODEL MAX1:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
! Minimal Construction of Houses;
PRODUCE(1) = 3;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (head)):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Head)):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX1);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE(J) #GT# 0: ' Build:',
@FORMAT(PRODUCE( J),'%2.0f'),
@FORMAT(PRODUCT( J),'-6s'),'x Unit profit:$',
@FORMAT(PROFIT( J), '%6.2f'), ' = Total:$',
@FORMAT(PROFIT( J) * produce( J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

259
C2-B8 Solving Problems with LINGO Popular Houses | Case 1 | Construction

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (head):
HOUSE APTO
BRICKLAYER 3.000000 2.000000
SERVANT 4.000000 3.000000
WOODWORK 3.000000 2.000000
PLUMBER 2.000000 1.000000
ELECTRICIAN 1.000000 1.000000
PAINTER 3.000000 2.000000
GARDENING 1.000000 0.000000
DATA:
FORMULA (head):
AVAILABLE (Head)):
BRICKLAYER HOUSE
30.00000 APTO
BRICKLAYER
SERVANT 3.000000
70.00000 2.000000
SERVANT
WOODWORK 4.000000
30.00000 3.000000
WOODWORK
PLUMBER 3.000000
20.00000 2.000000
PLUMBER 2.000000
ELECTRICIAN 20.00000 1.000000
ELECTRICIAN
PAINTER 1.000000
20.00000 1.000000
PAINTER
GARDENING 3.000000
20.00000 2.000000
GARDENING 1.000000 0.000000
PROFIT:
AVAILABLE (Head)):
HOUSE 6120.000
BRICKLAYER
APTO 30.00000
4100.000
SERVANT 70.00000
WOODWORK
SOLUTION: 30.00000
Global optimal20.00000
PLUMBER solution found.
ELECTRICIAN
Objective 20.00000
value: 40910.00
PAINTER 20.00000
Infeasibilities: 0.000000
GARDENING 20.00000
IDEAL PLANNING PROGRAM:
SOLUTION
❖ PROFIT:
Build: 3 HOUSE x Unit profit:$6120.00 = Total:$18360.00
HOUSE 66120.000
Build: APTO x Unit profit:$4100.00 = Total:$22550.00
Below
APTO is the solution
4100.000 achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

SOLUTION:
Global optimal solution found.
Objective value: 40910.00
Infeasibilities: 0.000000

IDEAL PLANNING PROGRAM:


Build: 3 HOUSE x Unit profit:$6120.00 = Total:$18360.00
Build: 6 APTO x Unit profit:$4100.00 = Total:$22550.00

260
C2-B8 Solving Problems with LINGO Popular Houses | Case 2 | Construction

GOAL

2
It is intended to optimize profits with constructions of standard buildings of area of 80 m2,100 m2
and 120 m2 in the same allotment.

You must determine the quantities of standard buildings so that the profit in the enterprise is the
maximum.

Blocks
Resources / Products Apt 80 m2 Apt100 m2 Apt 120 m2 Available
• Product Mix
• Blend Man Hours hr 3,000 2,000 4,000 300,000
• Finance
Profit $ 6,000.00 4,200.00 7,500.00 -
• Investments
• Diet
The profit per unit of standard building of 80 m2, 100 m2 and 120 m2 is, respectively, $6,000.00,
• Aviation $4,200.00 and $7,500.00.
• Transport
Being the lot with 120 lots and the standard constructions of 80 m2, 100 m2 and 120 m2
• Agriculture
consume 3,000, 2,000 and 4,000 man-hours per building and the number of men available now is
• Construction 300,000 hours.
• Refinery
And that, for the service of the sales department, there are 15 units of 80 m2 already sold at the
• Schedule launch of the allotment.
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• House
• Apartment

Source:
• Book 11

261
C2-B8 Solving Problems with LINGO Popular Houses | Case 2 | Construction

MODEL:
SETS:
RESOURCE: AVAILABLE, LOTS;
PRODUCT : PROFIT, PRODUCE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Members attributes;
RESOURCE, AVAILABLE, LOTS =
MAN_HOURS 300000 120;
! Products attributes;
PRODUCT, PROFIT =
APTO_80 6000
APTO_100 4200
APTO_120 7500;

! Required APTO_80 APTO_100 APTO_120;


USAGE = 3000 2000 4000; ! Man-Hours required;

ENDDATA
SUBMODEL MAX2:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
! The lots constraints;
@FOR( RESOURCE( r):
[LOT] @SUM( PRODUCT( p): PRODUCE( p )) = LOTS( r););
! Number of apartments already sold ;
[MIN_APTO_80] PRODUCE( 1 ) >= 15;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " REQUIRED: ", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE:", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " LOTS:", @NEWLINE( 1));
@TABLE(LOTS);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX2);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE(J) #GT# 0: ' Build: ',
@FORMAT(PRODUCE( J),'%5.0f'), ' ',
@FORMAT(PRODUCT( J),'-8s'),' x Unit profit: $',
@FORMAT(PROFIT( J), '%7.2f'), ' = Total: $',
@FORMAT(PROFIT( J) * produce( J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX2);
ENDCALC
END

262
C2-B8 Solving Problems with LINGO Popular Houses | Case 2 | Construction

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
REQUIRED:
APTO_80 APTO_100 APTO_120
MAN_HOURS 3000.000 2000.000 4000.000

AVAILABLE:
MAN_HOURS 300000.0

LOTS:
MAN_HOURS 120.0000

PROFIT:
APTO_80 6000.000
APTO_100 4200.000
APTO_120 7500.000

SOLUTION:
Global optimal solution found.
Objective value: 612000.0
Infeasibilities: 0.000000
DATA:
REQUIRED:
Model Class: LP
DATA: APTO_80 APTO_100 APTO_120
REQUIRED:
MAN_HOURS 3000.000
IDEAL PLANNING PROGRAM: 2000.000 4000.000
Build: 60 APTO_80 xAPTO_100
APTO_80 APTO_120
Unit profit: $6000.00 = Total: $360000.00
MAN_HOURS60 3000.000
AVAILABLE:
Build: APTO_100 x2000.000 4000.000
Unit profit: $4200.00 = Total: $252000.00
MAN_HOURS 300000.0
AVAILABLE:
SLACK/SURPLUS LIMIT = AVAILABLE (head):
LOTS:
MAN_HOURS 300000.0PROD LIMIT VALUE
MAN_HOURS 120.0000
300000.0 300000.0 0.000000
LOTS:
PROFIT:
MAN_HOURS 120.0000
APTO_80 6000.000
APTO_100
PROFIT: 4200.000
❖ SOLUTION
APTO_120
APTO_80 7500.000
6000.000
APTO_100 4200.000
Below is the solution
SOLUTION:
APTO_120 7500.000achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
Objective value:
SOLUTION: 612000.0
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 612000.0
Model Class: LP
Infeasibilities: 0.000000

IDEAL PLANNING
Model Class: LPPROGRAM:
Build: 60 APTO_80 x Unit profit: $6000.00 = Total: $360000.00
Build: PLANNING
IDEAL 60 APTO_100 x Unit profit: $4200.00 = Total: $252000.00
PROGRAM:
Build: 60 APTO_80 x Unit profit: $6000.00 = Total: $360000.00
SLACK/SURPLUS
Build: LIMIT = AVAILABLE:
60 APTO_100 x Unit profit: $4200.00 = Total: $252000.00
PROD LIMIT VALUE
MAN_HOURS 300000.0 300000.0
SLACK/SURPLUS LIMIT = AVAILABLE: 0.000000
PROD LIMIT VALUE
MAN_HOURS 300000.0 300000.0 0.000000

263
C2-B8 Solving Problems with LINGO Popular Houses 2 | Case 3 | Construction

GOAL

3 What is the ideal amount of popular homes and apartments that the builder must build to get
the maximum profit considering the information below.

Resources / Products House Apartments Available


Blocks
Bricklayer head 4 8 30
• Product Mix
• Blend Servant head 2 3 70
• Finance
Woodwork head 1 3 20
• Investments
• Diet Profit p/unit $ 3,000.00 5,000.00 -
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• House
• Apartment

Source:
• Book 7

264
C2-B8 Solving Problems with LINGO Popular Houses 2 | Case 3 | Construction

MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: AVAILABLE;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, AVAILABLE =
BRICKLAYER 30
SERVANT 70
WOODWORK 20;
! Products attributes;
PRODUCT, PROFIT =
HOUSE 3000
APTO 5000;
! Required HOUSE APTO;
USAGE = 2 3 ! BRICKLAYER;
4 8 ! SERVANT;
1 3; ! WOODWORK;
ENDDATA
SUBMODEL MAX3:
[OBJ] MAX = @SUM( PRODUCT( p): PROFIT( p) * PRODUCE( p));
! The available constraints;
@FOR( RESOURCE( r):
[AVA] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (head)):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Head)):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE(J) #GT# 0: ' Build:',
@FORMAT(PRODUCE( J),'%2.0f'),
@FORMAT(PRODUCT( J),'-6s'),'x Unit profit:$',
@FORMAT(PROFIT( J), '%6.2f'), ' = Total:$',
@FORMAT(PROFIT( J) * produce( J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX3);
ENDCALC
END

265
C2-B8 Solving Problems with LINGO Popular Houses 2 | Case 3 | Construction

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (head)):
HOUSE APTO
BRICKLAYER 2.000000 3.000000
SERVANT 4.000000 8.000000
WOODWORK 1.000000 3.000000

AVAILABLE (Head)):
BRICKLAYER 30.00000
SERVANT 70.00000
WOODWORK 20.00000

PROFIT:
HOUSE 3000.000
APTO
DATA: 5000.000
FORMULA (head)):
SOLUTION:
DATA: HOUSE APTO
Global optimal
BRICKLAYER
FORMULA solution3.000000
2.000000
(head)): found.
Objective
SERVANT value: 4.000000
HOUSE 8.000000
APTO 46666.67
Infeasibilities:
WOODWORK
BRICKLAYER 1.000000 3.000000
2.000000 0.000000
SERVANT 4.000000 8.000000
AVAILABLE
WOODWORK
Model (Head)):
Class: 1.000000
LP 3.000000
BRICKLAYER 30.00000
SERVANT
AVAILABLE
IDEAL 70.00000
(Head)):
PLANNING PROGRAM:
WOODWORK
BRICKLAYER
Build: 20.00000
10.00 30.00000
HOUSE x Unit profit: $3000.00 = Total: $30000.00
SERVANT 3.33 70.00000
Build: APTO x Unit profit: $5000.00 = Total: $16666.67
PROFIT:
WOODWORK 20.00000
HOUSE 3000.000
SLACK/SURPLUS LIMIT = AVAILABLE (head):
❖ SOLUTION
APTO
PROFIT: 5000.000 PROD LIMIT VALUE
HOUSE 3000.000
BRICKLAYER 30.00000 30.00000 0.000000
Below
APTO is the
SOLUTION: solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
5000.000
SERVANT 66.66667 70.00000 -3.333333
Global optimal solution found.
WOODWORK 20.00000 20.00000 0.000000
Objective value:
SOLUTION: 46666.67
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 46666.67
Model Class: LP
Infeasibilities: 0.000000

IDEAL Class:
Model PLANNING
LPPROGRAM:
Build: 10.00 HOUSE x Unit profit: $3000.00 = Total: $30000.00
Build:PLANNING
IDEAL 3.33 APTO x Unit profit: $5000.00 =
PROGRAM: Total: $16666.67
Build: 10.00 HOUSE x Unit profit: $3000.00 = Total: $30000.00
Build: 3.33 APTO
SLACK/SURPLUS LIMIT x
= Unit profit:
AVAILABLE $5000.00 =
(head): Total: $16666.67
PROD LIMIT VALUE
SLACK/SURPLUS
BRICKLAYER LIMIT = AVAILABLE
30.00000 (head):
30.00000 0.000000
SERVANT PROD
66.66667 LIMIT -3.333333
70.00000 VALUE
BRICKLAYER
WOODWORK 30.00000
20.00000 30.00000
20.00000 0.000000
SERVANT 66.66667 70.00000 -3.333333
WOODWORK 20.00000 20.00000 0.000000

266
BLOCK 9 Block: REFINERY

What should be the oil mixture being sent to a cracking tower to produce its derivatives (gasoline, oil,
etc.) at a minimal cost? Do the oils come from different sources and have different compositions?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

267
C2-B9 Solving Problems with LINGO Petroleum Refining | Case 1 | Refinery

GOAL

1 A small refinery produces naphtha and gasoline, according to productivity data, gasoline,
naphtha and crude oil, as can be seen below.

Resources / Products Gasoline Naphtha Capacity

Blocks Petroleum m3/gal 0.4 0.5 300


• Product Mix
Refine Ut/gal 1 2 900
• Blend
• Finance Demand gal - 375 -

• Investments
Stock gal 600 - -
• Diet
Production Scale gal 150 150 -
• Aviation
• Transport Profit $ 3.00 5.00 -
• Agriculture
The time needed to refine one gallon for each different type of fuel, and also defines in the
• Construction
planning horizon, a minimum production scale for the operation of the refinery, the
• Refinery maximum capacity of gasoline stock and the maximum demand for the market of naphtha .
• Schedule
Schedule the operation of the refinery in order to maximize profit from the sale of
• Cutting manufactured fuels.
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Petroleum
• Refine
• Naphtha
• Oil

Source:
• Book 3
• Chapter 2.3.7

268
C2-B9 Solving Problems with LINGO Petroleum Refining | Case 1 | Refinery

MODEL:
SETS:
PRODUCT:DEMAND, STOCK, SCALE, PRODUCE, PROFIT ;
RESOURCE: CAPACITY;
ROUTES( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Products attributes;
PRODUCT, DEMAND, STOCK, SCALE, PROFIT =
GASOLINE 0 600 150 3
NAPHTHA 375 0 150 5;
! Resource attributes;
RESOURCE, CAPACITY =
PETROLEUM 300
REFINE 900;

! Required GASOLINE NAPHTHA;


USAGE = 0.4 0.5 ! PETROLEUM;
1 2; ! REFINE;
ENDDATA
SUBMODEL MAX1:
[OBJ] MAX = @SUM( PRODUCT( J): PROFIT(J) * PRODUCE( J));
! The capacity constraints;
@FOR(PRODUCT(I):
[CAP] @SUM( RESOURCE( J): USAGE( I, J) * PRODUCE(J)) <= CAPACITY( I));
! The production scale constraints;
@FOR(PRODUCT(I): [SCA] PRODUCE(I) >= SCALE( I));
! The demand constraints;
@FOR(PRODUCT(I) | DEMAND(I) #GT# 0:[DEM] PRODUCE(I) <= DEMAND(I));
! The Stock constraints;
@FOR(PRODUCT(I) | STOCK(I) #GT# 0:[STK] PRODUCE(I) <= STOCK(I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " USAGE (m3/gal, Ut/gal):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " CAPACITY (m3/gal, Ut/gal):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " DEMAND (gal):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " STOCK (gal):", @NEWLINE( 1));
@TABLE(STOCK);
@WRITE(" ", @NEWLINE( 1), " PRODUCTION SCALE (gal):", @NEWLINE( 1));
@TABLE(SCALE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX1);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J): ' ',
@FORMAT(PRODUCT( J),'-8s'),' Production:',
@FORMAT(PRODUCE( J), '%3.0f'),'gal x Unit profit: $',
@FORMAT(PROFIT( J),'%4.2f'), ' = Revenue: $',
@FORMAT(PROFIT( J) * PRODUCE( J),'%7.2f'),
@NEWLINE(1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

269
C2-B9 Solving Problems with LINGO Petroleum Refining | Case 1 | Refinery

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
USAGE (m3/gal, Ut/gal):
GASOLINE NAPHTHA
PETROLEUM 0.4000000 0.5000000
REFINE 1.000000 2.000000

CAPACITY (m3/gal, Ut/gal):


PETROLEUM 300.0000
REFINE 900.0000

DEMAND (gal):
GASOLINE 0.000000
NAPHTHA 375.0000

STOCK (gal):
GASOLINE 600.0000
NAPHTHA 0.000000

PRODUCTION SCALE (gal):


GASOLINE 150.0000
NAPHTHA 150.0000

PROFIT:
GASOLINE 3.000000
NAPHTHA 5.000000

SOLUTION:
Global optimal solution found.
Objective value: 2500.000
Infeasibilities: 0.000000

Model Class: LP
❖ SOLUTION
IDEAL PLANNING PROGRAM:
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal solution.
SOLUTION:
GASOLINE Production:500gal x Unit profit: $3.00 = Revenue: $1500.00
Global
NAPHTHAoptimal solution found.
Production:200gal x Unit profit: $5.00 = Revenue: $1000.00
SOLUTION:
Objective value: 2500.000
Global optimal solution found.
Infeasibilities: 0.000000
Objective value: 2500.000
Model Class: LP
Infeasibilities: 0.000000

IDEAL Class:
Model PLANNINGLP PROGRAM:
GASOLINE Production:500gal x Unit profit: $3.00 = Revenue: $1500.00
NAPHTHA
IDEAL Production:200gal
PLANNING PROGRAM: x Unit profit: $5.00 = Revenue: $1000.00
GASOLINE Production:500gal x Unit profit: $3.00 = Revenue: $1500.00
SLACK/SURPLUS
NAPHTHA LIMIT = CAPACITY
Production:200gal (m3/gal,
x Unit profit:Ut/gal):
$5.00 = Revenue: $1000.00
PROD LIMIT VALUE
GASOLINE
SLACK/SURPLUS300.0000 300.0000(m3/gal,
LIMIT = CAPACITY 0.000000
Ut/gal):
NAPHTHA 900.0000
PROD 900.0000
LIMIT 0.000000
VALUE
GASOLINE 300.0000 300.0000 0.000000
SLACK/SURPLUS
NAPHTHA LIMIT = DEMAND
900.0000 (gal):
900.0000 0.000000
PROD LIMIT VALUE
GASOLINE
SLACK/SURPLUS0.000000 0.000000
LIMIT = DEMAND (gal):0.000000
NAPHTHA 200.0000
PROD 375.0000
LIMIT -175.0000
VALUE
GASOLINE 0.000000 0.000000 0.000000
SLACK/SURPLUS
NAPHTHA LIMIT = PRODUCTION
200.0000 SCALE (gal):
375.0000 -175.0000
PROD LIMIT VALUE
GASOLINE
SLACK/SURPLUS500.0000 150.0000 SCALE
LIMIT = PRODUCTION 350.0000
(gal):
NAPHTHA 200.0000
PROD 150.0000
LIMIT 50.00000
VALUE 1
GASOLINE 500.0000 150.0000 350.0000
SLACK/SURPLUS
NAPHTHA LIMIT = STOCK
200.0000 (gal):50.00000
150.0000
PROD LIMIT VALUE
GASOLINE
SLACK/SURPLUS500.0000 600.0000
LIMIT = STOCK (gal):-100.0000
NAPHTHA 0.000000
PROD 0.000000
LIMIT 0.000000
VALUE
GASOLINE 500.0000 600.0000 -100.0000
NAPHTHA 0.000000 0.000000 0.000000

270
C2-B9 Solving Problems with LINGO Blending w/a Product Mix | Case 2 | Refinery

GOAL
One additional aspect of blending problem formulation will be illustrated with an example in which

2 the batch size is a decision variable. In the previous example, the batch size was specified.

In the following example, the amount of product to be blended depends upon how cheaply the
product can be blended.

Thus, it appears the blending decision and the batch size decision must be made simultaneously.

Blocks This example is suggestive of gasoline blending problems faced in a petroleum refinery. We wish
to blend gasoline from three ingredients: butane, heavy naphtha, and catalytic reformats.
• Product Mix
• Blend Four characteristics of the resultant gasoline and its inputs are important: cost, octane number,
vapor pressure, and volatility. These characteristics are summarized in the following table:
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting The cost per unit for REG and PRM are listed as negative, meaning we can sell them. That is, a
negative cost is a revenue.
• Metallurgy
The octane rating is a measure of the gasoline’s resistance to “knocking” or “pinging”. Vapor
• Fertilizer pressure and volatility are closely related.
• Clinic
Vapor pressure is a measure of susceptibility to stalling, particularly on an unusually warm spring
• Classic day. Volatility is a measure of how easily the engine starts in cold weather.
• Dynamic From the table, we see in this planning period, for example, there are only 1,000 units of butane
• Logistics available.

• Energy The profit contribution of regular gasoline is $18.40 per unit exclusive of the cost of its ingredients.

• Assembly Line A slight simplification assumed in this example is that the interaction between ingredients is linear.

For example, if a “fifty/fifty” mixture of BUT and CAT is made, then its octane will be 0.5 × 120 +
Keywords: 0.5 × 100 = 110 and its volatility will be 0.5 × 105 + 0.5 × 3 = 54.

• Commodity In reality, this linearity is violated slightly, especially with regard to octane rating.

• Gasoline
• Blend
• Product Mix

Source:
• Book 5
• Page 238

271
C2-B9 Solving Problems with LINGO Blending w/a Product Mix | Case 2 | Refinery

Formulation
The quality constraints require a bit of thought. The fractions of a batch of REG gasoline consisting of Butane, Catalytic
Reformat, and Heavy Naphtha are BUT/REG, CAT/REG, and NAP/REG, respectively. Thus, if the god of linearity smiles
upon us, the octane constraint of the blend for REG should be the expression:

(BUT/REG) × 120 + (CAT/REG) × 100 + (NAP/REG) × 74 ≥ 89.


Your expression, however, may be a frown because a ratio of variables like BUT/REG is definitely not linear. Multiplying
through by REG, however, produces the linear constraint: 120 BUT + 100 CAT + 74 NAP ≥ 89 REG or in standard form:

120 BUT + 100 CAT + 74 NAP - 89 REG ≥ 0.

Representing Two-sided Constraints


All the quality requirements are two sided. That is, they have both an upper limit and a lower limit. The upper limit
constraint on octane is clearly:

120 BUT + 100 CAT + 74 NAP - 110 REG ≤ 0.

We can write it in equality form by adding an explicit slack:

120 BUT + 100 CAT + 74 NAP - 110 REG + SOCT = 0.

When SOCT = 0, the upper limit is binding. You can verify that, when SOCT = 110 REG – 89 REG = 21 REG, the lower limit
is binding.

Thus, a compact way of writing both the upper and lower limits is with the two constraints:

1) 120BUT+100CAT+74NAP-110REG+SOCT=0,
2) 2) SOCT ≤ 21 REG.
Notice, even though there may be many ingredients, the second constraint involves only two variables. This is a compact
way of representing two-sided constraints. Similar arguments can be used to develop the vapor and volatility constraints.
Finally, a constraint must be appended, which states the whole equals the sum of its raw material parts, specifically:

REG = BUT + NAP + CAT.

The solution suggests that Premium is the more profitable product, so we sell the minimum amount of Regular required
and then sell as much Premium as scarce resources, BUT and CAT, allow. LP blending models have been a standard
operating tool in refineries for years.

Recently, there have been some instances where these LP models have been replaced by more sophisticated nonlinear
models, which more accurately approximate the nonlinearities in the blending process. See Rigby, Lasdon, and Waren
(1995), for a discussion of how Texaco does it.

For example, volatility may be represented by a logarithmic expression and octane may be represented with a polynomial
2 3 4
like a1*x+ a2*x + a3*x + a4*x , see Rardin(1998).

There is a variety of complications as gasoline blending models are made more detailed. For example, in high quality
gasoline, the vendor may want the octane to be constant across volatility ranges in the ingredients.

The reason is, if you “floor” the accelerator on a non-fuel injected automobile, a shot of raw gas is squirted into the intake.

The highly volatile components of the blend will reach the combustion chamber first. If these components have low
octane, you will have knocking, even though the “average” octane rating of the gasoline is high.

This may be more important in a station selling gas for city driving than in a station on a cross country highway in Kansas
where most driving is at a constant speed.

272
C2-B9 Solving Problems with LINGO Blending w/a Product Mix | Case 2 | Refinery

MODEL:
! General Blending Model(BLEND) in LINGO;
SETS:
!Each raw material has availability & cost/unit;
RM/ BUT, CAT, NAP/: A, C;
! Each f. g. has min & max sellable, profit contr./unit and batch size to be determined;
FG/ REG, PRM/: D, E, P, B;
! There are a set of quality measures;
QM/ OCT, VAP, VOL/;
!Each RM & QM combo has a quality level;
RQ( RM, QM): Q;
!For each combo QM, FG there are upper & lower limits on quality, slack on quality to be determined;
QF( QM, FG): U, L, S;
!Each combination of RM and FG has an amount used, to be determined;
RF( RM, FG): X;
ENDSETS

DATA:
! RM BUT CAT NAP;
A= 1000, 4000, 5000; ! Raw material availabilities;
C= 7.3, 18.2, 12.5; ! R. M. costs;
! QM OCT VAP VOL;
Q= 120, 60, 105, ! Quality parameters...;
100, 2.6, 3, ! R. M. by quality;
74, 4.1, 12;
! FG REG PRM;
D= 4000, 2000; ! Min needed of each F.G.;
E= 8000, 6000; ! Max sellable of each F.G;
P= 18.4, 22; ! Selling price of each F.G.;
U= 110, 110, ! Upper limits on quality;
11, 11, ! Quality by F.G.;
25, 25;
! Lower limits on quality...;
! QF QM FG;
L= 89, 94
8, 8,
17, 17;
ENDDATA
SUBMODEL MAX5:
! For each raw material, the availabilities;
@FOR( RM( I):
[RMLIM] @SUM( FG( K): X( I, K)) < A( I););
@FOR( FG( K):
!For each finished good, compute batch size;
[BDEF] B( K) = @SUM( RM( I): X( I, K));
! Batch size limits;
[BLO] B( K) > D( K);
[BHI] B( K) < E( K);
! Quality restrictions for each quality;
@FOR( QM( J):
[QUP]@SUM( RM(I): Q(I, J) * X(I, K)) + S( J,K) = U( J, K) * B( K);
[QDN] S(J, K) < (U(J, K) - L(J, K)) * B(K);
);
);
!We want to maximize profit contribution;
[PROFIT] MAX = @SUM( FG: P * B) - @SUM( RM( I): C( I) * @SUM( FG( K): X( I, K)));
ENDSUBMODEL

273
C2-B9 Solving Problems with LINGO Blending w/a Product Mix | Case 2 | Refinery

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
!Precision in digits for standard solution reports;
@SET('PRECIS',6);
! Set page width;
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RAW MATERIAL:", @NEWLINE( 1));
@TABLE(A);
@WRITE(" ", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(C);
@WRITE(" ", @NEWLINE( 1), " QUALITY PARAMETERS :", @NEWLINE( 1));
@TABLE(Q);
@WRITE(" ", @NEWLINE( 1), " MINIMUM NEED OF EACH F.G. :", @NEWLINE( 1));
@TABLE(D);
@WRITE(" ", @NEWLINE( 1), " MAXIMUM SELLABLE OF EACH F.G. :", @NEWLINE( 1));
@TABLE(E);
@WRITE(" ", @NEWLINE( 1), " SELLING PRICE OF EACH F.G. :", @NEWLINE( 1));
@TABLE(P);
@WRITE(" ", @NEWLINE( 1), " UPPER LIMITS ON QUALITY BY F.G. :", @NEWLINE( 1));
@TABLE(U);
@WRITE(" ", @NEWLINE( 1), " LOWER LIMITS ON QUALITY BY F.G. :", @NEWLINE( 1));
@TABLE(L);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE( MAX5 );
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
! Cost;
@WRITE(" TOTAL COST:", @NEWLINE( 1));
@WRITEFOR( RF(I,J): ' ',RM(J),' Used: ',
@FORMAT(X(I, J),'%6.1f'), ' x Cost: $',
@FORMAT(C(I),'%6.2f'), ' = Total:$',
@FORMAT(X(I,J) * C(I),'%10.2f'),
@NEWLINE( 1));
@WRITE(' TOTAL (C):',35*' ','$ ',
@FORMAT(@SUM(RF(I,J): X(I,J) * C(I)),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
! Price;
@WRITE(" TOTAL PRICE:", @NEWLINE( 1));
@WRITEFOR( FG(I): ' ',FG(I),' Produce: ',
@FORMAT(B(I),'%6.1f'), ' x Price:$',
@FORMAT(C(I),'%6.2f'), ' = Total:$',
@FORMAT(B(I) * P(I), '%10.2f'),
@NEWLINE( 1));
@WRITE(' TOTAL (P):',35*' ','$ ',@FORMAT(@SUM(FG(I): B(I) * P(I)),'%8.2f'),@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(' PROFIT (P - C):',30*' ','$ ',
@FORMAT(@SUM(FG(I): B(I) * P(I)) -
@SUM(RF(I,J): X(I,J) * C(I)) ,'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

274
C2-B9 Solving Problems with LINGO Blending w/a Product Mix | Case 2 | Refinery

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
RAW MATERIAL:
DATA:
DATA:
BUT 1000.00
RAW MATERIAL:
RAW
CATMATERIAL:
4000.00
BUT 1000.00
BUT
NAP 1000.00
5000.00
CAT 4000.00
CAT 5000.00
NAP 4000.00
NAP 5000.00
COST:
COST:
BUT 7.30000
BUT 7.30000
COST:
CAT 18.2000
CAT 18.2000
NAP 12.5000
BUT
NAP 12.5000
7.30000
CAT 18.2000
QUALITY
QUALITY PARAMETERS :
PARAMETERS :
NAP 12.5000
OCT VAP VOL
BUT 120.000 60.0000 VAP
OCT 105.000 VOL
BUT 100.000
QUALITY
CAT 120.000 60.0000
PARAMETERS
2.60000 105.000
:3.00000
CAT 74.0000
NAP 100.000
OCT 2.60000
4.10000 3.00000
12.0000
VAP VOL
NAP
BUT 74.0000
120.000 4.10000
60.0000 12.0000
105.000
MINIMUM NEED OF EACH F.G. :
CAT 4000.00
REG 100.000 2.60000 3.00000
MINIMUM NEED OF4.10000
NAP 2000.00
PRM 74.0000 EACH F.G. :
12.0000
REG 4000.00
PRM 2000.00
MAXIMUM
MINIMUM
SELLABLE OF EACH F.G. :
NEED OF EACH F.G. :
REG 8000.00
REG 6000.00
PRM 4000.00
MAXIMUM SELLABLE OF EACH F.G. :
PRM 2000.00
REG 8000.00
SELLING PRICE OF EACH F.G. :
PRM 18.4000
REG 6000.00
MAXIMUM SELLABLE OF EACH
PRM 22.0000
F.G. :
REG 8000.00
SELLING PRICE OF EACH F.G. :
PRM LIMITS
UPPER 6000.00ON QUALITY BY F.G. :
REG 18.4000
REG PRM
PRM 110.000
OCT 22.0000 110.000
SELLING
VAP 11.0000 11.0000EACH F.G. :
PRICE OF
REG 25.0000
VOL
UPPER 18.4000
LIMITS25.0000
ON QUALITY BY F.G. :
PRM 22.0000 REG PRM
LOWER LIMITS ON QUALITY BY F.G. :
OCT 110.000
REG 110.000
PRM
UPPER LIMITS
VAP 89.0000
OCT 11.0000 ON11.0000
QUALITY BY F.G. :
94.0000
VOL 8.00000
VAP REG
25.0000 PRM
25.0000
8.00000
OCT 17.0000
VOL 110.000 110.000
17.0000
VAP 11.0000
LOWER LIMITS ON11.0000
QUALITY BY F.G. :
SOLUTION:
VOL 25.0000
Global optimalREG 25.0000
solution PRM
found.
OCT 89.0000
Objective value: 94.0000 48750.0
LOWER
VAP LIMITS
8.00000ON8.00000
Infeasibilities: QUALITY BY F.G. : 0.00000
Total solver
VOL 17.0000 iterations:
REG 17.0000 PRM 17
❖ SOLUTION
OCT Class:
89.0000 94.0000
Model LP
SOLUTION:
VAP 8.00000 8.00000
Below
Global
isoptimal
thePROGRAM:
solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
solution found.
VOL MIXING
IDEAL 17.0000 17.0000
TOTAL COST: value:
Objective 48750.0
BUT Used: 507.4 x Cost: $ 7.30 = Total:$ 3704.13
Infeasibilities:
SOLUTION:
CAT Used: 492.6 x Cost: $ 7.30 = Total:$ 3595.87
0.00000
Total
Global
BUT solver
optimal
Used: iterations:
solution
1410.0 x Cost: $found.
18.20 = Total:$ 25661.23 17
Objective value:
CAT Used: 2590.0 x Cost: $ 18.20 = Total:$ 47138.77 48750.0
BUT Used: 2082.6 x Cost: $ 12.50 = Total:$ 26032.84
Infeasibilities: 0.00000
CAT Used: 1417.4
Model solver
Class: LP x Cost: $ 12.50 = Total:$ 17717.16
Total iterations: 17
1
IDEAL MIXING PROGRAM:
TOTAL
Model COST: LP
Class:
BUT Used: 507.4 x Cost: $ 7.30
Total:$ =
3704.13
CAT
IDEAL Used:PROGRAM:
MIXING 492.6 x Cost: $ 7.30
Total:$ =
3595.87
BUT Used: 1410.0 x Cost: $ 18.20 =
Total:$ 25661.23
TOTAL COST:
CAT Used: 2590.0 x Cost: $ 18.20 =
Total:$ 47138.77
BUT Used: 507.4 x Cost: $ 7.30
Total:$ =
3704.13
BUT Used: 2082.6 x Cost: $ 12.50 =
Total:$ 26032.84
CAT Used: 492.6 x Cost: $ 7.30
Total:$ =
3595.87
CAT
BUT Used: 1410.0
Used: 1417.4 xx Cost:
Cost: $$ 12.50
Total:$ ==
Total:$ 17717.16
18.20 25661.23
TOTAL
CAT (C):
Used: 2590.0 x $ 123850.00
Cost: $ 18.20 = Total:$ 47138.77 1
BUT Used: 2082.6 x Cost: $ 12.50 = Total:$ 26032.84
TOTAL PRICE:
REG Produce: 4000.0 x Price:$ 7.30 = Total:$ 73600.00
PRM Produce: 4500.0 x Price:$ 18.20 = Total:$ 99000.00 1
TOTAL (P): $ 172600.00

PROFIT (P - C): $ 48750.00

275
C2-B9 Solving Problems with LINGO Petroleum Processing | Case 3 | Refinery

GOAL

3 A refinery processes various types of oil. Each type of oil has a different cost sheet,
expressing transport conditions and cost at the source.

Resources / Products P1 P2 P3 P4 Price

Blue Super % 30 40 50 35.00


Blocks
Composition Blue % 30 10 28.00
• Product Mix
• Blend Yellow % 70 22.00

• Finance Available Barrel 3500 2200 4200 1800 -


• Investments
Cost p/barrel $ 19.00 24.00 20.00 27.00 -
• Diet
• Aviation On the other hand, each type of oil represents a different configuration of by-products for
gasoline.
• Transport
• Agriculture To the extent that a different type of oil is used in the production of gasoline, it is possible to
schedule specific octane conditions and other requirements.
• Construction
• Refinery These requirements imply classification of the type of gasoline obtained. Assuming the
refinery works with a line of four different types of oil and wants to produce three different
• Schedule types of gasoline called Yellow, Blue and Super blue.
• Cutting
It is requested to program the mixtures of types of petroleum, according to percentages for
• Metallurgy quality limits of the gasoline types and availabilities shown below:
• Fertilizer
Blue Super:
• Clinic
• Not more than 30% of oil 1;
• Classic
• Not less than 40% of the oil 2;
• Dynamic
• Not more than 50% of the oil 3;
• Logistics
Blue:
• Energy
• Not more than 30% of oil 1;
• Assembly Line
• Not less than 10% of oil 2
Yellow:
Keywords:
• Not more than 70% of the oil 1
• Commodity
• Gasoline
• Blend
• Refine

Source:
• Book 3
• Page 15

276
C2-B9 Solving Problems with LINGO Petroleum Processing | Case 3 | Refinery
MODEL:
SETS:
PRODUCT: COST, DEMAND;
RESOURCE:PRICE;
ROUTES( RESOURCE, PRODUCT): USAGE, PRODUCE;
ENDSETS
DATA:
!Products attributes;
PRODUCT, COST, DEMAND =
PET1 19 3500
PET2 24 2200
PET3 20 4200
PET4 27 1800;
! Resources attributes;
RESOURCE, PRICE =
GAS_SBLUE 35
GAS_BLUE 28
GAS_YELLOW 22;
!Required PET1 PET2 PET3 PET4;
USAGE = 30 40 50 0 ! % Composition: Gas Super Blue;
30 10 0 0 ! % Composition: Gas Blue;
70 0 0 0; ! % Composition: Gas Yellow;
ENDDATA
SUBMODEL MAX3:
[OBJ] MAX = REV1 + REV2 + REV3 - COST1 - COST2 - COST3 - COST4;
! Revenue;
REV1 + @SUM( PRODUCT(J): -1*PRICE(1) * PRODUCE(1,J)) = 0;
REV2 + @SUM( PRODUCT(J): -1*PRICE(2) * PRODUCE(2,J)) = 0;
REV3 + @SUM( PRODUCT(J): -1*PRICE(3) * PRODUCE(3,J)) = 0;
! Cost;
COST1 + @SUM( RESOURCE(J): -1*COST(1) * PRODUCE(J,1)) = 0;
COST2 + @SUM( RESOURCE(J): -1*COST(2) * PRODUCE(J,2)) = 0;
COST3 + @SUM( RESOURCE(J): -1*COST(3) * PRODUCE(J,3)) = 0;
COST4 + @SUM( RESOURCE(J): -1*COST(4) * PRODUCE(J,4)) = 0;
! Restrictions associated with the amount of oil demand;
@FOR(PRODUCT(J):
[DEM] @SUM(RESOURCE(I) : PRODUCE(I,J)) <= DEMAND(J););
! Restrictions associated with blend specifications - Super blue Gas;
USAGE(1,1)/100 *PRODUCE(1,1) + USAGE(1,1)/100*PRODUCE(1,2) - USAGE(1,1)/100*PRODUCE(1,3) - USAGE(1,1)/
100*PRODUCE(1,4) <= 0;
USAGE(1,2)/100 *PRODUCE(1,1) + USAGE(1,2)/100*PRODUCE(1,2) - USAGE(1,2)/100*PRODUCE(1,3) - USAGE(1,2)/
100*PRODUCE(1,4) >= 0;
USAGE(1,3)/100 *PRODUCE(1,1) + USAGE(1,3)/100*PRODUCE(1,2) - USAGE(1,3)/100*PRODUCE(1,3) - USAGE(1,3)/
100*PRODUCE(1,4) <= 0;
! Restrictions associated with blend specifications - Blue Gas;
USAGE(2,1)/100 *PRODUCE(2,1) + USAGE(2,1)/100*PRODUCE(2,2) - USAGE(2,1)/100*PRODUCE(2,3) - USAGE(2,1)/
100*PRODUCE(2,4) <= 0;
USAGE(2,2)/100 *PRODUCE(2,1) + USAGE(2,2)/100*PRODUCE(2,2) - USAGE(2,2)/100*PRODUCE(2,3) - USAGE(2,2)/
100*PRODUCE(2,4) >= 0;
! Restrictions associated with blend specifications - Yellow Gas;
USAGE(3,1)/100 *PRODUCE(3,1) + USAGE(3,1)/100*PRODUCE(3,2) - USAGE(3,1)/100*PRODUCE(3,3) - USAGE(3,1)/
100*PRODUCE(3,4) <= 0;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " COMPOSITION (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (barrel):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " COST OF OIL (per barrel):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SALE PRICE (per barrel):", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ROUTES(I,J) | PRODUCE(I,J) #GT# 0: ' ',
@FORMAT(PRODUCT( J), '-4s'), ', ',
@FORMAT(RESOURCE( I),'-8s'),': ',
@FORMAT(PRODUCE( I,J), '%4.0f'),'Barrel x Price:$',
@FORMAT(PRICE( I),'%4.2f'), ' = Revenue:$',
@FORMAT(PRICE( I) * PRODUCE(I, J),'%9.2f'), ' - Cost:$',
@FORMAT(COST( J) * PRODUCE(I, J),'%7.2f'), ' = Profit: $',
@FORMAT(PRICE( I) * PRODUCE(I, J) - COST( j) * PRODUCE(I, J),'%8.2f'),
@NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX3);
ENDCALC
END

277
C2-B9 Solving Problems with LINGO Petroleum Processing | Case 3 | Refinery

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COMPOSITION (%):
PET1 PET2 PET3 PET4
GAS_SBLUE 30.00000 40.00000 50.00000 0.000000
GAS_BLUE 30.00000 10.00000 0.000000 0.000000
GAS_YELLOW 70.00000 0.000000 0.000000 0.000000

DEMAND (barrel):
PET1 3500.000
PET2 2200.000
PET3 4200.000
PET4 1800.000

DATA:
COST OF OIL (per barrel):
COMPOSITION
PET1 (%):
19.00000
PET2 PET1
24.00000 PET2 PET3 PET4
DATA:
GAS_SBLUE
PET3 30.00000
20.00000 40.00000 50.00000 0.000000
COMPOSITION (%):
GAS_BLUE
PET4 30.00000
27.00000 10.00000 0.000000 0.000000
PET1 PET2 PET3 PET4
GAS_YELLOW 70.00000 0.000000 0.000000 0.000000
GAS_SBLUE 30.00000 40.00000 50.00000 0.000000
SALE PRICE (per
GAS_BLUE barrel):
30.00000 10.00000 0.000000 0.000000
DEMAND (barrel):
GAS_SBLUE 35.00000 0.000000 0.000000 0.000000
GAS_YELLOW 70.00000
PET1
GAS_BLUE 3500.000
28.00000
PET2
GAS_YELLOW 2200.000
22.00000
DEMAND (barrel):
PET3
PET1 4200.000
3500.000
PET4
SOLUTION:
PET2 1800.000
2200.000
Global
PET3 optimal solution found.
4200.000
COST OF
Objective
PET4 OIL (per
value: barrel):
1800.000 155200.0
PET1 19.00000
Infeasibilities: 0.000000
PET2 24.00000
COST OF OIL (per barrel):
PET3
PET1 Class: 20.00000
Model LP
19.00000
PET4
PET2 27.00000
24.00000
IDEAL
PET3 PLANNING PROGRAM:
20.00000
SALE
PET1,
PET4 PRICE (per
GAS_SBLUE: barrel):
3500 barrel x Price: $35.00 = Revenue: $122500.00 - Cost: $66500.00 = Profit: $56000.00
27.00000
GAS_SBLUE 35.00000
PET2, GAS_SBLUE: 2200 barrel x Price: $35.00 = Revenue: $ 77000.00 - Cost: $52800.00 = Profit: $24200.00
GAS_BLUE
PET3, 28.00000
GAS_SBLUE: 4200 barrel x Price: $35.00 = Revenue: $147000.00 - Cost: $84000.00 = Profit: $63000.00
❖SALE PRICE
SOLUTION
GAS_YELLOW
PET4,
(per barrel):
22.00000
GAS_SBLUE: 1500 barrel x Price: $35.00 = Revenue: $ 52500.00 - Cost: $40500.00 = Profit: $12000.00
GAS_SBLUE 35.00000
GAS_BLUE 28.00000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOLUTION:
SLACK/SURPLUS LIMIT = DEMAND (gal):
GAS_YELLOW 22.00000
Global optimal solutionLIMIT
PROD found. VALUE
Objective
PET1
SOLUTION: value:
3500.000 3500.000 0.000000 155200.0
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 155200.0
1
Model Class: LP
Infeasibilities: 0.000000
IDEAL
Model PLANNING
Class: LPPROGRAM:
PET1, GAS_SBLUE: 3500 barrel x Price: $35.00 = Revenue: $122500.00 - Cost: $66500.00 = Profit: $56000.00
PET2,
IDEAL GAS_SBLUE: 2200 barrel
PLANNING PROGRAM: x Price: $35.00 = Revenue: $ 77000.00 - Cost: $52800.00 = Profit: $24200.00
PET3,
PET1, GAS_SBLUE: 4200
GAS_SBLUE: 3500 barrel
barrel x
x Price:
Price: $35.00
$35.00 =
= Revenue:
Revenue: $147000.00
$122500.00 -
- Cost:
Cost: $84000.00
$66500.00 =
= Profit:
Profit: $63000.00
$56000.00
PET4,
PET2, GAS_SBLUE:
GAS_SBLUE: 1500
2200 barrel
barrel x
x Price:
Price: $35.00
$35.00 =
= Revenue:
Revenue: $
$ 52500.00
77000.00 -
- Cost:
Cost: $40500.00
$52800.00 =
= Profit:
Profit: $12000.00
$24200.00
PET3, GAS_SBLUE: 4200 barrel x Price: $35.00 = Revenue: $147000.00 - Cost: $84000.00 = Profit: $63000.00
SLACK/SURPLUS LIMIT
PET4, GAS_SBLUE: = DEMAND
1500 barrel (gal):
x Price: $35.00 = Revenue: $ 52500.00 - Cost: $40500.00 = Profit: $12000.00
PROD LIMIT VALUE
PET1 3500.000
SLACK/SURPLUS LIMIT3500.000
= DEMAND 0.000000
(gal):
PROD LIMIT VALUE
PET1 3500.000 3500.000 0.000000 1

278
C2-B9 Solving Problems with LINGO Production of Gasoline | Case 4 | Refinery

GOAL

4
A refinery produces three types of gasoline: Green, Blue and Yellow. Each type requires Pure
Petrol, Octane and Additives in the available quantities of 9600000, 4800000 and 2200000 liters
per week respectively.

• One liter of green gasoline requires 0.22 liters of pure gasoline, 0.50 liters of octane and 0.28
liters of additives.
Blocks
• One liter of blue gasoline requires 0.52 liters of pure gasoline, 0.34 liters of octane and 0.14 liters
• Product Mix
of additives.
• Blend
• Finance • One liter of yellow petrol requires 0.74 liters of pure gasoline, 0.20 liters of octane and 0.06 liters
of additives.
• Investments
• Diet Refinery planning stipulated that the amount of yellow gasoline should be at least 16 times the
amount of green gasoline and the amount of blue gasoline should be equal to 600,000 liters per
• Aviation
week.
• Transport
• Agriculture The company knows that every liter of green, blue and yellow gasoline has a profit margin of $
0.30, $ 0.25 and $ 0.20 respectively.
• Construction
• Refinery The goal is to determine the production schedule that maximizes the total contribution margin for
profit. The data necessary to elaborate the model are shown below:
• Schedule
• Cutting
Resources / Products Green Blue Yellow Available
• Metallurgy
• Fertilizer
Pure Gasoline L 0.22 0.52 0.74 9,600,000
• Clinic
• Classic Composition Octane L 0.50 0.34 0.20 4,800,000
• Dynamic
• Logistics Additive L 0.28 0.14 0.06 2,200,000

• Energy
Planned Production L G ≤ 600,000 16 x G 16,600,000
• Assembly Line

Profit $ 0.30 0.25 0.20


Keywords:
• Commodity
• Gasoline
• Blend
• Refine

Source:
• Book 2
• Chapter 14.35

279
C2-B9 Solving Problems with LINGO Production of Gasoline | Case 4 | Refinery

MODEL:
SETS:
PRODUCT: PROFIT, PRODUCE;
RESOURCE:AVAILABLE;
ROUTES( RESOURCE, PRODUCT): FORMULA;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE =
PURE_GAS 9600000
OCTANE 4800000
ADDITIVE 2200000;
! Products attributes;
PRODUCT, PROFIT =
GAS_GREEN 0.30
GAS_BLUE 0.25
GAS_YELLOW 0.20;
! Required (L) GAS_GREEN GAS_BLUE GAS_YELLOW;
FORMULA = 0.22 0.52 0.74 ! Pure gasoline;
0.50 0.34 0.20 ! Octane;
0.28 0.14 0.06; ! Additive;
ENDDATA
SUBMODEL MAX4:
[OBJ] MAX = @SUM(PRODUCT(J): PROFIT(J) * PRODUCE(J));
! The available constraints;
@FOR(RESOURCE(I):
@SUM(PRODUCT(J): FORMULA(I,J) * PRODUCE(J)) <= AVAILABLE(I););
! Green gasoline should be 1/16 of the yellow gasoline;
PRODUCE(1) >= PRODUCE(3)/16;
! Blue gasoline must be ≤ 600000 liters ;
PRODUCE(2) = 600000;
! Yellow gasoline should be 16 times the amount of green gasoline;
PRODUCE(3) = PRODUCE(1)*16;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (L):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (L):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute Sub-model;
@SOLVE(MAX4);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITE(" PRODUCED: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J): ' . ',
@FORMAT(PRODUCT( J),'-10s'),' ',
@FORMAT(PRODUCE( J), '%8.0f'),' L x Profit: $',
@FORMAT(PROFIT( J),'%4.2f'), ' = Total: $',
@FORMAT(PROFIT( J) * PRODUCE( J),'%10.2f'),
@NEWLINE(1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX4);
ENDCALC
END

280
C2-B9 Solving Problems with LINGO Production of Gasoline | Case 4 | Refinery

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (L):
GAS_GREEN GAS_BLUE GAS_YELLOW
PURE_GAS 0.2200000000 0.5200000000 0.7400000000
OCTANE 0.5000000000 0.3400000000 0.2000000000
ADDITIVE 0.2800000000 0.1400000000 0.0600000000

AVAILABLE (L):
PURE_GAS 9600000.000
OCTANE 4800000.000
ADDITIVE 2200000.000

PROFIT:
GAS_GREEN 0.300000000
GAS_BLUE 0.250000000
GAS_YELLOW 0.200000000

SOLUTION:
DATA:
Global optimal solution found.
FORMULA
Objective(L):
value: 2845522.388
Infeasibilities: GAS_GREEN GAS_BLUE GAS_YELLOW
0.000000000
DATA:
PURE_GAS 0.2200000000 0.5200000000 0.7400000000
FORMULA
OCTANE
Model
(L):
Class: LP 0.5000000000 0.3400000000 0.2000000000
GAS_GREEN GAS_BLUE GAS_YELLOW
ADDITIVE 0.2800000000 0.1400000000 0.0600000000
PURE_GAS 0.2200000000
IDEAL PLANNING PROGRAM: 0.5200000000 0.7400000000
OCTANE
PRODUCED: 0.5000000000 0.3400000000 0.2000000000
AVAILABLE (L):
ADDITIVE
.PURE_GAS
GAS_GREEN 0.2800000000
770149 L x Profit: 0.1400000000
$0.30 = Total: $ 0.0600000000
231044.78
9600000.000
.OCTANE
GAS_BLUE 600000 L x
4800000.000 Profit: $0.25 = Total: $ 150000.00
AVAILABLE
. GAS_YELLOW(L):
12322388 L x Profit: $0.20 = Total: $2464477.61
ADDITIVE 2200000.000
PURE_GAS 9600000.000
OCTANE 4800000.000
PROFIT:
ADDITIVE 2200000.000
GAS_GREEN 0.300000000
GAS_BLUE 0.250000000
PROFIT:
GAS_YELLOW 0.200000000
❖ SOLUTION
GAS_GREEN 0.300000000
GAS_BLUE 0.250000000
SOLUTION:
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
GAS_YELLOW 0.200000000
Global optimal solution found.
Objective value: 2845522.388
SOLUTION:
Infeasibilities: 0.000000000
Global optimal solution found.
Objective value: 2845522.388
Model Class: LP
Infeasibilities: 0.000000000
IDEAL PLANNING PROGRAM:
Model Class: LP
PRODUCED:
. GAS_GREEN 770149 L x Profit: $0.30 = Total: $ 231044.78
IDEAL PLANNING PROGRAM:
. GAS_BLUE
PRODUCED: 600000 L x Profit: $0.25 = Total: $ 150000.00
. GAS_YELLOW
. GAS_GREEN 12322388 L
770149 L x
x Profit:
Profit: $0.20
$0.30 =
= Total:
Total: $2464477.61
$ 231044.78
. GAS_BLUE 600000 L x Profit: $0.25 = Total: $ 150000.00
. GAS_YELLOW 12322388 L x Profit: $0.20 = Total: $2464477.61

281
C2-B9 Solving Problems with LINGO Gasoline Mix | Case 5 | Refinery

GOAL

5
A distribution company sells ordinary and special gasoline. Each liter of ordinary gasoline is sold
at $2.10 and must have at least 90 octane. Each liter of special gasoline is sold for $2.50 and
needs to have at least 97 octane.

These types of gasoline are obtained by mixing three different types of gasolines, as shown in the
following table:
Blocks
• Product Mix Resources / Products Cost p/L Octane Special Common Available (L)
• Blend
• Finance Gas 1 $1.725 100 0 1.0 150000

• Investments
Gas 2 $1.575 87 0.67 0.33 350000
• Diet
• Aviation Gas 3 $1.775 110 0.83 0 300000
• Transport
Minimum Required Octane 97 90 -
• Agriculture
• Construction
Demand p/L 450,000 300,000 -
• Refinery
• Schedule Price p/L $2.50 $2.10 -
• Cutting
The company received an order for 300,000 liters of ordinary gasoline and 450,000 liters of
• Metallurgy
special gasoline. What should be the ideal mix to fulfill the request maximizing profit.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Gasoline
• Blend

Source:
• Book 2
• Chapter 14.22

282
C2-B9 Solving Problems with LINGO Gasoline Mix | Case 5 | Refinery
MODEL:
SETS:
PRODUCT: PRICE, DEMAND, MINREQ, PRODUCE;
RESOURCE:AVAILABLE, OCTANE, COST;
ROUTES( RESOURCE, PRODUCT): FORMULA;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, AVAILABLE, OCTANE, COST =
GAS1 150000 100 1.725
GAS2 350000 87 1.575
GAS3 300000 110 1.775;
! Products attributes;
PRODUCT, PRICE, DEMAND MINREQ =
GAS_SPECIAL 2.50 450000 97
GAS_COMMON 2.10 300000 90;
! Required GAS_SPECIAL GAS_COMMON;
FORMULA = 0.00 1.00 ! GAS1;
0.67 0.33 ! GAS2;
0.833333 0.00 ; ! GAS3;
ENDDATA
SUBMODEL MAX5:
[OBJ] MAX = PRICE_T - COST_T;
! Calculation of total price;
PRICE_T = @SUM(PRODUCT(J): PRICE(J) * PRODUCE(J));
COST_T = COST(1) * (AVAILABLE(1) * FORMULA(1,1) + AVAILABLE(1) * FORMULA(1,2)) +
COST(2) * (AVAILABLE(2) * FORMULA(2,1) + AVAILABLE(2) * FORMULA(2,2)) +
COST(3) * (AVAILABLE(3) * FORMULA(3,1) + AVAILABLE(3) * FORMULA(3,2)) ;
! The Demand constraints;
PRODUCE(1) = DEMAND(1); PRODUCE(2) = DEMAND(2);
ENDSUBMODEL;
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (L):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (L):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND: (L)", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " COST P/LITER:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " PRICE P/LITER:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " OCTANE:", @NEWLINE( 1));
@TABLE(OCTANE);
@WRITE(" ", @NEWLINE( 1), " MINIMUM REQUIRED OCTANE:", @NEWLINE( 1));
@TABLE(MINREQ);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX5);
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1), " MIXED: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(I): ' + ',
@FORMAT(PRODUCT( I),'-11s'),':',
@FORMAT(PRODUCE( I), '%8.0f'),' L x Price: $',
@FORMAT(PRICE( I),'%4.2f'), ' = Total: $',
@FORMAT(PRICE( I) * PRODUCE( I),'%10.2f'),
@NEWLINE(1));
@WRITE(" - TOTAL COST: ", 35*' ','$',@FORMAT(COST_T,'%10.2f'),@NEWLINE( 1));
@WRITE(" = PROFIT: ", 39*' ', '$',@FORMAT(PRICE_T - COST_T,'%10.2f'),@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END
283
C2-B9 Solving Problems with LINGO Gasoline Mix | Case 5 | Refinery

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
FORMULA (L):
GAS_SPECIAL GAS_COMMON
GAS1 0.0000000 1.000000
GAS2 0.6700000 0.330000
GAS3 0.8333330 0.000000

AVAILABLE (L):
DATA:
GAS1 150000.0
FORMULA
DATA: (L):
GAS2 350000.0
FORMULA
GAS3 (L):GAS_SPECIAL
300000.0
GAS_COMMON
GAS1 0.0000000
GAS_SPECIAL 1.000000
GAS_COMMON
GAS2
GAS1 0.6700000
0.0000000 0.330000
1.000000
DEMAND: (L)
GAS3
GAS2 0.8333330 0.000000
GAS_SPECIAL 0.6700000
450000.0 0.330000
GAS3
GAS_COMMON 0.8333330
300000.0 0.000000
AVAILABLE (L):
GAS1
AVAILABLE (L):150000.0
COST
GAS2 P/LITER: 350000.0
GAS1
GAS1 150000.0
1.725000
GAS3
GAS2 300000.0
350000.0
GAS2 1.575000
GAS3
GAS3 300000.0
1.775000
DEMAND: (L)
GAS_SPECIAL
DEMAND: (L) 450000.0
PRICE P/LITER:
GAS_COMMON 300000.0
GAS_SPECIAL
GAS_SPECIAL 450000.0
2.500000
GAS_COMMON 300000.0
COST P/LITER: 2.100000
GAS_COMMON
GAS1 1.725000
COST P/LITER:
OCTANE:
GAS2 1.575000
GAS1
GAS1 1.725000
100.0000
GAS3 1.775000
GAS2
GAS2 1.575000
87.00000
GAS3 1.775000
PRICE P/LITER: 110.0000
GAS3
GAS_SPECIAL 2.500000
PRICE
MINIMUMP/LITER:
REQUIRED OCTANE:
GAS_COMMON 2.100000
GAS_SPECIAL
GAS_SPECIAL 2.500000
97.00000
GAS_COMMON
GAS_COMMON
OCTANE: 2.100000
90.00000
GAS1 100.0000
OCTANE:
SOLUTION:
GAS2 87.00000
GAS1 optimal110.0000
Global
GAS3 100.0000
solution found.
GAS2
Objective 87.00000
value: 501250.2
GAS3
MINIMUM 110.0000
Infeasibilities:
REQUIRED OCTANE: 0.000000
❖ SOLUTION
GAS_SPECIAL 97.00000
MINIMUM
Model REQUIRED
Class:
GAS_COMMON LP OCTANE:
90.00000
Below is the solution
GAS_SPECIAL achieved by LINGO with infeasibilities 0, and
97.00000 the detailed report that makes up the optimal
IDEAL PLANNING
GAS_COMMON
SOLUTION: PROGRAM:
90.00000
MIXED: optimal solution found.
Global
+ GAS_SPECIAL:
SOLUTION:
Objective value: 450000 L x Price: $2.50 = Total: $1125000.00
501250.2
+ GAS_COMMON
Global optimal: solution
Infeasibilities: 300000 L found.
x Price: $2.10 = Total: $ 630000.00
0.000000
- TOTAL COST:
Objective value: $1253749.82
501250.2
= PROFIT:
Infeasibilities:
Model Class: LP $ 0.000000
501250.18

Model PLANNING
IDEAL Class: LPPROGRAM:
MIXED:
IDEAL
+ PLANNING PROGRAM:
GAS_SPECIAL: 450000 L x Price: $2.50 = Total: $1125000.00
MIXED:
+ GAS_COMMON : 300000 L x Price: $2.10 = Total: $ 630000.00
+ TOTAL
- GAS_SPECIAL:
COST: 450000 L x Price: $2.50 = Total:$1253749.82
$1125000.00
+ PROFIT:
= GAS_COMMON : 300000 L x Price: $2.10 = Total:$ $501250.18
630000.00
- TOTAL COST: $1253749.82
= PROFIT: $ 501250.18

284 1

1
BLOCK 10 Block: SCHEDULE

How to designate sections of a highway to be built or designate work groups so as to


obtain the lowest possible cost?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

285
C2-B10 Solving Problems with LINGO Schedule Staff

SCHEDULE STAFF

One part of the management of most service facilities is the scheduling or staffing of personnel. That is, deciding how
many people to use on what shifts.

This problem exists in staffing the information operators department of a telephone company, a toll plaza, a large hospital,
and, in general, any facility that must provide service to the public.

The solution process consists of at least three parts:

1. Develop good forecasts of the number of personnel required during each hour of the day or each day of the
week during the scheduling period.

2. Identify the possible shift patterns, which can be worked based on the personnel available and work
agreements and regulations. A particular shift pattern might be to work Tuesday through Saturday and then be
off two days.

3. Determine how many people should work each shift pattern, so cost are minimized and the total number of
people on duty during each time period satisfies the requirements determined in (1).

All three of these steps are difficult. LP can help in solving step 3.

One of the first published accounts of using optimization for staff scheduling was by Edie (1954). He developed a method
for staffing tollbooths for the New York Port Authority.

Though old, Edie’s discussion is still very pertinent and thorough. His thoroughness is illustrated by his summary (p. 138):

• A trial was conducted at the Lincoln Tunnel…

• Each toll collector was given a slip showing his booth assignments and relief periods and instructed to follow the
schedule strictly…

• At no times did excessive backups occur…

• The movement of collectors and the opening and closing of booths took place without the attention of the toll
sergeant.

• At times, the number of booths were slightly excessive, but not to the extent previously...

• Needless to say, there is a good deal of satisfaction...

286
C2-B10 Solving Problems with LINGO Designation of Road Trips | Case 1 | Schedule

GOAL

1 Several companies have submitted a proposal to build four stretches of a road. Assemble the
model of highway designation at the lowest cost, considering that each company can only do
one stretch. The costs offered by the companies are in the table below.

Resources / Products Straight 1 Straight 2 Straight 3 Straight 4


Blocks
• Product Mix A $ 500.00 700.00 300.00 200.00
• Blend
• Finance B $ 450.00 1000.00 450.00 250.00
Companies
• Investments
C $ 650.00 800.00 500.00 320.00
• Diet
• Aviation
D $ 550.00 950.00 480.00 280.00
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Straight

Source:
• Book 1
• Page 106

287
C2-B10 Solving Problems with LINGO Designation of Road Trips | Case 1 | Schedule

MODEL:
SETS:
PRODUCT :;
RESOURCE: ;
RXP( RESOURCE, PRODUCT) : USAGE, PRODUCE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE =
CIA_1
CIA_2
CIA_3
CIA_4;
! Products attributes;
PRODUCT =
STRAIGHT1
STRAIGHT2
STRAIGHT3
STRAIGHT4 ;

! Required CIA_1 CIA_2 CIA_3 CIA_4;


USAGE = 500 700 300 200 ! STRAIGHT1;
450 1000 450 250 ! STRAIGHT2;
650 800 500 320 ! STRAIGHT3;
550 950 480 280; ! STRAIGHT4;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM( RXP(I,C): USAGE( I, C) * PRODUCE( I, C));
! Selects the company;
@FOR( PRODUCT(I):
@SUM(RESOURCE(C): PRODUCE(I,C)) = 1);
! Select the stretch of highway;
@FOR( PRODUCT(I):
@SUM(RESOURCE(C): PRODUCE(C, I)) = 1);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J)| PRODUCE(I,J) #GT# 0: ' ',
@FORMAT(RESOURCE( I), '-5s'),' Selected to do ',
@FORMAT(PRODUCT( J), '-10S'),' by Cost: $',
@FORMAT(USAGE(I,J), '%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

288
C2-B10 Solving Problems with LINGO Designation of Road Trips | Case 1 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COST:
STRAIGHT1 STRAIGHT2 STRAIGHT3 STRAIGHT4
CIA_1 500.0000 700.0000 300.0000 200.0000
CIA_2 450.0000 1000.000 450.0000 250.0000
CIA_3 650.0000 800.0000 500.0000 320.0000
CIA_4 550.0000 950.0000 480.0000 280.0000

SOLUTION:
Global optimal solution found.
Objective value: 1830.000
Infeasibilities: 0.000000

Model Class: LP

IDEAL PLANNING PROGRAM:


CIA_1 Selected to do STRAIGHT3 by Cost: $ 300.00
CIA_2 Selected to do STRAIGHT1 by Cost: $ 450.00
CIA_3 Selected to do STRAIGHT2 by Cost: $ 800.00
CIA_4 Selected to do STRAIGHT4 by Cost: $ 280.00

DATA:
COST:
DATA: STRAIGHT1 STRAIGHT2 STRAIGHT3 STRAIGHT4
COST:
CIA_1 500.0000 700.0000 300.0000 200.0000
CIA_2 STRAIGHT1
450.0000 STRAIGHT2
1000.000 STRAIGHT3
450.0000 STRAIGHT4
250.0000
❖ SOLUTION
CIA_1
CIA_3 500.0000
650.0000 700.0000
800.0000 300.0000
500.0000 200.0000
320.0000
CIA_2
CIA_4 450.0000
550.0000 1000.000
950.0000 450.0000
480.0000 250.0000
280.0000
Below
CIA_3is the solution achieved
650.0000 by LINGO500.0000
800.0000 with infeasibilities
320.0000 0, and the detailed report that makes up the optimal
CIA_4
SOLUTION: 550.0000 950.0000 480.0000 280.0000
Global optimal solution found.
SOLUTION:
Objective value: 1830.000
Global optimal solution found.
Infeasibilities: 0.000000
Objective value: 1830.000
Infeasibilities:
Model Class: LP 0.000000

Model
IDEAL Class: LP PROGRAM:
PLANNING
CIA_1 Selected to do STRAIGHT3 by Cost: $ 300.00
IDEAL
CIA_2 PLANNING PROGRAM:
Selected to do STRAIGHT1 by Cost: $ 450.00
CIA_1
CIA_3 Selected
Selected to
to do
do STRAIGHT3
STRAIGHT2 by
by Cost:
Cost: $$ 300.00
800.00
CIA_2
CIA_4 Selected
Selected to
to do
do STRAIGHT1
STRAIGHT4 by
by Cost:
Cost: $$ 450.00
280.00
CIA_3 Selected to do STRAIGHT2 by Cost: $ 800.00
CIA_4 Selected to do STRAIGHT4 by Cost: $ 280.00

289
C2-B10 Solving Problems with LINGO Designation of Groups | Case 2 | Schedule

GOAL

2 A service delivery company needs to allocate watchmen on several clients, but it has been
found that there is a variation between the needs of each day of the week as can be
observed below:

Required / Day MON TUE WED THU FRI SAT SUN


Blocks
• Product Mix Worker 20 30 24 44 12 22 25
• Blend
• Finance It is also known that the work week is five days in a row and two days off. We ask for the
best and least personal allocation scheme
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Staff
• Shift
• Allocation

290
C2-B10 Solving Problems with LINGO Designation of Groups | Case 2 | Schedule

MODEL:
SETS:
DAYS: REQUIRED, START, ONDUTY;
ENDSETS
DATA:
! Days attributes;
DAYS, REQUIRED =
MON 20
TUE 30
WED 24
THU 44
FRI 12
SAT 22
SUN 25;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( DAYS( I): START( I));
@FOR( DAYS( J):
ONDUTY(J) = @SUM( DAYS( I) | I #LE# 5: START( @WRAP( J - I + 1, 7)));
ONDUTY(J) >= REQUIRED( J) );
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" REQUIRED:", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN2);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( DAYS(D): ' ',
@FORMAT(DAYS( D),'-4S'),' ', "Required: ",
@FORMAT(REQUIRED(D),'%2.0f'), ' Worker ', 'Start:',
@FORMAT(START(D),'%3.0f'), ' On duty:', ONDUTY(D), ' Surplus: ',
@FORMAT(ONDUTY(D) - REQUIRED(D),'%2.0f'), @NEWLINE( 1));
@WRITE(' Worker total:',19*' ',@FORMAT(OBJ,'%3.0f'),@NEWLINE(1));
! Bar chart of required vs. actual staffing;
@CHARTBAR(
'Staffing Schedule', !Chart title;
'Day', !X-Axis label;
'Employees', !Y-Axis label;
'Employees Required', !Legend 1;
REQUIRED, !Attribute 1;
'Employees On Duty', !Legend 2;
ONDUTY !Attribute 2;);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

291
C2-B10 Solving Problems with LINGO Designation of Groups | Case 2 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

REQUIRED (worker):
MON 20.00000
TUE 30.00000
WED 24.00000
THU 44.00000
FRI 12.00000
SAT 22.00000
SUN 25.00000

SOLUTION:
Global optimal solution found.
Objective value: 44.00000
Infeasibilities: 0.000000

Model Class: LP

IDEAL PLANNING PROGRAM:


MON Required: 20 Worker Start: 11 On duty:22.00000 Surplus: 2
TUE Required: 30 Worker Start: 8 On duty:30.00000 Surplus: 0
WED Required: 24 Worker Start: 14 On duty:44.00000 Surplus: 20
THU Required: 44 Worker Start: 0 On duty:44.00000 Surplus: 0
FRI Required: 12 Worker Start: 0 On duty:33.00000 Surplus: 21
SAT Required: 22 Worker Start: 0 On duty:22.00000 Surplus: 0
REQUIRED (worker):
SUN Required: 25 Worker Start: 11 On duty:25.00000 Surplus: 0
MON 20.00000
Worker total: 44
TUE 30.00000
REQUIRED (worker):
WED 24.00000
MON 20.00000
THU 44.00000
TUE 30.00000
FRI 12.00000
WED 24.00000
SAT
THU 22.00000
44.00000
SUN
FRI 25.00000
❖ SOLUTION
12.00000
SAT 22.00000
Below is the solution achieved by LINGO
SOLUTION:
SUN 25.00000 with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
Objective
SOLUTION: value: 44.00000
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 44.00000
Model Class: LP
Infeasibilities: 0.000000

IDEAL
Model PLANNING
Class: LPPROGRAM:
MON Required: 20 Worker Start: 11 On duty:22.00000 Surplus: 2
TUE
IDEALRequired: 30 Worker
PLANNING PROGRAM: Start: 8 On duty:30.00000 Surplus: 0
WED Required:
MON Required: 2024 Worker
Worker Start:
Start: 14
11 On
On duty:44.00000
duty:22.00000 Surplus: 20
Surplus: 2
THU Required: 44 Worker
TUE Required: 30 Worker Start:
Start: 0
8 On
On duty:44.00000
duty:30.00000 Surplus: 0
Surplus: 0
FRI
WED Required: 12 Worker
Required: 24 Worker Start:
Start: 0
14 On
On duty:33.00000
duty:44.00000 Surplus: 20
Surplus: 21
SAT
THU Required: 22 Worker
Required: 44 Worker Start:
Start: 0
0 On
On duty:22.00000
duty:44.00000 Surplus: 0
Surplus: 0
SUN
FRI Required: 25 Worker
Required: 12 Worker Start:
Start: 11
0 On
On duty:25.00000
duty:33.00000 Surplus: 21
Surplus: 0
Worker total: 22 Worker
SAT Required: Start: 44
0 On duty:22.00000 Surplus: 0
SUN Required: 25 Worker Start: 11 On duty:25.00000 Surplus: 0
Worker total: 44

292
C2-B10 Solving Problems with LINGO Designation of Groups | Case 2 | Schedule

293
C2-B10 Solving Problems with LINGO Designation of Groups | Case 3 | Schedule

GOAL

3 A post office needs a different number of employees, depending on the day of the week. For
union demands, each worker works five consecutive days and rests two.

Required / Day MON TUE WED THU FRI SAT SUN


Blocks
• Product Mix Worker 20 12 18 16 14 14 12

• Blend
Formulate the problem so that the number of employees hired is the minimum necessary to
• Finance meet the needs of the agency.
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Staff
• Allocation

294
C2-B10 Solving Problems with LINGO Designation of Groups | Case 3 | Schedule

MODEL:
SETS:
DAYS: REQUIRED, START, ONDUTY;
ENDSETS
DATA:
DAYS, REQUIRED =
MON 20
TUE 12
WED 18
THU 16
FRI 14
SAT 14
SUN 12;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM( DAYS( I): START( I));
@FOR( DAYS( J):
ONDUTY(J) = @SUM( DAYS( I) | I #LE# 5: START( @WRAP( J - I + 1, 7)));
ONDUTY(J) >= REQUIRED( J));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" REQUIRED:", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 2));
! Execute Sub-model;
@SOLVE(MIN3);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( DAYS(D): ' ',
@FORMAT(DAYS( D),'-3s'),' ', "Required: ",
@FORMAT(REQUIRED(D),'%2.0f'), ' Worker, ', 'Start:',
@FORMAT(START(D),'%2.0f'), ' On duty:',
@FORMAT(ONDUTY(D),'%3.0f'), ' Surplus:',
@FORMAT(ONDUTY(D) - REQUIRED(D),'%2.0f'),
@NEWLINE( 1));
@WRITE(' Worker total:',17*' ',@FORMAT(OBJ,'%3.0f'),@NEWLINE(1));
! Bar chart of required vs. actual staffing;
@CHARTBAR(
'Staffing Schedule', !Chart title;
'Day', !X-Axis label;
'Employees', !Y-Axis label;
'Employees Required', !Legend 1;
REQUIRED, !Attribute 1;
'Employees On Duty', !Legend 2;
ONDUTY !Attribute 2;);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

295
C2-B10 Solving Problems with LINGO Designation of Groups | Case 3 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

REQUIRED (worker):
MON 20.00000
TUE 12.00000
WED 18.00000
THU 16.00000
FRI 14.00000
SAT 14.00000
SUN 12.00000

SOLUTION:

Global optimal solution found.


Objective value: 22.66667
Infeasibilities: 0.000000

Model Class: LP
REQUIRED (worker):
IDEAL PLANNING PROGRAM:
MON 20.00000
MON Required: 20 Worker, Start: 9 On duty: 20 Surplus: 0
TUE Required:
12.00000
REQUIRED
TUE (worker):
12 Worker, Start: 2 On duty: 17 Surplus: 5
WED
WED 18.00000
MONRequired:
20.0000018 Worker, Start: 1 On duty: 18 Surplus: 0
THU
THU 16.00000
TUERequired:
12.0000016 Worker, Start: 5 On duty: 16 Surplus: 0
FRI
FRI 14.00000
WEDRequired:
18.0000014 Worker, Start: 0 On duty: 16 Surplus: 2
SAT
SAT 14.00000
THURequired:
16.0000014 Worker, Start: 7 On duty: 14 Surplus: 0
SOLUTION
SUN
❖ SUN 12.00000
FRIRequired:
14.0000012 Worker, Start: 0 On duty: 12 Surplus: 0
SAT 14.00000
Worker total: 23
Below is the solution achieved by LINGO
SOLUTION:
SUN 12.00000 with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
SOLUTION:
Objective value: 22.66667
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 22.66667
Model Class: LP
Infeasibilities: 0.000000

IDEAL
Model PLANNING
Class: LPPROGRAM:
MON Required: 20 Worker, Start: 9 On duty: 20 Surplus: 0
TUE Required:
IDEAL PLANNING12PROGRAM:
Worker, Start: 2 On duty: 17 Surplus: 5
WED
MON Required: 20 Worker,
Required: 18 Worker, Start:
Start: 19 On
On duty:
duty: 18
20 Surplus:
Surplus: 00
THU
TUE Required:
Required: 16
12 Worker,
Worker, Start:
Start: 52 On
On duty:
duty: 16
17 Surplus:
Surplus: 05
FRI
WED Required:
Required: 14
18 Worker,
Worker, Start:
Start: 01 On
On duty:
duty: 16
18 Surplus:
Surplus: 20
SAT
THU Required:
Required: 14
16 Worker,
Worker, Start:
Start: 75 On
On duty:
duty: 14
16 Surplus:
Surplus: 00
SUN
FRI Required:
Required: 12
14 Worker,
Worker, Start:
Start: 00 On
On duty:
duty: 12
16 Surplus:
Surplus: 02
Worker total: 14 Worker,
SAT Required: Start:237 On duty: 14 Surplus: 0
SUN Required: 12 Worker, Start: 0 On duty: 12 Surplus: 0
Worker total: 23

296
C2-B10 Solving Problems with LINGO STAFFDEM | Case 4 | Schedule

GOAL

4 Suppose you run the popular Pluto Dogs dog cart which is open seven days a week.

You hire employees for a five-day work week with two consecutive days. Each employee
receives the same weekly salary.

Some days of the week are busier than others and, based on past experience, you know
Blocks how many workers are needed on a particular day of the week. In particular, your forecast
• Product Mix calls these personnel requirements:
• Blend
• Finance Required / Day MON TUE WED THU FRI SAT SUN
• Investments
• Diet Worker 20 12 18 16 14 14 12

• Aviation
You need to determine how many employees start each day of the week in order to minimize
• Transport the total number of employees while still meeting or exceeding the staffing requirements
• Agriculture every day of the week.
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Staff
• Allocation

Source:
• Book 4
• Page 82

297
C2-B10 Solving Problems with LINGO STAFFDEM | Case 4 | Schedule

MODEL:
SETS:
DAYS: REQUIRED, START, ONDUTY;
ENDSETS
DATA:
DAYS, REQUIRED =
MON 20
TUE 16
WED 13
THU 16
FRI 19
SAT 14
SUN 12;
ENDDATA
SUBMODEL MIN4:
[OBJ] MIN = @SUM( DAYS( I): START( I));
@FOR( DAYS( J):
ONDUTY(J) = @SUM( DAYS( I) | I #LE# 5: START( @WRAP( J - I + 1, 7)));
ONDUTY(J) >= REQUIRED( J));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! data block;
@WRITE(" REQUIRED (worker):", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN4);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( DAYS(D): ' ',
@FORMAT(DAYS( D),'-3s'), " Required: ",
@FORMAT(REQUIRED(D), '%3.0f'),' Worker ', 'Start:',
@FORMAT(START(D),'%3.0f'), ' On duty:',
@FORMAT(ONDUTY(D),'%3.0f'), ' Surplus: ',
@FORMAT(ONDUTY(D) - REQUIRED(D),'%2.0f'),
@NEWLINE( 1));
@WRITE(' Worker total:',19*' ',@FORMAT(OBJ,'%3.0f'),@NEWLINE(1));
! Bar chart of required vs. actual staffing;
@CHARTBAR(
'Staffing Schedule', !Chart title;
'Day', !X-Axis label;
'Employees', !Y-Axis label;
'Employees Required', !Legend 1;
REQUIRED, !Attribute 1;
'Employees On Duty', !Legend 2;
ONDUTY !Attribute 2;);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN4);
ENDCALC
END

298
C2-B10 Solving Problems with LINGO STAFFDEM | Case 4 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

REQUIRED (worker):
MON 20.00000
TUE 16.00000
WED 13.00000
THU 16.00000
FRI 19.00000
SAT 14.00000
SUN 12.00000

SOLUTION:
Global optimal solution found.
Objective value: 22.00000
Infeasibilities: 0.000000

Model Class: LP

IDEAL PLANNING PROGRAM:


MON Required: 20 Worker Start: 8 On duty: 20 Surplus: 0
TUE Required: 16 Worker Start: 2 On duty: 16 Surplus: 0
REQUIRED (worker):
WED Required: 13 Worker Start: 0 On duty: 13 Surplus: 0
MON Required:
THU 20.00000 16 Worker Start: 6 On duty: 16 Surplus: 0
TUE Required:
FRI
REQUIRED16.00000 19 Worker Start: 3
(worker): On duty: 19 Surplus: 0
WED
SAT 13.00000
MON 20.00000 14 Worker Start: 3
Required: On duty: 14 Surplus: 0
THU Required:
SUN
TUE 16.00000 12 Worker Start: 0
16.00000 On duty: 12 Surplus: 0
FRI
Worker 19.00000
total:
WED 13.00000 22
SAT 14.00000
THU 16.00000
❖ SOLUTION
SUN 19.00000
FRI 12.00000
SAT 14.00000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOLUTION:
SUN 12.00000
Global optimal solution found.
Objective value:
SOLUTION: 22.00000
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 22.00000
Model Class: LP
Infeasibilities: 0.000000
IDEAL Class:
Model PLANNING
LPPROGRAM:
MON Required: 20 Worker Start: 8 On duty: 20 Surplus: 0
TUE Required:
IDEAL 16 Worker
PLANNING PROGRAM: Start: 2 On duty: 16 Surplus: 0
WED Required:
MON Required: 20
13 Worker
Worker Start: 8
Start: 0 On
On duty:
duty: 13
20 Surplus:
Surplus: 0
0
THU Required:
TUE Required: 16
16 Worker
Worker Start: 2
Start: 6 On
On duty:
duty: 16
16 Surplus:
Surplus: 0
0
FRI Required: 19 Worker
WED Required: 13 Worker Start:
Start: 03 On
On duty:
duty: 19
13 Surplus:
Surplus: 0
0
SAT Required: 14 Worker
THU Required: 16 Worker Start:
Start: 63 On
On duty:
duty: 14
16 Surplus:
Surplus: 0
0
SUN Required: 12 Worker
FRI Required: 19 Worker Start:
Start: 30 On
On duty:
duty: 12
19 Surplus:
Surplus: 0
0
Worker total:
SAT Required: 14 Worker 22
Start: 3 On duty: 14 Surplus: 0
SUN Required: 12 Worker Start: 0 On duty: 12 Surplus: 0
Worker total: 22

299
C2-B10 Solving Problems with LINGO Decision | Case 5 | Schedule

GOAL

5 In this model, there are six jobs that can be done on one machine.The machine can only run
one job at a time. Each of the papers has an expiration date.

Resources / Job J1 J2 J3 J4 J5 J6

Blocks Due Date Day 9 3 6 5 7 2


• Product Mix
Machine Time hr 5 2 4 3 1 2
• Blend
• Finance Price $ 9.00 2.00 4.00 2.00 4.00 6.00
• Investments
• Diet If we can not complete a job by the due date, we will not. Our goal is to maximize the total
value of the selected papers.
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Staff
• Job
• Allocation

300
C2-B10 Solving Problems with LINGO Decision | Case 5 | Schedule

MODEL:
SETS:
! There are six jobs, each of which has a due date,
Processing time, value, and a flag variable Y indicating whether the job was selected;
JOB/1..6/: ! Each job has a...;
DD, ! Due date;
PT, ! Machine time;
VAL, ! Job price;
Y; ! 1 if job is selected;
ENDSETS
DATA:
VAL = 9 2 4 2 4 6;
DD = 9 3 6 5 7 2;
PT = 5 2 4 3 1 2;
ENDDATA
SUBMODEL MAX5:
! Maximize the total value of the works to be performed;
[OBJ] MAX = TVAL;
TVAL = @SUM( JOB: VAL * Y);
! For the selected works, we do on the due date of the request;
@FOR( JOB( J):
! Only jobs with previous expiration dates can precede job J, and work must be completed
according to their maturity dates;
[CON] @SUM( JOB( I)| DD( I) #LT# DD( J) #OR#( DD( I) #EQ# DD( J) #AND# I #LE# J): PT( I) * Y( I)) <= DD( J);
! Define the Y as binary variable;
@BIN( Y););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data Block;
@WRITE(" JOB PRICE:", @NEWLINE( 1));
@TABLE(VAL);
@WRITE(" ", @NEWLINE( 1), " DUE DATE:", @NEWLINE( 1));
@TABLE(DD);
@WRITE(" ", @NEWLINE( 1), " MACHINE TIME:", @NEWLINE( 1));
@TABLE(PT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX5);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( JOB(D)|Y(D) #GT# 0: ' Due date:',
@FORMAT(DD( D),'%1.0f'),' ', " Machine Time:",
@FORMAT(PT( D),'%1.0f'), ' Price: $',
@FORMAT(VAL(D) * Y(D), '%4.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

301
C2-B10 Solving Problems with LINGO Decision | Case 5 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

JOB PRICE:
1 9.000000
2 2.000000
3 4.000000
4 2.000000
5 4.000000
6 6.000000

DUE DATE:
1 9.000000
JOB PRICE:
2 3.000000
1
JOB 9.000000
PRICE:
3 6.000000
2
1 2.000000
9.000000
4 5.000000
3
2 4.000000
2.000000
5 7.000000
4 4.000000
3
6 2.000000
2.000000
5 2.000000
4 4.000000
6 4.000000
5 6.000000
MACHINE TIME:
6
1 6.000000
5.000000
DUE DATE:
2 2.000000
1
DUE 9.000000
3 DATE:
4.000000
2
1 3.000000
4 9.000000
3.000000
3
2 6.000000
5 3.000000
1.000000
4
3 5.000000
6 6.000000
2.000000
5 7.000000
4 5.000000
6 2.000000
5 7.000000
SOLUTION:
6 2.000000
Global optimal solution found.
MACHINE TIME:
Objective value: 19.00000
1 5.000000
MACHINE
Objective TIME:
bound: 19.00000
2 5.000000
1 2.000000
Infeasibilities: 0.000000
3 2.000000
2 4.000000
4 4.000000
3 3.000000
Model Class: MILP
5 1.000000
❖ SOLUTION
4 3.000000
6 1.000000
5 2.000000
IDEAL PLANNING PROGRAM (JOB SELECTED):
Below is the solution
6 2.000000
Due date:9 Machineachieved
Time:5 by LINGO
Price: with infeasibilities 0, and the detailed report that makes up the optimal
$9.00
SOLUTION:
Due date:7 Machine Time:1 Price: $4.00
Global
Due optimal
SOLUTION:
date:2 solution
Machine found.
Time:2 Price: $6.00
Global optimal solution found. 19.00000
Objective value:
Objective value:
Objective bound: 19.00000
19.00000
Infeasibilities:
Objective bound: 0.000000
19.00000
Infeasibilities: 0.000000
Model Class: MILP
Model Class: MILP
IDEAL PLANNING PROGRAM (JOB SELECTED):
Due date:9 Machine Time:5 Price: $9.00
IDEAL PLANNING PROGRAM (JOB SELECTED):
Due date:7 Machine Time:1 Price: $4.00
Due date:9 Machine Time:5 Price: $9.00
Due date:2 Machine Time:2 Price: $6.00
Due date:7 Machine Time:1 Price: $4.00
Due date:2 Machine Time:2 Price: $6.00

1
302 1
C2-B10 Solving Problems with LINGO. Northeast Tollway | Case 6 | Schedule

GOAL

6
The Northeast Tollway out of Chicago has a toll plaza with the following staffing demands during
each 24-hour period:

SEQ Hours Collectors Need

1 0 A.M. To 6 A.M. 2
Blocks
• Product Mix 2 6 A.M. To 10 A.M. 8

• Blend 3 10 A.M. To Noon 4


• Finance
4 Noon To 4 P.M. 3
• Investments
• Diet 5 4 P.M. To 6 P.M 6

• Aviation 6 6 P.M. To 10 P.M 5


• Transport
7 10 PM To 12 Midnight 3
• Agriculture
• Construction Each collector works four hours, is off one hour, and then works another four hours. A collector
• Refinery can be started at any hour. Assuming the objective is to minimize the number of collectors hired,
how many collectors should start work each hour?
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Shift
• Job
• Allocation

Source:
• Book 5
• Page 114

303
C2-B10 Solving Problems with LINGO. Northeast Tollway | Case 6 | Schedule

MODEL:
! 24 hour shift scheduling;
! Each shift is4 hours on, 1 hour off, 4 hours on;
SETS:
HOUR/1..24/: START, REQUIRED, ONDUTY;
ENDSETS
DATA:
REQUIRED = 2 2 2 2 2 2 8 8 8 8 4 4 3 3 3 3 6 6 5 5 5 5 3 3;
ENDDATA
SUBMODEL MIN6:
[OBJ] MIN = @SUM( HOUR(I): START(I));
! People on duty in hour I are those who started 9 or less hours earlier, but not 5;
@FOR( HOUR( I):
ONDUTY = @SUM(HOUR(J)|(J#LE#9)#AND#(J#NE#5): START(@WRAP((I-J+1),24)));
ONDUTY >= REQUIRED(I);
@GIN(START(I)));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" REQUIRED (worker):", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN6);
! Solution report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(" IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( HOUR(D) | START(D) #GT# 0: ' Hour:',
@FORMAT( HOUR( D),'3s'),', ', "Required:",
@FORMAT(REQUIRED(D),'%2.0f'), ' Collectors, ', 'Start work at:',
@FORMAT(START(D),'%2.0f'), ' On duty:',
@FORMAT(ONDUTY(D),'%2.0f'), ' Surplus:',
@FORMAT(ONDUTY(D) - REQUIRED(D),'%2.0f'),
@NEWLINE( 1));
@TEXT() = @WRITE(' Worker total:',35*' ',@FORMAT(OBJ,'%2.0f'),@NEWLINE(1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN6);
ENDCALC
END

304
C2-B10 Solving Problems with LINGO. Northeast Tollway | Case 6 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

REQUIRED (hr,worker):
1 2.000000
2 2.000000
REQUIRED
3 (worker):
2.000000
14 2.000000
2.000000
REQUIRED
25 (worker):
2.000000
2.000000
6
31 2.000000
2.000000
2.000000
472 8.000000
2.000000
2.000000
583 8.000000
2.000000
2.000000
694 8.000000
2.000000
2.000000
10 8.000000
5
711 2.000000
8.000000
4.000000
6
812 2.000000
8.000000
4.000000
7
913 8.000000
8.000000
3.000000
108 8.000000
8.000000
14 3.000000
119
15 8.000000
4.000000
3.000000
1210 3.000000
16 4.000000
8.000000
17
1311 6.000000
3.000000
4.000000
18
1412 6.000000
3.000000
4.000000
19
15 5.000000
13 3.000000
3.000000
20 5.000000
1614 3.000000
3.000000
21 5.000000
1715 6.000000
3.000000
22 5.000000
1816 6.000000
3.000000
23 3.000000
19 5.000000
17 3.000000
24 6.000000
20
18 5.000000
6.000000
21
19 5.000000
5.000000
SOLUTION:
Global
22 optimal solution found.
5.000000
20 5.000000
Objective
23 value:
21 3.000000
5.000000 16.00000
Objective
24 bound:
22 3.000000
5.000000 16.00000
SOLUTION
❖ Infeasibilities: 0.000000
23 3.000000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
SOLUTION:
24 3.000000
Model Class: MILP
Global optimal solution found.
Objective
SOLUTION: value:
IDEAL PLANNING PROGRAM: 16.00000
Objective
Global bound:
optimal solution found.
Hour: 2, Required: 2 Collectors, Start work at: 5 On duty: 6 Surplus: 16.00000
4
Infeasibilities:
Objective value: 2 Collectors, Start work at: 1 On duty: 6 Surplus:
Hour: 3, Required: 0.000000
16.00000
4
Hour: 4, Required:
Objective bound: 2 Collectors, Start work at: 1 On duty: 7 Surplus:16.00000 5
Hour:
Model 5, Required:
Class: MILP
Infeasibilities: 2 Collectors, Start work at: 1 On duty: 8 Surplus: 6
0.000000
Hour: 6, Required: 2 Collectors, Start work at: 1 On duty: 4 Surplus: 2
Hour: 12,
IDEAL Required:
PLANNING 4 Collectors, Start work at: 1 On duty: 4 Surplus: 0
PROGRAM:
Model Class: MILP
Hour: 14, Required: 3 Collectors, Start work at: 1 On duty: 3 Surplus: 0
Hour: 2, Required: 2 Collectors, Start work at: 5 On duty: 6 Surplus: 4
Hour: 15, Required: 3 Collectors, Start work at: 1 On duty: 3 Surplus: 0
Hour:
IDEAL 3, Required:
Required:
PLANNING
Hour: 16, 3 2Collectors,
PROGRAM:Collectors, Start
Start workwork
at: at:
2 On1 duty:
On duty: 6 Surplus:
4 Surplus: 1 4
Hour:
Hour: 4,
2, Required:
Required: 22 Collectors,
Collectors, Start
Start work
work at:
at: 15 On
On duty:
duty:
Hour: 17, Required: 6 Collectors, Start work at: 1 On duty: 6 Surplus: 076 Surplus:
Surplus: 54
Hour:
Hour: 5, Required:
3, Required:
Hour: 18, 2 Collectors,
Required:6 Collectors,
2 Collectors, Start
Start
Start work
workwork at: 1 On
at: 1at:On1duty: duty:
On duty: 8 Surplus:
6 Surplus:
6 Surplus: 0 64
Hour:
Hour: 6,
4, Required:
Required: 22 Collectors,
Worker total: Collectors, Start
Start work at:
work16at: 11 OnOn duty:
duty: 47 Surplus:
Surplus: 25
Hour:
Hour: 12,
5, Required:
Required: 42 Collectors,
Collectors, Start
Start work
work at:
at: 11 On
On duty:
duty: 48 Surplus:
Surplus: 06
Hour:
Hour: 14,
6, Required:
Required: 32 Collectors,
Collectors, Start
Start work
work at:
at: 11 On
On duty:
duty: 34 Surplus:
Surplus: 02
Hour: 15, Required:
Hour: 12, Required: 34 Collectors,
Collectors, Start
Start work at: 11
work at: On
On duty: 34
duty: Surplus:
Surplus: 00
Hour:
Hour: 16,
14, Required:
Required: 33 Collectors,
Collectors, Start
Start work
work at:
at: 21 On
On duty:
duty: 43 Surplus:
Surplus: 10
Hour:
Hour: 17,
15, Required:
Required: 63 Collectors,
Collectors, Start
Start work
work at:
at: 11 On
On duty:
duty: 63 Surplus:
Surplus: 00
Hour:
Hour: 18,
16, Required:
Required: 63 Collectors,
Collectors, Start
Start work
work at:
at: 12 On
On duty:
duty: 64 Surplus:
Surplus: 01
Worker total:
Hour: 17, Required: 6 Collectors, Start work at:161 On duty: 6 Surplus: 0
Hour: 18, Required: 6 Collectors, Start work at: 1 On duty: 6 Surplus: 0
Worker total: 16
1
1
1

305
C2-B10 Solving Problems with LINGO Hospital Daily Shift | Case 7 | Schedule

GOAL

7 A hospital works with a 24/7 customer service. The requirements are distributed according
which shift.

TIMETABLE
• SHIFT1 08-12 hr
Blocks • SHIFT2 12-16 hr
• SHIFT3 16-20 hr
• Product Mix • SHIFT4 20-00 hr
• SHIFT5 00-04 hr
• Blend • SHIFT6 04-08 hr
• Finance
Minimize the number of nurses at work for 24 Hours
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Shift
• Job
• Allocation

Source:
• Book 3
• Chapter 2.3.9

306
C2-B10 Solving Problems with LINGO Hospital Daily Shift | Case 7 | Schedule

MODEL:
SETS:
DAYS: REQUIRED, START, ONDUTY;
ENDSETS
DATA:
! Days required Timetable ;
DAYS, REQUIRED =
SHIFT1 50 ! 8-12;
SHIFT2 60 ! 12-16;
SHIFT3 50 ! 16-20 ;
SHIFT4 40 ! 20-0;
SHIFT5 30 ! 0-4 ;
SHIFT6 20; ! 4-8;
ENDDATA
SUBMODEL MIN7:
[OBJ] MIN = @SUM( DAYS( I): START( I));
@FOR( DAYS( J):
ONDUTY(J) = @SUM( DAYS( I) | I #LE# 5: START( @WRAP( J - I + 1, 6)));
ONDUTY(J) >= REQUIRED( J));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! data block;
@WRITE(" REQUIRED:", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN7);
! Solution report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(" IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( DAYS(D): ' ',
@FORMAT(DAYS( D),'-6s'),' ', "Required:",
@FORMAT(REQUIRED(D),'%3.0f'), ' Nurses ', 'Start:',
@FORMAT(START(D),'%3.0f'), ' On duty:',
@FORMAT(ONDUTY(D),'%3.0f'), ' Surplus: ',
@FORMAT(ONDUTY(D) - REQUIRED(D),'%2.0f'),
@NEWLINE( 1));
@WRITE(' Nurses total:',22*' ',@FORMAT(OBJ,'%2.0f'),@NEWLINE(1));
! Bar chart of required vs. actual staffing;
@CHARTBAR(
'Staffing Schedule', !Chart title;
'Day', !X-Axis label;
'Employees', !Y-Axis label;
'Employees Required', !Legend 1;
REQUIRED, !Attribute 1;
'Employees On Duty', !Legend 2;
ONDUTY !Attribute 2;);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN7);
ENDCALC
END

307
C2-B10 Solving Problems with LINGO Hospital Daily Shift | Case 7 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

REQUIRED NURSES PER SHIFT:


SHIFT1 50.00000
SHIFT2 60.00000
SHIFT3 50.00000
SHIFT4 40.00000
SHIFT5 30.00000
SHIFT6 20.00000

SOLUTION:
Global optimal solution found.
Objective value: 60.00000
Infeasibilities: 0.000000

Model Class: LP

IDEAL PLANNING PROGRAM:


SHIFT1 Required: 50 Nurses Start: 40 On duty: 50 Surplus: 0
SHIFT2 Required: 60 Nurses Start: 10 On duty: 60 Surplus: 0
REQUIRED NURSES PER
SHIFT3 Required: 50 SHIFT:
Nurses Start: 0 On duty: 50 Surplus: 0
SHIFT1 50.00000
SHIFT4 Required: 40 Nurses Start: 10 On duty: 60 Surplus: 20
SHIFT2 Required:
REQUIRED
SHIFT5 60.00000
NURSES PER
30 SHIFT:
Nurses Start: 0 On duty: 60 Surplus: 30
SHIFT3 Required:
SHIFT1
SHIFT6 50.00000 20 Nurses Start: 0 On duty: 20 Surplus: 0
SHIFT4 total:
SHIFT2
Nurses 40.00000
60.00000 60
SHIFT5 50.00000
SHIFT3 30.00000
SHIFT6 40.00000
SHIFT4
❖ SOLUTION 20.00000
SHIFT5 30.00000
Below
SHIFT6is the
SOLUTION: solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
20.00000
Global optimal solution found.
Objective value:
SOLUTION: 60.00000
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 60.00000
Model Class: LP
Infeasibilities: 0.000000

IDEAL Class:
Model PLANNING
LPPROGRAM:
SHIFT1 Required: 50 Nurses Start: 40 On duty: 50 Surplus: 0
SHIFT2PLANNING
IDEAL Required: 60 Nurses
PROGRAM: Start: 10 On duty: 60 Surplus: 0
SHIFT3 Required: 50 Nurses
SHIFT1 Start: 0
40 On duty: 50 Surplus: 0
SHIFT4 Required: 60
SHIFT2 40 Nurses Start: 10 On duty: 60 Surplus: 20
0
SHIFT5 Required: 50
SHIFT3 30 Nurses Start: 0 On duty: 60
50 Surplus: 30
0
SHIFT6 Required: 40
SHIFT4 20 Nurses Start: 0
10 On duty: 20
60 Surplus: 0
20
Nurses Required:
SHIFT5 total: 30 Nurses Start: 60
0 On duty: 60 Surplus: 30
SHIFT6 Required: 20 Nurses Start: 0 On duty: 20 Surplus: 0
Nurses total: 60

308
C2-B10 Solving Problems with LINGO Theme Park | Case 8 | Schedule

GOAL

8 The maintenance of a theme park operates 24 Hours a day. The work day is 8 hours a day
and shifts occur every 4 hours.

TIMETABLE
• SHIFT1 24-04 hr
• SHIFT2 04-08 hr
Blocks • SHIFT3 08-12 hr
• Product Mix • SHIFT4 12-16 hr
• SHIFT5 16-20 hr
• Blend • SHIFT6 20-24 hr
• Finance The maintenance supervisor wants to define the minimum number of employees at each
• Investments shift in order to meet the minimum needs required, thus determining the minimum number of
employees.
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Designation
• Shift
• Job
• Allocation

Source:
• Book 2
• Chapter 14.25

309
C2-B10 Solving Problems with LINGO Theme Park | Case 8 | Schedule

MODEL:
SETS:
DAYS: REQUIRED, START, ONDUTY;
ENDSETS
DATA:
! Days required Timetable;
DAYS , REQUIRED =
SHIFT1 90 ! 24-04;
SHIFT2 215 ! 04-08;
SHIFT3 250 ! 08-12;
SHIFT4 165 ! 12-16;
SHIFT5 300 ! 16-20;
SHIFT6 125; ! 20-24;
ENDDATA
SUBMODEL MIN8:
[OBJ] MIN = @SUM( DAYS( I): START( I));
@FOR( DAYS( J):
ONDUTY(J) = @SUM( DAYS( I) | I #LE# 5: START( @WRAP( J - I + 1, 6)));
ONDUTY(J) >= REQUIRED( J));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" REQUIRED WORKER PER SHIFT:", @NEWLINE( 1));
@TABLE(REQUIRED);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN8);
! Solution report;
@WRITE(" ", @NEWLINE( 1));
@WRITE(" IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( DAYS(D): ' ', DAYS( D),' ', "Required: ",
@FORMAT(REQUIRED(D),'%4.0f'), ' Worker ', 'Start:',
@FORMAT(START(D),'%4.0f'), ' On duty:',
@FORMAT(ONDUTY(D),'%4.0f'), ' Surplus: ',
@FORMAT(ONDUTY(D) - REQUIRED(D),'%3.0f'),
@NEWLINE( 1));
@WRITE(' Worker total:',24*' ',@FORMAT(OBJ,'%2.0f'),@NEWLINE(1));
! Bar chart of required vs. actual staffing;
@CHARTBAR(
'Staffing Schedule', !Chart title;
'Shift', !X-Axis label;
'Worker', !Y-Axis label;
'Worker Required', !Legend 1;
REQUIRED, !Attribute 1;
'Worker On Duty', !Legend 2;
ONDUTY !Attribute 2;);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN7);
ENDCALC
END

310
C2-B10 Solving Problems with LINGO Theme Park | Case 8 | Schedule

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

REQUIRED WORKER PER SHIFT:


SHIFT1 90.00000
SHIFT2 215.0000
SHIFT3 250.0000
SHIFT4 165.0000
SHIFT5 300.0000
SHIFT6 125.0000

SOLUTION:
Global optimal solution found.
Objective value: 300.0000
Infeasibilities: 0.000000

Model Class: LP

IDEAL PLANNING PROGRAM:


SHIFT1 Required: 90 Worker Start: 175 On duty: 175 Surplus: 85
SHIFT2 Required: 215 Worker Start: 125 On duty: 300 Surplus: 85
SHIFT3 Required: 250 Worker Start: 0 On duty: 300 Surplus: 50
REQUIRED WORKER PER165
SHIFT4 Required: SHIFT:
Worker Start: 0 On duty: 300 Surplus: 135
SHIFT1 Required:
SHIFT5 90.00000 300 Worker Start: 0 On duty: 300 Surplus: 0
SHIFT2
REQUIRED 215.0000
SHIFT6 Required:
WORKER PER125 Worker Start:
SHIFT: 0 On duty: 125 Surplus: 0
SHIFT3
Worker 250.0000
total:
SHIFT1 90.00000 300
SHIFT4
SHIFT2 165.0000
215.0000
SHIFT5
SHIFT3 300.0000
250.0000
SHIFT6 125.0000
❖ SOLUTION165.0000
SHIFT4
SHIFT5 300.0000
SOLUTION:
Below is the
SHIFT6 solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
125.0000
Global optimal solution found.
Objective
SOLUTION: value: 300.0000
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 300.0000
Model Class: LP
Infeasibilities: 0.000000

IDEAL
Model PLANNING
Class: LPPROGRAM:
SHIFT1 Required: 90 Worker Start: 175 On duty: 175 Surplus: 85
SHIFT2 Required: 215
IDEAL PLANNING PROGRAM:Worker Start: 125 On duty: 300 Surplus: 85
SHIFT3 Required:
SHIFT1 Required: 250
90 Worker
Worker Start:
Start: 0
175 On
On duty:
duty: 300
175 Surplus:
Surplus: 50
85
SHIFT4
SHIFT2 Required: 215 Worker
Required: 165 Worker Start:
Start: 0
125 On
On duty:
duty: 300
300 Surplus:
Surplus: 135
85
SHIFT5
SHIFT3 Required:
Required: 300
250 Worker
Worker Start:
Start: 00 On
On duty:
duty: 300
300 Surplus:
Surplus: 500
SHIFT6 Required: 125 Worker
SHIFT4 Required: 165 Worker Start:
Start: 00 On
On duty:
duty: 125
300 Surplus: 0
Surplus: 135
Worker
SHIFT5 total:
Required: 300 Worker Start: 3000 On duty: 300 Surplus: 0
SHIFT6 Required: 125 Worker Start: 0 On duty: 125 Surplus: 0
Worker total: 300

311
BLOCK 11 Block: CUTTING

How to optimize cuts of Paper, Iron or Wood Plates, Tubes, Carpe, etc., in a way to
minimize losses?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

312
C2-B11 Solving Problems with LINGO Paper Rolls | Case 1 | Cutting

GOAL

1 One company produces newsprint on rolls 1,5 meters wide and 70 meters long. The
customers request for the next month follow below:

Order Cutting Scheme

Blocks Items Rolls Length Width 1 2 3 4 5


• Product Mix 1 70 70 m 80 cm 1 1 - - -
• Blend
2 100 70 m 60 cm 1 - 2 1 -
• Finance
• Investments 3 120 70 m 50 cm - 1 1 3
• Diet
Useful Width m 1.4 1.3 1.2 1.1 1.5
• Aviation
Scraps cm 10 20 30 40 0
• Transport
• Agriculture
• Construction Elaborate the model of form to minimize the losses opting.

• Refinery The following is the block of data for use in the model:
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Scraps
• Scheme

Source:
• Book 1
• Page 178

313
C2-B11 Solving Problems with LINGO Paper Rolls | Case 1 | Cutting

MODEL:
SETS:
PRODUCT : SCRAPS, PRODUCE;
RESOURCE: ORDER;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, ORDER =
R80CM 70
R60CM 100
R50CM 120;
! Products attributes;
PRODUCT, SCRAPS =
CS1 10
CS2 20
CS3 30
CS4 40
CS5 0;
! Required CS1 CS2 CS3 CS4 CS5;
USAGE = 1 1 0 0 0 ! R80CM;
1 0 2 1 0 ! R60CM;
0 1 0 1 3; ! R50CM;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM( PRODUCT( p): SCRAPS( p) * PRODUCE( p));
! The order constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) = ORDER( r);
@GIN( PRODUCE););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" CUTTING SCHEME ( Rolls of 70m x 1.50 m ):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " SCRAPS ( cm ):", @NEWLINE( 1));
@TABLE(SCRAPS);
@WRITE(" ", @NEWLINE( 1), " ORDER ( Rolls: (70 m x 80, 60, 50 cm ):", @NEWLINE( 1));
@TABLE(ORDER);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
!Solution report;
@WRITE(" ", @NEWLINE( 1)," IDEAL CUTTING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(I) | PRODUCE(I) #GT# 0: ' Cutting Scheme:',
@FORMAT(PRODUCT( I),'-3s'), ' was used: ',
@FORMAT(PRODUCE(I),'%2.0f'), ' rollers x scraps p/roll: ',
@FORMAT(SCRAPS(I),'%4.1f'), ' cm = total scraps:',
@FORMAT(SCRAPS(I) * PRODUCE(I),'%6.1f'),' cm',
@NEWLINE( 1));
@WRITE(" TOTAL:", 16*' ',
@FORMAT(@SUM(PRODUCT(I): PRODUCE(I)),'%9.0f'), ' rollers', 40*' ',
@FORMAT(@SUM(PRODUCT(I): SCRAPS(I) * PRODUCE(I)),'%7.1f'),' cm',
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

314
C2-B11 Solving Problems with LINGO Paper Rolls | Case 1 | Cutting

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

CUTTING SCHEME ( Rolls of 70 m x 1.50 m ):


CS1 CS2 CS3 CS4 CS5
R80CM 1.000000 1.000000 0.000000 0.000000 0.000000
R60CM 1.000000 0.000000 2.000000 1.000000 0.000000
R50CM 0.000000 1.000000 0.000000 1.000000 3.000000

SCRAPS ( cm ):
CS1 10.00000
CS2 20.00000
CS3 30.00000
CS4 40.00000
CS5 0.000000

ORDER ( Rolls: (70 m x 80,60,50 cm ):


R80CM 70.00000
R60CM 100.0000
CUTTING SCHEME ( Rolls of 70 m x 1.50 m ):
R50CM 120.0000CS1 CS2 CS3 CS4 CS5
R80CM 1.000000
CUTTING 1.000000
SCHEME ( Rolls of 700.000000
m x 1.50 0.000000
m ): 0.000000
SOLUTION:
R60CM 1.000000 CS1 0.000000CS2 2.000000
CS3 1.000000CS4 0.000000CS5
Global
R80CM optimal
R50CM 0.000000
1.000000solution found.
1.000000
1.000000 0.000000
0.000000 1.000000
0.000000 3.000000
0.000000
Objective value:
R60CM 1.000000 0.000000 2.000000 1.000000 0.000000 1150.000
Objective
SCRAPS bound:
R50CM ( 0.000000
cm ): 1.000000 0.000000 1.000000 3.000000 1150.000
Infeasibilities:
CS1 10.00000 0.000000
CS2
SCRAPS (20.00000
cm ):
Model
CS1 Class:
CS3 MILP
30.00000
10.00000
CS4
CS2 40.00000
20.00000
IDEAL
CS3 CUTTING
CS5 PROGRAM:
0.000000
30.00000
Cutting
CS4 Scheme:CS1
40.00000 was used: 70 rollers x scraps p/roll: 10.0 cm = total scraps: 700.0 cm
Cutting
ORDER
CS5 ( Scheme:CS3
Rolls:
0.000000(70 was
m x used: 15 rollers
80,60,50 cm ): x scraps p/roll: 30.0 cm = total scraps: 450.0 cm
Cutting
R80CM Scheme:CS5
70.00000 was used: 40 rollers x scraps p/roll: 0.0 cm = total scraps: 0.0 cm
TOTAL:
R60CM 100.0000 125
ORDER ( Rolls: (70 m x 80,60,50 cm ):rollers 1150.0 cm
❖ SOLUTION
R50CM
R80CM 120.0000
70.00000
R60CM 100.0000
Below
R50CMis the
SOLUTION: solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
120.0000
Global optimal solution found.
Objective
SOLUTION: value: 1150.000
Objective bound:solution found.
Global optimal 1150.000
Infeasibilities:
Objective value: 0.000000
1150.000
Objective bound: 1150.000
Model Class: MILP
Infeasibilities: 0.000000

IDEAL
Model CUTTING PROGRAM:
Class: MILP
Cutting Scheme:CS1 was used: 70 rollers x scraps p/roll: 10.0 cm = total scraps: 700.0 cm
Cutting Scheme:CS3
IDEAL CUTTING was used: 15 rollers x scraps p/roll: 30.0 cm = total scraps: 450.0 cm
PROGRAM:
Cutting
Cutting Scheme:CS1 was
Scheme:CS5 was used:
used: 40
70 rollers
rollers xx scraps
scraps p/roll: 0.0 cm
p/roll: 10.0 cm == total
total scraps: 0.0 cm
scraps: 700.0 cm
TOTAL:
Cutting Scheme:CS3 was used: 15 rollers x scraps p/roll: 30.0 cm = total scraps: 450.0cm
125 rollers 1150.0 cm
Cutting Scheme:CS5 was used: 40 rollers x scraps p/roll: 0.0 cm = total scraps: 0.0 cm
TOTAL: 125 rollers 1150.0 cm

315 1

1
C2-B11 Solving Problems with LINGO Iron Bars | Case 2 | Cutting

GOAL

2 The company orders iron bars according to the order below and has 7 meters bars. To
minimize losses, the cut-off scheme was developed. The information used in the model is
described below:

Order Cutting Scheme ( bars 7 m)


Blocks
Bars m Total 1 2 3 4 5 6 7 8
• Product Mix
• Blend 50 2 100 2 0 1 1 1 0 3 0
• Finance
60 3 180 un 0 1 0 0 1 2 0 0
• Investments
• Diet 90 4 360 0 0 0 1 0 0 0 1
• Aviation
Useful m 4 3 2 6 5 6 6 4
• Transport
• Agriculture Scraps m 3 4 5 1 2 1 1 3

• Construction
Develop the model in a way to minimize losses.
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Scraps
• Scheme
• Bar

Source:
• Book 1
• Page 107

316
C2-B11 Solving Problems with LINGO Iron Bars | Case 2 | Cutting
MODEL:
SETS:
PRODUCT : SCRAPS, PRODUCE;
RESOURCE: ORDER;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, ORDER =
Item1_Bars_2m 50
Item2_Bars_3m 60
Item3_Bars_4m 90;
! Products attributes;
PRODUCT, SCRAPS =
CS1 3
CS2 4
CS3 5
CS4 1
CS5 2
CS6 1
CS7 1
CS8 3;
! Required CS1 CS2 CS3 CS4 CS5 CS6 CS7 CS8;
USAGE = 2 0 1 1 1 0 3 0 ! Item1_Bars_2m;
0 1 0 0 1 2 0 0 ! Item2_Bars_3m;
0 0 0 1 0 0 0 1; ! Item3_Bars_4m;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( PRODUCT( p): SCRAPS( p) * PRODUCE( p));
! The order constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) = ORDER( r);
@GIN( PRODUCE););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" CUTTING STOCK - Bar 6 m:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " SCRAPS (m):", @NEWLINE( 1));
@TABLE(SCRAPS);
@WRITE(" ", @NEWLINE( 1), " ORDER (Bars):", @NEWLINE( 1));
@TABLE(ORDER);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL CUTTING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( I) | PRODUCE( I) #GT# 0: ' Cutting: ',
@FORMAT(PRODUCT( I),'-3s'),', was used:',
@FORMAT(PRODUCE( I),'%3.0f'), ' bars x scraps p/bar:',
@FORMAT(SCRAPS( I),'%2.0f'), ' m = Scrap total:',
@FORMAT(SCRAPS( I) * PRODUCE(I),'%5.1f'),' m',
@NEWLINE( 1));
@WRITE(" TOTAL:", 11*' ',
@FORMAT(@SUM(PRODUCT(I): PRODUCE(I)),'%9.0f'), ' bars', 35*' ',
@FORMAT(@SUM(PRODUCT(I): SCRAPS(I) * PRODUCE(I)),'%8.1f'),' m',
@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

317
C2-B11 Solving Problems with LINGO Iron Bars | Case 2 | Cutting

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
CUTTING STOCK - Bar 6 m:
CS1 CS2 CS3 CS4 CS5 CS6 CS7 CS8
ITEM1_BARS_2M 2.000000 0.000000 1.000000 1.000000 1.000000 0.000000 3.000000 0.000000
ITEM2_BARS_3M 0.000000 1.000000 0.000000 0.000000 1.000000 2.000000 0.000000 0.000000
ITEM3_BARS_4M 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000

SCRAPS (m):
CS1 3.000000
CS2 4.000000
CS3 5.000000
CS4 1.000000
CUTTING STOCK - Bar 6 m:
CS5 2.000000
CS6 1.000000
CS1 CS2 CS3 CS4 CS5 CS6 CS7 CS8
CUTTING STOCK -
ITEM1_BARS_2M
CS7 1.000000 Bar 6 m: 0.000000 1.000000 1.000000 1.000000 0.000000 3.000000 0.000000
2.000000
ITEM2_BARS_3M
CS8 3.000000 0.000000CS1 1.000000
CS2 0.000000CS3 0.000000 CS4 1.000000CS5 2.000000 CS6 0.000000CS7 0.000000
CS8
ITEM1_BARS_2M 0.000000
ITEM3_BARS_4M 2.000000 0.000000
0.000000 0.000000
1.000000 1.000000
1.000000 0.000000
1.000000 0.000000
0.000000 0.000000
3.000000 1.000000
0.000000
ITEM2_BARS_3M
ORDER (Bars): 0.000000 1.000000 0.000000 0.000000 1.000000 2.000000 0.000000 0.000000
ITEM1_BARS_2M
ITEM3_BARS_4M 50.00000
0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
SCRAPS (m):
ITEM2_BARS_3M 60.00000
CS1 3.00000090.00000
ITEM3_BARS_4M
SCRAPS (m):
CS2 4.000000
CS1 5.000000
CS3 3.000000
SOLUTION:
CS2 1.000000
CS4
Global 4.000000
optimal solution found.
Objective value:
CS3 2.000000
CS5 5.000000 200.0000
Objective bound:
CS4 1.000000
1.000000 200.0000
CS6
Infeasibilities: 0.000000
CS5 1.000000
CS7 2.000000
CS6 Class:
CS8
Model 1.000000
3.000000
MILP
CS7 1.000000
CS8 CUTTING
IDEAL
ORDER 3.000000
(Bars): PROGRAM:
Cutting: CS4, was used:
ITEM1_BARS_2M 50 bars x scraps p/bar: 1 m = Scrap total: 50.0 m
50.00000
Cutting: CS6, was used: 30 bars x scraps p/bar: 1 m = Scrap total: 30.0 m
ORDER (Bars):
ITEM2_BARS_3M 60.00000
Cutting: CS8, was used: 40 bars x scraps p/bar: 3 m = Scrap total:120.0 m
❖ SOLUTION
ITEM1_BARS_2M
ITEM3_BARS_4M
TOTAL: 50.00000
90.00000
120 bars 200.0 m
ITEM2_BARS_3M 60.00000
Below is the solution
SOLUTION:
ITEM3_BARS_4M achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
90.00000
Global optimal solution found.
Objective
SOLUTION: value: 200.0000
Objective bound:solution found.
Global optimal 200.0000
Infeasibilities:
Objective value: 0.000000
200.0000
Objective bound: 200.0000
Model Class: MILP
Infeasibilities: 0.000000
1
IDEAL
Model CUTTING PROGRAM:
Class: MILP
Cutting: CS4, was used: 50 bars x scraps p/bar: 1 m = Scrap total: 50.0 m
Cutting: CS6, was
IDEAL CUTTING used: 30 bars x scraps p/bar: 1 m = Scrap total: 30.0 m
PROGRAM:
Cutting:
Cutting: CS4, was used:
CS8, was used: 40
50 bars
bars xx scraps
scraps p/bar:
p/bar: 31 mm == Scrap
Scrap total:120.0
total: 50.0mm
TOTAL:
Cutting: CS6, was used:12030 bars
bars x scraps p/bar: 1 m = Scrap total: 200.0
30.0mm
Cutting: CS8, was used: 40 bars x scraps p/bar: 3 m = Scrap total:120.0 m
TOTAL: 120 bars 200.0 m

318
C2-B11 Solving Problems with LINGO Cutting Plates | Case 3 | Cutting

GOAL

3 A company has ordered to cut boards according to the order below, using plates with 6
meters x 3 meters. To minimize the leftovers, the cutting scheme was elaborated. The
information used in the model is described below:

Order Cutting Scheme Plates 18m2 ( 6 x 3 )


Blocks
Plates L W m2 1 2 3 4 5 6 7
• Product Mix
• Blend 70 3 3 630 un 2 1 0 0 0 1 0

• Finance 60 4 3 720 un 0 0 1 0 0 0 1
• Investments
80 2 2 320 un 0 1 1 3 1 0 0
• Diet
Useful m2 18 13 16 12 4 9 12
• Aviation
• Transport Scraps m2 0 5 2 6 14 9 6

• Agriculture Elaborate the model in a way to minimize the leftovers by opting for the best cutting
• Construction scheme.

• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Scraps
• Scheme
• Plates

Source:
• Book 1
• Page 108

319
C2-B11 Solving Problems with LINGO Cutting Plates | Case 3 | Cutting

MODEL:
SETS:
PRODUCT : SCRAPS, PRODUCE;
RESOURCE: ORDER;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, ORDER =
Item1_Plates_3m_x_3m 70
Item2_Plates_4m_x_3m 60
Item3_Plates_2m_x_2m 80;
! Products attributes;
PRODUCT, SCRAPS =
CS1 0
CS2 5
CS3 2
CS4 6
CS5 14
CS6 9
CS7 6;
! Required CS1 CS2 CS3 CS4 CS5 CS6 CS7;
USAGE = 2 1 0 0 0 1 0 ! Item1_Plates_3m_x_3m;
0 0 1 0 0 0 1 ! Item2_Plates_4m_x_3m;
0 1 1 3 1 0 0; ! Item3_Plates_2m_x_2m;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM( PRODUCT( p): SCRAPS( p) * PRODUCE( p));
! The order constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) = ORDER( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" CUTTING STOCK - Plates 6m x 3m:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " SCRAPS (un):", @NEWLINE( 1));
@TABLE(SCRAPS);
@WRITE(" ", @NEWLINE( 1), " ORDER (Plates):", @NEWLINE( 1));
@TABLE(ORDER);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN3);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL CUTTING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(I) | PRODUCE(I) #GT# 0: ' Cutting: ',
@FORMAT(PRODUCT( I),'-3s'),', was used:',
@FORMAT(PRODUCE( I),'%3.0f'), ' plates x scraps p/plates:',
@FORMAT(SCRAPS( I),'%2.0f'), ' un = total scraps:',
@FORMAT(SCRAPS( I) * PRODUCE( I),'%4.0f'),' un',
@NEWLINE( 1));
@WRITE(" TOTAL:", 11*' ',
@FORMAT(@SUM(PRODUCT(I): PRODUCE(I)),'%9.0f'), ' plates', 40*' ',
@FORMAT(@SUM(PRODUCT(I): SCRAPS(I) * PRODUCE(I)),'%8.0f'),' un',
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

320
C2-B11 Solving Problems with LINGO Cutting Plates | Case 3 | Cutting

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

CUTTING STOCK - Plates 6 m x 3 m:


CS1 CS2 CS3 CS4 CS5 CS6
ITEM1_PLATES_3M_X_3M 2.000000 1.000000 0.000000 0.000000 0.000000 1.000000
ITEM2_PLATES_4M_X_3M 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000
ITEM3_PLATES_2M_X_2M 0.000000 1.000000 1.000000 3.000000 1.000000 0.000000

CS7
ITEM1_PLATES_3M_X_3M 0.000000
ITEM2_PLATES_4M_X_3M 1.000000
ITEM3_PLATES_2M_X_2M 0.000000
CUTTING STOCK - Plates 6 m x 3 m:
SCRAPS (un): CS1 CS2 CS3 CS4 CS5 CS6
CUTTING STOCK - Plates 6 m x 3 m:
ITEM1_PLATES_3M_X_3M
CS1 0.000000 2.000000 1.000000 0.000000 0.000000 0.000000 1.000000
CS1 CS2 CS3 CS4 CS5 CS6
ITEM2_PLATES_4M_X_3M
CS2 5.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000
ITEM1_PLATES_3M_X_3M 2.000000 1.000000 0.000000 0.000000 0.000000 1.000000
ITEM3_PLATES_2M_X_2M
CS3 2.000000 0.000000 1.000000 1.000000 3.000000 1.000000 0.000000
ITEM2_PLATES_4M_X_3M 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000
CS4 6.000000
ITEM3_PLATES_2M_X_2M 0.000000 1.000000 1.000000 3.000000 1.000000 0.000000
CS5 14.00000 CS7
ITEM1_PLATES_3M_X_3M
CS6 9.000000 0.000000
ITEM2_PLATES_4M_X_3M CS7
1.000000
CS7 6.000000
ITEM1_PLATES_3M_X_3M 0.000000
ITEM3_PLATES_2M_X_2M 0.000000
ITEM2_PLATES_4M_X_3M 1.000000
ORDER (plates):
ITEM3_PLATES_2M_X_2M 0.000000
SCRAPS (un):
ITEM1_PLATES_3M_X_3M 70.00000
CS1 0.000000
ITEM2_PLATES_4M_X_3M 60.00000
SCRAPS (un):
CS2 5.000000
ITEM3_PLATES_2M_X_2M 80.00000
CS1 0.000000
CS3 2.000000
CS2 5.000000
CS4 6.000000
SOLUTION:
CS3
CS5 2.000000
14.00000
Global optimal solution found.
CS4
CS6 6.000000
9.000000
Objective value: 160.0000
CS5
CS7 14.00000
6.000000
Objective bound: 160.0000
CS6 9.000000
Infeasibilities: 0.000000
CS7 (plates):
ORDER 6.000000
ITEM1_PLATES_3M_X_3M 70.00000
ORDER
Model (plates):
ITEM2_PLATES_4M_X_3M
Class:MILP 60.00000
❖ SOLUTION
ITEM1_PLATES_3M_X_3M 70.00000
ITEM3_PLATES_2M_X_2M 80.00000
IDEAL CUTTING PROGRAM: 60.00000
ITEM2_PLATES_4M_X_3M
Below is the solution
ITEM3_PLATES_2M_X_2M
SOLUTION:
Cutting: CS1, achieved
was used: by LINGO
80.00000
35 plates x with infeasibilities
scraps p/plates: 0, 0and
unthe= detailed
total report that makes
scraps: 0 un up the optimal
Global optimal solution found.
Cutting: CS3, was used: 60 plates x scraps p/plates: 2 un = total scraps: 120 un
ObjectiveCS4,
SOLUTION:
Cutting: value:
was used: 7 plates x scraps p/plates: 6 un = 160.0000
total scraps: 40 un
Objective
Global
TOTAL: bound:solution102
optimal found.
plates 160.0000
160 un
Infeasibilities:
Objective value: 0.000000
160.0000
Objective bound: 160.0000
Infeasibilities: 0.000000
Model Class:MILP

IDEAL CUTTING
Model PROGRAM:
Class:MILP
Cutting: CS1, was used: 35 plates x scraps p/plates: 0 un = total scraps: 0 un
Cutting:
IDEAL CS3, was
CUTTING used: 60
PROGRAM: plates x scraps p/plates: 2 un = total scraps: 120 un
Cutting: CS1, was used:
Cutting: CS4, was 7
used: 35 plates
plates xx scraps
scraps p/plates:
p/plates:6 0unun = = total
totalscraps:
scraps: 40 0unun
TOTAL: 102
Cutting: CS3, was used: 60 plates
plates x scraps p/plates: 2 un = total scraps:160 120unun
Cutting: CS4, was used: 7 plates x scraps p/plates: 6 un = total scraps: 40 un
TOTAL: 102 plates 160 un

321
C2-B11 Solving Problems with LINGO Plates of Wood | Case 4 | Cutting

GOAL

4 A distributor of stocked wood veneer stores in the standard length of 25 meters, which can
be cut into lengths that vary according to the customer's need.

This distributor has just received an order of 5000 plates of 7 meters, 1200 plates of 9
meters and 300 plates of 11 meters.

Blocks The distributor's manager identified six ways to cut the 25 meters boards to meet this
request. The six cuts are summarized in the cut stock.
• Product Mix
• Blend One possibility would be to cut the 25 meters plate into three 7 meters pieces and not cut 9
meters and 11 meters. The information used in the model is described below:
• Finance
• Investments
Order Cutting Scheme ( plates 25 m )
• Diet
Plates Length Total 1 2 3 4 5 6
• Aviation
• Transport 5000 7 35000 un 3 2 2 1 0 0

• Agriculture 1200 9 10800 un 0 1 0 2 1 0


• Construction
300 11 3300 un 0 0 1 0 1 2
• Refinery
Useful Length m 21 23 25 25 20 22
• Schedule
• Cutting Scraps m 4 2 0 0 5 3

• Metallurgy It is important to note that 21 m will be cut, and there will be a loss of 4 m of plywood. The
• Fertilizer manager wants to fulfill the request by using as few 25 m plates as possible.

• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Scraps
• Scheme
• Plates

Source:
• Book 2
• Page 243

322
C2-B11 Solving Problems with LINGO Plates of Wood | Case 4 | Cutting

MODEL:
SETS:
PRODUCT : SCRAPS, PRODUCE;
RESOURCE: ORDER;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, ORDER =
Item1_Plates__7m_long 5000
Item2_Plates__9m_long 1200
Item3_Plates_11m_long 300;
! Products attributes;
PRODUCT, SCRAPS =
CS1 4
CS2 2
CS3 0
CS4 0
CS5 5
CS6 3;
! Required CS1 CS2 CS3 CS4 CS5 CS6;
USAGE = 3 2 2 1 0 0 ! Item1_Plates__7m_long;
0 1 0 2 1 0 ! Item2_Plates__9m_long;
0 0 1 0 1 2; ! Item3_Plates_11m_long;
ENDDATA
SUBMODEL MIN4:
[OBJ] MIN = @SUM( PRODUCT( p): SCRAPS( p) * PRODUCE( p));
! The order constraints;
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) = ORDER( r);
@GIN(PRODUCE));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" CUTTING STOCK - Plates 25m Long:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " SCRAPS (m):", @NEWLINE( 1));
@TABLE(SCRAPS);
@WRITE(" ", @NEWLINE( 1), " ORDER (Plates):", @NEWLINE( 1));
@TABLE(ORDER);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN4);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL CUTTING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(I) | PRODUCE(I) #GT# 0: ' Cutting: ',
@FORMAT(PRODUCT( I),'-3s'),', was used:',
@FORMAT(PRODUCE(I),'%5.0f'), ' plates x scraps p/plates:',
@FORMAT(SCRAPS(I),'%2.0f'), 'm = total scraps:',
@FORMAT(SCRAPS(I) * PRODUCE(I),'%5.0f'),' m',
@NEWLINE( 1));
@WRITE(" TOTAL:", 16*' ',
@FORMAT(@SUM(PRODUCT(I): PRODUCE(I)),'%6.0f'), ' plates', 41*' ',
@FORMAT(@SUM(PRODUCT(I): SCRAPS(I) * PRODUCE(I)),'%6.0f'),' m',
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN4);
ENDCALC
END

323
C2-B11 Solving Problems with LINGO Plates of Wood | Case 4 | Cutting

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

CUTTING STOCK - Plates 25m Long:


CS1 CS2 CS3 CS4 CS5 CS6
ITEM1_PLATES__7M_LONG 3.000000 2.000000 2.000000 1.000000 0.000000 0.000000
ITEM2_PLATES__9M_LONG 0.000000 1.000000 0.000000 2.000000 1.000000 0.000000
ITEM3_PLATES_11M_LONG 0.000000 0.000000 1.000000 0.000000 1.000000 2.000000

SCRAPS (m):
CS1 4.000000
CS2 2.000000
CS3 0.000000
CS4 0.000000
CS5 5.000000
CS6 3.000000

ORDER (Plates):
ITEM1_PLATES__7M_LONG 5000.000
CUTTING STOCK - Plates 25m
ITEM2_PLATES__9M_LONG Long:
1200.000
ITEM3_PLATES_11M_LONG CS1
300.0000 CS2 CS3 CS4 CS5 CS6
CUTTING STOCK - Plates 25m
ITEM1_PLATES__7M_LONG Long: 2.000000 2.000000 1.000000 0.000000 0.000000
3.000000
ITEM2_PLATES__9M_LONG 0.000000 CS1 1.000000
CS2 0.000000 CS3 2.000000 CS4 1.000000CS5 0.000000CS6
SOLUTION:
ITEM1_PLATES__7M_LONG 3.000000 2.000000 2.000000 1.000000 0.000000 0.000000
ITEM3_PLATES_11M_LONG
Global 0.000000 0.000000 1.000000 0.000000 1.000000 2.000000
optimal solution 0.000000
found.
ITEM2_PLATES__9M_LONG 1.000000 0.000000 2.000000 1.000000 0.000000
Objective value:
ITEM3_PLATES_11M_LONG 0.000000 0.000000 1.000000 0.000000 1.000000 2.000000 5075.000
SCRAPS (m):
Objective bound: 5075.000
CS1 4.000000
Infeasibilities: 0.000000
SCRAPS (m):
CS2 2.000000
CS1
CS3 4.000000
0.000000
Model
CS2 Class:MILP
CS4 2.000000
0.000000
CS3
CS5 0.000000
5.000000PROGRAM:
IDEAL
CS4 CUTTING
0.000000
CS6 3.000000
Cutting: CS1, was used: 668 plates x scraps p/plates: 4m = total scraps: 2672 m
CS5 5.000000
Cutting: CS2, was used: 1200 plates x scraps p/plates: 2m = total scraps: 2400 m
CS6 3.000000
ORDER (Plates):
Cutting: CS3, was used: 298 plates x scraps p/plates: 0m = total scraps: 0 m
ITEM1_PLATES__7M_LONG
Cutting: CS6, was used: 5000.000
1 plates x scraps p/plates: 3m = total scraps: 3 m
ORDER (Plates):
ITEM2_PLATES__9M_LONG 1200.000
SOLUTION
❖ TOTAL:
ITEM1_PLATES__7M_LONG 2167 plates 5075 m
ITEM3_PLATES_11M_LONG 5000.000
300.0000
ITEM2_PLATES__9M_LONG 1200.000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
ITEM3_PLATES_11M_LONG 300.0000
SOLUTION:
Global optimal solution found.
SOLUTION:
Objective value: 5075.000
Global optimal
Objective solution found.
bound: 5075.000
Objective value:
Infeasibilities: 5075.000
0.000000
Objective bound: 5075.000
Infeasibilities:
Model Class:MILP 0.000000

Model
IDEAL Class:MILP
CUTTING PROGRAM:
Cutting: CS1, was used: 668 plates x scraps p/plates: 4m = total scraps: 2672 m
IDEAL CUTTING
Cutting: CS2, PROGRAM:
was used: 1200 plates x scraps p/plates: 2m = total scraps: 2400 m
Cutting:
Cutting: CS3, was
CS1, was used:
used: 668
298 plates
plates xx scraps
scraps p/plates:
p/plates: 4m
0m == total
total scraps:
scraps: 26720 mm
Cutting:
Cutting: CS6, was used:
CS2, was used: 12001 plates
plates xx scraps
scraps p/plates:
p/plates: 2m
3m == total
total scraps:
scraps: 24003 mm
Cutting:
TOTAL: CS3, was used: 298
2167 plates
plates x scraps p/plates: 0m = total scraps: 0
5075 mm
Cutting: CS6, was used: 1 plates x scraps p/plates: 3m = total scraps: 3 m
TOTAL: 2167 plates 5075 m

324
1
C2-B11 Solving Problems with LINGO Carpet Cut | Case 5 | Cutting

GOAL

5 Carpe International has received an application to provide carpets for a new office building,
as per the quantities below:

Type T1 T2

Blocks Rolls Size m 1000 x 14 1000 x 18


• Product Mix
Cost $ 1,000.00 1,400.00
• Blend
• Finance Order Cutting Scheme

• Investments Item Rolls Length Width 1 2 3 4 5 6


• Diet
1 40 4000 4 m 3 1 0 1 0 1
• Aviation
• Transport 2 200 20000 9 m 0 1 0 1 1 0

• Agriculture 3 90 9000 12 m 0 0 1 0 0 1
• Construction
Useful Width m 12 13 12 17 18 16
• Refinery
Scraps m 2 1 2 1 0 2
• Schedule
• Cutting
The company can purchase two types of carpet rolls, which must be cut to fit the order. One
• Metallurgy of the types has:
• Fertilizer
• 14 meters wide by 100 meters long and costs $1000 per roll; and the other
• Clinic
• 18 meters wide by 100 meters long and costs $1400 per roll.
• Classic
• Dynamic The manager wants to determine how many rolls each type should buy and how they should
be cut so as to have the lowest possible cost.
• Logistics
• Energy
• Assembly Line

Keywords:
• Scraps
• Scheme
• Carpet
• Rolls

Source:
• Book 2
• Page 244

325
C2-B11 Solving Problems with LINGO Carpet Cut | Case 5 | Cutting
MODEL:
SETS:
PRODUCT : SCRAPS, COST, PRODUCE;
RESOURCE: ORDER;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, ORDER =
Item1_4000m_x__4m 40
Item2_20000m_x__9m 200
Item3_9000m_x_12m 90;
! Products attributes;
PRODUCT, SCRAPS, COST =
CS1 2 1000
CS2 1 1000
CS3 2 1000
CS4 1 1400
CS5 0 1400
CS6 2 1400;
! Required CS1 CS2 CS3 CS4 CS5 CS6;
USAGE = 3 1 0 0 1 2 ! Item1_4000 m_x__4 m;
0 1 0 2 0 1 ! Item2_20000 m_x__9 m;
0 0 1 0 1 0; ! Item3_9000 m_x_12 m;
ENDDATA
SUBMODEL MIN5:
[OBJ] MIN = @SUM( PRODUCT( p): SCRAPS( p) * PRODUCE( p));
@FOR( RESOURCE( r):
[CON] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) = ORDER( r); );
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
! Data block;
@WRITE(" CUTTING SCHEME: ", @NEWLINE( 1));
@WRITE(" CS1 .. CS3 (Rolls: 100 m x 14 m)", " " , " CS4 .. CS6 (Rolls: 100 m x 18 m)", @NEWLINE( 2));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " COST per rolls:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SCRAPS ( m ):", @NEWLINE( 1));
@TABLE(SCRAPS);
@WRITE(" ", @NEWLINE( 1), " ORDER ( Rolls ):", @NEWLINE( 1));
@TABLE(ORDER);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN5);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL CUTTING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(I) | PRODUCE(I) #GT# 0: ' Cutting Scheme:',
@FORMAT(PRODUCT( I),'-3s'),', was used:',
@FORMAT(PRODUCE(I), '%3.0f'),' rollers x ', 'scraps p/roll:',
@FORMAT(SCRAPS(I),'%3.0f'), ' m = Total ',
@FORMAT(SCRAPS(I) * PRODUCE(I),'%3.0f'),' m',
@NEWLINE( 1));
@WRITE(' TOTAL SCRAPS:', 53*' ',@FORMAT(@SUM(PRODUCT(I):SCRAPS(I) * PRODUCE(I)),'%9.0f'),' m',@NEWLINE(2));
@WRITEFOR( PRODUCT(I) | PRODUCE(I) #GT# 0: ' Cutting Scheme:',
@FORMAT(PRODUCT( I),'-3s'),', was used:',
@FORMAT(PRODUCE(I), '%3.0f'),' rollers x Cost: $',
@FORMAT(COST(I),'%7.2f'), ' = Total: $',
@FORMAT(COST(I) * PRODUCE(I),'%9.2f'),
@NEWLINE( 1));
@WRITE(' TOTAL COST:', 56*' ','$', @FORMAT(@SUM(PRODUCT(I):COST(I) * PRODUCE(I)),'%9.2f'),@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN5);
ENDCALC
END

326
C2-B11 Solving Problems with LINGO Carpet Cut | Case 5 | Cutting

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

CUTTING SCHEME:
CS1 .. CS3 (Rolls: 100 m x 14 m)
CS4 .. CS6 (Rolls: 100 m x 18 m)

CS1 CS2 CS3 CS4 CS5 CS6


ITEM1_4000M_X__4M 3.000000 1.000000 0.000000 0.000000 1.000000 2.000000
ITEM2_20000M_X__9M 0.000000 1.000000 0.000000 2.000000 0.000000 1.000000
ITEM3_9000M_X_12M 0.000000 0.000000 1.000000 0.000000 1.000000 0.000000

COST per rolls:


CS1 1000.000
CS2 1000.000
CS3 1000.000
CS4 1400.000
CS5 1400.000
CS6 1400.000

SCRAPS ( m ):
CS1 2.000000
CS2 1.000000
CS3 2.000000
CS4 1.000000
CS5 0.000000
CS6 2.000000

ORDER ( Rolls ):
ITEM1_4000M_X__4M 40.00000
ITEM2_20000M_X__9M 200.0000
ITEM3_9000M_X_12M 90.00000

SOLUTION:
Global optimal solution found.
Objective value: 200.0000
❖ SOLUTION
Objective bound: 200.0000
Infeasibilities: 0.000000
Below is the
Extended solution
solver achieved by LINGO with infeasibilities 0, and
steps: 0 the detailed report that makes up the optimal
Total solver iterations: 0
SOLUTION:
Global optimal solution found. 1
Objective value: 200.0000
Objective bound: 200.0000
Infeasibilities: 0.000000

IDEAL CUTTING PROGRAM:


Cutting Scheme:CS3, was used: 50 rollers x scraps p/roll: 2 m = Total 100 m
Cutting Scheme:CS4, was used:100 rollers x scraps p/roll: 1 m = Total 100 m
Cutting Scheme:CS5, was used: 40 rollers x scraps p/roll: 0 m = Total 0 m
TOTAL SCRAPS: 200 m

Cutting Scheme:CS3, was used: 50 rollers x Cost: $1000.00 = Total: $ 50000.00


Cutting Scheme:CS4, was used:100 rollers x Cost: $1400.00 = Total: $140000.00
Cutting Scheme:CS5, was used: 40 rollers x Cost: $1400.00 = Total: $ 56000.00
TOTAL COST: $246000.00

327
C2-B11 Solving Problems with LINGO CoolDot Cutting Stock | Case 6 | Cutting

GOAL
COOLDOT Appliance Company produces a wide range of large household appliances such as

6 refrigerators and stoves. A significant portion of the raw material cost is due to the purchase of
sheet steel.

Currently, sheet steel is purchased in coils in three different widths: 72 inches, 48 inches, and 36
inches.

Blocks In the manufacturing process, eight different widths of sheet steel are required: 60, 56, 42, 38, 34,
24, 15, and 10 inches.
• Product Mix
• Blend All uses require the same quality and thickness of steel. A continuing problem is trim waste. For
example, one way of cutting a 72-inch width coil is to slit it into one 38-inch width coil and two 15-
• Finance
inch width coils.
• Investments
There will then be a 4-inch coil of trim waste that must be scrapped.
• Diet
• Aviation The cost per linear foot of the three different raw material widths are 15 cents for the 36-inch
width, 19 cents for the 48-inch width, and 28 cents for the 72-inch width.
• Transport
• Agriculture Simple arithmetic reveals the costs per inch x foot of the three widths are 15/36 = 0.416667 cents/
(inch x foot), 0.395833 cents/(inch x foot), and 0.388889 cents/(inch x foot) for the 36, 48, and 72-
• Construction inch widths, respectively.
• Refinery
The coils may be slit in any feasible solution. The possible cutting patterns for efficiently slitting the
• Schedule three raw material widths are tabulated below.
• Cutting
For example, pattern C4 corresponds to cutting a 72-inch width coil into one 24-inch width and
• Metallurgy four 10-inch widths with 8-inch left over as trim waste.
• Fertilizer
The lengths of the various widths required in this planning period are:
• Clinic
The raw material availabilities this planning period are 1600 Ft. of the 72-inch coils and 10000 Ft.
• Classic
each of the 48-inch and 36-inch widths.
• Dynamic
How many feet of each pattern should be cut to minimize cost while satisfying the requirements of
• Logistics
the various widths?
• Energy
Can you predict beforehand the amount of 36-inch material used?
• Assembly Line

Keywords:
• Scraps
• Scheme
• Waste

Source:
• Book 5
• Page 119

328
C2-B11 Solving Problems with LINGO CoolDot Cutting Stock | Case 6 | Cutting

MODEL:
SETS:
! Each raw material has a: RWDTH=Raw material width, T=Total used, W=Waste total, C=Cost per unit,
WCOST=Waste cost, S= Supply available;
RM: RWDTH,T, W, C, WCOST, S;
! Each Finished good has a: FWDTH Width, REQ = units Required, X=Xtra produced;
FG: FWDTH, REQ, X;
PATTERN: USERM, WASTE, AMT;
PXF( PATTERN, FG): NUM;
ENDSETS
DATA:
! Finished good attributes;
FG, FWDTH, REQ =
F60 60 500
F56 56 400
F42 42 300
F38 38 450
F34 34 350
F24 24 100
F15 15 800
F10 10 1000;
! Raw material attributes;
RM, RWDTH, C, WCOST, S =
R72 72 0.28 0.00388889 1600
R48 48 0.19 0.00395833 10000
R36 36 0.15 0.00416667 10000;
! Index of R.M. that each pattern uses;
USERM = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3;
! How many of each F.G. are in each R.M. pattern;
!.................................. Number to Cut of the Required Width............................. Pattern;
! 60" 56" 42" 38" 34" 24" 15" 10";
NUM= 1 0 0 0 0 0 0 1 !A1-72";
0 1 0 0 0 0 1 0 !A2-72";
0 1 0 0 0 0 0 1 !A3-72";
0 0 1 0 0 1 0 0 !A4-72";
0 0 1 0 0 0 2 0 !A5-72";
0 0 1 0 0 0 1 1 !A6-72";
0 0 1 0 0 0 0 3 !A7-72";
0 0 0 1 1 0 0 0 !A8-72";
0 0 0 1 0 1 0 1 !A9-72";
0 0 0 1 0 0 2 0 !B0-72";
0 0 0 1 0 0 1 1 !B1-72";
0 0 0 1 0 0 0 3 !B2-72";
0 0 0 0 2 0 0 0 !B3-72";
0 0 0 0 1 1 0 1 !B4-72";
0 0 0 0 1 0 2 0 !B5-72";
0 0 0 0 1 0 1 2 !B6-72";
0 0 0 0 1 0 0 3 !B7-72";
0 0 0 0 0 3 0 0 !B8-72";
0 0 0 0 0 2 1 0 !B9-72";
0 0 0 0 0 2 0 2 !C0-72";
0 0 0 0 0 1 3 0 !C1-72";
0 0 0 0 0 1 2 1 !C2-72";
0 0 0 0 0 1 1 3 !C3-72";
0 0 0 0 0 1 0 4 !C4-72";
0 0 0 0 0 0 4 1 !C5-72";
0 0 0 0 0 0 3 2 !C6-72";
0 0 0 0 0 0 2 4 !C7-72";
0 0 0 0 0 0 1 5 !C8-72";
0 0 0 0 0 0 0 7 !C9-72";
0 0 1 0 0 0 0 0 !D0-48";
0 0 0 1 0 0 0 1 !D1-48";
0 0 0 0 1 0 0 1 !D2-48";
0 0 0 0 0 2 0 0 !D3-48";
0 0 0 0 0 1 1 0 !D4-48";
0 0 0 0 0 1 0 2 !D5-48";
0 0 0 0 0 0 3 0 !D6-48";
0 0 0 0 0 0 2 1 !D7-48";
0 0 0 0 0 0 1 3 !D8-48";
0 0 0 0 0 0 0 4 !D9-48";
0 0 0 0 1 0 0 0 !E0-36";
0 0 0 0 0 1 0 1 !E1-36";
0 0 0 0 0 0 2 0 !E2-36";
0 0 0 0 0 0 1 2 !E3-36";
0 0 0 0 0 0 0 3; !E4-36";
ENDDATA

329
C2-B11 Solving Problems with LINGO CoolDot Cutting Stock | Case 6 | Cutting

SUBMODEL MIN6:
[OBJ] MIN = TPROFIT;
TPROFIT = @SUM(RM(I): C(I)*T(I) );
! Compute total cost of waste;
TOTWASTE = @SUM( RM(I): WCOST(I)*W(I) );
@FOR( RM( I):
T( I) = @SUM( PATTERN( K)| USERM(K) #EQ# I: AMT( K));
! Raw material supply constraints;
T(I) <= S(I););
! Must produce at least amount required of each F.G.;
@FOR( FG(J):
@SUM(PATTERN(K): NUM(K,J)*AMT(K)) = REQ(J) + X(J););
! Turn this on to get integer solutions;
@FOR( PATTERN(K): @GIN(AMT(K)));
! Waste related computations;
! Compute waste associated with each pattern;
@FOR( PATTERN(K):
WASTE(K) = RWDTH(USERM(K)) - @SUM(FG(J): FWDTH(J)*NUM(K,J)););
! Waste for each R.M. in this solution;
@FOR( RM( I):
W(I) = @SUM( PATTERN( K)| USERM(K) #EQ# I: WASTE(K)*AMT( K)););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Fixed line length
@SET('LINLEN',120);
! Precision in digits for standard solution reports;
@SET('PRECIS',6);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" CUTTING SCHEME:", @NEWLINE( 1));
@TABLE(NUM);
@WRITE(" ", @NEWLINE( 1), " WHIDTH (inches ):", @NEWLINE( 1));
@TABLE(FWDTH);
@WRITE(" ", @NEWLINE( 1), " PROFIT ( Waste ):", @NEWLINE( 1));
@TABLE(C);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE PROVIDER( Waste ):", @NEWLINE( 1));
@TABLE(S);
@WRITE(" ", @NEWLINE( 1), " REQUIRED ( feet ):", @NEWLINE( 1));
@TABLE(REQ);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN6);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL CUTTING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RM(J): ' Raw Width:',
@FORMAT(RWDTH(J),'%3.0f'),' inches, used: ',
@FORMAT(T(J),'%4.0f'),' waste x unity cost: $',
@FORMAT(C(J),'%4.2f'), ' = Total: $',
@FORMAT(T(J) * C(J),'%7.3f'),
@NEWLINE( 1));
@WRITE(" TOTAL:", 1*' ', @FORMAT(@SUM(RM(J): RWDTH(J)),'%6.0f'), ' inches', 8*' ',
@FORMAT(@SUM(RM(J): T(J)),'%4.0f'), ' waste',30*' ','$',
@FORMAT(@SUM(RM(J): T(J) * C(J)),'%7.3f'),
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN6);
ENDCALC
END

330
C2-B11 Solving Problems with LINGO CoolDot Cutting Stock | Case 6 | Cutting

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
CUTTING SCHEME:
F60 F56 F42 F38 F34 F24 F15 F10 WHIDTH (inches ):
1 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 F60 60.0000
2 0.00000 1.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 F56 56.0000
3 0.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000
F42 42.0000
4 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 0.00000 0.00000
5 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 2.00000 0.00000
F38 38.0000
6 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 1.00000 F34 34.0000
7 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 0.00000 3.00000 F24 24.0000
8 0.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 0.00000 F15 15.0000
9 0.00000 0.00000 0.00000 1.00000 0.00000 1.00000 0.00000 1.00000 F10 10.0000
10 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 2.00000 0.00000
11 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 1.00000 COST ( Waste ):
12 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 3.00000 R72 0.280000
WHIDTH (inches ):
13 0.00000 0.00000 0.00000 0.00000 2.00000 0.00000 0.00000 0.00000 R48
F600.190000
60.0000
14 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 0.00000 1.00000 R36
F560.150000
56.0000
15 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 2.00000 0.00000
16 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 1.00000 2.00000
F42 42.0000
AVAILABLE PROVIDER( Waste ):
F38 38.0000
17 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 3.00000
R72 1600.00
F34 34.0000
18 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 0.00000 0.00000
19 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 1.00000 0.00000 R48
F2410000.0
24.0000
20 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 0.00000 2.00000 R36
F1510000.0
15.0000
21 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 3.00000 0.00000 F10 10.0000
22 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 2.00000 1.00000 REQUIRED ( feet ):
23 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 3.00000 F60 500.000
COST ( Waste ):
24 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 4.00000 F56 400.000
R72 0.280000
25 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 1.00000 F42 300.000
26 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 2.00000 R48 0.190000
F38 450.000
27 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 4.00000 R36 0.150000
F34 350.000
28 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 5.00000 F24 100.000
29 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 7.00000 AVAILABLE
F15 800.000 PROVIDER( Waste ):
30 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 R72 1600.00
F10 1000.00
31 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 R48 10000.0
32 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 1.00000 R36 10000.0
33 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 0.00000 0.00000 SOLUTION:
34 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 1.00000 0.00000 Global optimal solution found.
35 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 2.00000 REQUIRED value:
Objective ( feet ):
36 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000 0.00000 F60 500.000
Objective bound:
37 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 1.00000 F56 400.000
Infeasibilities:
38 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 3.00000 F42 300.000
39 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 4.00000 F38Class:MILP
Model 450.000
40 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 F34 350.000
41 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 0.00000 1.00000 IDEAL
F24CUTTING
100.000PROGRAM:
42 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2.00000 0.00000 RawF15
Width: 72 inches, used: 1599 waste x unity cos
800.000
43 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 1.00000 2.00000 RawF10
Width: 48 inches, used: 98 waste x unity cos
44 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 3.00000
1000.00
Raw Width: 36 inches, used: 0 waste x unity cos
SOLUTION:
❖ SOLUTION 1 Global optimal solution found.
Objective value:
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes
Objective bound:up the optimal
Infeasibilities:
SOLUTION:
Model Class:MILP
Global optimal solution found.
Objective value: 466.340
IDEAL CUTTING PROGRAM:
Objective bound: Raw 466.340
Width: 72 inches, used: 1599 waste x unity
Infeasibilities: Raw 0.00000
Width: 48 inches, used: 98 waste x unity
Raw Width: 36 inches, used: 0 waste x unity
Model Class:MILP

IDEAL CUTTING PROGRAM:


Raw Width: 72 inches, used: 1599 waste x unity cost: $0.28 = Total: $447.720
Raw Width: 48 inches, used: 98 waste x unity cost: $0.19 = Total: $ 18.620
Raw Width: 36 inches, used: 0 waste x unity cost: $0.15 = Total: $ 0.000
TOTAL: 156 inches 1697 waste $466.340

331
BLOCK 12 Block: METALLURGY

How to fulfill an order for an aluminum alloy, for example, considering the availability of
different types of ore in stock and the technical needs of the composition respecting limits,
in order to maximize profits?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

332
C2-B12 Solving Problems with LINGO Sinter Feet | Case 1 | Metallurgy

GOAL

1 A mining company wants to fulfill a contract of supply of 4 million tons per year of the Sinter
Feed ore and, for that, it has the following minerals:

• Mineral A: Profit of $0.03 per kg - Stock of 600 kg;

• Mineral B: Profit of $0.05 per kg - Stock of 800 kg;


Blocks
• Product Mix • Alloy Y: Alloy obtained by the selling profit of $0.08 per kg
• Blend
• Finance Resources / Products Alloy Mineral A Mineral B

• Investments Silicon % 13 15 10
• Diet Iron % 10 13 5
• Aviation
Aluminum % 80 72 85
• Transport
Iron Ore Stock kg 0 600 800
• Agriculture
Profit ( p/k ) $ 0.08 0.03 0.05
• Construction
• Refinery
• Schedule
Regarding the aluminum alloy to be produced, it must meet the technical specifications that
• Cutting limit the amount of explicit chemical elements in the alloy column (Minimum of the Silicon and
• Metallurgy Iron, and Maximum of the Aluminum).

• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Alloy
• Mineral
• Chemical
• Blend

Source:
• Book 1
• Page 72

333
C2-B12 Solving Problems with LINGO Sinter Feet | Case 1 | Metallurgy

MODEL:
SETS:
RESOURCE:;
PRODUCT: PROFIT, STOCK, PRODUCE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE =
SILICON
IRON
ALUMINUM;
! Product attributes;
PRODUCT, PROFIT, STOCK =
ALLOY 0.08 0
MIN_A 0.03 600
MIN_B 0.05 800;
! Required ALLOY MIN_A MIN_B;
USAGE = 13 15 10 ! SILICON;
10 13 5 ! IRON;
80 72 85; ! ALUMINUM;
ENDDATA
SUBMODEL MAX1:
[OBJ] MAX = PROFIT(1) * PRODUCE(1) - PROFIT(2) * PRODUCE(2) - PROFIT(3) * PRODUCE(3);
! Equation of profit;
PRODUCE(1) - PRODUCE(2) - PRODUCE(3) = 0;
! Restriction of Silicon use;
USAGE(1,1)/100 * PRODUCE(1) - USAGE(1,2)/100 * PRODUCE(2) - USAGE(1,3)/100 * PRODUCE (3) >=0;
! Restriction of Iron use;
USAGE(2,1)/100 * PRODUCE(1) - USAGE(2,2)/100 * PRODUCE(2) - USAGE(2,3)/100 * PRODUCE (3) >=0;
! Restriction of Aluminum use;
USAGE(3,1)/100 * PRODUCE(1) - USAGE(3,2)/100 * PRODUCE(2) - USAGE(3,3)/100 * PRODUCE (3) <= 0;
! Iron ore stock A;
PRODUCE(2) <= STOCK(2);
! Iron ore stock B;
PRODUCE(3) <= STOCK(3);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-3s'), ' Profit p/kg: $',
@FORMAT(PROFIT(J),'%4.2f'),' x ', @IF(J #EQ# 1, '+Alloy obtained:','-Used stock :'), ' ' ,
@FORMAT(PRODUCE(J), '%4.0f'),'kg Total: $',
@FORMAT(PROFIT(J) * PRODUCE(J),'%3.0f'), @IF(J #EQ# 1, '+','-'),
@NEWLINE( 1));
@WRITE(' Total:',39*' ',
@FORMAT(-1*(PRODUCE(1)-PRODUCE(2)-PRODUCE(3)),'%4.0f'),'kg',9*' ', '$',
@FORMAT(OBJ,'%3.0f'),
@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

334
C2-B12 Solving Problems with LINGO Sinter Feet | Case 1 | Metallurgy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
ALLOY MIN_A MIN_B
SILICON 13.00000 15.00000 10.00000
IRON 10.00000 13.00000 5.000000
ALUMINUM 80.00000 72.00000 85.00000

PROFIT:
ALLOY 0.080000
MIN_A 0.030000
MIN_B 0.050000

SOLUTION:
Global optimal solution found.
Objective value: 49.00000
Infeasibilities: 0.000000

Model
DATA: Class: LP
FORMULA (%):
DATA:
IDEAL
FORMULAPLANNING
(%): PROGRAM:
ALLOY MIN_A MIN_B
SILICON 13.00000
ALLOY ProfitALLOY 15.00000
p/kg: $0.08 10.00000
MIN_Ax +Alloy
MIN_Bobtained: 1300kg Total: $104+
IRON
MIN_A 10.00000 13.00000 5.000000
SILICONProfit p/kg:15.00000
13.00000 $0.03 x -Used stock
10.00000 : 500kg Total: $ 15-
ALUMINUM 80.00000 72.00000 85.00000
MIN_B
IRON Profit p/kg:13.00000
10.00000 $0.05 x -Used stock
5.000000 : 800kg Total: $ 40-
ALUMINUM
Total:
PROFIT: 80.00000 72.00000 85.00000 0kg $ 49
ALLOY 0.8000000E-01
PROFIT:
MIN_A 0.3000000E-01
❖ SOLUTION
ALLOY
MIN_B 0.8000000E-01
0.5000000E-01
MIN_A 0.3000000E-01
Below
MIN_Bis the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
0.5000000E-01
SOLUTION:
Global optimal solution found.
SOLUTION:
Objective value: 49.00000
Global optimal solution found.
Infeasibilities: 0.000000
Objective value: 49.00000
Infeasibilities:
Model Class: LP 0.000000

Model
IDEAL Class: LP PROGRAM:
PLANNING
ALLOY Profit p/kg: $0.08 x +Alloy obtained: 1300kg Total: $104+
IDEAL
MIN_A PLANNING PROGRAM:
Profit p/kg: $0.03 x -Used stock : 500kg Total: $ 15-
ALLOY
MIN_B Profit
Profit p/kg: $0.08 +Alloystock
$0.05 x -Used obtained:
: 1300kg Total: $$104+
800kg Total: 40-
MIN_A
Total: Profit p/kg: $0.03 x -Used stock : 500kg
0kg Total: $$ 49
15-
MIN_B Profit p/kg: $0.05 x -Used stock : 800kg Total: $ 40-
Total:
SLACK/SURPLUS LIMIT = RESOURCE (kg): 0kg $ 49
PROD LIMIT VALUE
SLACK/SURPLUS
SILICON LIMIT = RESOURCE
1286.000 1300.000 (kg):
-14.00000
IRON 475.0000
PROD 500.0000
LIMIT -25.00000
VALUE
ALUMINUM
SILICON 800.0000
1286.000 800.0000 0.000000
1300.000 -14.00000
IRON 475.0000 500.0000 -25.00000
SLACK/SURPLUS
ALUMINUM LIMIT = STOCK
800.0000 (kg): 0.000000
800.0000
PROD LIMIT VALUE
ALLOY 0.000000 0.000000
SLACK/SURPLUS LIMIT = STOCK (kg): 0.000000
MIN_A 500.0000
PROD 600.0000
LIMIT -100.0000
VALUE
MIN_B
ALLOY 800.0000
0.000000 800.0000
0.000000 0.000000
0.000000
MIN_A 500.0000 600.0000 -100.0000 1
MIN_B 800.0000 800.0000 0.000000

335
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 2 | Metallurgy

GOAL

2 A metallurgist wants to produce 2000 kg of aluminum alloy at minimal cost by mixing various
ores. The alloy must meet engineering requirements that specify the maximum and minimum of
various chemical elements that make it up.

The minimum and maximum requirements for each material are as follows:
Blocks • Minimum limit: MAT3 = 400 kg and MAT4=100 kg ;
• Product Mix • Maximum limit: MAT1 = 200 kg , MAT2=750 kg, MAT3=800 kg, MAT4=700 kg, MAT5=1500
kg;
• Blend
• Finance RHS
• Investments • Minimum composition: AL=1500 kg and IS=250;
• Diet • Maximum composition: FE= 60 kg, CU=100 kg, MN=40 kg, MG=30 kg, SI=300 kg;
• Aviation
The MIN Limit line refers to the quantity that is desired to be forced into this process (for some
• Transport reason, such as release of space, it is desired to force MAT3 and MAT4 raw materials in).
• Agriculture
The ore cost and the composition of each of the chemical elements of the alloy are shown
• Construction below
• Refinery Mat Mat Mat Mat Mat Min Max
Resources / Products Al-Pure Si-Pure
1 2 3 4 5 (kg) (kg)
• Schedule
• Cutting FE % 0.15 0.04 0.02 0.04 0.02 0.01 0.03 - 60

• Metallurgy CU % 0.03 0.05 0.08 0.02 0.06 0.01 - - 100


• Fertilizer
MN % 0.02 0.04 0.01 0.02 0.02 - - - 40
• Clinic Composition
MG % 0.02 0.03 - - 0.01 - - - 30
• Classic
• Dynamic AL % 0.70 0.75 0.80 0.75 0.80 0.97 - 1500 -

• Logistics SI % 0.02 0.06 0.08 0.12 0.02 0.01 0.97 250 300
• Energy
Min kg - - 400 100 - - - - -
• Assembly Line Limit
Max kg 200 750 800 700 1500 Infinite Infinite - -

Keywords: Cost $ 0.03 0.08 0.17 0.12 0.15 0.21 0.38 - -

• Alloy
• Mineral
• Chemical
• Blend

Source:
• Book 1
• Page 62

336
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 2 | Metallurgy
MODEL:
SETS:
RESOURCE:RHS_MIN, RHS_MAX;
PRODUCT: COST, LIMIT_MIN, LIMIT_MAX, PRODUCE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , RHS_MIN, RHS_MAX =
FE 1 60
CU 1 100
MN 1 40
MG 1 30
AL 1500 0
SI 250 300;
! Products attributes;
PRODUCT, COST, LIMIT_MIN, LIMIT_MAX =
MAT1 0.03 0 200
MAT2 0.08 0 750
MAT3 0.17 400 800
MAT4 0.12 100 700
MAT5 0.15 0 1500
AL_PURE 0.21 0 0
SI_PURE 0.38 0 0;
! Required MAT1 MAT2 MAT3 MAT4 MAT5 AL_PURE SI_PURE;
USAGE = 0.15 0.04 0.02 0.04 0.02 0.01 0.03 !FE;
0.03 0.05 0.08 0.02 0.06 0.01 0.00 !CU;
0.02 0.04 0.01 0.02 0.02 0.00 0.00 !MN;
0.02 0.03 0.00 0.00 0.01 0.00 0.00 !MG;
0.70 0.75 0.80 0.75 0.80 0.97 0.00 !AL;
0.02 0.06 0.08 0.12 0.02 0.01 0.97; !SI;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM(PRODUCT(I): COST(I) * PRODUCE(I));
! Limit;
[LIM] @SUM(PRODUCT(I): PRODUCE(I)) = 2000;
! Maximum of iron limit;
[MAX_FE] @SUM(PRODUCT(I): USAGE(1,I) * PRODUCE(I)) <= 60 ;
! Maximum copper (CU) limit;
[MAX_CU] @SUM(PRODUCT(I): USAGE(2,I) * PRODUCE(I)) <= 100 ;
! Maximum of manganese limit;
[MAX_MN] @SUM(PRODUCT(I): USAGE(3,I) * PRODUCE(I)) <= 40 ;
! Maximum of magnesium limit;
[MAX_MG] @SUM(PRODUCT(I): USAGE(4,I) * PRODUCE(I)) <= 30 ;
! Minimum aluminum limit;
[MIN_AL] @SUM(PRODUCT(I): USAGE(5,I) * PRODUCE(I)) >= 1500 ;
! Maximum silicon limit;
[MAX_SI] @SUM(PRODUCT(I): USAGE(6,I) * PRODUCE(I)) <= 300 ;
! Minimum silicon limit;
[MIN_SI] @SUM(PRODUCT(I): USAGE(6,I) * PRODUCE(I)) >= 250 ;
! Maximum Mat1, Mat2, Mat3, Mat4 and Mat5;
@FOR(PRODUCT(I) | I #LE# 5: [MAX_MAT] PRODUCE(I) <= LIMIT_MAX(I));
! Minimum Mat3 and Mat4;
@FOR(PRODUCT(I) | I #LT# 5: [MIN_MAT] PRODUCE(I) >= LIMIT_MIN(I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN2);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-7s'), ' Produce:',
@FORMAT(PRODUCE(J),'%4.0f'),'kg x Unit cost: $',
@FORMAT(COST(J), '%4.2f'),' = Total: $',
@FORMAT(COST(J) * PRODUCE(J),'%6.2f'),
@NEWLINE( 1));
@WRITE(' Total:',11*' ', @FORMAT(PRODUCE(1)+PRODUCE(2)+PRODUCE(3)+PRODUCE(4)+
PRODUCE(5)+ PRODUCE(6)+PRODUCE(7),'%4.0f'),'kg',30*' ', ' $',
@FORMAT(OBJ,'%5.2f'),@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

337
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 2 | Metallurgy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
MAT1 MAT2 MAT3 MAT4 MAT5 AL_PURE SI_PURE
FE 0.1500000 0.0400000 0.0200000 0.0400000 0.0200000 0.0100000 0.0300000
CU 0.0300000 0.0500000 0.0800000 0.0200000 0.0600000 0.0100000 0.0000000
MN 0.0200000 0.0400000 0.0100000 0.0200000 0.0200000 0.0000000 0.0000000
MG 0.0200000 0.0300000 0.0000000 0.0000000 0.0100000 0.0000000 0.0000000
AL 0.7000000 0.7500000 0.8000000 0.7500000 0.8000000 0.9700000 0.0000000
SI 0.0200000 0.0600000 0.8000000 0.1200000 0.0200000 0.0100000 0.9700000

COST:
MAT1 0.0300000
MAT2 0.0800000
MAT3 0.1700000
MAT4 0.1200000
MAT5 0.1500000
AL_PURE 0.2100000
SI_PURE 0.3800000

SOLUTION:
Global optimal solution found.
Objective value: 296.2166
Infeasibilities: 0.000000

Model Class: LP

IDEAL PLANNING PROGRAM:


MAT2 Produce: 665kg x Unit cost: $0.08 = Total: $ 53.23
MAT3 Produce: 490kg x Unit cost: $0.17 = Total: $ 83.34
MAT4 Produce: 424kg x Unit cost: $0.12 = Total: $ 50.90
AL_PURE Produce: 300kg x Unit cost: $0.21 = Total: $ 62.92
SI_PURE Produce: 121kg x Unit cost: $0.38 = Total: $ 45.82
❖ SOLUTION
Total: 2000kg $296.22
Below is the solution
SLACK/SURPLUS
SOLUTION: LIMIT achieved byRHS_MIN:
= RESOURCE LINGO with infeasibilities 0, and the detailed report that makes up the optimal
PROD solution
Global optimal LIMIT
found. VALUE
SOLUTION:
FE -0.2345678 1.000000 -1.234568
Objective value: 296.2166
Global optimal solution
CU -0.2345678 found.
1.000000 -1.234568
Infeasibilities: 0.000000
Objective value: 1.000000
MN -0.2345678 -1.234568 296.2166
Infeasibilities:
MG -0.2345678
Model Class: LP 1.000000 -1.234568 0.000000
AL 1500.000 1500.000 0.000000
SI
Model 250.0000
Class: 250.0000
LPPROGRAM: 0.000000
IDEAL PLANNING
MAT2 Produce: 665kg x Unit cost: $0.08 = Total: $ 53.23
IDEAL PLANNING
MAT3 PROGRAM:
Produce: 490kg x Unit cost: $0.17 = Total: $ 83.34 1
MAT2
MAT4 Produce: 665kg xx Unit
Produce: 424kg Unit cost:
cost: $0.12
$0.08 == Total:
Total: $$ 50.90
53.23
MAT3 Produce: 490kg x Unit cost:
AL_PURE Produce: 300kg x Unit cost: $0.21 $0.17 == Total:
Total: $ 83.34
$ 62.92
MAT4 Produce: 424kg x Unit cost:
SI_PURE Produce: 121kg x Unit cost: $0.38 $0.12 == Total:
Total: $ 50.90
$ 45.82
AL_PURE
Total: Produce: 300kg
2000kg x Unit cost: $0.21 = Total: $ 62.92
$296.22
SI_PURE Produce: 121kg x Unit cost: $0.38 = Total: $ 45.82
Total:
SLACK/SURPLUS 2000kg
LIMIT = RESOURCE RHS_MIN: $296.22
PROD LIMIT VALUE
SLACK/SURPLUS
FE -0.2345678LIMIT1.000000
= RESOURCE-1.234568
RHS_MIN:
PROD
CU -0.2345678 LIMIT
1.000000 VALUE
-1.234568
FE -0.2345678
MN -0.2345678 1.000000
1.000000 -1.234568
-1.234568
CU -0.2345678
MG -0.2345678 1.000000
1.000000 -1.234568
-1.234568
MN
AL -0.2345678
1500.000 1.000000
1500.000 -1.234568
0.000000
MG
SI -0.2345678
250.0000 1.000000
250.0000 -1.234568
0.000000
AL 1500.000 1500.000 0.000000
SI 250.0000 250.0000 0.000000
SLACK/SURPLUS LIMIT = RESOURCE RHS_MAX:
PROD LIMIT VALUE
SLACK/SURPLUS
FE 60.00000 LIMIT = RESOURCE
60.00000 RHS_MAX:
0.000000
CU PROD
83.96751 LIMIT -16.03249
100.0000 VALUE
FE
MN 60.00000
40.00000 60.00000
40.00000 0.000000
0.000000
CU
MG 83.96751
19.96029 100.0000 -10.03971
30.00000 -16.03249
MN
AL 40.00000
0.000000 40.00000
0.000000 0.000000
0.000000
MG
SI 19.96029
250.0000 30.00000 -50.00000
300.0000 -10.03971
AL 0.000000 0.000000 0.000000
SI 250.0000LIMIT
SLACK/SURPLUS 300.0000 -50.00000
= MINIMUM PRODUCT LIMIT:
PROD LIMIT VALUE
SLACK/SURPLUS
MAT1 LIMIT = 0.000000
0.000000 MINIMUM PRODUCT LIMIT:
0.000000
PROD LIMIT -665.3430
VALUE 338
MAT2 -665.3430 0.000000
MAT1
MAT3 0.000000
309.7473 0.000000 -90.25271
400.0000 0.000000
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 3 | Metallurgy

GOAL

3 A special alloy consisting of iron, coal, silicon and nickel can be obtained by mixing these
pure minerals in addition to 2 types of recovered materials:

Recovered Material 1 (RM1)


Composition: iron - 60%; coal - 20%; silicon - 20%. Cost per kg: R $ 0.20.
Blocks
Recovered Material 2 (RM2)
• Product Mix
Composition: iron - 70%; coal: 20%; silicon - 5%; nickel - 5%. Cost per kg: $ 0.25.
• Blend
The alloy should have the following final composition:
• Finance
• Investments
Resources / Products RM1 RM2 Iron Coal Silicon Nickel
• Diet
• Aviation RM1 % - - 60 20 20 -

• Transport
RM2 % - - 70 20 20 5
• Agriculture
Formula
• Construction
Min % - - 60 15 15 5
• Refinery
• Schedule Max % - - 65 20 20 8

• Cutting
Cost p/kg $ 0.20 0.25 0.30 0.20 0.28 0.50
• Metallurgy
• Fertilizer
• Clinic What should be the composition of the mixture in terms of available materials, with lower
• Classic cost per kg?

• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Alloy
• Mineral
• Chemical
• Blend

Source:
• Book 11
• Ex.: 3

339
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 3 | Metallurgy
MODEL:
SETS:
RESOURCE:;
PRODUCT: COST, PRODUCE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE =
MIN_IRON
MAX_IRON
MIN_COAL
MAX_COAL
MIN_SILICON
MAX_SILICON
MIN_NICKEL
MAX_NICKEL
RHS_MIN
RHS_MAX;
! Product attributes;
PRODUCT, COST =
RM1 0.20
RM2 0.25
IRON 0.30
COAL 0.20
SILICON 0.28
NICKEL 0.50;
! Required RM1 RM2 IRON COAL SILICON NICKEL;
USAGE = 60 70 1 0 0 0 ! MIN_IRON;
60 70 1 0 0 0 ! MAX_IRON;
20 20 0 1 0 0 ! MIN_COAL;
20 20 0 1 0 0 ! MAX_COAL;
20 20 0 0 1 0 ! MIN_SILICON;
20 0 0 0 1 0 ! MAX_SILICON ;
5 5 0 0 0 1 ! MIN_NICKEL;
5 5 0 0 0 1 ! MAX_NICKEL ;
0 0 60 15 15 5 ! RHS_MIN;
0 0 65 20 20 8; ! RHS_MAX;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM(PRODUCT(I): COST(I) * PRODUCE(I));
[RM1A] @SUM(PRODUCT(I)| I #LE# 3: USAGE(1,I)/100 * PRODUCE(I)) >= 0.60 ;
! RM1(60%)+RM2(70%)+ Iron min 60%;
[RM1B] @SUM(PRODUCT(I)| I #LE# 3: USAGE(2,I)/100 * PRODUCE(I)) <= 0.65 ;
! RM1(60%)+RM2(70%)+ Iron max 65%;
[RM1C] @SUM(PRODUCT(I)| I #LE# 2 #OR# I #EQ# 4: USAGE(3,I)/100 * PRODUCE(I)) >= 0.15;
!RM1(20%) + RM2(20%) + MIN COAL (15%) ;
[RM1D] @SUM(PRODUCT(I)| I #LE# 2 #OR# I #EQ# 4: USAGE(4,I)/100 * PRODUCE(I)) <= 0.20 ;
!RM1(20%) + RM2(20%) + MAX COAL (20%) ;
[RM1E] @SUM(PRODUCT(I)| I #LE# 2 #OR# I #EQ# 5: USAGE(5,I)/100 * PRODUCE(I)) >= 0.15 ;
! RM1(20%) + RM2(20%) + MIN Silicon (15%) ;
[RM1F] @SUM(PRODUCT(I)| I #LE# 2 #OR# I #EQ# 5: USAGE(6,I)/100 * PRODUCE(I)) <= 0.20 ;
! RM1(20%) + RM2(20%) + MAX Silicon (20%);
[RM2A] @SUM(PRODUCT(I)| I #LE# 2 #OR# I #EQ# 6: USAGE(7,I)/100 * PRODUCE(I)) >= 0.05 ;
! RM2(5%) + MIN Nickel (5%) ;
[RM2B] @SUM(PRODUCT(I)| I #LE# 2 #OR# I #EQ# 6: USAGE(8,I)/100 * PRODUCE(I)) <= 0.08;
! RM2(5%) + MAX Nickel (8%);
[LIMIT] @SUM(PRODUCT(I): PRODUCE(I)) = 1;
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " COST:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN3);
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' Use:',
@FORMAT(PRODUCE(J),'%2.0f'),'kg of: ',
@FORMAT(PRODUCT(J),'-4s'), 'meets the lowest cost chemical composition: $',
@FORMAT(COST(J), '%4.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

340
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 3 | Metallurgy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
RM1 RM2 IRON COAL SILICON NICKEL
MIN_IRON 60.00000 70.00000 1.000000 0.000000 0.000000 0.000000
MAX_IRON 60.00000 70.00000 1.000000 0.000000 0.000000 0.000000
MIN_COAL 20.00000 20.00000 0.000000 1.000000 0.000000 0.000000
MAX_COAL 20.00000 20.00000 0.000000 1.000000 0.000000 0.000000
DATA:
MIN_SILICON 20.00000 20.00000 0.000000 0.000000 1.000000 0.000000
FORMULA (%):
MAX_SILICON 20.00000 20.00000 0.000000 0.000000 1.000000 0.000000
MIN_NICKEL 5.000000
RM15.000000 RM2
0.000000 IRON
0.000000 0.000000
COAL 1.000000
SILICON NICKEL
MAX_NICKEL
DATA:
MIN_IRON 5.000000
60.000005.000000 0.000000
70.00000 0.000000
1.000000 0.000000
0.000000 1.000000 0.000000
0.000000
RHS_MIN (%):
FORMULA
MAX_IRON 0.000000
60.000000.000000 60.00000
70.00000 15.00000
1.000000 15.00000
0.000000 5.000000 0.000000
0.000000
RHS_MAX 0.000000 0.000000 65.00000 20.00000 20.00000 8.000000
MIN_COAL RM1 20.00000
20.00000 RM2 0.000000
IRON 1.000000 COAL SILICON 0.000000
0.000000 NICKEL
MIN_IRON
MAX_COAL
COST:
60.00000 20.00000
20.00000 70.00000 0.000000
1.000000 1.000000
0.000000 0.000000 0.000000
MAX_IRON
MIN_SILICON
RM1 60.00000
20.00000
0.2000000 70.00000
20.00000 1.000000
0.000000 0.000000 0.000000 0.000000
1.000000
MIN_COAL
MAX_SILICON
RM2 20.00000 0.000000
20.00000
0.2500000 20.00000 0.000000
0.000000 0.000000
1.000000 0.000000 0.000000
1.000000
MIN_NICKEL
MAX_COAL
IRON 5.000000
20.00000 5.000000
0.3000000 20.00000 0.000000
0.000000 0.000000
1.000000 0.000000 1.000000
0.000000
MAX_NICKEL
COAL 5.000000
0.2000000 5.000000
MIN_SILICON 20.00000 20.00000 0.000000 0.000000 0.000000 0.000000 1.000000
1.000000 0.000000
SILICON 0.2800000
RHS_MIN
MAX_SILICON 0.000000
20.00000 0.000000
0.000000 60.00000
0.000000 15.00000
0.000000 15.00000
1.000000 5.000000
0.000000
NICKEL
RHS_MAX
MIN_NICKEL0.5000000
0.000000
5.000000 0.000000
5.000000 65.00000
0.000000 20.00000
0.000000 20.00000
0.000000 8.000000
1.000000
MAX_NICKEL
SOLUTION:
5.000000 5.000000 0.000000 0.000000 0.000000 1.000000
COST:
RHS_MIN 0.000000
Global optimal solution found.0.000000 60.00000 15.00000 15.00000 5.000000
RM1
Objective 0.2000000
RHS_MAX value:0.000000 0.000000 65.00000 20.00000 20.00000 0.200000
8.000000
RM2 0.2500000
Infeasibilities: 0.000000
IRON
COST: 0.3000000
COAL
Use:
RM1 1kg of:0.2000000
RM1 which meet the chemical composition for the
0.2000000 lowest cost: $0.20
SILICON
RM2 0.2800000
0.2500000
NICKEL
IRON 0.5000000
0.3000000
❖ SOLUTION
COAL 0.2000000
SOLUTION:
SILICON 0.2800000
Below
Global isoptimal
NICKEL the 0.5000000
solution achievedfound.
solution by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Objective value: 0.2000000
Infeasibilities:
SOLUTION: 0.0000000
Global optimal solution found.
Objective value: 0.2000000 1
Model Class: LP
Infeasibilities: 0.0000000
IDEAL PLANNING PROGRAM:
Use:
Model1kg of: RM1
Class: LP meets the lowest cost chemical composition: $0.20

IDEAL PLANNING PROGRAM:


Use: 1kg of: RM1 meets the lowest cost chemical composition: $0.20

341
C2-B12 Solving Problems with LINGO Alloys / Multi-periods | Case 4 | Metallurgy

GOAL

4 One company plans to produce an alloy composed of two minerals A, B and sold for $0.08
per kilo.

Resources / Periods Jan Feb Mar Apr May Jun

Min kg 800 900 900 800 800 800


Blocks
Demand
• Product Mix Max kg 1000 1100 1200 1100 1000 900
• Blend
A $ 0.3 0.31 0.33 0.32 0.31 0.3
• Finance Purchase Ore
• Investments B $ 0.4 0.51 0.55 0.54 0.52 0.5

• Diet A kg 1000 1000 1000 1000 1000 600


• Aviation Ore
Maximum
B kg 1000 1000 1000 1000 1000 800
• Transport Stocking
• Agriculture Cost $ 0.10 0.10 0.10 0.10 0.10 0.10
• Construction
Price ( p/kg ) $ 2.00 2.00 2.00 2.00 2.00 2.00
• Refinery
• Schedule The storage capacity of each miner (A, B) is 1000 kilos per month. The ore purchased will
• Cutting only be available the following month.

• Metallurgy No purchase was made prior to January.The cost of stocking the raw material is $0.001 per
• Fertilizer kilo per month.

• Clinic The final product can’t be stored; The final stock in June should be: A = 600 and B = 800.
• Classic
You do not want to make a mining purchase in the month of June. Initial inventories are
• Dynamic sufficient for January production and were purchased at: A $0.030 and B $0.040 per kilo.
• Logistics
The goal is to define purchasing and manufacturing planning to maximize profit.
• Energy
• Assembly Line

Keywords:
• Alloy
• Mineral
• Chemical
• Blend

Source:
• Book 1
• Page 86

342
C2-B12 Solving Problems with LINGO Alloys / Multi-periods | Case 4 | Metallurgy
MODEL:
SETS:
! Specification attributes;
SPEC: XL, XUA, XUB;
! Products attributes;
PRODUCT:
COST, ! Stock sots;
PRICE, ! Sale price;
P_ORE_A, ! Purchase ore A;
P_ORE_B, ! Purchase ore B;
S_ORE_A, ! Stock ore A;
S_ORE_B, ! Stock ore B;
D_MIN, ! Demand Minimum;
D_MAX, ! Demand Maximum;
L, ! Profit;
UA, ! ORE A used in the month ;
UB, ! ORE B used in the month ;
EA, ! ORE A stock at the end of the month;
EB, ! ORE B stock at the end of the month;
CA, ! ORE A purchased in the month;
CB; ! ORE B purchased in the month;
ENDSETS
DATA:
! Specification attributes (%);
SPEC, XL, XUA, XUB =
FE 0.13 0.15 0.10
SI 0.10 0.13 0.05
AL 0.80 0.72 0.85;

! Products attributes;
PRODUCT, COST PRICE, P_ORE_A, P_ORE_B, S_ORE_A, S_ORE_B, D_MIN, D_MAX =
JAN 0.001 0.08 0.030 0.050 1000 1000 800 1000
FEB 0.001 0.08 0.031 0.051 1000 1000 900 1100
MAR 0.001 0.08 0.033 0.055 1000 1000 900 1200
APR 0.001 0.08 0.032 0.054 1000 1000 800 1100
MAY 0.001 0.08 0.031 0.052 1000 1000 800 1100
JUN 0.001 0.08 0.030 0.050 600 800 800 900;
ENDDATA

343
C2-B12 Solving Problems with LINGO Alloys / Multi-periods | Case 4 | Metallurgy
SUBMODEL MAX4:
[OBJ] MAX = PRI - CPA - CPB - CSA - CSB;
! Price;
PRI = @SUM(PRODUCT(J): PRICE(J) * L(J));
! Cost purchase ORE A;
CPA = @SUM(PRODUCT(J):P_ORE_A(J) * CA(J));
! Cost purchase ORE B;
CPB = @SUM(PRODUCT(J): P_ORE_B(J) * CB(J));
! Cost stocking ORE A;
CSA = @SUM(PRODUCT(J): COST(J) * EA(J));
! Cost stocking ORE B;
CSB = @SUM(PRODUCT(J): COST(J) * EB(J));
! LEAGUE OF MASS BALANCE WITH ORE;
@FOR(PRODUCT(J): L(J) + LX + UA(J) - UB(J) = 0);
! MAXIMUM CAPACITY OF STORAGE ORE A;
@FOR(PRODUCT(J): [_EA] EA(J) <= S_ORE_A(J));
! MAXIMUM CAPACITY OF STORAGE ORE B;
@FOR(PRODUCT(J): [_EB] EB(J) <= S_ORE_B(J));
! ORE MASS BALANCE A (USE, STOCK AND PURCHASE) ;
[_UA1] UA(1) + UA1 + EA(1) = 600;
@FOR(PRODUCT(J) | J #GT# 1:[_UA] UA(J) + UA2 + EA(J-1) - EA(J) - CA(J-1) = 0);
! ORE MASS BALANCE B (USE, STOCK AND PURCHASE) ;
[_UB1] UB(1) + UB1 + EB(1) = 800;
@FOR(PRODUCT(J) | J #GT# 1:[_UB] UB(J) + UB2 + EB(J-1) - EB(J) - CB(J-1) = 0);
! FINAL PRODUCT SALES DEMAND ;
@FOR(PRODUCT(J): [_DEMMAX] L(J) <= D_MAX(J));
@FOR(PRODUCT(J): [_DEMMIN] L(J) >= D_MIN(J));
! LEAGUE SPECIFICATION RESTRICTIONS;
! SPECIFICATION TO FE;
@FOR(PRODUCT(J): [_SPC_FE] XL(1)*L(J) - XUA(1)*UA(J) - XUB(1)*UB(J) >= 0);
! SPECIFICATION TO SI;
@FOR(PRODUCT(J): [_SPC_SI] XL(2)*L(J) - XUA(2)*UA(J) - XUB(2)*UB(J) >= 0);
! SPECIFICATION TO AL;
@FOR(PRODUCT(J): [_SPC_AL] XL(3)*L(J) - XUA(3)*UA(J) - XUB(3)*UB(J) <= 0);
ENDSUBMODEL

344
C2-B12 Solving Problems with LINGO Alloys / Multi-periods | Case 4 | Metallurgy

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " STOCK ORE A (kg):", @NEWLINE( 1));
@TABLE(S_ORE_A);
@WRITE(" ", @NEWLINE( 1), " STOCK ORE B (kg):", @NEWLINE( 1));
@TABLE(S_ORE_B);
@WRITE(" ", @NEWLINE( 1), " MINIMUM DEMAND(kg):", @NEWLINE( 1));
@TABLE(D_MIN);
@WRITE(" ", @NEWLINE( 1), " MAXIMUM DEMAND(kg):", @NEWLINE( 1));
@TABLE(D_MAX);
@WRITE(" ", @NEWLINE( 1), " PURCHASE COST ORE A (kg):", @NEWLINE( 1));
@TABLE(P_ORE_A);
@WRITE(" ", @NEWLINE( 1), " PURCHASE COST ORE B (kg):", @NEWLINE( 1));
@TABLE(P_ORE_B);
@WRITE(" ", @NEWLINE( 1), " STOCK COST (P/kg) $:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SALE PRICE (P/kg) $:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX4);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITE(' Month:', 43*' ',' ALL', @NEWLINE(1));
@WRITE(' Produce: ', 39*' ',
@FORMAT(@SUM(PRODUCT(J): D_MAX(J)), '%5.0f'),' kg',
@NEWLINE(1));
@WRITE(' + Revenue:', 37*' ', '$ ',@FORMAT(PRI,'%6.2f'),@NEWLINE(1));
@WRITE(' - Purchase cost:', 31*' ', '$ ',@FORMAT(CPA + CPB,'%6.2f'),@NEWLINE(1));
@WRITE(' - Stocking cost:', 30*' ',' $ ',@FORMAT(CSA + CSB,'%6.2f'),@NEWLINE(1));
@WRITE(' = Profit:', 37*' ',' $',
@FORMAT(PRI - CPA - CPB - CSA - CSB,'%7.2f'),
@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX4);
ENDCALC
END

345
C2-B12 Solving Problems with LINGO Alloys / Multi-periods | Case 4 | Metallurgy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
STOCK ORE A (kg): PURCHASE COST ORE A (kg):
JAN 1000.000 JAN 0.030000
FEB 1000.000 FEB 0.031000
MAR 1000.000 MAR 0.033000
APR 1000.000 APR 0.032000
MAY 1000.000 MAY 0.031000
JUN 600.0000 JUN 0.030000

STOCK ORE B (kg): PURCHASE COST ORE B (kg):


JAN 1000.000 JAN 0.050000
FEB 1000.000 FEB 0.051000
MAR 1000.000 MAR 0.055000
APR 1000.000 APR 0.054000
MAY 1000.000 MAY 0.052000
JUN 800.0000 JUN 0.050000

MINIMUM DEMAND(kg): STOCK COST (P/kg) $:


JAN 800.0000 JAN 0.001000
FEB 900.0000 FEB 0.001000
MAR 900.0000 MAR 0.001000
APR 800.0000 APR 0.001000
MAY 800.0000 MAY 0.001000
JUN 800.0000 JUN 0.001000

APR 0.001000
MAXIMUM DEMAND(kg): SALE PRICE (P/kg) $:
MAY 1000.000
JAN 0.001000 JAN 0.080000
JUN 1100.000
FEB
APR 0.001000
0.001000
FEB 0.080000
MAR 1200.000 MAR 0.080000
MAY 1100.000
APR 0.001000 APR 0.080000
SALE PRICE
JUN 1100.000(P/kg) $:
0.001000 MAY 0.080000
MAY
JAN 0.080000
JUN 900.0000 JUN 0.080000
FEB PRICE
SALE 0.080000
(P/kg) $:
MAR 0.080000
PURCHASE 0.080000
COST ORE A (kg): Global optimal solution found.
JAN Objective value: 254.9000
JAN 0.030000
APR 0.080000
0.080000
FEB
FEB 0.031000 Infeasibilities: 0.000000
MAY 0.080000
MAR 0.080000
MAR 0.033000
JUN 0.032000
❖ SOLUTION
APR
APR 0.080000
0.080000 Model Class: LP
MAY 0.031000
MAY 0.080000
Below
Global
JUN is0.080000
the solution
optimal solution IDEAL
achievedfound.
by PLANNING
LINGO PROGRAM:
with infeasibilities 0, and the detailed report that makes up the optimal
JUN 0.030000 Month: ALL
Objective value: Produce:
254.9000 6400 kg
PURCHASE COST ORE B (kg):
Infeasibilities:
Global optimal solution found.
+ Revenue: 0.000000 $ 496.00
JAN 0.050000
Objective
FEB 0.051000 value: - Purchase cost: 254.9000 $ 239.30
Model
MAR Class:
Infeasibilities:
0.055000 LP - Stocking cost: 0.000000 $ 1.80
APR 0.054000 = Profit: $ 254.90
MAY 0.052000
IDEAL PLANNING
Model Class: LP PROGRAM:
JUN 0.050000
Month: ALL
Produce:
IDEAL
STOCK PLANNING
COST (P/kg) $:PROGRAM: 6400 kg
+ JAN
Revenue:
Month:
0.001000 $ 496.00
ALL
- FEB
Purchase cost:
0.001000
Produce: $ 239.30
6400 kg
+ MAR 0.001000
- Revenue:
Stocking cost: $$ 1.80
496.00 1
-= Purchase
Profit: cost: $$ 254.90
239.30 1
- Stocking cost: $ 1.80
= Profit: $ 254.90

346
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 5 | Metallurgy

GOAL

5 One company wants to produce 3 aluminum alloys through two types of ore A, B, in which
one wants to use the existing maximum stock to maximize profit from sales.

Resources / Products Alloy 1 Alloy 2 Alloy 3


Blocks
• Product Mix SILICON % 13 15 10 14 15 10 13 15 10

• Blend
Formula IRON % 10 13 5 11 13 5 8 13 5
• Finance
• Investments ALUMINUM % 80 72 85 78 72 85 83 72 85
• Diet
• Aviation Stock kg - 600 800 - 600 800 - 600 800

• Transport
Price ( p/kg ) $ 8.00 3.00 5.00 7.00 3.00 5.00 10.00 3.00 5.00
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Alloy
• Mineral
• Chemical
• Blend

Source:
• Book 1
• Page 74

347
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 5 | Metallurgy
MODEL:

SETS:
RESOURCE:;
PRODUCT: PROFIT, STOCK, PRODUCE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS

DATA:
! Resources attributes;
RESOURCE =
SILICON
IRON
ALUMINUM;
! Products attributes;
PRODUCT , PROFIT, STOCK =
ALLOY1_Y 8 0
ALLOY1_A 3 600
ALLOY1_B 5 800
ALLOY2_Y 7 0
ALLOY2_A 3 600
ALLOY2_B 5 800
ALLOY3_3 10 0
ALLOY3_A 3 600
ALLOY3_B 5 800;
! Required A1_Y A1_A A1_B A2_Y A2_A A2_B AE_Y A3_A A3_B ;
USAGE = 13 15 10 14 15 10 13 15 10 ! SILICON;
10 13 5 11 13 5 8 13 5 ! IRON;
80 72 85 78 72 85 83 72 85; ! ALUMINUM;
ENDDATA

SUBMODEL MAX5:
[OBJ] MAX = PROFIT(1)/100 * PRODUCE(1) + PROFIT(4)/100 * PRODUCE(4) + PROFIT(7)/100 * PRODUCE(7) -
PROFIT(2)/100 * PRODUCE(2) - PROFIT(3)/100 * PRODUCE(3) - PROFIT(5)/100 * PRODUCE(5) -
PROFIT(6)/100 * PRODUCE(6) - PROFIT(8)/100 * PRODUCE(8) - PROFIT(9)/100 * PRODUCE(9) ;
!Equalization of profit Allow 1 (Sales PROFIT - PROFIT PROFIT);
@SUM(PRODUCT(I)|I #LE# 3: @IF( I #EQ# 1, PRODUCE(I),-1*PRODUCE(I))) = 0;
!Silicon (Total weight of the A + B alloy divided by the total weight of Y must be less than or equal to 13%);
USAGE(1,1)/100 * PRODUCE(1) - USAGE(1,2)/100 * PRODUCE(2) - USAGE(1,3)/100 * PRODUCE(3) > 0;
!Iron (Total weight of the A + B alloy divided by the total weight of Y must be less than or equal to 10%);
USAGE(2,1)/100 * PRODUCE(1) - USAGE(2,2)/100 * PRODUCE(2) - USAGE(2,3)/100 * PRODUCE(3) > 0;
!Aluminum (Total weight of the A + B alloy divided by the total weight of Y must be greater than or equal to 80%);
USAGE(3,1)/100 * PRODUCE(1) - USAGE(3,2)/100 * PRODUCE(2) - USAGE(3,3)/100 * PRODUCE(3) < 0;
!Equalization of profit Allow 2 (Sales PROFIT - PROFIT PROFIT);
@SUM(PRODUCT(I)|I #EQ# 4 #OR# I #EQ# 5 #OR# I #EQ# 6: @IF( I #EQ# 4, PRODUCE(I),-1*PRODUCE(I))) = 0;
!Silicon (Total weight of the A + B alloy divided by the total weight of Y must be less than or equal to 14%;
USAGE(1,4)/100 * PRODUCE(4) - USAGE(1,5)/100 * PRODUCE(5) - USAGE(1,6)/100 * PRODUCE(6) > 0;
!Iron (Total weight of the A + B alloy divided by the total weight of Y must be less than or equal to 11%);
USAGE(2,4)/100 * PRODUCE(4) - USAGE(2,5)/100 * PRODUCE(5) - USAGE(2,6)/100 * PRODUCE(6) > 0;
!Aluminum (Total weight of the A + B alloy divided by the total weight of Y must be greater than or equal to 78%);
USAGE(3,4)/100 * PRODUCE(4) - USAGE(3,5)/100 * PRODUCE(5) - USAGE(3,6)/100 * PRODUCE(6) < 0;
!Equalization of profit Allow 3 (Sales PROFIT - PROFIT PROFIT);
@SUM(PRODUCT(I)|I #EQ# 7 #OR# I #EQ# 8 #OR# I #EQ# 9: @IF( I #EQ# 7, PRODUCE(I),-1*PRODUCE(I))) = 0;
!Silicon (Total weight of the A + B alloy divided by the total weight of Y must be less than or equal to 13%;
USAGE(1,7)/100 * PRODUCE(7) - USAGE(1,8)/100 * PRODUCE(8) - USAGE(1,9)/100 * PRODUCE(9) > 0;
!Iron (Total weight of the A + B alloy divided by the total weight of Y must be less than or equal to 8%);
USAGE(2,7)/100 * PRODUCE(7) - USAGE(2,8)/100 * PRODUCE(8) - USAGE(2,9)/100 * PRODUCE(9) > 0;
!Aluminum (Total weight of the A + B alloy divided by the total weight of Y must be greater than or equal to 72%);
USAGE(3,7)/100 * PRODUCE(7) - USAGE(3,8)/100 * PRODUCE(8) - USAGE(3,9)/100 * PRODUCE(9) < 0;
! Stock limit restriction;
@SUM(PRODUCT(I)| I #EQ# 2 #OR# I #EQ# 5 #OR# I #EQ# 8: PRODUCE(I)) <= 600;
@SUM(PRODUCT(I)| I #EQ# 3 #OR# I #EQ# 6 #OR# I #EQ# 9: PRODUCE(I)) <= 800;
ENDSUBMODEL

348
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 5 | Metallurgy

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " STOCK (kg):", @NEWLINE( 1));
@TABLE(STOCK);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX5);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE( J) #GT# 0: ' ',PRODUCT(J),' ',
@FORMAT(PRODUCE(J),'%4.0f'),
@IF(J #EQ# 5 #OR# J #EQ# 6 #OR# J #EQ# 8 #OR# J #EQ# 9, '-',' '),' kg x Selling price p/kg: $',
@FORMAT( PROFIT(J)/100 ,'%4.3f'),' = Total: $',
@FORMAT( PROFIT(J)/100 * PRODUCE(J), '%3.0f'),
@IF(J #EQ# 5 #OR# J #EQ# 6 #OR# J #EQ# 8 #OR# J #EQ# 9, '-',' '),
@NEWLINE(1));
@WRITE( ' Total: ',
@FORMAT(PRODUCE(5) + PRODUCE(6) + PRODUCE(8) + PRODUCE(9),'%4.0f'),' kg (Stock used)',
@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

349
C2-B12 Solving Problems with LINGO Aluminum Alloys | Case 5 | Metallurgy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
FORMULA (%):
ALLOY1_Y ALLOY1_A ALLOY1_B ALLOY2_Y ALLOY2_A ALLOY2_B ALLOY3_3 ALLOY3_A ALLOY3_B
SILICON 13.00000 15.00000 10.00000 14.00000 15.00000 10.00000 13.00000 15.00000 10.00000
DATA:
IRON
DATA: 10.00000 13.00000 5.000000 11.00000 13.00000 5.000000 8.000000 13.00000 5.000000
FORMULA
ALUMINUM (%):
80.00000
FORMULA (%): 72.00000 85.00000 78.00000 72.00000 85.00000 83.00000 72.00000 85.00000
ALLOY1_Y
ALLOY1_Y ALLOY1_A
ALLOY1_A ALLOY1_B
ALLOY1_B ALLOY2_Y
ALLOY2_Y ALLOY2_A
ALLOY2_A ALLOY2_B
ALLOY2_B ALLOY3_3
ALLOY3_3 ALLOY3_A
ALLOY3_A ALLOY3_B
ALLOY3_B
PROFIT:
SILICON 13.00000 15.00000 10.00000 14.00000 15.00000 10.00000 13.00000 15.00000 10.00000
SILICON 8.000000
ALLOY1_Y 13.00000 15.00000 10.00000 14.00000 15.00000 10.00000 13.00000 15.00000 10.00000
IRON 10.00000 13.00000 5.000000 11.00000 13.00000 5.000000 8.000000 13.00000 5.000000
IRON
ALLOY1_A 10.00000
3.000000 13.00000 5.000000 11.00000 13.00000 5.000000 8.000000 13.00000 5.000000
ALUMINUM 5.000000
ALLOY1_B 80.00000 72.00000 85.00000 78.00000 72.00000 85.00000 83.00000 72.00000 85.00000
ALUMINUM 80.00000 72.00000 85.00000 78.00000 72.00000 85.00000 83.00000 72.00000 85.00000
ALLOY2_Y 7.000000
PROFIT:
ALLOY2_A 3.000000
PROFIT:
ALLOY2_B
ALLOY1_Y 5.000000
8.000000
ALLOY1_Y10.00000
ALLOY3_3
ALLOY1_A 8.000000
3.000000
ALLOY1_A
ALLOY3_A 3.000000
3.000000
ALLOY1_B 5.000000
ALLOY3_B
ALLOY1_B5.000000
5.000000
ALLOY2_Y 7.000000
ALLOY2_Y 3.000000
ALLOY2_A 7.000000
STOCK (kg):
ALLOY2_A0.000000
ALLOY2_B
ALLOY1_Y 3.000000
5.000000
ALLOY2_B
ALLOY1_A 5.000000
600.0000
ALLOY3_3 10.00000
ALLOY3_3
ALLOY1_B 10.00000
800.0000
ALLOY3_A 3.000000
ALLOY2_Y
ALLOY3_A 0.000000
3.000000
ALLOY3_B 5.000000
ALLOY2_A 600.0000
ALLOY3_B 5.000000
ALLOY2_B 800.0000
STOCK (kg):
ALLOY3_3 0.000000
STOCK (kg):
ALLOY1_Y
ALLOY3_A 0.000000
600.0000
ALLOY1_Y
ALLOY3_B 0.000000
800.0000
ALLOY1_A 600.0000
ALLOY1_A 800.0000
ALLOY1_B 600.0000
SOLUTION:
ALLOY1_B
ALLOY2_Y 800.0000
0.000000
Global optimal solution found.
ALLOY2_A
ALLOY2_Y 600.0000
0.000000
Objective value: 52.00000
ALLOY2_B
ALLOY2_A 800.0000
600.0000
Infeasibilities: 0.000000
ALLOY3_3
ALLOY2_B 0.000000
800.0000
❖ SOLUTION
Model Class: LP
ALLOY3_A
ALLOY3_3 600.0000
0.000000
ALLOY3_B
ALLOY3_A 800.0000
600.0000
Below is the solution
IDEAL PLANNING
ALLOY3_B achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
PROGRAM:
800.0000
SOLUTION: 1
Global
SOLUTION:optimal solution found.
Objective value:
Global optimal solution found. 52.00000
Infeasibilities:
Objective value: 0.000000
52.00000
Infeasibilities: 0.000000
Model Class: LP
Model Class: LP
IDEAL PLANNING PROGRAM:
ALLOY2_Y 1000
IDEAL PLANNING kg x Selling price
PROGRAM: p/kg: $0.070 = Total: $ 70 1
ALLOY2_A 538- kg x Selling price p/kg: $0.030 = Total: $ 16-
ALLOY2_B 462- kg x Selling price p/kg: $0.050 = Total: $ 23- 1
ALLOY3_3 400 kg x Selling price p/kg: $0.100 = Total: $ 40
ALLOY3_A 62- kg x Selling price p/kg: $0.030 = Total: $ 2-
ALLOY3_B 338- kg x Selling price p/kg: $0.050 = Total: $ 17-
Total: 1400 kg (Stock used)

350
Amount Available (lb):
PIG_IRON1 0.10E+31
PIG_IRON2 0.10E+31
FERRO_SI1 0.10E+31
C2-B12 Solving Problems FERRO_SI2
with LINGO 0.10E+31 Blending | Case 6 | Metallurgy
ALLOY1 0.10E+31
ALLOY2 0.10E+31
GOAL ALLOY3 0.10E+31
CARBIDE
The Pittsburgh 20.00000
Steel (PS) Co. has been contracted to produce a new type of very high carbon

6 Manganese
STEEL1
steel which
STEEL2
200.0000
has the following tight quality requirements: Carbon Content, Chrome Content ,
200.0000
Content and Silicon Content, PS has the following materials available for mixing up a
batch: STEEL3 200.0000

At Least (%):
CARBON 0.0300000
Blocks CHROME 0.0030000
• Product Mix MANGANESE 0.0135000
SILICON 0.0270000
• Blend
• Finance Not More Than (%):
CARBON 0.0350000
• Investments
CHROME 0.0045000
• Diet MANGANESE 0.0165000
• Aviation SILICON 0.0300000

• Transport SOLUTION:
A one-ton (2000-Lb.) batch must be blended, which satisfies the quality requirements stated
• Agriculture earlier. Global optimal
The problem solution
now is what amounts found.
of each of the eleven materials should be blended
togetherObjective value:
to minimize the cost, but satisfy the quality requirements. 59
• Construction Infeasibilities: 0.
An experienced steel man claims the least cost mix will not use any more than nine of the eleven
• Refinery
available raw materials. What is a good blend?
Model Class: LP
• Schedule
Most of the eleven prices and four quality control requirements are negotiable. Which prices and
• Cutting IDEALarePLANNING
requirements PROGRAM:
worth negotiating?
• Metallurgy
PIG_IRON1 Used: 1474.3 Pouds x Cost per Pound: $0.03000 = Total: $44
Note the chemical content
PIG_IRON2 of a blend
Used: is simply
60.0 the weighted
Pouds x Costaverage of the chemical
per Pound: content=ofTotal:
$0.06450 its $ 3
• Fertilizer components. Thus, for example, if we make a blend of 40% Alloy 1 and 60% Alloy 2, the
manganese content is (0.40) × 60 + (0.60) × 9 = 29.4.
• Clinic
Formulation and Solution of the Pittsburgh Steel Blending Problem. The PS blending problem can
• Classic
be formulated as an LP with 11 variables and 13 constraints. The 11 variables correspond to the
• Dynamic 11 raw materials from which we can choose.

• Logistics Four constraints are from the upper usage limits on silicon carbide and steels. Four of the
constraints are from the lower quality limits. Another four constraints are from the upper quality
• Energy
limits.
• Assembly Line
The thirteenth constraint is the requirement that the weight of all materials used must sum to 2000
pounds. Notice only 7 of the 11 raw materials were used. In actual practice, this type of LP was
solved on a twice-monthly basis by Pittsburgh Steel.
Keywords:
• Alloy The purchasing agent used the first solution, including the reduced cost and dual prices, as a
guide in buying materials. The second solution later in the month was mainly for the metallurgist’s
• Mineral benefit in making up a blend from the raw materials actually on hand.
• Chemical Suppose we can pump oxygen into the furnace. This oxygen combines completely with carbon to
• Blend produce the gas CO2, which escapes. The oxygen will burn off carbon at the rate of 12 pounds of
carbon burned off for each 32 pounds of oxygen. Oxygen costs two cents a pound. If you
reformulated the problem to include this additional option, would it change the decisions?
Source:
The oxygen injection option to burn off carbon is clearly uninteresting because, in the current
• Book 5 solution, it is the lower bound constraint rather than the upper bound on carbon that is binding.
• Page 235 Thus, burning off-carbon by itself, even if it could be done at no expense, would increase the total
cost of the solution.

351
C2-B12 Solving Problems with LINGO Blending | Case 6 | Metallurgy

MODEL:

SETS:
LCOL /
LIM_RM_CB, ! Raw Material available - Carbon;
LIM_RM_SI1, ! Raw Material available - Silicon 1;
LIM_RM_SI2, ! Raw Material available - Silicon 2;
LIM_RM_SI3, ! Raw Material available - Silicon 3;
LIM_CB_MIN, ! Quality requirements, Minimum Carbon;
LIM_CB_MAX, ! Quality requirements, Maximum Carbon;
LIM_CH_MIN, ! Quality requirements, Minimum Chrome;
LIM_CH_MAX, ! Quality requirements, Maximum Chrome;
LIM_MG_MIN, ! Quality requirements, Minimum Manganese;
LIM_MG_MAX, ! Quality requirements, Maximum Manganese;
LIM_SI_MIN, ! Quality requirements, Minimum Silicon;
LIM_SI_MAX, ! Quality requirements, Maximum Silicon;
LIM_FINISH ! Finish good requirements;
/:LIMIT;

RESOURCE:
COST, ! Cost per pound;
CARBON, ! Percent Carbon;
CHROME, ! Percent Chrome;
MANGANESE, ! Percent Manganese;
SILICON, ! Percent Silicon;
STOCK, ! Amount Available;
PRODUCE; ! Volume produced;

CONTENT:
AT_LEAST, ! Quality requirements;
NOT_MORE_THAN; ! Quality requirements;
ENDSETS

DATA:
! Resources attributes;
RESOURCE, COST, CARBON, CHROME, MANGANESE, SILICON, STOCK =
Pig_Iron1 0.0300 4.0 0.0 0.9 2.25 1.E30
Pig_Iron2 0.0645 0.0 10.0 4.5 15.00 1.E30
Ferro_SI1 0.0650 0.0 0.0 0.0 45.00 1.E30
Ferro_SI2 0.0610 0.0 0.0 0.0 42.00 1.E30
Alloy1 0.1000 0.0 0.0 60.0 18.00 1.E30
Alloy2 0.1300 0.0 20.0 9.0 30.00 1.E30
Alloy3 0.1190 0.0 8.0 33.0 25.00 1.E30
Carbide 0.0800 15.0 0.0 0.0 30.00 20
Steel1 0.0210 0.4 0.0 0.9 0.00 200
Steel2 0.0200 0.1 0.0 0.3 0.00 200
Steel3 0.0195 0.1 0.0 0.3 0.00 200;

! Requirements;
CONTENT, AT_LEAST, NOT_MORE_THAN =
Carbon 0.0300 0.0350
Chrome 0.0030 0.0045
Manganese 0.0135 0.0165
Silicon 0.0270 0.0300;
ENDDATA

352
C2-B12 Solving Problems with LINGO Blending | Case 6 | Metallurgy
SUBMODEL BLD:
[OBJ] MIN = @SUM(RESOURCE(I): COST(I) * PRODUCE(I));
! Raw material;
LIMIT( 1) = STOCK( 8);
LIMIT( 2) = STOCK( 9);
LIMIT( 3) = STOCK(10);
LIMIT( 4) = STOCK(11);
! Content;
LIMIT( 5) = AT_LEAST(1) * 2000;
LIMIT( 6) = NOT_MORE_THAN(1) * 2000;
LIMIT( 7) = AT_LEAST(2) * 2000;
LIMIT( 8) = NOT_MORE_THAN(2) * 2000;
LIMIT( 9) = AT_LEAST(3) * 2000;
LIMIT(10) = NOT_MORE_THAN(3) * 2000;
LIMIT(11) = AT_LEAST(4) * 2000;
LIMIT(12) = NOT_MORE_THAN(4) * 2000;
! Finish good requirements;
LIMIT(13) = 2000;
! Raw material availabilities;
[RMCB] PRODUCE(8) <= STOCK(8);
[RMSI1] PRODUCE(9) <= STOCK(9);
[RMSI2] PRODUCE(10) <= STOCK(10);
[RMSI3] PRODUCE(11) <= STOCK(11);
! Carbon content (Quality requirements on);
[CCBA] @SUM(RESOURCE(I): CARBON/100*PRODUCE(I)) >= LIMIT( 5);
[CCBN] @SUM(RESOURCE(I): CARBON/100*PRODUCE(I)) <= LIMIT( 6);
! Chrome content (Quality requirements on);
[CCHA] @SUM(RESOURCE(I): CHROME/100*PRODUCE(I)) >= LIMIT( 7);
[CCHN] @SUM(RESOURCE(I): CHROME/100*PRODUCE(I)) <= LIMIT( 8);
! Manganese content (Quality requirements on);
[CMGA] @SUM(RESOURCE(I): MANGANESE/100*PRODUCE(I)) >= LIMIT( 9);
[CMGN] @SUM(RESOURCE(I): MANGANESE/100*PRODUCE(I)) <= LIMIT(10);
! Silicon content (Quality requirements on);
[CSIA] @SUM(RESOURCE(I): SILICON/100*PRODUCE(I)) >= LIMIT(11);
[CSIN] @SUM(RESOURCE(I): SILICON/100*PRODUCE(I)) <= LIMIT(12);
! Finish good requirements (Quality requirements on);
[FGR] @SUM(RESOURCE(I):PRODUCE(I)) = LIMIT(13);
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
@SET('LINLEN',120); ! Terminal page width (0:none);
@WRITE(" DATA:", @NEWLINE( 1), " Cost per Pound:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " Percent Carbon:", @NEWLINE( 1));
@TABLE(CARBON);
@WRITE(" ", @NEWLINE( 1), " Percent Chrome:", @NEWLINE( 1));
@TABLE(CHROME);
@WRITE(" ", @NEWLINE( 1), " Percent Manganese:", @NEWLINE( 1));
@TABLE(MANGANESE);
@WRITE(" ", @NEWLINE( 1), " Percent Silicon:", @NEWLINE( 1));
@TABLE(SILICON);
@WRITE(" ", @NEWLINE( 1), " Amount Available (lb):", @NEWLINE( 1));
@TABLE(STOCK);
@WRITE(" ", @NEWLINE( 1), " At Least (%):", @NEWLINE( 1));
@TABLE(AT_LEAST);
@WRITE(" ", @NEWLINE( 1), " Not More Than (%):", @NEWLINE( 1));
@TABLE(NOT_MORE_THAN);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(BLD);
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RESOURCE(I) | PRODUCE(I) #GT# 0: ' ',
@FORMAT(RESOURCE(I),'-9s'), ' Used: ',
@FORMAT(PRODUCE(I),'%6.1f'),' Pouds x Cost per Pound: $',
@FORMAT(COST(I), '%7.5f'),' = Total: $',
@FORMAT(COST(I) * PRODUCE(I),'%8.5f'),
@NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(BLD);
ENDCALC
END

353
C2-B12 Solving Problems with LINGO Blending | Case 6 | Metallurgy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
Cost per Pound: Percent Manganese:
PIG_IRON1 0.0300000 PIG_IRON1 0.900000
PIG_IRON2 0.0645000 PIG_IRON2 4.500000
FERRO_SI1 0.0650000 FERRO_SI1 0.000000
FERRO_SI2 42.00000
FERRO_SI2 0.0610000 FERRO_SI2 0.000000
ALLOY1
ALLOY1 18.00000
0.1000000 ALLOY1 60.00000
ALLOY2
ALLOY2 30.00000
0.1300000 ALLOY2 9.000000
FERRO_SI2
ALLOY3
ALLOY3 42.00000
0.1190000
25.00000
ALLOY3 33.00000
ALLOY1
CARBIDE 18.00000
0.0800000 CARBIDE 0.000000
CARBIDE
STEEL1
30.00000
0.0210000 STEEL1 0.900000
ALLOY2
STEEL1 30.00000
0.000000
STEEL2 0.0200000 STEEL2 0.300000
ALLOY3 25.00000 STEEL3 0.300000
STEEL2
STEEL3 0.000000
0.0195000
CARBIDE 30.00000
STEEL3 0.000000
STEEL1 0.000000
Percent Carbon: Percent Silicon:
STEEL2
PIG_IRON1 0.000000
4.000000 PIG_IRON1 2.250000
Amount Available
PIG_IRON2 (lb):
0.000000 PIG_IRON2 15.00000
STEEL3 0.000000
PIG_IRON1
FERRO_SI1 0.1000000E+31
0.000000 FERRO_SI1 45.00000
PIG_IRON2
FERRO_SI2 0.1000000E+31
0.000000 FERRO_SI2 42.00000
Amount
ALLOY1Available (lb):
0.000000 ALLOY1 18.00000
FERRO_SI1 0.1000000E+31
PIG_IRON1
ALLOY2 0.1000000E+31
0.000000 ALLOY2 30.00000
FERRO_SI2 0.1000000E+31 ALLOY3 25.00000
PIG_IRON2
ALLOY3 0.1000000E+31
0.000000
ALLOY1
CARBIDE 0.1000000E+31
15.00000 CARBIDE 30.00000
FERRO_SI1 0.1000000E+31
ALLOY2
STEEL1 0.1000000E+31
0.400000 STEEL1 0.000000
FERRO_SI2 0.1000000E+31 STEEL2 0.000000
ALLOY3
STEEL2 0.1000000E+31
0.100000
ALLOY1
STEEL3 0.1000000E+31
0.100000 STEEL3 0.000000
CARBIDE 20.00000
ALLOY2 0.1000000E+31
STEEL1 200.0000 Amount Available (lb):
ALLOY3 0.1000000E+31
Percent Chrome:
STEEL2
PIG_IRON1 200.0000
0.000000 PIG_IRON1 0.10E+31
CARBIDE 20.00000
STEEL3
PIG_IRON2
STEEL1
200.0000
10.00000
200.0000
PIG_IRON2 0.10E+31
FERRO_SI1 0.000000 FERRO_SI1 0.10E+31
STEEL2
FERRO_SI2 200.0000 FERRO_SI2 0.10E+31
At Least (%):0.000000
STEEL3 200.0000 ALLOY1 0.10E+31
ALLOY1 0.000000
CARBON
ALLOY2 0.3000000E-01
20.00000 ALLOY2 0.10E+31
CHROME
At ALLOY3 0.3000000E-02
Least (%):8.000000 ALLOY3 0.10E+31
MANGANESE
CARBIDE
CARBON 0.1350000E-01
0.000000
0.3000000E-01
CARBIDE 20.00000
STEEL1
SILICON 0.000000
0.2700000E-01 STEEL1 200.0000
CHROME
STEEL2 0.3000000E-02
0.000000 STEEL2 200.0000
MANGANESE
STEEL3 0.1350000E-01
0.000000 STEEL3 200.0000
Not More Than
SILICON (%):
0.2700000E-01
CARBON 0.3500000E-01
Percent Manganese: At Least (%):
PIG_IRON1
CHROME 0.900000
0.4500000E-02 CARBON 0.0300000
Not More Than
PIG_IRON2 (%):
4.500000 CHROME 0.0030000
MANGANESE
CARBON 0.1650000E-01
0.3500000E-01
FERRO_SI1 0.000000 MANGANESE 0.0135000
SILICON 0.3000000E-01
❖ SOLUTION
CHROME
FERRO_SI2 0.4500000E-02
0.000000 SILICON 0.0270000
ALLOY1
MANGANESE 60.00000
0.1650000E-01
SOLUTION:
ALLOY2
Below
SILICON 9.000000
is the solution achieved byNot
0.3000000E-01 More with
LINGO Than (%):
infeasibilities 0, and the detailed report that makes up the optimal
ALLOY3optimal
Global 33.00000
solution found. CARBON 0.0350000
CARBIDE 0.000000 CHROME 0.0045000
Objective
SOLUTION:
STEEL1
value:
0.900000
59.55629
MANGANESE 0.0165000
Infeasibilities:
Global optimal solution found. SILICON
STEEL2 0.300000 0.0300000 0.000000
STEEL3
Objective 0.300000
value: 59.55629
Model Class: LP
Infeasibilities: SOLUTION: 0.000000
Percent Silicon: Global optimal solution found.
PIG_IRON1 2.250000 Objective value: 59.55629
IDEAL
Model PLANNING LPPROGRAM:
Class: 15.00000
PIG_IRON2 Infeasibilities: 0.000000
PIG_IRON1
FERRO_SI1 Used: 1474.3
45.00000 Pouds x Cost per Pound: $0.03000 = Total: $44.22792
PIG_IRON2
FERRO_SI2
IDEAL Used:
PLANNING42.00000 60.0
PROGRAM: Pouds Model
x Cost per LP
Class: Pound: $0.06450 = Total: $ 3.87000
ALLOY1
FERRO_SI2 18.00000 22.1
Used: Pouds
PIG_IRON1 Used: 1474.3 Pouds x Cost per Pound:
x Cost per Pound: $0.06100
$0.03000 == Total:
Total: $ 1.34579
$44.22792
ALLOY2 30.00000 IDEAL PLANNING PROGRAM:$0.10000 = Total: $ 1.42389
ALLOY1
PIG_IRON2 Used:
Used: 14.2 Pouds x Cost per Pound:
ALLOY3 25.00000 60.0 Pouds x Cost per Pound: $0.06450 = Total: $ 3.87000
STEEL1
FERRO_SI2 Used: 200.0
30.00000 22.1 Pouds PIG_IRON1
x Cost per Used: 1474.3 Pouds x Cost per Pound: $0.03000 = Total: $44.22792
Pound: $0.02100 = Total: $ 4.20000
CARBIDE PIG_IRON2 Used: 60.0$0.06100
Pouds x Cost per Pound:1.34579
$0.06450 = Total: $ 3.87000
STEEL2
ALLOY1 Used: 29.4
14.2 Pouds x Cost per Pound: $0.02000
$0.10000 = Total: $ 0.58870
1.42389
STEEL3
STEEL1 Used: 200.0 Pouds x Cost per Pound: $0.01950
$0.02100 = Total: $ 13.90000
4.20000 1
STEEL2 Used: 29.4 Pouds x Cost per Pound: $0.02000 = Total: $ 0.58870
SLACK/SURPLUS:
STEEL3 Used: 200.0 Pouds x Cost per Pound: $0.01950 = Total: $ 3.90000
USED LIMIT VALUE
LIM_RM_CB
SLACK/SURPLUS:0.000000 20.00000 -20.00000
LIM_RM_SI1 200.0000
USED 200.0000
LIMIT 0.000000
VALUE
LIM_RM_SI2
LIM_RM_CB 29.43496
0.000000 200.0000
20.00000 -170.5650
-20.00000
LIM_RM_SI3
LIM_RM_SI1 200.0000 200.0000 0.000000
LIM_CB_MIN
LIM_RM_SI2 60.00000
29.43496 60.00000 0.000000
200.0000 -170.5650
LIM_RM_SI3 200.0000 200.0000 0.000000
LIM_CB_MIN 60.00000 60.00000 0.000000 2

354
C2-B12 Solving Problems with LINGO New Type of Steel | Case 7 | Metallurgy

GOAL

7 In this example, the Pittsburgh Steel Co. has been contracted to produce a new type of steel
that has given tight quality requirements.

You have a given amount of materials available for mixing up a batch. A one-ton (2000 lb.)
batch must be blended that satisfies the quality requirements stated earlier.
Blocks The problem now is what amounts of each of the eleven materials should be blended
• Product Mix together so as to minimize the cost but satisfy the quality requirements.

• Blend A steel expert claims that the least cost mix will not use any more than nine of the eleven
• Finance available raw materials. What is a good blend?

• Investments Most of the eleven cost and four quality control requirements are negotiable. Which cost and
• Diet requirements are worth negotiating?

• Aviation Note that the chemical content of a blend is simply the weighted average of the chemical
• Transport content of its components.

• Agriculture Thus, for example: If we make a blend of 40 percent Alloy 1 and 60 percent Alloy 2, the
• Construction manganese content is (0.40)*60+(0.60)*9=29.4.

• Refinery The information used in the model is described below:


• Schedule
• Cutting Formula P1 P2 F1 F2 A1 A2 A3 CB S1 S2 S3

• Metallurgy Carbon lb. 0.0400 0.1500 0.0040 0.0010 0.0010


• Fertilizer
Chrome lb. 0.1000 0.2000 0.0800
• Clinic
Manganese lb. 0.0900 0.0450 0.8000 0.0900 0.3300 0.0090 0.0030 0.0030
• Classic
• Dynamic Silicon lb. 0.0225 0.1500 0.4500 0.4200 0.1800 0.3000 0.2500 0.3000

• Logistics
Cost p/lb. $ 0.0300 0.0645 0.0650 0.6100 0.1000 0.1300 0.1190 0.0800 0.0210 0.0200 0.0195
• Energy
• Assembly Line Available Min Max

Carbon lb. 60 70

Keywords: Chrome lb. 8 9

• Formula Manganese lb. 27 33

• Blend Silicon lb. 60 54

Source:
• Book 5
• Page 236

355
C2-B12 Solving Problems with LINGO New Type of Steel | Case 7 | Metallurgy
MODEL:
SETS:
PRODUCT : COST, PRODUCE;
RESOURCE: AVAILABLE_MIN, AVAILABLE_MAX;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Products attributes;
PRODUCT, COST =
P1 0.03
P2 0.0645
F1 0.065
F2 0.061
A1 0.1
A2 0.13
A3 0.119
CB 0.08
S1 0.021
S2 0.02
S3 0.0195;

! Resources attributes;
RESOURCE, AVAILABLE_MIN, AVAILABLE_MAX =
CARBON 60 70
CHROME 8 9
MANGANESE 27 33
SILICON 54 60;

! Required (%) P1 P2 F1 F2 A1 A2 A3 CB S1 S2 S3;


USAGE = 0.04 0 0 0 0 0 0 0.15 0.004 0.001 0.001 ! CARBON;
0 0.1 0 0 0 0.2 0.08 0 0 0 0 ! CHROME;
0.009 0.045 0 0 0.8 0.09 0.33 0 0.009 0.003 0.003 ! MANGANESE;
0.0225 0.15 0.45 0.42 0.18 0.3 0.25 0.3 0 0 0 ; ! SILICON;
ENDDATA
SUBMODEL MAX10:
[OBJ] MIN = @SUM( PRODUCT( p): COST( p) * PRODUCE( p));
! Finish good requirements;
@SUM( PRODUCT( p): PRODUCE( p)) = 2000;
! Raw material available;
PRODUCE( 8) <= 20;
PRODUCE( 9) <= 200;
PRODUCE( 10) <= 200;
PRODUCE( 11) <= 200;
! The minimum available constraints;
@FOR( RESOURCE( r):
[AVA_MIN] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) >= AVAILABLE_MIN( r););
! The maximum available constraints;
@FOR( RESOURCE( r):
[AVA_MAX] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= AVAILABLE_MAX( r););
ENDSUBMODEL

356
C2-B12 Solving Problems with LINGO New Type of Steel | Case 7 | Metallurgy

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (lbs):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE_MIN (lbs):", @NEWLINE( 1));
@TABLE(AVAILABLE_MIN);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE_MAX (lbs):", @NEWLINE( 1));
@TABLE(AVAILABLE_MAX);
@WRITE(" ", @NEWLINE( 1), " COST p/lbs:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX10);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL MIXING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT( J)| PRODUCE(J) #GT# 0: ' Raw: ',
@FORMAT(PRODUCT( J),'-2s'),', Finish good:',
@FORMAT(PRODUCE( J),'%8.3f'),' lbs x Unit cost: $',
@FORMAT(COST( J),'%7.5f'), ' = Total: $',
@FORMAT(COST( J) * PRODUCE( J),'%5.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

357
C2-B12 Solving Problems with LINGO New Type of Steel | Case 7 | Metallurgy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (lbs):
P1 P2 F1 F2
CARBON 0.0400000 0.00000000 0.0000000 0.0000000
CHROME 0.0000000 0.10000000 0.0000000 0.0000000
MANGANESE 0.0090000 0.04500000 0.0000000 0.0000000
SILICON 0.0225000 0.15000000 0.4500000 0.4200000

A1 A2 A3 CB
CARBON 0.0000000 0.0000000 0.0000000 0.15000000
CHROME 0.0000000 0.20000000 0.0800000 0.0000000
MANGANESE 0.80000000 0.09000000 0.3300000 0.0000000
SILICON 0.18000000 0.30000000 0.2500000 0.30000000

S1 S2 S3
CARBON 0.00400000 0.00100000 0.0010000
CHROME 0.0000000 0.0000000 0.0000000
MANGANESE 0.00900000 0.00300000 0.0030000
SILICON 0.0000000 0.0000000 0.0000000

AVAILABLE_MIN (lbs):
CARBON 60.000000
CHROME 8.0000000
MANGANESE 27.000000
SILICON 54.000000

AVAILABLE_MAX (lbs):
CARBON 70.000000
CHROME 9.0000000
MANGANESE 33.000000
SILICON 60.000000

COST p/lbs:
P1 0.0300000
P2 0.0645000
F1 0.0650000
F2 0.6100000
A1 0.1000000
A2 0.1300000
A3 0.1190000
CB 0.0800000
S1 0.0210000
S2 0.0200000
S3 0.0195000

SOLUTION:
Global optimal solution found.
❖ SOLUTION
Objective value: 59.881703
Infeasibilities: 0.0000000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Model Class: LP

SOLUTION:
IDEAL MIXING PROGRAM:
Global optimal
Raw: P1, Finish solution found.
good:1474.496 lbs x Unit cost: $0.03000 = Total: $44.23
Raw: P2, Finish
Objective value: good: 80.000 lbs x Unit cost: $0.06450 = Total: $ 5.16 59.86528
Raw: F1, Finish good: 15.774 lbs x Unit cost: $0.06500 = Total: $ 1.03
Infeasibilities: 0.000000
Raw: A1, Finish good: 9.586 lbs x Unit cost: $0.10000 = Total: $ 0.96
Raw: S1, Finish good: 200.000 lbs x Unit cost: $0.02100 = Total: $ 4.20

IDEAL MIXING PROGRAM: 1


Raw: P1, Finish good:1474.525 lbs x Unit cost: $0.03000 = Total: $44.24
Raw: P2, Finish good: 80.000 lbs x Unit cost: $0.06450 = Total: $ 5.16
Raw: F2, Finish good: 16.897 lbs x Unit cost: $0.06100 = Total: $ 1.03
Raw: A1, Finish good: 9.590 lbs x Unit cost: $0.10000 = Total: $ 0.96
Raw: S1, Finish good: 200.000 lbs x Unit cost: $0.02100 = Total: $ 4.20
Raw: S2, Finish good: 18.987 lbs x Unit cost: $0.02000 = Total: $ 0.38
Raw: S3, Finish good: 200.000 lbs x Unit cost: $0.01950 = Total: $ 3.90

358
BLOCK 13 Block: FERTILIZER

How to optimize the production of a certain type of fertilizer considering the availability of
raw material, composition and incompatibilities, in order to obtain the lowest cost?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

359
C2-B13 Solving Problems with LINGO Special Fertilizer Production | Case 1 | Fertilizer

GOAL

1 A company wants to produce a certain type of fertilizer. For this, the rules to be considered in
the mathematical model follow.

• The minimum operating capacity of each Garner is 30 kg;


• The raw materials are arranged in 8 Garner;
Blocks
• Each mixer operates only with 3 Garner;
• Product Mix
• Chemical incompatibility has been identified between certain raw materials, such as: G2
• Blend with G3, G3 with G7 and G7 with G8;
• Finance
• The production should be 1000 kg of fertilizer.
• Investments
The composition requires that the fertilizer have at least:
• Diet
• 75 kg of Nitrogen;
• Aviation
• 30 kg of Phosphorus
• Transport
• 15 kg of Potassium
• Agriculture
Auxiliary variables BUILD(1) to BUILD(8) will be used to indicate whether or not the raw
• Construction material enters the fertilizer composition;
• Refinery
To operate with 3 garner it is necessary: BUILD(1) + BUILD(2) + …. + BUILD( 8 ) ≤ 3;
• Schedule
The minimum capacity of the silo should be expressed as: Garner 1: PRODUCE(1 ) - 30 *
• Cutting
BUILD(1) > 0, and thus respectively for the other garner
• Metallurgy
The incompatibility between G(2) and BUILD(3) can be expressed thus: BUILD(2)+ BUILD(3)
• Fertilizer
≤ 1 and thus respectively for the other cases;
• Clinic
To indicate whether the raw material enters or not in the composition should be expressed
• Classic
as: PRODUCE(1)-1000 * BUILD(1) ≤ 0 and thus respectively for the other cases;
• Dynamic
• Logistics
Limit
• Energy Garner G1 G2 G3 G3 G5 G6 G7 G8
Process ( kg )
• Assembly Line Operation 1 1 1 1 1 1 1 1 1000

Nitrogen % 2 3 17 3 40 5 75
Keywords:
Formula Phosphor % 2 5 1 1 3 30
• Chemical
Potassium % 6 1 4 3 15
• Garner
Chemical Incompatibility G2 and G3 G3 and G7 G7 and G8 -
• Blend
Cost $ 12.00 16.00 8.00 26.00 16.00 8.00 11.00 19.00 -

Source:
• Book 1
• Page 96

360
C2-B13 Solving Problems with LINGO Special Fertilizer Production | Case 1 | Fertilizer
MODEL:
SETS:
RESOURCE: LIMIT;
PRODUCT: COST, PRODUCE, BUILD;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, LIMIT =
NITROGEN 75
PHOSPHOR 30
POTASSIUM 15;
! Products attributes;
PRODUCT , COST =
G1 12
G2 16
G3 8
G4 26
G5 16
G6 8
G7 11
G8 19;
! Formula (%) G1 G2 G3 G4 G5 G6 G7 G8;
USAGE = 2 3 0 17 0 3 40 5 ! NITROGEN;
0 0 2 5 0 1 1 3 ! PHOSPHOR;
0 0 0 0 6 1 4 3; ! POTASSIUM;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM( PRODUCT(I): COST(I) * PRODUCE(I));
! Maximum production Limit;
[PRO] @SUM(PRODUCT(I): PRODUCE(I)) = 1000;
! Limits;
[LIM1] @SUM(PRODUCT(J):USAGE(1,J)/100 * PRODUCE(J)) >= LIMIT(1);
[LIM2] @SUM(PRODUCT(J):USAGE(2,J)/100 * PRODUCE(J)) >= LIMIT(2);
[LIM3] @SUM(PRODUCT(J):USAGE(3,J)/100 * PRODUCE(J)) >= LIMIT(3);
! Restriction on indicating whether or not raw material is in composition;
@FOR(PRODUCT(I): [MIX] PRODUCE(I) - 1000 * BUILD(I) <= 0);
! Operating restriction because the mixers are limited to 3 garner;
[GAR3] @SUM(PRODUCT(I): BUILD(I)) <= 3;
! Minimum garner capacity ( 30kg);
@FOR(PRODUCT(I): [GCAP] PRODUCE(I) - 30 * BUILD(I) >= 0);
! Incompatibility between G2 and G3;
[INC1] BUILD(2) + BUILD(3) <= 1;
! Incompatibility between G3 and G7;
[INC2] BUILD(3) + BUILD(7) <= 1;
! Incompatibility between G7 and G8;
[INC3] BUILD(7) + BUILD(8) <= 1;
@FOR(PRODUCT(I):@BIN( BUILD));
ENDSUBMODEL;
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " COST P/KG:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " LIMIT (Kg):", @NEWLINE( 1));
@TABLE(LIMIT);
@WRITE(" ", @NEWLINE( 1)," SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' Garner: ',
@FORMAT(PRODUCT(J),'-3s'), 'Produces:',
@FORMAT(PRODUCE(J),'%4.0f'),'kg x Unit cost: $',
@FORMAT(COST(J),'%5.2f'),' = Total: $' ,
@FORMAT(COST(J) * PRODUCE(J),'%7.2f'),
@NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

361
C2-B13 Solving Problems with LINGO Special Fertilizer Production | Case 1 | Fertilizer

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
G1 G2 G3 G4 G5 G6 G7 G8
NITROGEN 2.000000 3.000000 0.000000 17.00000 0.000000 3.000000 40.00000 5.000000
PHOSPHOR 0.000000 0.000000 2.000000 5.000000 0.000000 1.000000 1.000000 3.000000
POTASSIUM 0.000000 0.000000 0.000000 0.000000 6.000000 1.000000 4.000000 3.000000

COST P/KG:
G1 12.00000
G2 16.00000
G3 8.000000
G4 26.00000
G5 16.00000
G6 8.000000
G7 11.00000
G8 19.00000

LIMIT (Kg):
NITROGEN 75.00000
PHOSPHOR 30.00000
POTASSIUM 15.00000

SOLUTION:
Global optimal solution found.
Objective value: 17800.00
Objective bound: 17800.00
Infeasibilities: 0.000000

Model Class: MILP

IDEAL PLANNING PROGRAM:


Garner: G4 Produces: 300kg x Unit cost: $26.00 = Total: $7800.00
Garner: G6 Produces: 300kg x Unit cost: $ 8.00 = Total: $2400.00
Garner: G8 Produces: 400kg x Unit cost: $19.00 = Total: $7600.00

❖ SOLUTION
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes
SOLUTION:
1
up the optimal
Global optimal solution found.
Objective value:
SOLUTION: 17800.00
Objective bound:
Global optimal solution found. 17800.00
Infeasibilities:
Objective value: 0.000000
17800.00
Objective bound: 17800.00
Model Class: MILP
Infeasibilities: 0.000000

IDEAL Class:
Model PLANNING PROGRAM:
MILP
Garner: G4 Produces: 300kg x Unit cost: $26.00 = Total: $7800.00
Garner:
IDEAL G6 Produces:
PLANNING 300kg x Unit cost: $ 8.00
PROGRAM: = Total: $2400.00
G8 Produces: 300kg
Garner: G4 400kg x Unit cost: $26.00
$19.00 = Total:
Total: $7600.00
$7800.00
Garner: G6 Produces: 300kg x Unit cost: $ 8.00 = Total: $2400.00
SLACK/SURPLUS
Garner: LIMIT =400kg
G8 Produces: RAW MATERIAL (kg):$19.00
x Unit cost: = Total: $7600.00
PROD LIMIT VALUE
G1
SLACK/SURPLUS 0.000000
LIMIT = RAW0.000000 0.000000
MATERIAL (kg):
G2 0.000000
PROD 0.000000
LIMIT 0.000000
VALUE
G3
G1 0.000000 0.000000 0.000000
G4
G2 300.0000
0.000000 1000.000 -700.0000
0.000000 0.000000
G5
G3 0.000000 0.000000 0.000000
G6
G4 300.0000 1000.000 -700.0000
G7
G5 0.000000 0.000000 0.000000
G8
G6 400.0000
300.0000 -600.0000
1000.000 -700.0000
G7 0.000000 0.000000 0.000000
G8
SLACK/SURPLUS400.0000 1000.000
PROD = MINIMUM -600.0000
OPERATION (30kg):
PROD LIMIT VALUE
SLACK/SURPLUS
G1 PROD = MINIMUM
0.000000 OPERATION
0.000000 (30kg):
0.000000
G2 PROD
0.000000 LIMIT
0.000000 VALUE
0.000000
G1
G3 0.000000 0.000000 0.000000
G2
G4 0.000000
30.00000 0.000000 0.000000
300.0000 -270.0000
G3
G5 0.000000 0.000000 0.000000
G4
G6 30.00000 300.0000 -270.0000
G5
G7 0.000000 0.000000 0.000000
G6
G8 30.00000 300.0000
400.0000 -270.0000
-370.0000
G7 0.000000 0.000000 0.000000
G8
SLACK/SURPLUS30.00000
PROD = USED400.0000
(kg): -370.0000 362
PROD LIMIT VALUE
SLACK/SURPLUS
NITROGEN PROD = USED
70.00000 (kg):
75.00000 -5.000000
C2-B13 Solving Problems with LINGO Fertilizer Production | Case 2 | Fertilizer

GOAL

2 A company produces three types of fertilizers, from the mixture of nitrate, phosphate and
potassium based ingredients and an inert component and the selling price of these type of
fertilizers, as detailed below:

Fertilizer Type Components


Blocks Resources / Products Available
FT1 FT2 FT3 Cost
• Product Mix (kg)

• Blend Nitrate % 5 5 10 1200 3,000.00


• Finance Proportional Phosphate % 10 10 10 2000 1,000.00
Component For
• Investments Potassium % 5 10 10 1400 1,800.00
Packing
• Diet
Inertial % 80 75 70 1500 200.00
• Aviation
COST P/PACKAGE $ 34.40 40.00 52.00 -
• Transport
DEMAND pac 650 470 355 -
• Agriculture
FIXED COST PER PACK
• Construction $ 300.00 300.00 300.00 -
(PROD+SALE)
• Refinery
PRICE 4 800.00 960.00 1,100.00 -
• Schedule
• Cutting The cost of blending, packaging and sales promotion is estimated at $300 for any products.
Determine the monthly output in order to maximize profit.
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Chemical
• Blend

Source:
• Book 2
• Page 229

363
C2-B13 Solving Problems with LINGO Fertilizer Production | Case 2 | Fertilizer
MODEL:
SETS:
RESOURCE: AVAILABLE, PRODUCE;
PRODUCT: PRICE, CPACK, CFIXE, DEMAND;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , AVAILABLE =
NITRAT 1200
PHOSPHATE 2000
POTASSIUM 1400
INERTIAL 1500;

! Products attributes;
PRODUCT, PRICE, CPACK, CFIXE, DEMAND =
FT1 800 34 300 650
FT2 960 40 300 470
FT3 1100 52 300 355;

! Formula (%) FT1 FT2 FT3;


USAGE = 5 5 10 ! NITRAT;
10 10 10 ! PHOSPHATE;
5 10 10 ! POTASSIUM;
80 75 70; ! INERTIAL;
ENDDATA
SUBMODEL MAX2:
[OBJ] MAX = @SUM( PRODUCT(I): PRICE(I) * PRODUCE(I)) -
@SUM( PRODUCT(I): CFIXE(I) * PRODUCE(I)) -
@SUM( PRODUCT(I): CPACK(I) * PRODUCE(I));
! The Demand Constraint;
@FOR(PRODUCT(I): [DEM] PRODUCE(I) = DEMAND(I));
! The Available Constraint;
@FOR( RESOURCE(I):[AVA] PRODUCE(I) <= AVAILABLE(I));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " SALES PRICE P/PAC:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " COST P/PAC:", @NEWLINE( 1));
@TABLE(CPACK);
@WRITE(" ", @NEWLINE( 1), " FIXED COST P/PAC:", @NEWLINE( 1));
@TABLE(CFIXE);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE P/PAC:", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " DEMAND (PAC):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-3s'), ' Price:$',
@FORMAT(PRICE(J),'%4.0f'),' x ',
@FORMAT(PRODUCE(J), '%3.0f'),'Pack = Revenue:$',
@FORMAT(PRICE(J) * PRODUCE(J),'%6.0f'),' - Raw cost:$',
@FORMAT(CPACK(J) * PRODUCE(J),'%5.0f'),' - Fixed cost:$',
@FORMAT(CFIXE(J) * PRODUCE(J),'%5.0f'),' = Profit:$',
@FORMAT(PRICE(J) * PRODUCE(J) - CPACK(J) * PRODUCE(J) - CFIXE(J) * PRODUCE(J), '%6.0f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX2);
ENDCALC
END

364
C2-B13 Solving Problems with LINGO Fertilizer Production | Case 2 | Fertilizer

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
FORMULA (%):
FT1 FT2 FT3
NITRAT 5.000000 5.000000 10.00000
PHOSPHATE 10.00000 10.00000 10.00000
POTASSIUM 5.000000 10.00000 10.00000
INERTIAL 80.00000 75.00000 70.00000

SALES PRICE P/PAC:


FT1
DATA:
800.0000
FORMULA (%): 960.0000
FT2
FT3 1100.000
FT1 FT2 FT3
NITRAT 5.000000 5.000000 10.00000
COST P/PAC: 10.00000 10.00000
PHOSPHATE 10.00000
FT1 34.00000 10.00000
POTASSIUM 5.000000 10.00000
FT2
INERTIAL 40.00000 75.00000
80.00000 70.00000
FT3 52.00000
SALES PRICE P/PAC:
FIXED
FT1 COST P/PAC:
800.0000
FT1
FT2 300.0000
960.0000
FT2
FT3 300.0000
1100.000
FT3 300.0000
COST P/PAC:
AVAILABLE
FT1 P/PAC:
34.00000
NITRAT
FT2 1200.000
40.00000
FT3
PHOSPHATE 52.00000
2000.000
POTASSIUM 1400.000
FIXED COST P/PAC:
INERTIAL 1500.000
FT1 300.0000
FT2
DEMAND 300.0000
(PAC):
FT3
FT1 300.0000
650.0000
FT2 470.0000
AVAILABLE
FT3 P/PAC:
355.0000
NITRAT 1200.000
PHOSPHATE 2000.000
SOLUTION:
POTASSIUM
Global 1400.000
optimal solution found.
INERTIAL 1500.000
Objective value: 859840.0
Infeasibilities: 0.000000
DEMAND (PAC):
❖ SOLUTION
FT1 650.0000
Model Class: LP
FT2 470.0000
Below
FT3
is the solution
355.0000
achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
1
SOLUTION:
Global optimal solution found.
Objective value: 859840.0
Infeasibilities: 0.000000

IDEAL
Model PLANNING
Class: LPPROGRAM:
FT1 Price:$ 800 x 650Pack = Revenue:$520000 - Raw cost:$22100 - Fixed cost:$195000 = Profit:$302900
FT2 Price:$ 960 x 470Pack = Revenue:$451200 - Raw cost:$18800 - Fixed cost:$141000 = Profit:$291400 1
FT3 Price:$1100 x 355Pack = Revenue:$390500 - Raw cost:$18460 - Fixed cost:$106500 = Profit:$265540

SLACK/SURPLUS LIMIT = DEMAND (pac):


PROD LIMIT VALUE
FT1 650.0000 650.0000 0.000000
FT2 470.0000 470.0000 0.000000
FT3 355.0000 355.0000 0.000000

SLACK/SURPLUS LIMIT = AVAILABLE (pac):


PROD LIMIT VALUE
NITRAT 650.0000 1200.000 -550.0000
PHOSPHATE 470.0000 2000.000 -1530.000
POTASSIUM 355.0000 1400.000 -1045.000
INERTIAL 0.000000 1500.000 -1500.000

365
C2-B13 Solving Problems with LINGO Fertilizer Production 1 | Case 3 | Fertilizer

GOAL

3
A fertilizer manufacturer wants to produce 1000 kg of product at minimal cost.For this purpose it
uses the raw materials of M1 ... M8, as well as the respective costs.

In the product obtained, the amounts of Nitrogen, Phosphorus and Potassium should be above
the minimum requirements, quoted in MinReq.

Blocks The composition can be seen in Formula.


• Product Mix
• Blend Min_Req
Formula M1 M2 M3 M4 M5 M6 M7 M8
( kg )
• Finance
• Investments
Nitrogen % 2 3 0 17 0 2 4 5 75
• Diet
• Aviation
Phosphor % 0 0 2 5 0 1 1 3 30
• Transport
• Agriculture Potassium % 0 0 0 0 6 1 4 3 15
• Construction
• Refinery Cost (p/kg) $ 12.00 16.00 8.00 26.00 16.00 8.00 11.00 19.00 -

• Schedule
Develop the model that minimizes product costs.
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Chemical
• Blend

Source:
• Book 1
• Page 82

366
C2-B13 Solving Problems with LINGO Fertilizer Production 1 | Case 3 | Fertilizer
MODEL:
SETS:
RESOURCE: MINREQ;
PRODUCT: COST, DEMAND, PRODUCE;
RXP( RESOURCE, PRODUCT): FORMULA;
ENDSETS
DATA:
! Minimum resources required attributes (kg);
RESOURCE , MINREQ =
NITROGEN 75
PHOSPHOR 30
POTASSIUM 15;
! Products attributes (Raw Material);
PRODUCT, COST =
M1 12
M2 16
M3 8
M4 26
M5 16
M6 8
M7 11
M8 19;
! Formula (%) M1 M2 M3 M4 M5 M6 M7 M8;
FORMULA = 2 3 0 17 0 2 4 5 ! NITROGEN;
0 0 2 5 0 1 1 3 ! PHOSPHOR;
0 0 0 0 6 1 4 3; ! POTASSIUM;
ENDDATA
SUBMODEL MIN3:
[OBJ] MIN = @SUM( PRODUCT(I): COST(I) * PRODUCE(I));
! The demand constraint;
@FOR(RESOURCE(I):
@SUM( PRODUCT(J): PRODUCE(J)) = 1000;);
! Minimum required (kg);
@FOR(RESOURCE(I):
@SUM(PRODUCT(J): FORMULA(I,J)/100 * PRODUCE(J)) >= MINREQ(I););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Resets line length;
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA (%):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " COST P/KG:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " MINIMUM REQUIRED (kg):", @NEWLINE( 1));
@TABLE(MINREQ);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN3);
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1), " Produce: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' . ',
@FORMAT(PRODUCT(J),'-2s'), ' ',
@FORMAT(PRODUCE(J), '%4.0f'),' kg x Unit cost: $',
@FORMAT(COST(J),'%5.2f'),' = Total: $',
@FORMAT(COST(J) * PRODUCE(J),'%7.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

367
C2-B13 Solving Problems with LINGO Fertilizer Production 1 | Case 3 | Fertilizer

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA (%):
M1 M2 M3 M4 M5 M6 M7 M8
NITROGEN 2.000000 3.000000 0.000000 17.00000 0.000000 2.000000 4.000000 5.000000
PHOSPHOR 0.000000 0.000000 2.000000 5.000000 0.000000 1.000000 1.000000 3.000000
POTASSIUM 0.000000 0.000000 0.000000 0.000000 6.000000 1.000000 4.000000 3.000000

COST P/KG:
M1 12.00000
M2 16.00000
M3 8.000000
M4 26.00000
M5 16.00000
M6 8.000000
M7 11.00000
M8 19.00000

MINIMUM REQUIRED (kg):


NITROGEN 75.00000
PHOSPHOR 30.00000
POTASSIUM 15.00000

SOLUTION:
Global optimal solution found.
Objective value: 16978.95
Infeasibilities: 0.000000
Total solver iterations: 4
Elapsed runtime seconds: 0.03

Model Class: LP

IDEAL PLANNING PROGRAM:


Produce:

SOLUTION:
❖ SOLUTION
1
Global optimal solution found.
Below is the solution
Objective value: achieved by LINGO with infeasibilities 0, and16978.95
the detailed report that makes up the optimal
Infeasibilities: 0.000000
SOLUTION:
Total solver iterations: 4
Global
Elapsedoptimal
runtimesolution
seconds:found. 0.03
Objective value: 16978.95
Infeasibilities:
Model Class: LP 0.000000
Total solver iterations: 4
Elapsed runtime PROGRAM:
IDEAL PLANNING seconds: 0.03
Produce:
Model
. M3 Class:
242 kg LP x Unit cost: $ 8.00 = Total: $1936.84
. M4 326 kg x Unit cost: $26.00 = Total: $8484.21
IDEAL
. M7 PLANNING
205 kg PROGRAM:
x Unit cost: $11.00 = Total: $2257.89
Produce:
. M8 226 kg x Unit cost: $19.00 = Total: $4300.00
. M3 242 kg x Unit cost: $ 8.00 = Total: $1936.84
. M4 326 kg x Unit cost: $26.00 = Total: $8484.21
. M7 205 kg x Unit cost: $11.00 = Total: $2257.89
. M8 226 kg x Unit cost: $19.00 = Total: $4300.00

368
C2-B13 Solving Problems with LINGO Fertilizer Production 2 | Case 4 | Fertilizer

GOAL

4
An industry produces three types of fertilizers, FTA, FTB and FTC, from the blend of ingredients
based on Nitrate, Phosphate, Potassium and an inert component. The data for elaboration of the
model follow the following:

Available Cost
Resources / Products FTA FTB FTC
Blocks ( ton) ( p/ton)

• Product Mix Nitrate % 10 10 20 2,200 4,000.00


• Blend
Phosphor % 8 8 8 3,000 2,000.00
• Finance
• Investments Potassium % 10 20 20 1,800 3,000.00
• Diet
Inertial % 72 62 52 infinite 300.00
• Aviation
• Transport Price $ 1,350.00 1,600.00 2,000.00 - -

• Agriculture
The company has a long-term contract for the monthly supply of 5000 tons of FTC fertilizer.
• Construction Elaborate a linear programming model for production, maximizing profits.
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Chemical
• Blend

369
C2-B13 Solving Problems with LINGO Fertilizer Production 2 | Case 4 | Fertilizer

MODEL:
SETS:
RESOURCE: AVAILABLE, COST;
PRODUCT: PRICE, DEMAND, SCOST, PRODUCE;
RXP( PRODUCT, RESOURCE): FORMULA;
ENDSETS
DATA:
! Minimum resources required attributes (kg);
RESOURCE , AVAILABLE, COST =
NITRATE 2200 4000
PHOSPHOR 3000 2000
POTASSIUM 1800 3000
INERTIAL 1.E13 300;
! Products attributes ($/Tons);
PRODUCT, PRICE, DEMAND =
FTA 1350 0
FTB 1600 0
FTC 2000 5000;
! Formula (%) NITRATE PHOSPHOR POTASSIUM INERTIAL;
FORMULA = 10 8 10 72 ! FTA;
10 8 20 62 ! FTB;
20 8 20 52; ! FTC;
ENDDATA
SUBMODEL MAX4:
[OBJ] MAX = @SUM( PRODUCT(I): PRICE(I) * PRODUCE(I)) - SCOST(1) - SCOST(2) - SCOST(3);
! Cost calculation;
@FOR(PRODUCT(I):
SCOST(I) - @SUM(RESOURCE(K) : FORMULA(I,K)/100 * COST(K)) * PRODUCE(I) = 0);
! The Demand constraints;
@FOR(PRODUCT(I): PRODUCE(I) >= DEMAND(I));
! The Available Constraints (Tons);
@FOR(RESOURCE(I)| I #LE# 3:
@SUM(PRODUCT(K) : FORMULA(K,I)/100 * PRODUCE(K)) <= AVAILABLE;);
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
@WRITE(" DATA:", @NEWLINE( 1), " FORMULA = Product vs Raw material (%):", @NEWLINE( 1));
@TABLE(FORMULA);
@WRITE(" ", @NEWLINE( 1), " COST p/tons:", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (tons):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " PRICE (P/tons):", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX4);
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1), " Produce: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J): ' . ',
@FORMAT(PRODUCT(J),'-2s'), ' ',
@FORMAT(PRODUCE(J),'%4.0f'),' tons Price: $',
@FORMAT(PRICE(J) * PRODUCE(J),'%11.2f'), ' - Cost: $',
@FORMAT(@IF(J #EQ# 1, SCOST(1), @IF(J #EQ# 3, SCOST(3), SCOST(2))),'%11.2f' ) ,' = Profit: $',
@FORMAT(PRICE(J) * PRODUCE(J) - @IF(J #EQ# 1, SCOST(1), @IF(J #EQ# 3, SCOST(3), SCOST(2))),'%10.2f'),
@NEWLINE( 1));
@WRITE(' Totals' , 10*' ', 'Price: $',
@FORMAT(@SUM( PRODUCT(I): PRICE(I) * PRODUCE(I)),'%11.2f' ) , ' - Cost: $',
@FORMAT(SCOST(1)+SCOST(2)+SCOST(3), '%11.2f'), 3*' ', 'Profit: $',
@FORMAT(OBJ,'%10.2f'),
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX4);
ENDCALC
END

370
C2-B13 Solving Problems with LINGO Fertilizer Production 2 | Case 4 | Fertilizer

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
FORMULA = Product vs Raw material (%):
NITRATE PHOSPHOR POTASSIUM INERTIAL
FTA 10.00000 8.000000 10.00000 72.00000
FTB 10.00000 8.000000 20.00000 62.00000
FTC
DATA: 20.00000 8.000000 20.00000 52.00000
FORMULA = Product vs Raw material (%):
COST p/tons: NITRATE
DATA: PHOSPHOR POTASSIUM INERTIAL
NITRATE
FORMULA
FTA = 4000.000
Product
10.00000vs Raw material
8.000000 (%):
10.00000 72.00000
PHOSPHOR 10.00000
FTB 2000.000
NITRATE PHOSPHOR POTASSIUM
8.000000 20.00000 INERTIAL
62.00000
POTASSIUM
FTA
FTC 3000.000
10.00000
20.00000 8.000000
8.000000 10.00000
20.00000 72.00000
52.00000
INERTIAL 10.00000
FTB 300.0000 8.000000 20.00000 62.00000
FTC p/tons: 20.00000
COST 8.000000 20.00000 52.00000
AVAILABLE
NITRATE (tons):
4000.000
NITRATE
COST 2200.000
p/tons:2000.000
PHOSPHOR
NITRATE
PHOSPHOR 4000.000
3000.000
POTASSIUM 3000.000
PHOSPHOR 2000.000
POTASSIUM 300.0000
INERTIAL 1800.000
POTASSIUM
INERTIAL 3000.000
0.1000000E+14
INERTIAL 300.0000
AVAILABLE (tons):
PRICE
NITRATE(P/tons):
2200.000
AVAILABLE
PHOSPHOR
FTA (tons):
3000.000
1350.000
NITRATE
POTASSIUM
FTB 2200.000
1800.000
1600.000
PHOSPHOR
INERTIAL
FTC 3000.000
0.1000000E+14
2000.000
POTASSIUM 1800.000
INERTIAL
PRICE 0.1000000E+14
(P/tons):
SOLUTION:
FTA
Global 1350.000
optimal solution found.
PRICE
FTB (P/tons):
1600.000
Objective value: 3612000.
FTA
FTC
SOLUTION 1350.000
2000.000
❖ Infeasibilities: 0.000000
FTB 1600.000
Below
FTC is the solution
SOLUTION: achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
2000.000
Model Class: LP
Global optimal solution found.
SOLUTION: value:
Objective 3612000.
IDEAL PLANNING PROGRAM:
Global optimal
Infeasibilities: solution found. 0.000000
Produce:
Objective value: 3612000.
Infeasibilities:
Model Class: LP 0.000000
1
Model PLANNING
IDEAL Class: LPPROGRAM:
Produce:
IDEAL PLANNING PROGRAM:
. FTA 8000 tons Price: $10800000.00 - Cost: $ 8608000.00 = Profit: $2192000.00
Produce:
. FTB 0 tons Price: $ 0.00 - Cost: $ 0.00 = Profit: $ 0.00 1
. FTC 5000 tons Price: $10000000.00 - Cost: $ 8580000.00 = Profit: $1420000.00
Totals Price: $20800000.00 - Cost: $17188000.00 = Profit: $3612000.00 1

371
BLOCK 14 Block: INVESTMENTS

How to plan an investment in stocks for example, considering all alternatives involving
risks, yields, limits, government rules, in order to get the highest return?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

372
C2-B14 Solving Problems with LINGO Investment Funds | Case 1 | Investments

GOAL

1 Consider, for example, the case of an investment fund that has the following stock options
considering the rules below:

• Investments are classified by categories: A, B and C


• Government restrictions on investment funds state that:
Blocks
• No single investment may exceed 15% of the total fund capital;
• Product Mix • The total investment by category can’t exceed 40%.
• Blend • The expectation should be equalized at 100%
• Finance
• Investments Resources / Products E1 E2 E3 E4 E5 E6 E7 E8 E9 E10

• Diet
Investments Category A A B C A B A C B C
• Aviation
• Transport
• Agriculture Profit $ 10.00 15.00 5.00 20.00 12.00 15.00 10.00 5.00 5.00 10.00

• Construction
• Refinery
• Schedule Create the template to calculate the best investment solution as well as the fund's profitability.
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• Capital
• Profitability
• Funds

Source:
• Book 1
• Page 53

373
C2-B14 Solving Problems with LINGO Investment Funds | Case 1 | Investments

MODEL:
SETS:
PRODUCT: PROFIT, INDEX, PRODUCE;
ENDSETS
DATA:
! Products attributes;
PRODUCT, INDEX, PROFIT =
E1 1 10
E2 1 15
E3 2 5
E4 3 20
E5 1 12
E6 2 15
E7 1 10
E8 3 5
E9 2 5
E10 3 10;
ENDDATA
SUBMODEL MAX1:
! Maximize profitability;
[OBJ] MAX = @SUM( PRODUCT(I): PROFIT(I)/100 * PRODUCE(I));
[PER] @SUM(PRODUCT(I): PRODUCE(I)) = 100;
!Investment cap by category;
! Category A;
[CAT_A] @SUM(PRODUCT(I) | INDEX(I) #EQ# 1 : PRODUCE(I)) <= 40;
! Category B;
[CAT_B] @SUM(PRODUCT(I) | INDEX(I) #EQ# 2 : PRODUCE(I)) <= 40;
! Category C;
[CAT_C] @SUM(PRODUCT(I) | INDEX(I) #EQ# 3 : PRODUCE(I)) <= 40;
!Invest in up to 15%;
@FOR(PRODUCT(I): [INV] PRODUCE(I) <= 15);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" COMPANIES,INVESTMENT CATEGORY (A=1, B=2, C=3):", @NEWLINE( 1));
@TABLE(INDEX);
@WRITE(" ", @NEWLINE( 1), " COMPANIES,EXPECTED PROFITABILITY (%):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(I): ' CIA:',
@FORMAT(PRODUCT(I),'-3s'), ' Category:', @IF(INDEX(I) #EQ# 1,'A',@IF(INDEX(I) #EQ# 2,'B','C')),', Expected Profitability:',
@FORMAT(PROFIT(I),'%5.2f'), '% x Maximum Investment:',
@FORMAT(PRODUCE(I),'%5.2f'), '% = Profitability:',
@FORMAT(PRODUCE(I) * PROFIT(I)/100,'%5.2f'),'%',
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

374
C2-B14 Solving Problems with LINGO Investment Funds | Case 1 | Investments

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COMPANIES,INVESTMENT CATEGORY (A=1, B=2, C=3):
E1 1.000000
E2 1.000000
E3 2.000000
E4 3.000000
E5 1.000000
E6 2.000000
E7 1.000000
E8 3.000000
DATA:
E9 2.000000
COMPANIES,INVESTMENT CATEGORY (A=1, B=2, C=3):
DATA:
E10
E1 3.000000
1.000000
COMPANIES,INVESTMENT CATEGORY (A=1, B=2, C=3):
E2
E1 1.000000
1.000000
E3 2.000000
COMPANIES,
E2 1.000000EXPECTED PROFITABILITY (%):
E4
E3 3.000000
E1 2.000000
10.00000
E5
E4 1.000000
3.000000
E2 2.000000
E6 15.00000
E5 1.000000
E3 1.000000
E7
E6 5.000000
2.000000
E4 1.000000
E8
E7 20.00000
3.000000
E9
E5 2.000000
E8 12.00000
3.000000
E10
E9 3.000000
2.000000
E6 15.00000
E10 3.000000
E7 10.00000 PROFITABILITY (%):
COMPANIES,EXPECTED
E8 10.00000
E1 5.000000 PROFITABILITY (%):
COMPANIES,EXPECTED
E2 15.00000
E9 10.00000
E1 5.000000
E3
E2 5.000000
15.00000
E10
E4
10.00000
20.00000
E3 5.000000
E5
E4 12.00000
20.00000
SOLUTION:
E6
E5 15.00000
12.00000
Global
E7
E6 optimal solution
10.00000
15.00000 found.
E8 5.000000
Objective value:
E7 10.00000
❖ SOLUTION
E9
E8 5.000000
5.000000
Infeasibilities:
E10 10.00000
E9 5.000000
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
E10 10.00000
CIA:E1 Category:A, Expected
SOLUTION: Profitability:10.0% x Maximum Investment: 0.0% = Profitabilit
Global
CIA:E2 optimal
SOLUTION: solution found.
Category:A, Expected Profitability:15.0% x Maximum Investment:15.0% = Profitabilit
Objective value:
Global optimal solution
Infeasibilities:
found.
CIA:E3 Category:B, Expected Profitability: 5.0% x Maximum Investment: 0.0%12.55000
= Profitabilit
0.000000
Objective value:
CIA:E4 Category:C, Expected Profitability:20.0% x Maximum 12.55000
Investment:15.0% = Profitabilit
Infeasibilities: 0.000000
CIA:E5
Model Category:A,
Class: LP Expected Profitability:12.0% x Maximum Investment:15.0% = Profitabilit
CIA:E6 Category:B,
Model Class: LP Expected Profitability:15.0% x Maximum Investment:15.0% = Profitabilit
IDEAL PLANNING PROGRAM:
CIA:E7 Category:A, Expected Profitability:10.0% x Maximum Investment:10.0% = Profitabilit
CIA:E1 Category:A,
IDEAL PLANNING Expected
PROGRAM: Profitability:10.00% x Maximum Investment: 0.00% = Profitability: 0.00%
CIA:E2
CIA:E1 Category:A, Expected
Category:A, Expected Profitability:15.00%
Profitability:10.00% xx Maximum
Maximum Investment:15.00%
Investment: 0.00% == Profitability:
Profitability: 2.25%
0.00%
CIA:E3
CIA:E2 Category:B,
Category:A, Expected
Expected Profitability:
Profitability:15.00% x Maximum Investment:15.00% = Profitability: 0.00%
5.00% x Maximum Investment: 0.00% = Profitability: 2.25%
CIA:E4
CIA:E3 Category:C,
Category:B, Expected
Expected Profitability:20.00%
Profitability: 5.00% xx Maximum
Maximum Investment:15.00%
Investment: 0.00% == Profitability:
Profitability: 3.00%
0.00%
CIA:E5
CIA:E4 Category:A,
Category:C, Expected
Expected Profitability:12.00%
Profitability:20.00% xx Maximum
Maximum Investment:15.00%
Investment:15.00% == Profitability:
Profitability: 1.80%
3.00%
1
CIA:E6 Category:B, Expected Profitability:15.00% x Maximum Investment:15.00% = Profitability: 2.25%
CIA:E7 Category:A, Expected Profitability:10.00% x Maximum Investment:10.00% = Profitability: 1 1.00%
CIA:E8 Category:C, Expected Profitability: 5.00% x Maximum Investment:10.00% = Profitability: 0.50%
CIA:E9 Category:B, Expected Profitability: 5.00% x Maximum Investment: 5.00% = Profitability: 0.25%
CIA:E10 Category:C, Expected Profitability:10.00% x Maximum Investment:15.00% = Profitability: 1.50%

375
C2-B14 Solving Problems with LINGO Investment Alternatives | Case 2 | Investments

GOAL

2 A person has $8000 to invest in up to 3 investment options (A,B,C), which will provide the
return after 5 years.

Each of the investments can be done in multiples of $1000, and he wants to invest a
maximum of $4000 in a given option. The expected returns are shown below in data.
Blocks
Investments / Products 1 2 3 4
• Product Mix
A $ 2,000.00 5,000.00 7,500.00 10,000.00
• Blend
• Finance B $ 1,500.00 3,500.00 8,000.00 11,000.00

• Investments C $ 1,100.00 2,500.00 8,500.00 10,500.00


• Diet
Value $ 1,000.00 2,000.00 3,000.00 4,000.00
• Aviation
• Transport Knowing that the investor can invest in any options, what should be the investment policy in
order to have the highest overall return?
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• Capital
• Profitability
• Funds

Source:
• Book 1
• Page 100

376
C2-B14 Solving Problems with LINGO Investment Alternatives | Case 2 | Investments
MODEL:
SETS:
PRODUCT : APPLICATION;
RESOURCE: ;
RXP( RESOURCE, PRODUCT): RETURN,PRODUCE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE =
OPTION_A
OPTION_B
OPTION_C;
! Product attributes;
PRODUCT, APPLICATION =
APP_1 1000
APP_2 2000
APP_3 3000
APP_4 4000;
! Return attributes APP_1 APP_2 APP_3 APP_4;
RETURN = 2000 5000 7500 10000 ! OPTION_A;
1500 3500 8000 11000 ! OPTION_B;
1100 2500 8500 10500; ! OPTION_C;
ENDDATA
SUBMODEL MAX2:
! Maximize profitability;
[OBJ] MAX = @SUM( RXP(I,J): RETURN(I,J) * PRODUCE(I,J));
!Investment limit;
[LIM] @SUM( RXP(I,J): APPLICATION(J) * PRODUCE(I,J) )<= 8000;
@FOR( RXP(I,J): [INT] @GIN(PRODUCE(I,J)));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RETURN OF INVESTMENTS:", @NEWLINE( 1));
@TABLE(RETURN);
@WRITE(" ", @NEWLINE( 1), " INVESTMENT VALUE:", @NEWLINE( 1));
@TABLE(APPLICATION);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP(I,J) | PRODUCE(I,J) #GT# 0: ' ',
@FORMAT(RESOURCE(I),'-6s'), ' vs ',
@FORMAT(PRODUCT(J),'-5s'),': $',
@FORMAT(RETURN(I,J),'%6.2f'), ' x',
@FORMAT(PRODUCE(I,J),'%2.0f'), ' = $',
@FORMAT(PRODUCE(I,J) * RETURN(I,J),'%8.2f'), ' Return - Applied: $',
@FORMAT(APPLICATION(J) * PRODUCE(I,J),'%6.2f'), ' = Profit: $',
@FORMAT(PRODUCE(I,J) * RETURN(I,J) - APPLICATION(J) * PRODUCE(I,J),'%8.2f'),
@NEWLINE( 1));
@WRITE(' Maximum return:', 19*' ','$', @FORMAT(OBJ,'%8.2f'),@NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX2);
ENDCALC
END

377
C2-B14 Solving Problems with LINGO Investment Alternatives | Case 2 | Investments

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RETURN OF INVESTMENTS:
APP_1 APP_2 APP_3 APP_4
OPTION_A 2000.000 5000.000 7500.000 10000.00
OPTION_B 1500.000 3500.000 8000.000 11000.00
OPTION_C 1100.000 2500.000 8500.000 10500.00

INVESTMENT VALUE:
APP_1 1000.000
APP_2 2000.000
APP_3 3000.000
APP_4 4000.000

SOLUTION:
Global optimal solution found.
Objective value: 22000.00
Objective bound: 22000.00
Infeasibilities: 0.000000

Model Class: PILP

IDEAL PLANNING PROGRAM:


OPTION_A vs APP_2: $5000.00 x 1 = $ 5000.00 Return - Applied: $2000.00 = Profit: $ 3000.00
OPTION_C vs APP_3: $8500.00 x 2 = $17000.00 Return - Applied: $6000.00 = Profit: $11000.00
Maximum return: $22000.00

❖ SOLUTION
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

SOLUTION:
Global optimal solution found.
Objective value: 22000.00
Objective bound: 22000.00
Infeasibilities: 0.000000 1

IDEAL PLANNING PROGRAM:


OPTION_A vs APP_2: $5000.00 x 1 = $ 5000.00 Return - Applied: $2000.00 = Profit: $ 3000.00
OPTION_C vs APP_3: $8500.00 x 2 = $17000.00 Return - Applied: $6000.00 = Profit: $11000.00
Maximum return: $22000.00

378
C2-B14 Solving Problems with LINGO Share Funds | Case 3 | Investments

GOAL

3 A particular financial institution wants to know how to invest $100,000 in five stock funds in
order to maximize return on investment, where the Share Funds are: A, B, C, D and E.

Resources / Products Share Limit

Blocks Stock Funds A B C D E %

• Product Mix Short Term Y/N N Y N N Y 50

• Blend Long Term Y/N Y N Y Y N 50

• Finance Option Hard Risk Y/N Y N N Y Y 50


• Investments Free Charge ( 1 ) Y/N Y Y N Y N 30
• Diet Free Charge ( 2 ) Y/N Y Y N Y N 40
• Aviation
Profit % 95 80 90 90 90 -
• Transport
• Agriculture
RULES
• Construction
• Invest, 50% of the money in short-term stocks
• Refinery
• Invest up to 50% in high risk stocks.
• Schedule
• Invest at least 30% of the shares free of charge. (1)
• Cutting
• Income from shares that are free of fees must be at least 40% of total interest (2)
• Metallurgy
• The volume of applications must be equalized in 100%
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• Profitability
• Funds
• Risk

Source:
• Book 2
• Page 239

379
C2-B14 Solving Problems with LINGO Share Funds | Case 3 | Investments
MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: LIMIT;
RXP( RESOURCE, PRODUCT): INDEX;
ENDSETS
DATA:
! Resource attributes;
RESOURCE , LIMIT =
SHORT_TERM 50
LONG_TERM 50
HARD_RISK 50
FREE_CHARGE_APP 30
FREE_CHARGE_INT 40;
! Products attributes;
PRODUCT, PROFIT =
SHARE_A 95
SHARE_B 80
SHARE_C 90
SHARE_D 90
SHARE_E 90;
! Index attributes SHARE_A SHARE_B SHARE_C SHARE_D SHARE_E;
INDEX = 0 1 0 0 1 ! SHORT_TERM;
1 0 1 1 0 ! LONG_TERM;
1 0 0 1 1 ! HARD_RISK;
1 1 0 1 0 ! FREE_CHARGE_APP;
1 1 0 1 0; ! FREE_CHARGE_INT;
ENDDATA
SUBMODEL MAX3:
[OBJ] MAX = @SUM( PRODUCT(I): PROFIT(I) * PRODUCE(I));
!Equalization of investment;
[EQU] @SUM( PRODUCT(I): PRODUCE(I)) = 100;
! Invest 50% Short term stocks;
[SHO] @SUM( PRODUCT(I) | INDEX(1,I) #EQ# 1: PRODUCE(I)) <= LIMIT(1);
! Invest 50% long term stocks;
[LON] @SUM( PRODUCT(I) | INDEX(2,I) #EQ# 1: PRODUCE(I)) <= LIMIT(2);
! Limit high-risk applications above 50%;
[HRK] @SUM( PRODUCT(I) | INDEX(3,I) #EQ# 1: PRODUCE(I)) <= LIMIT(3);
! Invest 30% or more in shares free of charges;
[FTX] @SUM( PRODUCT(I) | INDEX(4,I) #EQ# 1: PRODUCE(I)) >= LIMIT(4);
! Free charge + INTEREST SHOULD BE UP TO 40%;
[F40] @SUM( PRODUCT(I) | INDEX(5,I) #EQ# 1: PRODUCE(I)) >= LIMIT(5);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " STOCK FUNDS (1=Yes, 0=No):", @NEWLINE( 1));
@TABLE(INDEX);
@WRITE(" ", @NEWLINE( 1), " PROFIT (%):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " LIMIT (%):", @NEWLINE( 1));
@TABLE(LIMIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX3);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-7s'), ', Return:',
@FORMAT(PRODUCE(J),'%3.0f'),'% x Investment:$100000.00 = Applied:$',
@FORMAT(PRODUCE(J)/100 * 100000, '%7.2f'),' x Rate:',
@FORMAT(PROFIT(j)/1000,'%5.3f'),'%',' = Profit:$',
@FORMAT((PRODUCE(J)/1000 * 100000) * PROFIT(J)/100,'%6.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX3);
ENDCALC
END

380
C2-B14 Solving Problems with LINGO Share Funds | Case 3 | Investments

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
STOCK FUNDS (1=Yes, 0=No):
SHARE_A SHARE_B SHARE_C SHARE_D SHARE_E
SHORT_TERM 0.000000 1.000000 0.000000 0.000000 1.000000
LONG_TERM 1.000000 0.000000 1.000000 1.000000 0.000000
HARD_RISK 1.000000 0.000000 0.000000 1.000000 1.000000
FREE_CHARGE_APP 1.000000 1.000000 0.000000 1.000000 0.000000
FREE_CHARGE_INT 1.000000 1.000000 0.000000 1.000000 0.000000
DATA:
PROFIT (%):
STOCK FUNDS (1=Yes, 0=No):
SHARE_A 95.00000
DATA: SHARE_A SHARE_B SHARE_C SHARE_D SHARE_E
SHARE_B 80.00000
SHORT_TERM
STOCK 0.000000
FUNDS (1=Yes,90.00000
0=No): 1.000000 0.000000 0.000000 1.000000
SHARE_C
LONG_TERM 1.000000 0.000000 1.000000
SHARE_C 1.000000
SHARE_D 0.000000
SHARE_D 90.00000 SHARE_B
SHARE_A SHARE_E
HARD_RISK
SHORT_TERM 1.000000
0.000000 0.000000
1.000000 0.000000
0.000000 1.000000
0.000000 1.000000
1.000000
SHARE_E 90.00000
FREE_CHARGE_APP
LONG_TERM 1.000000
1.000000 1.000000
0.000000 0.000000
1.000000 1.000000
1.000000 0.000000
0.000000
FREE_CHARGE_INT
HARD_RISK 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 0.000000 1.000000 1.000000 0.000000
LIMIT (%):
FREE_CHARGE_APP
SHORT_TERM 1.000000
50.00000 1.000000 0.000000 1.000000 0.000000
PROFIT (%):
FREE_CHARGE_INT 1.000000
LONG_TERM 50.00000 1.000000 0.000000 1.000000 0.000000
SHARE_A 95.00000
HARD_RISK 50.00000
SHARE_B(%):
PROFIT 80.00000
FREE_CHARGE_APP 30.00000
SHARE_C
SHARE_A 90.00000
FREE_CHARGE_INT 95.00000
40.00000
SHARE_D
SHARE_B 90.00000
80.00000
SHARE_E
SHARE_C 90.00000
90.00000
SOLUTION:
SHARE_D 90.00000
Global optimal solution found.
LIMIT (%):
Objective value: 90.00000
SHARE_E 8900.000
SHORT_TERM 50.00000
Infeasibilities: 0.000000
LONG_TERM
LIMIT (%): 50.00000
HARD_RISK
SHORT_TERM 50.00000
Model Class: LP 50.00000
FREE_CHARGE_APP
LONG_TERM 30.00000
50.00000
❖ SOLUTION
FREE_CHARGE_INT 40.00000
HARD_RISK 50.00000
IDEAL PLANNING PROGRAM:
FREE_CHARGE_APP
Below is theReturn:
SHARE_A, 30.00000
solution 20%
achieved by LINGO with infeasibilities
x Investment:$100000.00 0, and the detailed report
= Applied:$20000.00 that makes up
x Rate:0.095% = the optimal
Profit:$1900.00
SOLUTION:
FREE_CHARGE_INT 40.00000
SHARE_B, Return: 20% x Investment:$100000.00 = Applied:$20000.00 x Rate:0.080% = Profit:$1600.00
Global optimal solution found.
SHARE_C, Return: 30% x Investment:$100000.00 = Applied:$30000.00 x Rate:0.090% = Profit:$2700.00
Objective
SOLUTION: value: 8900.000
SHARE_E, Return: 30% x Investment:$100000.00 = Applied:$30000.00 x Rate:0.090% = Profit:$2700.00
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 8900.000
Model Class: LP
Infeasibilities: 0.000000
1
IDEAL
Model PLANNING
Class: LPPROGRAM:
SHARE_A, Return: 20% x Investment:$100000.00 = Applied:$20000.00 x Rate:0.095% = Profit:$1900.00
SHARE_B, Return:PROGRAM:
IDEAL PLANNING 20% x Investment:$100000.00 = Applied:$20000.00 x Rate:0.080% = Profit:$1600.00
SHARE_C,
SHARE_A, Return: 30%
Return: 20% xx Investment:$100000.00
Investment:$100000.00 == Applied:$30000.00
Applied:$20000.00 xx Rate:0.090%
Rate:0.095% == Profit:$2700.00
Profit:$1900.00
SHARE_E,
SHARE_B, Return:
Return: 30%
20% xx Investment:$100000.00
Investment:$100000.00 == Applied:$30000.00
Applied:$20000.00 xx Rate:0.090%
Rate:0.080% == Profit:$2700.00
Profit:$1600.00
SHARE_C, Return: 30% x Investment:$100000.00 = Applied:$30000.00 x Rate:0.090% = Profit:$2700.00
SHARE_E, Return: 30% x Investment:$100000.00 = Applied:$30000.00 x Rate:0.090% = Profit:$2700.00
1

381
C2-B14 Solving Problems with LINGO Research/Development | Case 4 | Investments

GOAL

4 A company has to plan its spending on Research & Development. The information for
developing the model is as follows:

Year / Projects 1 2 3 4 Limit

Blocks 1 $ 70,000 80,000 90,000 50,000 200,000


• Product Mix
2 $ 15,000 20,000 20,000 30,000 70,000
• Blend
• Finance 3 $ 25,000 40,000 70,000
• Investments
4 $ 20,000 15,000 30,000 70,000
• Diet
• Aviation 5 $ 20,000 10,000 20,000 20,000 70,000

• Transport
Profit $ 105,990 128,900 136,140 117,380 -
• Agriculture
• Construction
She pre-selected 4 projects and should choose among which she should prioritize due to
• Refinery budget constraints.
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• Capital
• Profitability
• Funds
• Risk

382
C2-B14 Solving Problems with LINGO Research/Development | Case 4 | Investments
MODEL:
SETS:
PRODUCT : PROFIT, PRODUCE;
RESOURCE: LIMIT;
RXP( RESOURCE, PRODUCT): CAPITAL;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, LIMIT =
YEAR1 200000
YEAR2 70000
YEAR3 70000
YEAR4 70000
YEAR5 70000;
! Products attributes;
PRODUCT, PROFIT =
PROJ1 105990
PROJ2 128900
PROJ3 136140
PROJ4 117380;
! Capital Attributes PROJ1 PROJ2 PROJ3 PROJ4;
CAPITAL = 70000 80000 90000 50000 ! YEAR1;
15000 20000 20000 30000 ! YEAR2;
0 25000 0 40000 ! YEAR3;
20000 15000 30000 0 ! YEAR4;
20000 10000 20000 20000; ! YEAR5;
ENDDATA
SUBMODEL MAX4:
[OBJ] MAX = @SUM( PRODUCT(I): PROFIT(I) * PRODUCE(I));
@FOR( RESOURCE(L):
[LIM] @SUM(PRODUCT(C): CAPITAL(L,C) * PRODUCE(C)) <= LIMIT(L););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " CAPITAL REQUIRED:", @NEWLINE( 1));
@TABLE(CAPITAL);
@WRITE(" ", @NEWLINE( 1), " PROFIT:", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " LIMIT:", @NEWLINE( 1));
@TABLE(LIMIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MAX4);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-5s'), ' Yield rate: ',
@FORMAT(PRODUCE(J),'%7.5f'),'% x Project value: $',
@FORMAT(PROFIT(J), '%7.2f'),' = Profit: $',
@FORMAT(PROFIT(j)*PRODUCE(J),'%9.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX4);
ENDCALC
END

383
C2-B14 Solving Problems with LINGO Research/Development | Case 4 | Investments

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
CAPITAL REQUIRED:
PROJ1 PROJ2 PROJ3 PROJ4
YEAR1 70000.00 80000.00 90000.00 50000.00
YEAR2 15000.00 20000.00 20000.00 30000.00
YEAR3 0.000000 25000.00 0.000000 40000.00
YEAR4 20000.00 15000.00 30000.00 0.000000
YEAR5 20000.00 10000.00 20000.00 20000.00

PROFIT:
DATA:
PROJ1 105990.0
CAPITAL REQUIRED:
PROJ2 128900.0
DATA: PROJ1 PROJ2 PROJ3 PROJ4
PROJ3 REQUIRED:
CAPITAL 136140.0
YEAR1 70000.00 80000.00 90000.00 50000.00
PROJ4 15000.00
YEAR2 117380.0
PROJ1 20000.00
PROJ2 20000.00
PROJ3 30000.00
PROJ4
YEAR3
YEAR1 0.000000
70000.00 25000.00
80000.00 0.000000
90000.00 40000.00
50000.00
LIMIT:
YEAR4
YEAR2 20000.00
15000.00 15000.00
20000.00 30000.00
20000.00 0.000000
30000.00
YEAR1 20000.00
YEAR5
YEAR3 200000.0 10000.00
0.000000 25000.00 20000.00
0.000000 20000.00
40000.00
YEAR2 70000.00
YEAR4 20000.00 15000.00 30000.00 0.000000
YEAR3 20000.00
PROFIT:
YEAR5 70000.00 10000.00 20000.00 20000.00
YEAR4 105990.0
PROJ1 70000.00
YEAR5 70000.00
PROJ2 128900.0
PROFIT:
PROJ3
PROJ1 136140.0
105990.0
SOLUTION:
PROJ4
PROJ2 117380.0
128900.0
Global
PROJ3 optimal
136140.0 solution found.
Objective
LIMIT: value:
PROJ4 117380.0 362625.0
Infeasibilities:
YEAR1 200000.0 0.000000
YEAR2 70000.00
LIMIT:
Model
YEAR1 Class:
YEAR3 LP
70000.00
200000.0
YEAR4
YEAR2 70000.00
IDEAL
YEAR3 PLANNING
❖ SOLUTION
YEAR5 70000.00 PROGRAM:
PROJ1 Yield
YEAR4 70000.00 rate: 1.10680% x Project value: $105990.00 = Profit: $117309.32
Below
PROJ2 is the
YEAR5 Yield
SOLUTION: solution achieved
rate: 0.71845%
70000.00
by LINGO with infeasibilities
x Project 0, and the=detailed
value: $128900.00 Profit: report that makes up the optimal
$ 92607.77
PROJ4 optimal
Global Yield rate: 1.30097%
solution found.x Project value: $117380.00 = Profit: $152707.96
Objective
SOLUTION: value: 362625.0
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 362625.0
Model Class: LP
Infeasibilities: 0.000000
1
IDEAL
Model PLANNING
Class: LPPROGRAM:
PROJ1 Yield rate: 1.10680% x Project value: $105990.00 = Profit: $117309.32
PROJ2 Yield rate:
IDEAL PLANNING 0.71845%
PROGRAM: x Project value: $128900.00 = Profit: $ 92607.77
PROJ4
PROJ1 Yield
Yield rate:
rate: 1.30097%
1.10680% x
x Project
Project value:
value: $117380.00
$105990.00 =
= Profit:
Profit: $152707.96
$117309.32
PROJ2 Yield rate: 0.71845% x Project value: $128900.00 = Profit: $ 92607.77
PROJ4 Yield rate: 1.30097% x Project value: $117380.00 = Profit: $152707.96

384
C2-B14 Solving Problems with LINGO Stock Purchase Plan | Case 5 | Investments

GOAL

5 A retired pension resource planning expert has just consulted with a client who estimated to
have 750000 available to apply next month when he retires. They agreed to consider feasible
the application of the resources in the actions of the following companies:

Maximum Limit For Investing


Products / Resources
Blocks
25% Maturity 50% 35%
• Product Mix
Ranking Company Return $ #Year Y/N Y/N
• Blend
• Finance Excellent ABC Chemical 8.65% 187,500 11 Y N

• Investments Good Alfa Industrial 9.50% 187,500 10 Y Y


• Diet
Reasonable Aurora Foundry 10.0% 187,500 6 N Y
• Aviation
Great Optical Vision 8.75% 187,500 10 Y N
• Transport
• Agriculture Good Delta System 9.25% 187,500 7 N Y

• Construction Very Good Union Bank 9.0% 187,500 13 Y N


• Refinery
At where:
• Schedule
• Cutting • Return: represents the annual interest estimate for each of the shares

• Metallurgy • Maturity: indicates the deadline when the shares are to be redeemed

• Fertilizer • Ranking: indicates the quality or risk of each action


Rules:
• Clinic
• Classic • Do not apply more than 25% in the same company

• Dynamic • At least 50% of the capital in long-term shares with a maturity of 10 years or more

• Logistics • Although Alpha, Aurora and Delta have the highest return, no more than 35% of the capital
can be invested in them
• Energy
• Assembly Line

Keywords:
• Planning
• Profitability
• Funds
• Risk

Source:
• Book 2
• Page 169

385
C2-B14 Solving Problems with LINGO Stock Purchase Plan | Case 5 | Investments

MODEL:
SETS:
RESOURCE: PROFIT, LIMIT, PRODUCE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE , PROFIT, LIMIT =
ABC_CHEMICAL 8.65 187500
ALFA_INDUSTRIAL 9.50 187500
AURORA_FOUNDRY 10.00 187500
OPTICAL_VISION 8.75 187500
DELTA_SYSTEM 9.25 187500
UNION_BANK 9.00 187500;
ENDDATA
SUBMODEL MAX5:
! Maximize profitability;
[OBJ] MAX = @SUM( RESOURCE(I): PROFIT(I)/100 * PRODUCE(I));
! Amount to be invested;
[AMO] @SUM( RESOURCE(I): PRODUCE(I)) = 750000;
! Guarantee that no more than 25% will be invested in the same stock;
@FOR( RESOURCE(I): [G25] PRODUCE(I) <= LIMIT(I));
! 50% of the receivables must be applied in shares with more than 10 years of deadlines;
PRODUCE(1) + PRODUCE(2) + PRODUCE(4) + PRODUCE(6) >= 375000;
! 35% of the resource available classified as good;
PRODUCE(2) + PRODUCE(3) + PRODUCE(5) <= 262500;
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " 25% LIMIT OF $750000 PER CIA:", @NEWLINE( 1));
@TABLE(LIMIT);
@WRITE(" ", @NEWLINE( 1), " RETURN RATE BY CIA (%):", @NEWLINE( 1));
@TABLE(PROFIT);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX5);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RESOURCE(J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(RESOURCE(J),'-17s'), 'Purchase: $',
@FORMAT(PRODUCE(J),'%9.2f'),' x Return rate:',
@FORMAT(PROFIT(J), '%5.2f'),'% = Profit: $',
@FORMAT(PROFIT(J)/100 * PRODUCE(J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX5);
ENDCALC
END

386
C2-B14 Solving Problems with LINGO Stock Purchase Plan | Case 5 | Investments

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
25% LIMIT OF $750000 PER CIA:
ABC_CHEMICAL 187500.0
ALFA_INDUSTRIAL 187500.0
AURORA_FOUNDRY 187500.0
OPTICAL_VISION 187500.0
DELTA_SYSTEM 187500.0
UNION_BANK 187500.0

RETURN RATE BY CIA (%):


DATA:
ABC_CHEMICAL 8.650000
25% LIMIT OF $750000
ALFA_INDUSTRIAL PER CIA:
9.500000
ABC_CHEMICAL
AURORA_FOUNDRY
DATA: 187500.0
10.00000
ALFA_INDUSTRIAL
OPTICAL_VISION
25% LIMIT OF $750000 187500.0
8.750000
PER CIA:
DELTA_SYSTEM
AURORA_FOUNDRY
ABC_CHEMICAL 9.250000
187500.0
187500.0
UNION_BANK
OPTICAL_VISION
ALFA_INDUSTRIAL 9.000000
187500.0
187500.0
DELTA_SYSTEM
AURORA_FOUNDRY 187500.0
187500.0
SOLUTION:
UNION_BANK
OPTICAL_VISION 187500.0
187500.0
Global optimal
DELTA_SYSTEM solution found.
187500.0
Objective
RETURN value:
RATE BY CIA187500.0
UNION_BANK (%): 68887.50
Infeasibilities:
ABC_CHEMICAL 8.650000 0.000000
ALFA_INDUSTRIAL
RETURN RATE BY CIA 9.500000
(%):
ABC_CHEMICAL
AURORA_FOUNDRY Purchase:
10.00000 $112500 x Return rate: 8.65% = Profit: $ 9731
ABC_CHEMICAL 8.650000
ALFA_INDUSTRIAL
OPTICAL_VISION Purchase:8.750000 $ 75000 x Return rate: 9.50% = Profit: $ 7125
ALFA_INDUSTRIAL 9.500000
AURORA_FOUNDRY
DELTA_SYSTEM Purchase:
9.250000 $187500 x Return rate:10.00% = Profit: $18750
AURORA_FOUNDRY
OPTICAL_VISION 10.00000
Purchase:
UNION_BANK
OPTICAL_VISION 9.000000 $187500 x Return rate: 8.75% = Profit: $16406
8.750000
UNION_BANK
❖ SOLUTION Purchase: $187500 x Return rate: 9.00% = Profit: $16875
DELTA_SYSTEM 9.250000
SOLUTION:
UNION_BANK
Below 9.000000
is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal solution found.
Objective value:
SOLUTION: 68887.50
Infeasibilities:
Global optimal solution found. 0.000000
Objective value: 68887.50
Model Class: LP
Infeasibilities: 0.000000

IDEAL Class:
Model PLANNING
LP PROGRAM:
ABC_CHEMICAL Purchase: $112500.00 x Return rate: 8.65% = Profit: $ 9731.25
ALFA_INDUSTRIAL Purchase:
IDEAL PLANNING PROGRAM: $ 75000.00 x Return rate: 9.50% = Profit: $ 7125.00
AURORA_FOUNDRY
ABC_CHEMICAL Purchase:
Purchase: $187500.00
$112500.00 xx Return
Return rate:10.00%
rate: 8.65% == Profit:
Profit: $$18750.00
9731.25
OPTICAL_VISION
ALFA_INDUSTRIAL Purchase:
Purchase: $$187500.00
75000.00 xx Return
Return rate: 9.50%
rate: 8.75% == Profit:
Profit: $$16406.25
7125.00
UNION_BANK
AURORA_FOUNDRY Purchase:
Purchase: $187500.00
$187500.00 xx Return
Return rate: 9.00%
rate:10.00% == Profit:
Profit: $16875.00
$18750.00
OPTICAL_VISION Purchase: $187500.00 x Return rate: 8.75% = Profit: $16406.25
UNION_BANK Purchase: $187500.00 x Return rate: 9.00% = Profit: $16875.00

1 1

387
C2-B14 Solving Problems with LINGO Build and Rent | Case 6 | Investments

GOAL

6 An entrepreneur plans to build apartments for students in a location near a large Federal
University.

Bedroom Apartments
Resources / Products
1 2 3 Limit
Blocks
• Product Mix Size For Unit m2 65 75 95 3,720

• Blend Apt Qty un 15 22 10 40


• Finance
Total Area m2 975 1,650 950 3,575
• Investments
Rental $ 450 550 750 -
• Diet
• Aviation Four types of apartments are defined in the project: 1, 2 or 3 bedroom apartments. The
• Transport apartments measure respectively: 65, 75 and 95 m2.

• Agriculture The entrepreneur believes that the building can’t have more than 15 units of 1 dormitory, of
• Construction 22 of 2 and 10 of 3.

• Refinery The law of zoning in the place does not allow the construction of buildings with more than
• Schedule 40 apartments, and the maximum area of construction is 3,720 m2.

• Cutting The entrepreneur has made an agreement with a local broker for which he will rent 5 one
• Metallurgy bedroom units, 8 of two.

• Fertilizer A Marketing study indicates 1 bedroom units for $450, 2 for $550 and 3 for $750 per
• Clinic month.

• Classic How many units of each type does the entrepreneur need to build so that the potential rent
• Dynamic input is maximized?

• Logistics
• Energy
• Assembly Line

Keywords:
• Planning
• Rental
• Profitability
• Project

Source:
• Book 2
• Page 242

388
C2-B14 Solving Problems with LINGO Build and Rent | Case 6 | Investments
MODEL:
SETS:
RESOURCE: LIMIT;
PRODUCT: RENTAL, EXPECTATION, PRODUCE;
RXP( RESOURCE, PRODUCT): USAGE;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, LIMIT =
GROUND_AREA 3720
QUANT_APT 40
USEFUL_AREA 3575;
! Product attributes;
PRODUCT , RENTAL EXPECTATION =
APT1BED 450 15
APT2BED 550 22
APT3BED 750 10;
! Attributes APT1BED APT2BED APT3BED;
USAGE = 65 75 95 ! GROUND_AREA;
15 22 10 ! QUANT_APT;
975 1650 950; ! USEFUL_AREA;
ENDDATA
SUBMODEL MAX6:
[OBJ] MAX = @SUM( PRODUCT(I): RENTAL(I) * PRODUCE(I));
! The building can not have more apartments than:;
@FOR( PRODUCT(I): [EXPEC] PRODUCE(I) <= EXPECTATION(I));
!Restriction of useful area to be built;
[USU] @SUM( PRODUCT(I): USAGE(1,I) * PRODUCE(I)) <= USEFUL_AREA;
! Maximum number of apartments to be built (Law);
[LIM] @SUM( PRODUCT(I): PRODUCE(I)) <= LIMIT(2);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " ATTRIBUTES (m2, Un, m2):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " RENTAL VALUE:", @NEWLINE( 1));
@TABLE(RENTAL);
@WRITE(" ", @NEWLINE( 1), " EXPECTATION (apt):", @NEWLINE( 1));
@TABLE(EXPECTATION);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX6);
! Solution Report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J) | PRODUCE(J) #GT# 0: ' ',
@FORMAT(PRODUCT(J),'-9s'), 'Rental value: $',
@FORMAT(RENTAL(J),'%5.2f'),' x ',
@FORMAT(PRODUCE(J), '%2.0f'),' Apartments = Revenue: $',
@FORMAT(RENTAL(J)* PRODUCE(J),'%8.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX6);
ENDCALC
END

389
C2-B14 Solving Problems with LINGO Build and Rent | Case 6 | Investments

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
ATTRIBUTES (m2, Un, m2):
APT1BED APT2BED APT3BED
GROUND_AREA 65.00000 75.00000 95.00000
QUANT_APT 15.00000 22.00000 10.00000
USEFUL_AREA 975.0000 1650.000 950.0000

RENTAL VALUE:
APT1BED 450.0000
APT2BED 550.0000
APT3BED 750.0000

EXPECTATION (apt):
APT1BED 15.00000
DATA:
APT2BED
DATA: DATA: 22.00000
ATTRIBUTES (m2,10.00000
APT3BED
ATTRIBUTES (m2,Un,
ATTRIBUTES Un,m2):
m2):
(m2, Un, m2):
APT1BED APT2BED APT3BED
GROUND_AREA
APT1BED75.00000
65.00000
APT2BED
APT1BED APT3BEDAPT3BED
APT2BED
95.00000
SOLUTION:
GROUND_AREA
QUANT_APT 65.00000
GROUND_AREA 75.00000
65.00000 95.00000
75.00000 95.00000
Global optimal15.00000
solution 22.00000
found. 10.00000
QUANT_APTQUANT_APT
USEFUL_AREA
Objective 15.00000 22.00000
15.00000
975.0000 1650.000 950.0000
value: 10.00000
22.00000 10.00000
23200.00
USEFUL_AREA
Infeasibilities: 975.0000
USEFUL_AREA 1650.000
975.0000 950.0000
1650.000 950.0000
0.000000
RENTAL VALUE:
RENTAL
APT1BED
Model VALUE:LP
RENTAL
Class: 450.0000
VALUE:
APT2BED
APT1BEDAPT1BED 550.0000
450.0000 450.0000
APT3BED
IDEAL
APT2BEDPLANNING
APT2BED 750.0000
PROGRAM:550.0000
550.0000
APT1BED Rental750.0000
APT3BEDAPT3BED value: 750.0000
$450.00 x 8 Apartments = Revenue: $ 3600.00
EXPECTATION
APT2BED Rental (apt): value: $550.00 x 22 Apartments = Revenue: $12100.00
APT1BED Rental
APT3BED 15.00000
value: $750.00 x 10 Apartments = Revenue: $ 7500.00
EXPECTATION (apt):
APT2BEDEXPECTATION22.00000 (apt):
APT1BEDAPT1BED
❖ SOLUTION
APT3BED
SLACK/SURPLUS 15.00000
10.00000
LIMIT 15.00000 (apt):
= EXPECTATION
APT2BEDAPT2BED 22.00000
PROD 22.00000
LIMIT VALUE
Below is the
APT3BED
SOLUTION:
APT1BED solution
APT3BED achieved
10.00000
8.000000 by LINGO-7.000000
10.00000
15.00000 with infeasibilities 0, and the detailed report that makes up the optimal
Global optimal
APT2BED solution22.00000
22.00000 found. 0.000000
SOLUTION:
APT3BED
Objective 10.00000
value:
SOLUTION: 10.00000 0.000000 23200.00
Infeasibilities:
Global Global
optimaloptimal
solution found. found.
solution 0.000000
SLACK/SURPLUS
Objective LIMIT
value: value:
Objective = USEFUL AREA (m2): 23200.00 23200.00
Model Class:
Infeasibilities: LP PROD LIMIT VALUE 0.000000
Infeasibilities: 0.000000
APT1BED 520.0000 520.0000 0.000000
APT2BED
IDEAL PLANNING 1650.000
PROGRAM:1650.000 0.000000
Model Class:
Model LP
Class:
950.0000 LP
APT1BED Rental value: $450.00 x 0.000000
APT3BED 950.0000 8 Apartments = Revenue: $ 3600.00
APT2BED Rental value: $550.00 x 22 Apartments = Revenue: $12100.00
IDEAL PLANNING
APT3BED IDEAL PROGRAM:
RentalPLANNING
value: PROGRAM:
$750.00 x 10 Apartments = Revenue: $ 7500.00
APT1BEDAPT1BED
Rental Rental
value: value:
$450.00$450.00
x 8 Apartments = Revenue:
x 8 Apartments $ 3600.00
= Revenue: $ 3600.00
APT2BEDAPT2BED
Rental
SLACK/SURPLUS value:
Rental
LIMIT $550.00$550.00
value:
= EXPECTATION x 22 Apartments
(apt): = Revenue:
x 22 Apartments $12100.00
= Revenue: $12100.00
APT3BEDAPT3BED
Rental value:
PROD $750.00
LIMIT x 10 Apartments
VALUE = Revenue: $ 7500.00
Rental value: $750.00 x 10 Apartments = Revenue: $ 7500.00
APT1BED 8.000000 15.00000 -7.000000
APT2BEDSLACK/SURPLUS
22.00000
SLACK/SURPLUS LIMIT 22.00000
=LIMIT 0.000000
EXPECTATION (apt): (apt):
= EXPECTATION
APT3BED 10.00000
PROD 10.00000
LIMIT0.000000
VALUE
PROD LIMIT VALUE
APT1BEDAPT1BED
8.000000 15.00000
8.000000 -7.000000
15.00000 -7.000000
SLACK/SURPLUS LIMIT = USEFUL AREA (m2):
APT2BEDAPT2BED
22.00000 22.00000
PROD 22.00000
0.000000
LIMIT 22.00000
VALUE 0.000000
APT3BED 10.00000
APT1BED APT3BED 10.00000
520.0000 10.00000 0.000000
520.0000 10.00000
0.000000 0.000000
APT2BED 1650.000 1650.000 0.000000
SLACK/SURPLUS LIMIT 950.0000
APT3BEDSLACK/SURPLUS
950.0000 =LIMIT
USEFUL AREA (m2):
= USEFUL AREA (m2):
0.000000
PROD LIMIT LIMIT
PROD VALUE VALUE 1
APT1BEDAPT1BED
520.0000 520.0000
520.0000 0.000000
520.0000 0.000000
APT2BEDAPT2BED
1650.000 1650.000
1650.000 0.000000
1650.000 0.000000
APT3BEDAPT3BED
950.0000 950.0000
950.0000 0.000000
950.0000 0.000000

390
BLOCK 15 Block: CLINIC

How to optimize the demand of a Clinic that does blood tests and has available some
equipment with different production capacity, and different costs?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

391
C2-B15 Solving Problems with LINGO Fluid Analysis | Case 1 | Clinic

GOAL

1 A particular hospital faces a problem in their fluid analysis laboratory. The laboratory has 3
machines to analyze any type of fluid.

Recently, the demand for blood testing has grown so much that the lab director is having
difficulty finalizing the analyses of the samples received before the arrival of new samples.
Blocks
The laboratory works with 5 types of blood, and any machine can be used to analyze any
• Product Mix type of fluid, however, the time required by the machine depends on the type of blood to be
analyzed.
• Blend
• Finance
Resources / Products T1 T2 T3 T4 T5 Limit
• Investments
• Diet A min 3 4 4 5 3 440

• Aviation Machine Time B min 5 3 5 4 5 440


• Transport
• Agriculture C min 2 5 3 3 4 440

• Construction Demand un 80 75 80 120 60 -


• Refinery
• Schedule Each machine can be used for 8 hours (440 min) daily.

• Cutting Blood collected in one day is stored and analyzed the next day.
• Metallurgy
Thus, at the beginning of each day the director must determine how to allocate each type of
• Fertilizer blood in each of the machines.
• Clinic
On a given morning, the laboratory has performed 80 blood tests of type 1, 75 of type 2, 80
• Classic of type 3, 120 of type 4 and 60 of type 5.
• Dynamic
The director of the laboratory wants to know how much analysis of each type of blood that
• Logistics should be made in each machine in minimized way to use them.
• Energy
• Assembly Line

Keywords:
• Health
• Laboratory
• Medical

Source:
• Book 2
• Page 241

392
C2-B15 Solving Problems with LINGO Fluid Analysis | Case 1 | Clinic
MODEL:
SETS:
HEADER1 / PROD, LIMIT, VALUE /:;
PRODUCT : DEMAND;
RESOURCE: LIMIT;
RXP( RESOURCE, PRODUCT) : MTIME, PRODUCE;
HXP( RESOURCE, HEADER1) : SLASUR;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, LIMIT =
EQUIP_1 440
EQUIP_2 440
EQUIP_3 440;
! Products attributes;
PRODUCT , DEMAND =
T1 80
T2 75
T3 80
T4 120
T5 60;
! Machine time T1 T2 T3 T4 T5;
MTIME = 3 4 4 5 3 ! EQUIP_1;
5 3 5 4 5 ! EQUIP_2;
2 5 3 3 4; ! EQUIP_3;
ENDDATA
PROCEDURE PROC_HXP(X):
@FOR(HXP(I,J): SLASUR(I,J) = 0);
@FOR(HXP(I,J)| PRODUCE(I,X) #GT# 0:
SLASUR(I,2) = DEMAND(X);
SLASUR(I,1) = PRODUCE(I,X);
SLASUR(I,3) = SLASUR(I,1) - SLASUR(I,2));
@TABLE(SLASUR);
ENDPROCEDURE
SUBMODEL MIN1:
[OBJ] MIN = @SUM( RXP( I,J): MTIME(I,J) * PRODUCE( I,J));
! Restriction of capacity of equipment;
[L1] @SUM(PRODUCT(J): PRODUCE(1,J)* MTIME(1,J)) = LIMIT(1);
[L2] @SUM(PRODUCT(J): PRODUCE(2,J)* MTIME(2,J)) = LIMIT(2);
[L3] @SUM(PRODUCT(J): PRODUCE(3,J)* MTIME(3,J)) = LIMIT(3);
! Demand constraints by type of tests;
[T1] @SUM(RESOURCE(L): PRODUCE(L,1)) <= DEMAND(1);
[T2] @SUM(RESOURCE(L): PRODUCE(L,2)) <= DEMAND(2);
[T3] @SUM(RESOURCE(L): PRODUCE(L,3)) <= DEMAND(3);
[T4] @SUM(RESOURCE(L): PRODUCE(L,4)) <= DEMAND(4);
[T5] @SUM(RESOURCE(L): PRODUCE(L,5)) <= DEMAND(5);
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
@WRITE(" DATA:", @NEWLINE( 1), " MACHINE TIME (min):", @NEWLINE( 1));
@TABLE(MTIME);
@WRITE(" ", @NEWLINE( 1), " LIMIT: (min)", @NEWLINE( 1));
@TABLE(LIMIT);
@WRITE(" ", @NEWLINE( 1), " Demand (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN1);
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP(I,J)| PRODUCE(I,J) # GT# 0: ' ',
@FORMAT(RESOURCE(I), '-6s'), ' produce:', ' ',
@FORMAT(PRODUCE( I,J),'%3.0f'), ' Test ',
@FORMAT(PRODUCT(J),'-3s'), ' x',
@FORMAT(MTIME(I,J), '%3.0f'),' min = ',
@FORMAT(PRODUCE( I,J) * MTIME(I,J),'%3.0f'), ' min',
@NEWLINE( 1));
! Slack/Surplus Product report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = DEMAND, PROD = T1 (un): ", @NEWLINE( 1)); PROC_HXP(1);
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = DEMAND, PROD = T2 (un): ", @NEWLINE( 1)); PROC_HXP(2);
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = DEMAND, PROD = T3 (un): ", @NEWLINE( 1)); PROC_HXP(3);
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = DEMAND, PROD = T4 (un): ", @NEWLINE( 1)); PROC_HXP(4);
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = DEMAND, PROD = T5 (un): ", @NEWLINE( 1)); PROC_HXP(5);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

393
C2-B15 Solving Problems with LINGO Fluid Analysis | Case 1 | Clinic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
MACHINE TIME (min):
DATA: T1 T2 T3 T4 T5
MACHINE
EQUIP_1 TIME (min):4.000000 4.000000 5.000000 3.000000
3.000000
DATA:
EQUIP_2 TIME T1
5.000000 T2 T3 T4 T5
MACHINE (min):3.000000 5.000000 4.000000 5.000000
EQUIP_1 3.000000
EQUIP_3 2.000000 4.000000 4.000000 5.000000 3.000000
T1 5.000000T23.000000 T3
3.000000 T4
4.000000 T5
EQUIP_2 5.000000 3.000000 5.000000 4.000000 5.000000
EQUIP_1 3.000000 4.000000 4.000000 5.000000 3.000000
EQUIP_3
LIMIT: 2.000000
(min) 5.000000 3.000000 3.000000 4.000000
EQUIP_2 5.000000
EQUIP_1 440.0000 3.000000 5.000000 4.000000 5.000000
EQUIP_3 2.000000
EQUIP_2(min)
440.0000 5.000000 3.000000 3.000000 4.000000
LIMIT:
EQUIP_3 440.0000
EQUIP_1 440.0000
LIMIT: (min)
EQUIP_2 440.0000
EQUIP_1
Demand 440.0000
(un):
EQUIP_3 440.0000
T1
EQUIP_2 80.00000
440.0000
T2
EQUIP_3 75.00000
440.0000
Demand (un):
T3 80.00000
T1
T4 80.00000
120.0000
Demand
T2 (un):
75.00000
T5 60.00000
T1
T3 80.00000
80.00000
T2
T4
SOLUTION:
75.00000
120.0000
❖ SOLUTION
T3
Global
T5 80.00000
optimal solution found.
60.00000
T4
Objective 120.0000
value: 1245.000
Below
T5 is the solution achieved by LINGO with infeasibilities 0, and0.000000
60.00000
Infeasibilities: the detailed report that makes up the optimal solution.
SOLUTION:
Global optimal solution found.
SOLUTION:
Model Class: LP
Objective value: 1320.000
Global optimal solution found.
Infeasibilities: 0.000000
IDEAL PLANNING
Objective PROGRAM:
value: 1320.0005
Total solver iterations:
EQUIP_1 produce: 27 Test: T1 x 3.000000 Min (machine time) = 80 Min (Time spent)
Infeasibilities: 0.000000
EQUIP_1
Total produce: 19 Test: T2 x 4.000000 Min (machine time)5 = 75 Min (Time spent)
Model solver
Class: iterations:
LP
EQUIP_1 produce: 20 Test: T3 x 4.000000 Min (machine time) = 80 Min (Time spent)
EQUIP_1 produce: 24 Test: T4 x 5.000000 Min (machine time) = 120 Min (Time spent)
Model
IDEAL Class:
PLANNING
EQUIP_1 LP PROGRAM:
produce: 20 Test: T5 x 3.000000 Min (machine time) = 60 Min (Time spent)
EQUIP_1 produce:16 88
EQUIP_2 produce: Test: T1 T4
Test x 5.000000
x 5 Min
min (machine
= 440time)
min = 80 Min (Time spent)
IDEAL PLANNING
EQUIP_2 produce:PROGRAM:
25 Test:
EQUIP_2 produce: 80 Test T1 T2 x 3.000000
x 5 Min
min (machine
= 400 min =
time) 75 Min (Time spent)
EQUIP_1
EQUIP_2 produce:
produce:
EQUIP_2 produce: 16 88 Test
Test: T3T4
8 Test T3 x xx 55
5.000000 min
Min
min == 440
(machine min
time)
40 min = 80 Min (Time spent)
EQUIP_2
EQUIP_2 produce:
produce: 30 80 Test
Test:
EQUIP_3 produce: 75 Test T2 T4T1x xx 55
4.000000 min
Min
min == 400
(machine min
375 min =
time) 120 Min (Time spent)
EQUIP_2 produce:
EQUIP_2 produce: 12 Test:
8 TestT5T3x 5.000000
x 5 Min
min (machine
= 40time)
min = 60 Min (Time spent)
EQUIP_3 produce: 16 Test T5 x 4 min = 65 min
EQUIP_3 produce: 75 Test T2 x 5 min = 375 min 1
EQUIP_3 produce:
SLACK/SURPLUS 16 =Test
LIMIT T5 PROD
DEMAND, x 4= min =
T1 (un): 65 min
PROD LIMIT VALUE
SLACK/SURPLUS
EQUIP_1 LIMIT = DEMAND,
0.000000 0.000000PROD0.000000
= T1 (un):
EQUIP_2 PROD
80.00000 LIMIT
80.00000 VALUE
0.000000
EQUIP_1
EQUIP_3 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000
EQUIP_2 80.00000 80.00000 0.000000
EQUIP_3 0.000000
SLACK/SURPLUS LIMIT = 0.000000 0.000000
DEMAND, PROD = T2 (un):
PROD LIMIT VALUE
SLACK/SURPLUS
EQUIP_1 LIMIT = DEMAND,
0.000000 0.000000PROD0.000000
= T2 (un): 1
EQUIP_2 0.000000 0.000000 0.000000
EQUIP_3 75.00000 75.00000 0.000000 1

SLACK/SURPLUS LIMIT = DEMAND, PROD = T3 (un):


PROD LIMIT VALUE
EQUIP_1 0.000000 0.000000 0.000000
EQUIP_2 8.000000 80.00000 -72.00000
EQUIP_3 0.000000 0.000000 0.000000

SLACK/SURPLUS LIMIT = DEMAND, PROD = T4 (un):


PROD LIMIT VALUE
EQUIP_1 88.00000 120.0000 -32.00000
EQUIP_2 0.000000 0.000000 0.000000
EQUIP_3 0.000000 0.000000 0.000000

SLACK/SURPLUS LIMIT = DEMAND, PROD = T5 (un):


PROD LIMIT VALUE
EQUIP_1 0.000000 0.000000 0.000000
EQUIP_2 0.000000 0.000000 0.000000
EQUIP_3 16.25000 60.00000 -43.75000

394
C2-B15 Solving Problems with LINGO Small Clinic | Case 2 | Clinic

GOAL

2 A small clinic specializes in orthopedic and aesthetic surgeries. Orthopedic surgeries average
$10, while aesthetics are the most sought after and earn $30.

Each surgery patient requires four 30-minute appointments, totaling 2 hours of office care. The
clinic has consultation rooms that allow 36 hours a week.
Blocks
The aesthetic surgeries last in average 2 hours, while the orthopedic ones last 1 hour. The
• Product Mix clinic's surgical center can be used 24 hours a week.
• Blend
To have permanent mobilization of the teams of surgeons it is necessary to perform at least 2
• Finance aesthetic and 4 orthopedic surgeries per week.
• Investments
• Diet Limit
Resources / Products Aesthetics Orthopedic
( hr/week )
• Aviation
• Transport Doctor's Appointments hr 2 2 36
• Agriculture
Surgery un 2 1 24
• Construction
• Refinery Minimum Surgery (p/week) un 2 4 -
• Schedule
Price $ 30.00 10.00 -
• Cutting
• Metallurgy
Elaborate the model that maximizes the prescription of the clinic.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Health
• Surgery
• Medical

395
C2-B15 Solving Problems with LINGO Small Clinic | Case 2 | Clinic

MODEL:
SETS:
PRODUCT : PRICE, MIN_WEEK, PRODUCE;
RESOURCE: LIMIT;
RXP( RESOURCE, PRODUCT) : USAGE;
ENDSETS
DATA:
! Resource attributes;
RESOURCE, LIMIT =
DOC_APP_HR 36
SURGERY_UN 24;
! Products attributes;
PRODUCT , PRICE, MIN_WEEK =
AESTHETICS 30 2
ORTHOPEDIC 10 4;
! Required AESTHETICS ORTHOPEDIC;
USAGE = 2 2 ! DOC_APP_HR;
2 1; ! SURGERY_UN;
ENDDATA
SUBMODEL MAX2:
[OBJ] MAX = @SUM( PRODUCT( p): PRICE( p) * PRODUCE( p));
! Minimum week;
[MWE1] PRODUCE(1) >= MIN_WEEK(1);
[MWE2] PRODUCE(2) >= MIN_WEEK(2);
! Limit constraints;
@FOR( RESOURCE( r):
[LIM] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) <= LIMIT( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE:", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " LIMIT:", @NEWLINE( 1));
@TABLE(LIMIT);
@WRITE(" ", @NEWLINE( 1), " MINIMUM SURGERY P/WEEK:", @NEWLINE( 1));
@TABLE(MIN_WEEK);
@WRITE(" ", @NEWLINE( 1), " SURGERY PRICE:", @NEWLINE( 1));
@TABLE(PRICE);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(I)| PRODUCE(I) #GT# 0: ' ', PRODUCT(I), ': ',
@FORMAT(PRODUCE( I),'%2.0f'),' Surgery x Price:$',
@FORMAT(PRICE(I),'%5.2f'), ' = Total:$',
@FORMAT(PRODUCE( I) * PRICE( I), '%5.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX2);
ENDCALC
END

396
C2-B15 Solving Problems with LINGO Small Clinic | Case 2 | Clinic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
REQUIRED (HR) :
AESTHETICS ORTHOPEDIC
DOC_APP_HR 2.000000 2.000000
SURGERY_HR 2.000000 1.000000

LIMIT (hr/week):
DOC_APP_HR
DATA: 36.00000
SURGERY_HR
REQUIRED (HR) :24.00000
DATA: AESTHETICS ORTHOPEDIC
MINIMUM SURGERY
DOC_APP_HR P/WEEK:
2.000000 2.000000
REQUIRED (HR) :2.000000
AESTHETICS
SURGERY_HR AESTHETICS
2.000000 1.000000
ORTHOPEDIC
ORTHOPEDIC 4.000000
DOC_APP_HR 2.000000 2.000000
LIMIT (hr/week):
SURGERY PRICE: 2.000000
SURGERY_HR 1.000000
DOC_APP_HR 36.00000
AESTHETICS 30.00000
SURGERY_HR
LIMIT (hr/week): 24.00000
ORTHOPEDIC 10.00000
DOC_APP_HR 36.00000
MINIMUM
SURGERY_HR
SOLUTION: SURGERY P/WEEK:
24.00000
AESTHETICS
Global 2.000000 found.
optimal solution
ORTHOPEDIC
Objective
MINIMUM value:
SURGERY 4.000000
P/WEEK: 340.0000
Infeasibilities:
AESTHETICS 2.000000 0.000000
SURGERY
ORTHOPEDICPRICE: 4.000000
AESTHETICS
Model Class: LP 30.00000
ORTHOPEDIC 10.00000
SURGERY PRICE:
❖ SOLUTION
IDEAL PLANNING PROGRAM:
AESTHETICS 30.00000
SOLUTION:
AESTHETICS: 10 Surgery x LINGO
Price:$30.00 = Total:
ORTHOPEDIC
Below is the solution 10.00000
achieved by with infeasibilities 0, and$300.00
the detailed report that makes up the optimal
Global optimal
ORTHOPEDIC: solutionx found.
4 Surgery Price:$10.00 = Total: $ 40.00
Objective value: 340.0000
SOLUTION:
Infeasibilities:
SLACK/SURPLUS SURGERY LIMIT (hr/week): 0.000000
Global optimal solution found.
PROD LIMIT VALUE
Objective
DOC_APP_HR value: 340.0000
Model Class: 20.00000
LP 24.00000 0.000000
Infeasibilities:
SURGERY_HR 4.000000 24.00000 0.000000 0.000000
TOTAL:
IDEAL PLANNING 24 PROGRAM:24 0
Model Class: LP
AESTHETICS: 10 Surgery x Price:$30.00 = Total: $300.00
SLACK/SURPLUS4 APPOINTMENTS
ORTHOPEDIC: LIMIT (hr/week):
Surgery x Price:$10.00 = Total: $ 40.00
IDEAL PLANNING PROGRAM: PROD LIMIT VALUE
AESTHETICS:
DOC_APP_HR 10
SLACK/SURPLUS SurgeryLIMIT
20.00000
SURGERY x Price:$30.00
36.00000 0.000000
(hr/week): = Total: $300.00
ORTHOPEDIC: 4 Surgery
SURGERY_HR 8.000000 x Price:$10.00
PROD 36.00000LIMIT 0.000000 = Total: $ 40.00
VALUE
TOTAL:
DOC_APP_HR 28
20.00000 3624.00000 -80.000000
SLACK/SURPLUS
SURGERY_HR 4.000000SURGERY LIMIT (hr/week):
24.00000 0.000000
TOTAL: 24 PROD 24 LIMIT 0 VALUE
DOC_APP_HR 20.00000 24.00000 0.000000 1
SURGERY_HR 4.000000
SLACK/SURPLUS 24.00000
APPOINTMENTS LIMIT0.000000
(hr/week):
TOTAL: 24 PROD 24 LIMIT 0 VALUE
DOC_APP_HR 20.00000 36.00000 0.000000
SLACK/SURPLUS APPOINTMENTS
SURGERY_HR 8.000000 LIMIT0.000000
36.00000 (hr/week):
TOTAL: 28 PROD 36 LIMIT -8 VALUE
DOC_APP_HR 20.00000 36.00000 0.000000
SURGERY_HR 8.000000 36.00000 0.000000
TOTAL: 28 36 -8 1

397
C2-B15 Solving Problems with LINGO Installation of Health Center | Case 3 | Clinic

GOAL

3
The Ministry of Health has five possible locations for the installation of Health Centers to serve four
Population Centers.

An index has been constructed which expresses the inconvenience of serving each Population
Center by the Health Center of each location, taking into account the number of inhabitants
served and the means of transportation available.
Blocks
• Product Mix The results are shown in the table of contents.

• Blend
Health Centers.
• Finance
( Inconvenience Rate )
Population Center Inhabitants
• Investments
HC1 HC2 HC3 HC4 HC5
• Diet
• Aviation PC1 40 43 42 38 45 2,500
• Transport
PC2 37 40 41 44 36 2,000
• Agriculture
• Construction PC3 40 42 39 37 38 3,000
• Refinery
PC4 45 40 39 42 41 3,000
• Schedule
• Cutting Suppose now that each Health Center can serve more than one Population Center, provided that
• Metallurgy the total number of inhabitants of Population Centers assigned to the same Health Center does
not exceed 5,000. The number of inhabitants of Population Centers are listed in the table above.
• Fertilizer
• Clinic Knowing that all population of the same Population Center has to be served by the same Health
• Classic Center and that each Health Center serves only a Population Center, formulate a solution in LP.

• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Health
• Surgery
• Medical

Source:
• Book 12
• Page 13

398
C2-B15 Solving Problems with LINGO Installation of Health Center | Case 3 | Clinic
MODEL:
SETS:
HEALT_CENTER:;
POPULATION_CENTER:INHABITANTS;
RXP(POPULATION_CENTER,HEALT_CENTER):INDEX, PRODUCE;
ENDSETS
DATA:
HEALT_CENTER =
HC1
HC2
HC3
HC4
HC5;
POPULATION_CENTER, INHABITANTS =
PC1 2500
PC2 2000
PC3 3000
PC4 3000;
! Inconvenience rate HC1 HC2 HC3 HC4 HC5;
INDEX = 40 43 42 38 45 !PC1;
37 40 41 44 36 !PC2;
40 42 39 37 38 !PC3;
45 40 39 42 41; !PC4;
ENDDATA
SUBMODEL MIN3:
! Minimum Inconvenience Index;
[MII] MIN = @SUM(RXP(I,J): INDEX(I,J) * PRODUCE(I,J));
! A population center can only be served by a health center;
@FOR(POPULATION_CENTER(I):
[PC] @SUM(HEALT_CENTER(J):PRODUCE(I,J)) = 1;);
!Each health center can only serve a population center;
@FOR(HEALT_CENTER(J):
[HC] @SUM(POPULATION_CENTER(I): PRODUCE(I,J)) <= 1;);
!Each health center can serve more than one population center, provided that it does not have more than 5000 inhabitants.;
@FOR(HEALT_CENTER(J):
[IN] @SUM(POPULATION_CENTER(I): INHABITANTS(I) * PRODUCE(I,J)) <= 5000;);
@FOR(RXP(I,J): @BIN(PRODUCE(I,J)));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " Inconvenience rate: ", @NEWLINE( 1));
@TABLE(INDEX);
@WRITE(" ", @NEWLINE( 1), " INHABITANTS:", @NEWLINE( 1));
@TABLE(INHABITANTS);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN3);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR(RXP(I, J) | PRODUCE(I,J) #GT# 0: ' Population Center: ',
@FORMAT(POPULATION_CENTER( I),'-5s'), ' Health Center: ',
@FORMAT(HEALT_CENTER(J),'-5s'), 'Index: ',
@FORMAT(PRODUCE(I,J) * INDEX(I,J),'%2.0f'), ' ',
@NEWLINE( 1));
@WRITE(' Minimum Inconvenience Index: ', 22*' ', MII, @NEWLINE(2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

399
C2-B15 Solving Problems with LINGO Installation of Health Center | Case 3 | Clinic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
Inconvenience rate:
HC1 HC2 HC3 HC4 HC5
PC1 40.00000 43.00000 42.00000 38.00000 45.00000
PC2 37.00000 40.00000 41.00000 44.00000 36.00000
PC3 40.00000 42.00000 39.00000 37.00000 38.00000
PC4 45.00000 40.00000 39.00000 42.00000 41.00000

INHABITANTS:
PC1 2500.000
PC2 2000.000
PC3 3000.000
PC4 3000.000
DATA:
SOLUTION:
Inconvenience rate:
Global optimal
HC1 solution HC2 found. HC3 HC4 HC5
Objective value:
PC1 40.00000 43.00000 42.00000 38.00000 45.00000 152.0000
Objective
PC2 37.00000bound:40.00000 41.00000 44.00000 36.00000 152.0000
DATA:
Infeasibilities:
PC3 40.00000 42.00000 39.00000 37.00000 38.00000 0.000000
Inconvenience
Extended
PC4 45.00000 rate:
solver steps:
40.00000 39.00000 42.00000 41.000000
Total solverHC1iterations:
HC2 HC3 HC4 HC50
PC1 40.00000 43.00000
Elapsed runtime seconds:
INHABITANTS: 42.00000 38.00000 45.00000
0.07
PC2 37.00000
PC1 2500.000 40.00000 41.00000 44.00000 36.00000
PC3 2000.000
Model
PC2 40.00000
Class: PILP 42.00000 39.00000 37.00000 38.00000
PC3 3000.000 40.00000 39.00000 42.00000 41.00000
PC4 45.00000
IDEAL PLANNING PROGRAM:
PC4 3000.000
INHABITANTS:
Population Center: PC1 Healt Center: HC1 Index: 40
PC1 2500.000
Population
SOLUTION: Center: PC2 Healt Center: HC5 Index: 36
SOLUTION
PC2 2000.000
❖ Global
Population Center:
optimal PC3 found.
solution Healt Center: HC4 Index: 37
PC3 3000.000
Population
Objective Center: PC4
value: Healt Center: HC3 Index:
152.0000 39
Below
PC4 is the solution achieved by LINGO with infeasibilities
3000.000 0, and the detailed report that makes up the optimal
Minimum
Objective Inconvenience
bound: Index: 152.0000152
Infeasibilities: 0.000000
SOLUTION:solver steps:
Extended 0
Globalsolver
Total optimal solution found.
iterations: 0
Objective
Elapsed value:seconds:
runtime 152.0000
0.07
Objective bound: 152.0000
Infeasibilities:
Model Class: PILP 0.000000
Extended solver steps: 0
Total solver iterations:
IDEAL PLANNING PROGRAM: 0
Elapsed runtime seconds:
Population Center: PC1 Healt Center: HC1 0.07
Index: 40
Population Center: PC2 Healt Center: HC5 Index: 36
Model Class:
Population PILP PC3
Center: Healt Center: HC4 Index: 37
Population Center: PC4 Healt Center: HC3 Index: 39
IDEAL PLANNING
Minimum PROGRAM:
Inconvenience Index: 152
Population Center: PC1 Healt Center: HC1 Index: 40
Population Center: PC2 Healt Center: HC5 Index: 36
Population Center: PC3 Healt Center: HC4 Index: 37
Population Center: PC4 Healt Center: HC3 Index: 39
Minimum Inconvenience Index: 152

400 1
BLOCK 16 Block: CLASSICS

How to solve classic problems like the backpack, the traveling salesman, etc. using
mathematical optimization as a tool?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

401
C2-B16 Solving Problems with LINGO Knapsack | Case 1 | Classic

GOAL

1 The knapsack model is a classic problem that uses binary variables. In this problem, you have
a group of items you want to pack into your knapsack.

Unfortunately, the capacity of the knapsack is limited such that it is impossible to include all
items. Each item has a certain value, or utility, associated with including it in the knapsack.
Blocks
The problem is to find the subset of items to include in the knapsack that maximizes the total
• Product Mix value of the load without exceeding the capacity of the knapsack.
• Blend Of course, the knapsack euphemism shouldn’t lead one to underestimate the importance of
• Finance this class of problem.
• Investments
The "knapsack" problem can be applied to many situations. Some examples are vehicle
• Diet loading, capital budgeting and strategic planning.
• Aviation
• Transport Items Rank Weight Limit
• Agriculture
Repellent 2 kg 1
• Construction
Sunblock 9 kg 1
• Refinery
• Schedule Isotonic 3 kg 2

• Cutting Condensate Milk 8 kg 1


• Metallurgy ≤ 10
Chocolate 1 kg 1
• Fertilizer
Dry Fruits 6 kg 1
• Clinic
• Classic Sandwich 4 kg 1

• Dynamic Water 10 kg 3
• Logistics
• Energy
• Assembly Line

Keywords:
• Load
• Knapsack
• Medical

Source:
• Book 6
• Page 819

402
C2-B16 Solving Problems with LINGO Knapsack | Case 1 | Classic

MODEL:
SETS:
ITEMS:
INCLUDE,
WEIGHT,
RATING;
MUST_EAT_ONE( ITEMS );
ENDSETS
DATA:
ITEMS WEIGHT RATING =
REPELLENT 1 2
SUNBLOCK 1 9
ISOTONIC 2 3
CONDENSED_MILK 1 8
CHOCOLATE 1 1
DRY_FRUITS 1 6
SANDWICH 1 4
AWATER 3 10;
KNAPSACK_CAPACITY = 10;
ENDDATA
SUBMODEL MAX1:
MAX = @SUM( ITEMS: RATING * INCLUDE);
[CAP] @SUM(ITEMS: WEIGHT * INCLUDE) <= KNAPSACK_CAPACITY;
@FOR( ITEMS: @BIN( INCLUDE));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',3);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " WEIGHT (KNAPSACK_CAPACITY = 10):", @NEWLINE( 1));
@TABLE(WEIGHT);
@WRITE(" ", @NEWLINE( 1), " RATING:", @NEWLINE( 1));
@TABLE(RATING);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MAX1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( ITEMS(J): ' Item: ',
@FORMAT(ITEMS(J),'-14s'), ' Rating:',
@FORMAT(RATING( J),'%2.0f'),' x ','selected:',
@FORMAT(INCLUDE( J),'%2.0f'), ' include:',
@FORMAT(RATING(J) * INCLUDE( J),'%2.0f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MAX1);
ENDCALC
END

403
C2-B16 Solving Problems with LINGO Knapsack | Case 1 | Classic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
WEIGHT (KNAPSACK_CAPACITY = 10):
REPELLENT 1.00
SUNBLOCK 1.00
ISOTONIC 2.00
CONDENSED_MILK 1.00
CHOCOLATE 1.00
DRY_FRUITS 1.00
SANDWICH 1.00
AWATER 3.00

DATA:
RATING:
REPELLENT
WEIGHT 2.00
(KNAPSACK_CAPACITY = 10):
DATA:
SUNBLOCK 9.00
REPELLENT
WEIGHT 1.00
ISOTONIC(KNAPSACK_CAPACITY
3.00 = 10):
SUNBLOCK
REPELLENT
CONDENSED_MILK 1.00
1.00
8.00
ISOTONIC
CHOCOLATE
SUNBLOCK 2.00
1.00
1.00
CONDENSED_MILK
DRY_FRUITS
ISOTONIC 1.00
6.00
2.00
SANDWICH
CHOCOLATE 4.00
1.00
CONDENSED_MILK10.01.00
AWATER
DRY_FRUITS
CHOCOLATE 1.00 1.00
SANDWICH
DRY_FRUITS 1.00
1.00
SOLUTION:
AWATER
SANDWICH
Global optimal 3.00
1.00found.
solution
Objective
AWATER value: 3.00 42.0
RATING: bound:
Objective 42.0
Infeasibilities:
REPELLENT 2.00 0.00
RATING:
SUNBLOCK
REPELLENT 9.00
2.00
Model Class: PILP
ISOTONIC
SUNBLOCK 3.00
9.00
CONDENSED_MILK
ISOTONIC
IDEAL PLANNING PROGRAM: 8.00
3.00
CHOCOLATE
Item: REPELLENT
CONDENSED_MILK 8.00 1.00
Rating: 2 x selected: 1 include: 2
DRY_FRUITS
Item: SUNBLOCK
CHOCOLATE 6.00
Rating: 9 x selected: 1 include: 9
1.00
Item: ISOTONIC
SANDWICH Rating: 3 x selected: 1 include: 3
4.00
DRY_FRUITS
SOLUTION
❖ Item: CONDENSED_MILK
6.00
Rating: 8 x selected: 1 include: 8
AWATER
SANDWICH 10.0
4.00
Item: CHOCOLATE Rating: 1 x selected: 0 include: 0
Below
AWATER
Item: is the solution achieved
DRY_FRUITS 10.0 by 6LINGO
Rating: with infeasibilities
x selected: 1 include: 0, and
6 the detailed report that makes up the optimal
SOLUTION:
Item: SANDWICH Rating: 4 x selected: 1 include: 4
Global
Item: optimal
AWATER
SOLUTION: solution found.
Rating:10 x selected: 1 include:10
Objective
Global optimal value: solution found. 42.0
Objective bound:
Objective value: 42.0
42.0
Infeasibilities:
Objective bound: 0.00
42.0
Infeasibilities: 0.00
Model Class: PILP
Model Class: PILP
IDEAL PLANNING PROGRAM:
Item:
IDEAL REPELLENT
PLANNING PROGRAM: Rating: 2 x selected: 1 include: 2
Item: SUNBLOCK
Item: REPELLENT Rating:
Rating: 9 2 xx selected:
selected: 1 1 include:
include: 9 2
Item: ISOTONIC
SUNBLOCK Rating: 3
9 x selected: 1 include: 3
9 1
Item: CONDENSED_MILK
ISOTONIC Rating: 8 3 x selected: 1 include: 8 3
Item: CHOCOLATE
CONDENSED_MILK Rating: 1 8 x selected: 0 1 include: 0 8
Item: DRY_FRUITS
CHOCOLATE Rating: 6 1 x selected: 1 0 include: 6 0
Item: SANDWICH
DRY_FRUITS Rating: 4
6 x selected: 1 include: 4
6
Item: AWATER
SANDWICH Rating:10
Rating: 4 x selected: 1 include:10
include: 4
Item: AWATER Rating:10 x selected: 1 include:10

404
1
C2-B16 Solving Problems with LINGO Traveling Salesperson | Case 2 | Classic

GOAL

2 The problem of the hawker or traveling salesman is a classic example in Linear Programming.
It consists of minimizing the total distance to be traveled along 15 cities.

The logic is complex but the model works very well and can be reused only by changing the
contents of the matrix of distances between cities contained in it.

Blocks For more information you will need to do a thorough analysis of the template code, available
• Product Mix
• Blend Distance Between Cities ( Start=0, Finish=n)

• Finance C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15

• Investments C1 0 69 39 49 5 59 19 40 33 81 9 21 8 37 33
• Diet C2 69 0 47 39 54 9 49 59 95 47 98 87 69 36 67
• Aviation C3 41 47 0 90 67 63 4 49 93 48 7 94 52 19 41
• Transport C4 49 39 90 0 21 60 56 80 12 69 54 52 33 99 2
• Agriculture
C5 5 54 67 21 0 32 22 61 85 47 56 75 59 42 63
• Construction
C6 59 9 63 60 32 0 58 46 43 3 33 65 69 80 37
• Refinery
C7 19 49 4 56 22 58 0 82 97 15 78 82 64 33 26
• Schedule
C8 37 59 49 80 61 46 82 0 8 86 1 90 37 0 42
• Cutting
C9 33 95 93 12 85 43 97 8 0 63 34 81 21 56 0
• Metallurgy
C10 82 47 48 69 47 3 15 86 63 0 88 69 33 47 90
• Fertilizer
C11 9 98 7 54 56 33 78 1 34 88 0 77 63 87 57
• Clinic
C12 21 87 94 52 75 65 82 90 81 69 77 0 46 30 63
• Classic
C13 8 69 52 33 59 69 64 37 21 33 63 46 0 59 95
• Dynamic
C14 38 36 21 99 42 80 33 0 56 47 87 30 59 0 10
• Logistics
C15 33 67 41 2 63 40 26 42 0 90 57 63 95 40 0
• Energy
• Assembly Line Lower Distance Between 15 Cities

Keywords:
• Travel
• Distance

Source:
• Book 4
• Dial a Ride

405
C2-B16 Solving Problems with LINGO Traveling Salesperson | Case 2 | Classic

MODEL:
SETS:
CITY: U; ! U( I) = sequence no. of city;
LINK( CITY, CITY):
DIST, ! The distance matrix;
X; ! X( I, J) = 1 if link I, J is in tour;
ENDSETS
DATA:
! Distance matrix, it need not be symmetric;
CITY=
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15;

DIST=
0 69 39 49 5 59 19 40 33 81 9 21 8 37 33 ! C1;
69 0 47 39 54 9 49 59 95 47 98 87 69 36 67 ! C2;
41 47 0 90 67 63 4 49 93 48 7 94 52 19 41 ! C3;
49 39 90 0 21 60 56 80 12 69 54 52 33 99 2 ! C4;
5 54 67 21 0 32 22 61 85 47 56 75 59 42 63 ! C5;
59 9 63 60 32 0 58 46 43 3 33 65 69 80 37 ! C6;
19 49 4 56 22 58 0 82 97 15 78 82 64 33 26 ! C7;
37 59 49 80 61 46 82 0 8 86 1 90 37 0 42 ! C8;
33 95 93 12 85 43 97 8 0 63 34 81 21 56 0 ! C9;
82 47 48 69 47 3 15 86 63 0 88 69 33 47 90 !C10;
9 98 7 54 56 33 78 1 34 88 0 77 63 87 57 !C11;
21 87 94 52 75 65 82 90 81 69 77 0 46 30 63 !C12;
8 69 52 33 59 69 64 37 21 33 63 46 0 59 95 !C13;
38 36 21 99 42 80 33 0 56 47 87 30 59 0 40 !C14;
33 67 41 2 63 40 26 42 0 90 57 63 95 40 0 ; !C15;
ENDDATA
SUBMODEL MIN2:
N = @SIZE( CITY);
! Minimize total distance traveled;
[OBJ] MIN = @SUM( LINK(i,j): DIST(i,j) * X(i,j));
! Stop k must be entered exactly once For k = 1, we return to 1 only from an odd numbered (drop off) stop;
@SUM( CITY(i) | @mod(i,2) #NE# 0 #and# i #NE# 1: x(i,1)) = 1;
@SUM( CITY(i) | @mod(i,2) #EQ# 0 : x(i,1)) = 0;
@FOR( CITY(k) | k #GT# 1:
@SUM( CITY( i)| i #NE# k: X( i, k)) = 1;);
! Stop k must be departed exactly once For k = 1, we go first to an even numbered (pick up) stop;
@SUM( CITY(j) | @mod(j,2) #EQ# 0 : x(1,j)) = 1;
@SUM( CITY(j) | @mod(j,2) #NE# 0 : x(1,j)) = 0;
@FOR( CITY(k) | k #GT# 1:
@SUM( CITY( j)| j #NE# k: X( k, j)) = 1;
X( k, k) = 0; ); ! Cannot go from k to k;
U(1) = 0; ! Start empty;
! The case either i or j = 1;
@FOR( CITY(i) | i #GT# 1:
U(i) >= 2 - X(1,i) + (N-3)*X(i,1);
U(i) <= (N-2) + X(i,1) - (N-3)*X(1,i););
! The case i,j > 1,
! This constraint, plus its "mirror", when i and j are switched,
forces U(j) - U(i) = 1 if X(i,j) = 1;
@FOR( LINK(i,j)| i #GT# 1 #AND# j #GT# 1 #AND# i #NE# j:U( j) >= U( i) + X(i,j) - X(j,i) - (N-2)*(1 - X(i,j) - X(j,i)););
! Make the X's 0/1;
@FOR( LINK(i,j): @BIN( X(i,j)););
! The dial-a-ride feature. Every pickup occurs before its drop-off;
@FOR(CITY(i) | @mod(i,2)#EQ#0 : U(i) <= U(i+1));
! Some cuts. We know the sum of the stop numbers;
@SUM( CITY( i): U( i)) = ( N-1)*N/2;
ENDSUBMODEL

406
C2-B16 Solving Problems with LINGO Traveling Salesperson | Case 2 | Classic

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',3);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " THE DISTANCE MATRIX (mile):", @NEWLINE( 1));
@TABLE(DIST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN2);
! Solution report
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( LINK(I,J) | X(I,J) #GT# 0: ' From: ',
@FORMAT(CITY(I),'-4s'),' To: ',
@FORMAT(CITY(J),'-4s'),' Distance:',
@FORMAT(DIST(i,j) * X(i,j),'%4.0f'),' mile',
@NEWLINE( 1));
@WRITE(' Total distance:',30*' ', @FORMAT(OBJ, '%4.0f'), ' mile', @ NEWLINE(1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

407
C2-B16 Solving Problems with LINGO Traveling Salesperson | Case 2 | Classic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
THE DISTANCE MATRIX (mile):
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15
C1 0.00 69.0 39.0 49.0 5.00 59.0 19.0 40.0 33.0 81.0 9.00 21.0 8.00 37.0 33.0
C2 69.0 0.00 47.0 39.0 54.0 9.00 49.0 59.0 95.0 47.0 98.0 87.0 69.0 36.0 67.0
C3 41.0 47.0 0.00 90.0 67.0 63.0 4.00 49.0 93.0 48.0 7.00 94.0 52.0 19.0 41.0
C4 49.0 39.0 90.0 0.00 21.0 60.0 56.0 80.0 12.0 69.0 54.0 52.0 33.0 99.0 2.00
C5 5.00 54.0 67.0 21.0 0.00 32.0 22.0 61.0 85.0 47.0 56.0 75.0 59.0 42.0 63.0
C6 59.0 9.00 63.0 60.0 32.0 0.00 58.0 46.0 43.0 3.00 33.0 65.0 69.0 80.0 37.0
C7 19.0 49.0 4.00 56.0 22.0 58.0 0.00 82.0 97.0 15.0 78.0 82.0 64.0 33.0 26.0
C8 37.0 59.0 49.0 80.0 61.0 46.0 82.0 0.00 8.00 86.0 1.00 90.0 37.0 0.00 42.0
DATA: 33.0 95.0 93.0 12.0 85.0 43.0 97.0 8.00 0.00 63.0 34.0 81.0 21.0 56.0 0.00
C9
C10 DISTANCE
THE 82.0 47.0 MATRIX48.0 69.0 47.0 3.00 15.0 86.0 63.0 0.00 88.0 69.0 33.0 47.0 90.0
(mile):
C11
DATA: 9.00
C1 98.0
C2 7.00
C3 54.0C4 56.0 C5 33.0C6 78.0
C7 1.00
C8 34.0
C9 88.0
C10 0.00 C12
C11 77.0 C13
63.0 C1487.0 C15
57.0
C12 21.0
C1 DISTANCE
THE 87.0
0.00 69.0 MATRIX94.0
39.0 52.0 75.0 65.0 82.0 90.0 81.0 69.0 77.0
49.0 5.00 59.0 19.0 40.0 33.0 81.0 9.00 21.0 8.00 37.0 33.0
(mile): 0.00 46.0 30.0 63.0
C13
C2 8.00
69.0 69.0
C1 0.00 52.0
C2 47.0 33.0
C3 39.0 59.0
C4 54.0 69.0
C5 9.00 64.0
C6 49.0C7 59.0 37.0 21.0
C8 95.0 33.0
C9 47.0 63.0
C10 98.0
C11 87.046.0 0.00 36.0
C12 69.0
C13 59.0 67.0
C14 95.0
C15
C14
C3
C1 38.0
41.0 36.0
47.0 21.0
0.00 99.0
90.0 42.0
67.0 80.0
63.0 33.0
4.00 0.00
49.0 56.0
93.0 47.0
48.0
0.00 69.0 39.0 49.0 5.00 59.0 19.0 40.0 33.0 81.0 9.00 21.0 8.00 37.0 33.0 87.0
7.00 30.0
94.0 59.0
52.0 0.00
19.0 40.0
41.0
C15
C4
C2 33.0
49.0 67.0
69.0 39.0 41.0
0.00 90.0 2.00
47.0 0.00 63.0
39.0 21.0 40.0
54.0 60.0 26.0
9.00 56.0
49.0 80.0 42.0
59.0 12.00.00 90.0
95.0 69.0 57.0
47.0 54.0
98.0 52.063.0 95.0
87.0 33.0
69.0 99.040.0 0.00
36.0 2.00
67.0
C5
C3 5.00
41.0 54.0
47.0 67.0
0.00 21.0
90.0 0.00
67.0 32.0
63.0 22.0
4.00 61.0 49.0 85.0
93.0 47.0
48.0 56.0
7.00 75.0
94.0 59.0
52.0 42.0
19.0 63.0
41.0
SOLUTION:
C6
C4 59.0
49.0 39.0 90.0 0.00 21.0 60.0 56.0 80.0 12.0 69.0 54.0 52.0 33.0 99.0 37.0
9.00 63.0 60.0 32.0 0.00 58.0 46.0 43.0 3.00 33.0 65.0 69.0 80.0 2.00
Global
C7
C5 optimal
19.0
5.00 49.0
54.0 solution
4.00 found.22.0
67.0 56.0
21.0 0.00 58.0
32.0 0.00
22.0 82.0 61.0 97.0
85.0 15.0
47.0 78.0
56.0 82.0
75.0 64.0
59.0 33.0
42.0 26.0
63.0
Objective
C8
C6 59.0value:
37.0 59.0
9.00 49.0
63.0 80.0
60.0 61.0
32.0 46.0
0.00 82.0
58.0 0.00 46.0212.8.00
43.0 86.0
3.00 1.00
33.0 90.0
65.0 37.0
69.0 0.00
80.0 42.0
37.0
Objective
C9
C7 33.0 bound:
95.0 93.0 12.0 85.0 43.0 97.0 8.00212.0.00 63.0
19.0 49.0 4.00 56.0 22.0 58.0 0.00 82.0 97.0 15.0 78.0 82.0 64.0 33.0 26.0 34.0 81.0 21.0 56.0 0.00
Infeasibilities:
C10
C8 82.0
37.0 47.0
59.0 48.0
49.0 69.0
80.0 47.0
61.0 3.00
46.0 15.0
82.0 86.0 0.000.0063.0
8.00 0.00
86.0 88.0
1.00 69.0
90.0 33.0
37.0 47.0
0.00 90.0
42.0
C11
C9 9.00
33.0 95.0 93.0 12.0 85.0 43.0 97.0 8.00 0.00 63.0 34.0 81.0 21.0 56.0 57.0
98.0 7.00 54.0 56.0 33.0 78.0 1.00 34.0 88.0 0.00 77.0 63.0 87.0 0.00
Model
C10 Class:
C12 21.0
82.0 87.0 MILP 94.0
47.0 48.0 52.0
69.0 75.0
47.0 65.0
3.00 82.0
15.0 90.0 86.0 81.0
63.0 69.0
0.00 77.0
88.0 0.00
69.0 46.0
33.0 30.0
47.0 63.0
90.0
C13 8.00 69.0 52.0 33.0 59.0 69.0 64.0 37.0 21.0 33.0
C11 9.00 98.0 7.00 54.0 56.0 33.0 78.0 1.00 34.0 88.0 0.00 77.0 63.0 87.0 57.0 63.0 46.0 0.00 59.0 95.0
C14
IDEAL 38.0
21.0 36.0
C12 PLANNING 87.0 21.0
94.0 99.0
PROGRAM: 52.0 42.0
75.0 80.0
65.0 33.0
82.0 0.00 90.0 56.0
81.0 47.0
69.0 87.0
77.0 30.0
0.00 59.0
46.0 0.00
30.0 40.0
63.0
C15
From:
C13 33.0
C1
8.00 67.0
69.0 41.0
To:
52.0 2.00
C12
33.0 63.0
59.0 40.0 26.0
Distance:
69.0 64.0 42.0
21
37.0mile0.00
21.0 90.0
33.0 57.0
63.0 63.0
46.0 95.0
0.00 40.0
59.0 0.00
95.0
❖ SOLUTION
From:
C14 C238.0 36.0 To: 21.0 C699.0 42.0 80.0 Distance:
33.0 0.00 9 mile56.0 47.0 87.0 30.0 59.0 0.00 40.0
SOLUTION:
From:
C15 C3
Below is the solution
33.0 To:
41.0 C11
67.0 achieved by LINGO
2.00 Distance:
63.0with infeasibilities
40.0 26.0 42.0 7 and
0, mile0.00
the detailed
90.0report
57.0that63.0
makes95.0
up the 40.0
optimal0.00
GlobalC4
From: optimal solution
To: C5found. Distance: 21 mile
Objective
From: C5 value: To: C1
SOLUTION: Distance: 5 212.
mile
Objective
From: bound:
GlobalC6optimal To: C10
solution found. Distance: 3 212.
mile
Infeasibilities:
From: C7
Objective value: To: C3 Distance: 4 0.00
mile
212.
From: C8 bound: To: C13
Objective Distance: 37 212. mile
Model
From: Class: MILP To: C15
C9
Infeasibilities: Distance: 0 0.00
mile

IDEAL PLANNING PROGRAM: 1


Model Class: MILP
From: C1 To: C12 Distance: 21 mile
From:
IDEAL C2 To: C6
PLANNING PROGRAM: Distance: 9 mile
From:
From: C3
C1 To:
To: C11
C12 Distance:
Distance: 7
21 mile
mile
From:
From: C4
C2 To: C5
To: C6 Distance:
Distance: 21
9 mile
mile
From:
From: C5
C3 To:
To: C1
C11 Distance:
Distance: 5
7 mile
mile
From:
From: C6
C4 To:
To: C10
C5 Distance:
Distance: 3
21 mile
mile
From:
From: C7
C5 To:
To: C3
C1 Distance:
Distance: 4
5 mile
mile
From:
From: C8
C6 To: C13
To: C10 Distance:
Distance: 37
3 mile
mile
From:
From: C9
C7 To:
To: C15
C3 Distance:
Distance: 0
4 mile
mile
From:
From: C10
C8 To: C13
To: C7 Distance:
Distance: 15
37 mile
mile 1
From:
From: C11
C9 To: C8
To: C15 Distance:
Distance: 1
0 mile
mile
From: C12 To: C14 Distance: 30 mile
From: C13 To: C9 Distance: 21 mile 1
From: C14 To: C2 Distance: 36 mile
From: C15 To: C4 Distance: 2 mile
Total distance: 212 mile

408
C2-B16 Solving Problems with LINGO Traveling Salesperson | Case 2 | Classic

409
C2-B16 Solving Problems with LINGO Traveling Salesman | Case 3 | Classic

GOAL

3 The problem of traveling salesman is a classic example in Linear Programming. In this case
simple version.(TSPCUTx).

Sub-tour elimination method. We add a row/cut/constraint to cut off a sub-tour until a full tour
is found. Find the shortest route that visits each city exactly once.

Blocks
• Product Mix Distance Between Cities ( Start=0, Finish=n)

• Blend
FROM NYK ATL CHI CIN HOU LAX MON PHL PIT STL SND SNF
• Finance
• Investments NYK 0 864 845 664 1706 2844 396 92 386 1002 2892 3032

• Diet ATL 864 0 702 454 842 2396 1196 772 714 554 2363 2679
• Aviation
CHI 845 702 0 324 1093 2136 764 764 459 294 2184 2187
• Transport
• Agriculture CIN 664 454 324 0 1137 2180 798 572 284 338 2228 2463

• Construction HOU 1706 842 1093 1137 0 1616 1857 1614 1421 799 1521 2021
• Refinery
LAX 2844 2396 2136 2180 1616 0 2900 2752 2464 1842 95 405
• Schedule
• Cutting MON 396 1196 764 798 1857 2900 0 424 514 1058 2948 2951

• Metallurgy PHL 92 772 764 572 1614 5752 424 0 305 910 2800 2951
• Fertilizer
PIT 386 714 459 284 1421 2464 514 305 0 622 2512 2646
• Clinic
• Classic STL 1002 554 294 338 799 1842 1058 910 622 0 1890 2125

• Dynamic
SND 2892 2363 2184 2228 1521 95 2948 2800 2800 2512 0 500
• Logistics
SNF 3032 2679 2187 2463 2021 405 2951 2951 2646 2125 500 0
• Energy
• Assembly Line

Keywords:
• Travel
• Distance

Source:
• Book 4
• TCPCUTX

410
C2-B16 Solving Problems with LINGO Traveling Salesman | Case 3 | Classic

MODEL:
SETS:
CITY;
LINK( CITY, CITY):
DIST, ! The distance matrix;
Y; ! Y( I, J) = 1 if link I, J is in tour;
SUBTOUR: TOURSIZE;
SXC(SUBTOUR,CITY): FLAG;
ENDSETS
DATA:
! Max sub-tour cuts allowed;
SUBTOUR = 1..30;
CITY =
NYK ATL CHI CIN HOU LAX MON PHL PIT STL SND SNF;
! Distance matrix, it need not be symmetric;
DIST =
0 864 845 664 1706 2844 396 92 386 1002 2892 3032 !NYK;
864 0 702 454 842 2396 1196 772 714 554 2363 2679 !ATL;
845 702 0 324 1093 2136 764 764 459 294 2184 2187 !CHI;
664 454 324 0 1137 2180 798 572 284 338 2228 2463 !CIN;
1706 842 1093 1137 0 1616 1857 1614 1421 799 1521 2021 !HOU;
2844 2396 2136 2180 1616 0 2900 2752 2464 1842 95 405 !LAX;
396 1196 764 798 1857 2900 0 424 514 1058 2948 2951 !MON;
92 772 764 572 1614 2752 424 0 305 910 2800 2951 !PHL;
386 714 459 284 1421 2464 514 305 0 622 2512 2646 !PIT;
1002 554 294 338 799 1842 1058 910 622 0 1890 2125 !STL;
2892 2363 2184 2228 1521 95 2948 2800 2512 1890 0 500 !SND;
3032 2679 2187 2463 2021 405 2951 2951 2646 2125 500 0; !SNF;
ENDDATA
SUBMODEL TSP_CUT:
! Minimize total distance traveled;
[OBJ] MIN = TOURLEN;
TOURLEN = @SUM( LINK: DIST * Y);
! The Assignment constraints;
@FOR( CITY( K):
! It must be entered;
@SUM( CITY( I)| I #NE# K: Y( I, K)) = 1;
! It must be departed;
@SUM( CITY( J)| J #NE# K: Y( K, J)) = 1;
! Cannot visit self;
Y( K, K) = 0 );
! Sub-tour cuts added so far;
@FOR( SUBTOUR(t) | t #LE# ICUT:
@SUM( CITY(I) | FLAG(t,i) #EQ# 1:
@SUM( CITY(J) | FLAG(t,j) #EQ# 1: Y(i,j))) <= TOURSIZE(t) - 1;);
! The Y(i,j) must be 0 or 1;
@FOR( LINK(i,j): @BIN( Y(i,j)));
ENDSUBMODEL

411
C2-B16 Solving Problems with LINGO Traveling Salesman | Case 3 | Classic

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',5);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " THE DISTANCE MATRIX:", @NEWLINE( 1));
@TABLE(DIST);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 2));
N = @SIZE( CITY);
! Max cuts we have space for;
MXCUTS = @SIZE(SUBTOUR);
ICUT = 0;
MORECUTS = 1; ! =0 if no more cuts;
@WHILE( MORECUTS :
! Loop over subtour cuts, ICUT;
! Solve current version;
@SOLVE( TSP_CUT);
ICUT = ICUT + 1;
@WRITE( @NEWLINE(1),'#',ICUT,' Obj value = ', TOURLEN, @NEWLINE(1));
! Turn this on to see intermediate solutions;
!@FOR( LINK(i,j) | Y(i,j) #GT# .01: @WRITE(' ',i,' ',j,' ',Y(i,j),@NEWLINE(1)) );
! Find subtour if any;
StartCity = 1; ! Start at city 1;
KURSTOP = StartCity;
@FOR( CITY(k): FLAG(ICUT,k) = 0); ! Start with no cities in cut;
@WRITE(' Begin tour at ', CITY(KURSTOP), @NEWLINE(1));
TOURSIZE(ICUT) = 1;
! Loop over cities KURSTOP to find subtour including 1;
FLAG(ICUT, KURSTOP) = 1; ! City KURSTOP is in the cut;
NotHome = 1;
@WHILE( NotHome:
@FOR(CITY(j) | Y(KURSTOP, j) #GT# 0.5: ! Find next stop;
@WRITE(' Next stop on tour= ', CITY(j),@NEWLINE(1));
@IFC( j #EQ# startCity:
NotHome = 0; ! Back home to startCity;
@ELSE
TOURSIZE(ICUT) = TOURSIZE(ICUT) + 1;
KURSTOP = j;
FLAG(ICUT,KURSTOP) = 1; ! KURSTOP is in the cut;
); ! end of IFC;
); ! end of for loop;
); ! end of while loop;
@IFC( TOURSIZE(ICUT) #EQ# N:
@WRITE(' Above is complete tour, so min length tour found.');
MORECUTS = 0;
@ELSE
@WRITE(' Add constraint to cut off above subtour.',@NEWLINE(1)); );
@IFC( ICUT #EQ# @SIZE(SUBTOUR):
@WRITE(' Exhausted memory.');
MORECUTS = 0; );
); ! End loop over add cuts;
! (There are various refinements/complications of this basic idea to make order of magnitude performance improvements);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(TSP_CUT);
ENDCALC
END

412
C2-B16 Solving Problems with LINGO Traveling Salesman | Case 3 | Classic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
THE DISTANCE MATRIX:
NYK ATL CHI CIN HOU LAX MON PHL PIT STL SND SNF
DATA:
NYK 0.0000 864.00 845.00 664.00 1706.0 2844.0 396.00 92.000 386.00 1002.0 2892.0 3032.0
ATL DISTANCE
THE 864.00 0.0000
MATRIX:702.00 454.00 842.00 2396.0 1196.0 772.00 714.00 554.00 2363.0 2679.0
CHI 845.00NYK 702.00
ATL0.0000CHI324.00 CIN
1093.0 HOU
2136.0 764.00
LAX 764.00
MON 459.00
PHL 294.00
PIT 2184.0
STL 2187.0
SND SNF
CIN 664.00 454.00 324.00 0.0000 1137.0 2180.0
NYK 0.0000 864.00 845.00 664.00 1706.0 2844.0 396.00 798.00 572.00 284.00
92.000 338.00
386.00 2228.0
1002.0 2463.0
2892.0 3032.0
HOU 1706.0 842.00 1093.0 1137.0 0.0000 1616.0 1857.0 1614.0 1421.0 799.00 1521.0 2021.0
ATL 864.00 0.0000 702.00 454.00 842.00 2396.0 1196.0 772.00 714.00 554.00 2363.0 2679.0
LAX 2844.0 2396.0 2136.0 2180.0 1616.0 0.0000 2900.0 2752.0 2464.0 1842.0 95.000 405.00
CHI 845.00 702.00 0.0000 324.00 1093.0 2136.0 764.00
MON 396.00 1196.0 764.00 798.00 1857.0 2900.0 0.0000 424.00
764.00
514.00
459.00
1058.0
294.00
2948.0
2184.0
2951.0
2187.0
CIN 664.00 772.00
PHL 92.000 454.00764.00
324.00572.00
0.0000 1137.0
1614.0 2180.0
2752.0 424.00798.00
0.0000 572.00
305.00 284.00
910.00 338.00
2800.0 2228.0
2951.0 2463.0
HOU 1706.0 714.00
PIT 386.00 842.00459.00
1093.0284.00
1137.0 0.0000
1421.0 1616.0
2464.0 514.001857.0
305.00 1614.0
0.0000 1421.0
622.00 799.00
2512.0 1521.0
2646.0 2021.0
LAX 2844.0 554.00
STL 1002.0 2396.0294.00
2136.0338.00
2180.0 1616.0
799.00 0.0000
1842.0 1058.02900.0
910.00 2752.0
622.00 2464.0
0.0000 1842.0
1890.0 95.000
2125.0 405.00
MON 396.00 1196.0 764.00 798.00 1857.0 2900.0
SND 2892.0 2363.0 2184.0 2228.0 1521.0 95.000 2948.0 2800.0 0.0000 424.00
2512.0 514.00
1890.0 1058.0
0.0000 2948.0
500.00 2951.0
PHL 92.000 2679.0
SNF 3032.0 772.002187.0
764.002463.0
572.00 1614.0
2021.0 2752.0
405.00 2951.0424.00
2951.0 0.0000
2646.0 305.00
2125.0 910.00
500.00 2800.0
0.0000 2951.0
PIT 386.00 714.00 459.00 284.00 1421.0 2464.0 514.00 305.00 0.0000 622.00 2512.0 2646.0
SOLUTION:
STL 1002.0 554.00 294.00 338.00 799.00 1842.0 1058.0 910.00 622.00 0.0000 1890.0 2125.0
❖ SOLUTION
Model
SND Class:
2892.0MILP 2363.0 2184.0 2228.0 1521.0 95.000 2948.0 2800.0 2512.0 1890.0 0.0000 500.00
IDEAL PLANNING PROGRAM:
SNF
Below 3032.0 2679.0 2187.0 2463.0 2021.0 405.000, and the2951.0 2951.0 2646.0up 2125.0
the optimal500.00 0.0000
Globalisoptimal
the solution achieved
solution by LINGO
found. with infeasibilities detailed report that makes
Objective value: 4752.0
SOLUTION:
Objective bound: 4752.0
Model Class: MILP
Infeasibilities: 0.0000
IDEAL PLANNING PROGRAM:
#1Global optimal
Obj value = 4752solution found.
Begin tour
Objective value:at NYK 4752.0
Objective bound: MON
Next stop on tour= 4752.0
Next stop on tour= PHL
Infeasibilities: 0.0000
Next stop on tour= NYK
Add constraint to cut off above subtour.
#1 Global
Obj value
optimal= 4752
solution found.
Begin tourvalue:
Objective at NYK 4852.0
Next stop on
Objective bound: tour= MON 4852.0
Next stop on
Infeasibilities: tour= PHL 0.0000
Next stop on tour= NYK
#2
AddObj value = 4852
constraint to cut off above subtour.
Begin tour at
Global optimal solutionNYK found.
Objective value: PHL
Next stop on tour= 4852.0
Next stop on tour= NYK
Objective bound: 4852.0
Add constraint to cut off above subtour.
Infeasibilities:
Global optimal solution found.
0.0000
Objective value: 4947.0
#2 Obj
#2 Obj value
value == 4852
4852
Begin tour
Begin tour at at NYK
NYK
Next stop
Next stop on
on tour=
tour= PHL
PHL
Next stop on tour=
Next stop on tour= NYK NYK
Add constraint to cut
Add constraint to cut off off above
above subtour.
subtour.
Global optimal solution found.
Global optimal solution found.
Objective value:
Objective value: 4947.0
4947.0
Objective bound: 4947.0
Infeasibilities: 0.0000

#3 Obj value = 4947


Begin tour at NYK
Next stop on tour= MON
Next stop on tour= PIT
Next stop on tour= PHL
Next stop on tour= NYK
Add constraint to cut off above subtour.
Global optimal solution found.
Objective value: 5130.0
Objective bound: 5130.0
Infeasibilities: 0.0000

#4 Obj value = 5130


Begin tour at NYK 413
Next stop on tour= PHL
Next stop on tour= CIN
C2-B16 Solving Problems with LINGO Traveling Salesman | Case 3 | Classic

#5 Obj value = 5157


Begin tour at NYK
Next stop on tour= MON
Next stop on tour= CHI
Next stop on tour= STL
Next stop on tour= CIN
Next stop on tour= PIT
Next stop on tour= PHL
Next stop on tour= NYK
Add constraint to cut off above subtour.
Global optimal solution found.
Objective value: 5230.0
Objective bound: 5230.0
Infeasibilities: 0.0000

#6 Obj value = 5230


Begin tour at NYK
Next stop on tour= MON
Next stop on tour= CHI
Next stop on tour= STL
Next stop on tour= HOU
Next stop on tour= ATL
Next stop on tour= CIN
Next stop on tour= PIT
Next stop on tour= PHL
Next stop on tour= NYK
Add constraint to cut off above subtour.
Global optimal solution found.
Objective value: 6952.0
Objective bound: 6952.0
Infeasibilities: 0.0000

#7 Obj value = 6952


Begin tour at NYK
Next stop on tour= MON
Next stop on tour= PIT
Next stop on tour= CIN
Next stop on tour= ATL
Next stop on tour= PHL
Next stop on tour= NYK
Add constraint to cut off above subtour.
Global optimal solution found.
Objective value: 6995.0
Objective bound: 6995.0
Infeasibilities: 0.0000

#8 Obj value = 6995


Begin tour at NYK
Next stop on tour= MON
Next stop on tour= CHI
Next stop on tour= STL
Next stop on tour= ATL
Next stop on tour= CIN
Next stop on tour= PIT
Next stop on tour= PHL
Next stop on tour= NYK
Add constraint to cut off above subtour.
Global optimal solution found.
Objective value: 7577.0
Objective bound: 7577.0
Infeasibilities: 0.0000

#9 Obj value = 7577


Begin tour at NYK 1
Next stop on tour= MON
Next stop on tour= CHI
Next stop on tour= STL
Next stop on tour= SNF
Next stop on tour= LAX
Next stop on tour= SND
Next stop on tour= HOU
Next stop on tour= ATL
Next stop on tour= CIN
Next stop on tour= PIT
Next stop on tour= PHL
Next stop on tour= NYK
Above is complete tour, so min length tour found.

414
C2-B16 Solving Problems with LINGO Traveling Salesman | Case 3 | Classic

415
BLOCK 17 Block: DYNAMIC

How to solve big and difficult problems, using dynamic programming concept, in order to
obtain an ideal solution?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

416
C2-B17 Solving Problems with LINGO Least Distance | Case 1 | Dynamic

DYNAMIC PROGRAMMING - CONCEPT

1
Dynamic programming (DP) is a creative approach to problem solving that involves breaking
down a large and difficult problem into a series of smaller, easy-to-solve problems. By solving
this series of minor problems, we are able to assemble the ideal solution to the big initial
problem.

A detailed discussion of this model can be found in the development of more advanced
Blocks models.o find the shortest path distance through the network, we will use the following DP
recursion: F (i) = min [D (i, j) + F (j)] j where F (i) is the minimum travel distance from point i to the
• Product Mix final destination point and D (i, j) is the distance from point i to point j.In words, the minimum
• Blend distance from node i to terminal node is the minimum at all reachable points over a single arc of
i of the sum of the distance from i to the adjacent node plus the minimum distance from the
• Finance
adjacent node to the terminal node .
• Investments
GOAL
• Diet
Dynamic programming illustration (to see Anderson, Sweeney & Williams, an introduction to Mgr
• Aviation
Science, 6th Ed). We have a network of 10 cities. We want to find the length of the shortest
• Transport route from city 1 to city 10.
• Agriculture
STEP1:
• Construction
Here is our primitive set of ten cities, where F (i) represents the shortest distance from the route
• Refinery from city i to the last city: CITIES /1..10/: F
• Schedule
STEP2:
• Cutting
The derived set ROADS lists the roads that exist between cities (note: not all city.) The pairs are
• Metallurgy directly linked by a road and roads are assumed in a way.
• Fertilizer
STEP3:
• Clinic
The following is classic dynamic recursion programming. In words, the shortest distance from
• Classic City i to City 10 is the minimum in all cities j reachable from the sum of the distance from i to j
plus the minimum distance from j to city 10;
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Dynamic
• Distance
• Route

Source:
• Book 6
• Page 809
• DINAMB

417
C2-B17 Solving Problems with LINGO Least Distance | Case 1 | Dynamic

MODEL:
SETS:
CITIES /1..10/: F;
! The derived set ROADS lists the roads that exist between the cities (note: not all city
pairs are directly linked by a road, and roads are assumed to be one way.);
ROADS( CITIES, CITIES)/
1,2 1,3 1,4
2,5 2,6 2,7
3,5 3,6 3,7
4,5 4,6
5,8 5,9
6,8 6,9
7,8 7,9
8,10 9,10 /: D;
! D( i, j) is the distance from city i to j;
ENDSETS
DATA:
! Here are the distances that correspond to the above links;
D = 1 5 2
13 12 11
6 10 4
12 14
3 9
6 5
8 10
5
2;
ENDDATA
SUBMODEL MIN1:
! If you are already in City 10, then the cost to travel to City 10 is 0;
F( @SIZE( CITIES)) = 0;
! The following is the classic dynamic programming recursion. In words, the shortest distance from
City i to City 10 is the minimum over all cities j reachable from i of the sum of the
distance from i to j plus the minimal distance from j to City 10;
@FOR( CITIES( i)| i #LT# @SIZE( CITIES): F( i) = @MIN( ROADS( i, j): D( i, j) + F( j)));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',3);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " DISTANCE (km) ROUTE VS CITY):", @NEWLINE( 1));
@TABLE(D);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution report;
@WRITEFOR( cities(i) | i #LT# 10:' The smallest distance between City: ', CITIES(I), ' and City 10:',
@FORMAT(F(I),'%3.0f'),'km',
@NEWLINE( 1));
ENDCALC
END

418
C2-B17 Solving Problems with LINGO Least Distance | Case 1 | Dynamic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
DISTANCE (Route vs City in km):
1 2 3 4 5 6 7 8 9 10
1 1.00 5.00 2.00
2
DATA: 13.0 12.0 11.0
3
DISTANCE (Route vs City in km): 6.00 10.0 4.00
4 1 2 3 4 12.0
5 14.06 7 8 9 10
15 1.00 5.00 2.00 3.00 9.00
26 13.0 12.0 11.0 6.00 5.00
37 6.00 10.0 4.00 8.00 10.0
48 12.0 14.0 5.00
59 3.00 9.00 2.00
610 6.00 5.00
7 8.00 10.0
SOLUTION:
8 5.00
9 2.00
The
10 smallest distance between City: 1 and City 10: 19km
❖ SOLUTION
The smallest distance between City: 2 and City 10: 19km
The smallest distance between City: 3
SOLUTION: and City 10: 14km
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
The smallest distance between City: 4 and City 10: 20km
The smallest
The smallest distance
distance between
between City:
City: 15 and
and City 10:
City 10: 19km
8km
The smallest distance between
The smallest distance between City: 2 City: 6 and
and City 10:
City 10: 19km 7km
The smallest
The smallest distance
distance between
between City:
City: 37 and
and City 10:
City 10: 14km
12km
The smallest distance between
The smallest distance between City: 4 City: 8 and
and City 10:
City 10: 20km 5km
The smallest
The smallest distance
distance between
between City:
City: 59 and
and City 10:
City 10: 8km2km
The smallest distance between City: 6 and City 10: 7km
The smallest distance between City: 7 and City 10: 12km
The smallest distance between City: 8 and City 10: 5km
The smallest distance between City: 9 and City 10: 2km

419 1
C2-B17 Solving Problems with LINGO Least Distance | Case 1 | Dynamic

420
C2-B17 Solving Problems with LINGO Least Distance Critical Path | Case 2 | Dynamic

DYNAMIC PROGRAMMING - CONCEPT

2 Dynamic programming (DP) is a creative approach to problem solving that involves breaking
down a large and difficult problem into a series of smaller, easy-to-solve problems. By solving
this series of minor problems, we are able to assemble the ideal solution to the big initial
problem.

A detailed discussion of this model can be found in the development of more advanced
Blocks models.o find the shortest path distance through the network, we will use the following DP
recursion: F (i) = min [D (i, j) + F (j)] j where F (i) is the minimum travel distance from point i to the
• Product Mix
final destination point and D (i, j) is the distance from point i to point j.In words, the minimum
• Blend distance from node i to terminal node is the minimum at all reachable points over a single arc of
i of the sum of the distance from i to the adjacent node plus the minimum distance from the
• Finance
adjacent node to the terminal node .
• Investments
GOAL
• Diet
Dynamic programming illustration (to see Anderson, Sweeney & Williams, an introduction to
• Aviation
Mgt Science, 6th Ed.). We have a network of 10 cities. We want to find the length of the
• Transport shortest route from city 1 to city 10.
• Agriculture
STEP1:
• Construction
Here is our primitive set of ten cities, where F (i) represents the shortest distance from the route
• Refinery from city i to the last city: CITIES /1..10/: F
• Schedule
STEP2:
• Cutting
The derived set ROADS lists the roads that exist between cities (note: not all city.) The pairs are
• Metallurgy directly linked by a road and roads are assumed in a way.
• Fertilizer
STEP3:
• Clinic
The following is classic dynamic recursion programming. In words, the shortest distance from
• Classic City i to City 10 is the minimum in all cities j reachable from the sum of the distance from i to j
• Dynamic plus the minimum distance from j to city 10;

• Logistics
• Energy
• Assembly Line

Keywords:
• Dynamic
• Distance
• Route

Source:
• Book 4
• DynamicprogShortRT

421
C2-B17 Solving Problems with LINGO Least Distance Critical Path | Case 2 | Dynamic
MODEL:
SETS:
! Dynamic programming illustration (see Anderson, Sweeney & Williams, An Intro to Mgr Science, 6th Ed.).
We have a network of 10 cities. We want to find the length of the shortest route from city 1 to city 10.;
! Here is our primitive set of ten cities, where F( i) represents the shortest path distance from city i to the last city;
CITIES /1..10/: F, CONPATH;
! The derived set ROADS lists the roads that exist between the cities (note: not all city pairs are directly linked by a road, and roads are
assumed to be one way.);
ROADS( CITIES, CITIES)/
1,2 1,3 1,4
2,5 2,6 2,7
3,5 3,6 3,7
4,5 4,6
5,8 5,9
6,8 6,9
7,8 7,9
8,10 9,10/: D, RONPATH; ! D( i, j) is the distance from city i to j;
ENDSETS
DATA:
! Here are the distances that correspond to the above links;
D = 1 5 2
13 12 11
6 10 4
12 14
3 9
6 5
8 10
5 2;
ENDDATA
SUBMODEL MIN2:
! If ow are already in last city, then the cost to travel to it is 0;
F( @SIZE( CITIES)) = 0;
! The following is the classic dynamic programming recursion. In words, the shortest distance from City i to last city is the minimum
over all cities j reachable from i of the sum of the distance from i to j plus the minimal distance from j to last city;
@FOR( CITIES( i)| i #LT# @SIZE( CITIES): F( i) = @MIN( ROADS( i, j): D( i, j) + F( j)); );
! Set CONPATH( j) > 0 if city j is on any critical path, i.e., if going to j from some i on the critical path, still allows us to get to last city in
optimal time;
CONPATH( 1) = 1;
@FOR( CITIES( j)| j #GT# 1: CONPATH( j) = @MAX( ROADS( i,j): CONPATH( i)*((F(I)-F( j) #EQ# D(i,j)))););
! Set RONPATH(i,j) = 1 if arc i,j is on any critical path, i.e., both i and j are on path and (i,j) is shortest path from i to j. Note, we do not
assume distances satisfy triangle inequality;
@FOR( ROADS(i,j): RONPATH(I,J) = @SMIN( CONPATH(i), CONPATH(j))*((F(i)-F( j)) #EQ# D(i,j)););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',3);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " DISTANCE (km) ROUTE VS CITY):", @NEWLINE( 1));
@TABLE(D);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN2);
! Solution report;
@WRITEFOR( cities(i) | i #LT# 10:' The smallest distance between City: ', CITIES(I), ' and City 10:',
@FORMAT(F(I),'%3.0f'),'km',
@NEWLINE( 1));
ENDCALC
END

422
C2-B17 Solving Problems with LINGO Least Distance Critical Path | Case 2 | Dynamic

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
DISTANCE (km) ROUTE VS CITY):
DATA: 1 2 3 4 5 6 7 8 9 10
DISTANCE
1 (km)
1.00ROUTE
5.00VS CITY):
2.00
2 1 2 3 4 13.0 5 12.0 6 11.0 7 8 9 10
13 1.00 5.00 2.00 6.00 10.0 4.00
24 12.0 12.0
13.0 14.0 11.0
35 6.00 10.0 4.00 3.00 9.00
46 12.0 14.0 6.00 5.00
57 8.00 9.00
3.00 10.0
68 6.00 5.00 5.00
79 8.00 10.0 2.00
810 5.00
9 2.00
SOLUTION:
10
Feasible solution found.
Total solver iterations:
SOLUTION: 0
Elapsed runtime
Feasible solutionseconds:
found. 0.03
❖ SOLUTION
Total solver iterations: 0
The smallest
Below is the
Elapsed distance
solution achieved
runtime seconds:between City: 1 and 0.03 10:
City
by LINGO with infeasibilities 0, and the detailed 19km
report that makes up the optimal solution.
The smallest distance between City: 2 and City 10: 19km
The smallest
The smallest distance
distance between
between City:
City: 13 and
and City 10:
City 10: 19km
14km
The smallest distance between
The smallest distance between City: 2 City: 4 and
and City 10:
City 10: 19km20km
The smallest
The smallest distance
distance between
between City:
City: 35 and
and City 10:
City 10: 14km
8km
The smallest
The smallest distance
distance between
between City:
City: 46 and
and City 10:
City 10: 20km
7km
The smallest distance between
The smallest distance between City: 5 City: 7 and
and City 10:
City 10: 8km 12km
The smallest distance between
The smallest distance between City: 6 City: 8 and
and City 10:
City 10: 7km5km
The smallest
The smallest distance
distance between
between City:
City: 79 and
and City 10:
City 10: 12km
2km
The smallest distance between City: 8 and City 10: 5km
The smallest distance between City: 9 and City 10: 2km

423
C2-B17 Solving Problems with LINGO Least Distance Critical Path | Case 2 | Dynamic

424
BLOCK 18 Block: LOGISTIC

How to optimize transport resources of parts, assemblies, etc., in an industrial facility in the
shortest possible time, according to available resources and thus obtain cost reduction?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

425
C2-B18 Solving Problems with LINGO Freight elevator | Case 1 | Logistics

GOAL

1 For the construction of a tower, three external elevators were installed to carry cargo.
The lifts carry one unit of load on each trip. They go up loaded and come down empty.
Elevator A caters to floors 1 and 3.
Elevator B is on floors 2 and 4.
Blocks Elevator C caters to all floors.
• Product Mix Each lift can perform daily, and regardless of the floor, the number of trips provided below:
• Blend
Elevator A Elevator B Elevator C Demand
• Finance
Floor 1 3 0 4 50
• Investments
Floor 2 0 3 4 70
• Diet
• Aviation Floor 3 4 0 6 80

• Transport Floor 4 0 5 6 85

• Agriculture Available 120 95 80 -


• Construction
Every day, 285 cargo units must be transported.
• Refinery
Since lifts operate to lubricate such equipment, elevators that serve only even or odd-
• Schedule numbered floors must carry out at least 10 daily trips for each floor served. The daily time
available for elevator operation is 420 minutes.
• Cutting
• Metallurgy Each elevator has, on each pavement served, a specific equipment of security of door,
access and removal of load.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Elevator
• Trip

Source:
• Book 3
• Chapter 2.5.11

426
C2-B18 Solving Problems with LINGO Freight elevator | Case 1 | Logistics

MODEL:
SETS:
HEADER1 / PROD, LIMIT, VALUE /:;
PRODUCT : AVAILABLE;
RESOURCE: DEMAND;
RXP( RESOURCE, PRODUCT) : TIME, PRODUCE;
YXP( RESOURCE, HEADER1) : SLASUR1;
PXR( PRODUCT, HEADER1) : SLASUR;
ENDSETS
DATA:
! Products attributes;
PRODUCT , AVAILABLE =
ELEVATOR_A 120
ELEVATOR_B 95
ELEVATOR_C 80;

! Resources attributes;
RESOURCE, DEMAND =
FLOOR_1 50
FLOOR_2 70
FLOOR_3 80
FLOOR_4 85;

! Required ELEVATOR_A ELEVATOR_B ELEVATOR_C;


TIME = 3 0 4 ! FLOOR_1;
0 3 4 ! FLOOR_2;
4 0 6 ! FLOOR_3;
0 5 6; ! FLOOR_4;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM( RXP(I,J ): PRODUCE( I,J));
! The available constraints;
@FOR( PRODUCT( COL):
[AVA] @SUM( RESOURCE( LIN): PRODUCE( LIN,COL )) <= AVAILABLE( COL););
! Lifts operating time;
@FOR( PRODUCT( COL):
[TIM] @SUM( RESOURCE( LIN): TIME( LIN,COL) *PRODUCE( LIN,COL )) <= 420;);
! Travel assistance per floor;
@FOR( RESOURCE( LIN):
[DEM] @SUM( PRODUCT( COL): PRODUCE( LIN, COL )) = DEMAND( LIN););
! Restrictions on the minimum numbers of trip (Elevator A AND B );
@FOR(RESOURCE(LIN):
[MNT] @SUM( PRODUCT(COL) | COL #LT# 3: PRODUCE(LIN,1)) >= 10;);
ENDSUBMODEL

427
C2-B18 Solving Problems with LINGO Freight elevator | Case 1 | Logistics

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',8);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " TIME (Min) :", @NEWLINE( 1));
@TABLE(TIME);
@WRITE(" ", @NEWLINE( 1), " AVAILABLE (Min):", @NEWLINE( 1));
@TABLE(AVAILABLE);
@WRITE(" ", @NEWLINE( 1), " TRIP NEED:", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J)| PRODUCE(I,J) #GT# 0: ' ',
@FORMAT(PRODUCT( J),'-10S'), ' made:',
@FORMAT(PRODUCE(I,J),'%5.0f'),' Trip To ',
@FORMAT(RESOURCE( I),'-10s'),' ',
@NEWLINE( 1));
! Slack/Surplus Resources report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = DEMAND: ", @NEWLINE( 1));
@FOR(RXP(I,J):
SLASUR1(I,2) = DEMAND(I);
SLASUR1(I,1) = PRODUCE(I,1) + PRODUCE(I,2) + PRODUCE(I,3);
SLASUR1(I,3) = SLASUR1(I,1) - SLASUR1(I,2));
@TABLE(SLASUR1);
! Slack/Surplus Resources report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = MINIMUM NUMBERS OF TRIP: ", @NEWLINE( 1));
@FOR(RXP(I,J):
SLASUR1(I,2) = PRODUCE(I,1) + PRODUCE(I,2) + PRODUCE(I,3);
SLASUR1(I,1) = SLASUR1(I,2) - MNT(I);
SLASUR1(I,3) = SLASUR1(I,1) - SLASUR1(I,2));
@TABLE(SLASUR1);
! Slack/Surplus Resources report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = AVAILABLE: ", @NEWLINE( 1));
@FOR(PXR(I,J):
SLASUR(I,2) = AVAILABLE(I);
SLASUR(I,1) = SLASUR(I,2) - AVA(I) ;
SLASUR(I,3) = SLASUR(I,1) - SLASUR(I,2));
@TABLE(SLASUR);
! Slack/Surplus Resources report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT = LIFTS OPERATING TIME: ", @NEWLINE( 1));
@FOR(PXR(I,J):
SLASUR(I,2) = AVAILABLE(I);
SLASUR(I,1) = SLASUR(I,2) - TIM(I) ;
SLASUR(I,3) = SLASUR(I,1) - SLASUR(I,2));
@TABLE(SLASUR);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

428
C2-B18 Solving Problems with LINGO Freight elevator | Case 1 | Logistics

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.
DATA:
TIME (Min) :
ELEVATOR_A ELEVATOR_B ELEVATOR_C
FLOOR_1
DATA: 3.0000000 0.0000000 4.0000000
FLOOR_2
TIME (Min) : 0.0000000 3.0000000 4.0000000
FLOOR_3
DATA: 4.0000000 0.0000000
ELEVATOR_A ELEVATOR_B ELEVATOR_C6.0000000
FLOOR_4
TIME 0.0000000 0.0000000
(Min) : 3.0000000
FLOOR_1 5.0000000 4.0000000
6.0000000
FLOOR_2 ELEVATOR_A
0.0000000 ELEVATOR_B
3.0000000 ELEVATOR_C
4.0000000
FLOOR_1 (Min):
AVAILABLE
FLOOR_3 3.0000000
4.0000000 0.0000000
0.0000000 4.0000000
6.0000000
FLOOR_2
FLOOR_4 0.0000000
ELEVATOR_A 0.0000000 3.0000000
120.00000 5.0000000 4.0000000
6.0000000
FLOOR_3 4.0000000
ELEVATOR_B 95.000000 0.0000000 6.0000000
FLOOR_4
AVAILABLE 0.0000000
(Min):
ELEVATOR_C 80.000000 5.0000000 6.0000000
ELEVATOR_A 120.00000
AVAILABLE
NEED:(Min):
ELEVATOR_B
TRIP 95.000000
ELEVATOR_A
ELEVATOR_C
FLOOR_1 120.00000
80.000000
50.000000
ELEVATOR_B
FLOOR_2 95.000000
70.000000
TRIP NEED:
ELEVATOR_C
FLOOR_3 80.000000
80.000000
FLOOR_1
FLOOR_4 50.000000
85.000000
FLOOR_2
TRIP NEED: 70.000000
FLOOR_3
FLOOR_1
SOLUTION: 80.000000
50.000000
❖ SOLUTION
FLOOR_4
FLOOR_2 85.000000
70.000000
Global optimal solution found.
FLOOR_3
Objective 80.000000
value: 285.00000
Below is the solution
SOLUTION:
FLOOR_4 achieved by LINGO with
85.000000 infeasibilities 0, and the detailed report that makes up the optimal
Infeasibilities: 0.0000000
Global optimal solution found.
Objective
SOLUTION: value: 285.00000
Model Class: LP
Infeasibilities:
Global optimal solution found. 0.0000000
Objective value: 285.00000
IDEAL
Model PLANNING
Class: LP PROGRAM:
Infeasibilities: 0.0000000
ELEVATOR_A made: 5 Trip To FLOOR_1
ELEVATOR_C
IDEAL
Model PLANNING
made:
Class: LPPROGRAM:
45 Trip To FLOOR_1
ELEVATOR_A
ELEVATOR_A made:
made: 55 Trip
Trip ToTo FLOOR_2
FLOOR_1
ELEVATOR_B
ELEVATOR_C made:
made:
IDEAL PLANNING PROGRAM: 40
45 Trip
Trip ToTo FLOOR_2
FLOOR_1
ELEVATOR_C
ELEVATOR_A
ELEVATOR_A made:
made:
made: 25
5 Trip
Trip
5 Trip To
ToTo FLOOR_2
FLOOR_2
FLOOR_1
ELEVATOR_A
ELEVATOR_B
ELEVATOR_C made:
made:
made: 25
40 Trip
Trip
45 Trip To
ToTo FLOOR_3
FLOOR_2
FLOOR_1
ELEVATOR_B
ELEVATOR_C
ELEVATOR_A made:
made:
made: 55
25 Trip
Trip
5 Trip To
ToTo FLOOR_3
FLOOR_2
FLOOR_2
ELEVATOR_A
ELEVATOR_A
ELEVATOR_B made:
made:
made: 85
25 Trip
Trip
40 Trip To
ToTo FLOOR_4
FLOOR_3
FLOOR_2
ELEVATOR_B
ELEVATOR_C made:
made: 55 Trip
25 Trip To
To FLOOR_3
FLOOR_2
SLACK/SURPLUS
ELEVATOR_A
ELEVATOR_A LIMIT = DEMAND:
made:
made: 85
25 Trip
Trip To
To FLOOR_4
FLOOR_3
ELEVATOR_B made: PROD 55 Trip LIMITTo VALUE
FLOOR_3
SLACK/SURPLUS
FLOOR_1
ELEVATOR_A LIMIT
made: = DEMAND:
50.000000 50.000000
85 Trip To 0.0000000
FLOOR_4
FLOOR_2 PROD
70.000000 LIMIT
70.000000 VALUE
0.0000000
FLOOR_1
FLOOR_3
SLACK/SURPLUS 50.000000
80.000000
LIMIT = DEMAND:50.000000
80.000000 0.0000000
0.0000000
FLOOR_2 70.000000
PROD 70.000000
LIMIT 0.0000000
VALUE
FLOOR_3
FLOOR_1 80.000000
50.000000 80.000000
50.000000 0.0000000
0.0000000 1
FLOOR_4
FLOOR_2 85.000000
70.000000 85.000000
70.000000 0.0000000
0.0000000
FLOOR_3 80.000000 80.000000 0.0000000 1
SLACK/SURPLUS LIMIT = MINIMUM NUMBERS OF TRIP:
PROD LIMIT VALUE 1
FLOOR_1 50.000000 50.000000 0.0000000
FLOOR_2 70.000000 70.000000 0.0000000
FLOOR_3 40.000000 80.000000 -40.000000
FLOOR_4 -75.000000 85.000000 -160.00000

SLACK/SURPLUS LIMIT = AVAILABLE:


PROD LIMIT VALUE
ELEVATOR_A 120.00000 120.00000 0.0000000
ELEVATOR_B 95.000000 95.000000 0.0000000
ELEVATOR_C 70.000000 80.000000 -10.000000

SLACK/SURPLUS LIMIT = LIFTS OPERATING TIME:


PROD LIMIT VALUE
ELEVATOR_A -185.00000 120.00000 -305.00000
ELEVATOR_B -205.00000 95.000000 -300.00000
ELEVATOR_C -60.000000 80.000000 -140.00000

429
C2-B18 Solving Problems with LINGO Capacitated Plant Location | Case 2 | Logistics

GOAL

Your firm has a choice of three locations to operate a manufacturing facility in. Four customers

2 exist with a known demand for your product.

Capacity
Plant / Customers C1 C2 C3 C4 Fixed Cost
( un )

Blocks P1 $ 6.00 2.00 6.00 7.00 91.00 39


• Product Mix
P2 $ 4.00 9.00 5.00 3.00 70.00 35
• Blend
• Finance P3 $ 8.00 8.00 1.00 5.00 24.00 31

• Investments Demand un 15 17 22 12 - -
• Diet
• Aviation Each potential plant location has an associated monthly operating cost, and shipping routes to
the demand cities have varying cost.
• Transport
In addition, each potential plant will have a shipping capacity that must not be exceeded.
• Agriculture
• Construction You need to determine what plant(s) to open and how much of a product to send from each open
plant to each customer to minimize total shipping cost and fixed plant operating cost.
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Plant
• Customer
• Trip

Source:
• Book 4
• CAPLOC

430
C2-B18 Solving Problems with LINGO Capacitated Plant Location | Case 2 | Logistics
MODEL:
SETS:
PLANTS: FCOST, CAPACITY, OPEN;
CUSTOMERS: DEMAND;
PXC( PLANTS, CUSTOMERS) : COST, VOL;
ENDSETS
DATA:
! The plant, their fixed cost and capacity;
PLANTS, FCOST, CAPACITY =
P1 91 39
P2 70 35
P3 24 31;
! Customers and their demands;
CUSTOMERS, DEMAND =
C1 15
C2 17
C3 22
C4 12;
! The plant to cost cost/unit shipment matrix;
! REQUIRED C1 C2 C3 C4;
COST = 6 2 6 7 ! P1;
4 9 5 3 ! P2;
8 8 1 5; ! P3;
ENDDATA
SUBMODEL MIN2:
[OBJ] MIN = @SUM( PXC: COST * VOL) + @SUM( PLANTS: FCOST * OPEN);
! The demand constraints;
@FOR( CUSTOMERS( J):
[DEM] @SUM( PLANTS( I): VOL( I, J)) >= DEMAND( J));
! The supply constraints;
@FOR( PLANTS( I):
[CAP] @SUM( CUSTOMERS( J): VOL( I, J)) <= CAPACITY( I) * OPEN( I));
! Make OPEN binary(0/1);
@FOR( PLANTS: @BIN( OPEN));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Precision in digits for standard solution reports;
@SET('PRECIS',3);
! Terminal page width (0:none);
@SET('LINLEN',120);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " COST (Plant vs Customers):", @NEWLINE( 1));
@TABLE(COST);
@WRITE(" ", @NEWLINE( 1), " FIXED COST:", @NEWLINE( 1));
@TABLE(FCOST);
@WRITE(" ", @NEWLINE( 1), " DEMAND (un):", @NEWLINE( 1));
@TABLE(DEMAND);
@WRITE(" ", @NEWLINE( 1), " CAPACITY (un):", @NEWLINE( 1));
@TABLE(CAPACITY);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
@SOLVE(MIN2);
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@TEXT()=@WRITEFOR( PXC(I,J) | VOL(I,J) #GT# 0: ' From:',
@FORMAT(PLANTS(I),'-2s'),' To:',
@FORMAT(CUSTOMERS(J),'-2s'), ' ',
@FORMAT(VOL(I,J),'%2.0f'), 'Un x Unit cost: $',
@FORMAT(COST(I,J),'%4.2f'), ' = Shipping cost:$',
@FORMAT(VOL(I,J) * COST(I,J),'%5.2f'), ' + ', 'Fixed cost:$',
!THE FIXED PROFIT HAD TO BE RATED TO ADJUST THE CALCULATION OF THE TOTAL PROFIT IN THE REPORT ;
@FORMAT(@IF( PLANTS(I) #EQ# 'P1', FCOST(I)/3, FCOST(I)/2), '%4.1f'), ' = Total:$',
@FORMAT(VOL(I,J) * COST(I,J) + @IF( PLANTS(I) #EQ# 'P1', FCOST(I)/3, FCOST(I)/2),'%6.2f'),
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN2);
ENDCALC
END

431
C2-B18 Solving Problems with LINGO Capacitated Plant Location | Case 2 | Logistics

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
COST (Plant vs Customers):
C1 C2 C3 C4
P1 6.00 2.00 6.00 7.00
P2 4.00 9.00 5.00 3.00
P3 8.00 8.00 1.00 5.00

FIXED COST:
P1 91.0
P2 70.0
P3 24.0
DATA:
DEMAND
COST (un):vs Customers):
(Plant
C1 15.0
C1 C2 C3 C4
DATA:
C2 6.00
P1 17.0 2.00 6.00 7.00
COST (Plant vs Customers):
C3 4.00
P2 22.0 9.00 5.00 3.00
C1 C2 C3 C4
C4 8.00
P3 12.0
P1 6.00 8.00
2.00 1.00
6.00 5.00
7.00
P2 4.00 9.00 5.00 3.00
CAPACITY
FIXED (un):
COST:
P3 8.00 8.00 1.00 5.00
P1 91.0
P1 39.0
P2 70.0
P2 35.0
FIXED COST:
P3
P3 31.0
P1 24.0
91.0
P2 70.0
SOLUTION:
DEMAND (un):
P3 24.0
Global
C1 15.0 optimal solution found.
Objective
C2 17.0 value: 327.00
DEMAND (un):
Objective
C3 22.0 bound: 327.00
C1 15.0
Infeasibilities:
C4 12.0 0.00
C2 17.0
C3 22.0
Model Class:
CAPACITY MILP
C4 12.0(un):
P1 39.0
IDEAL
P2 35.0PLANNING PROGRAM:
CAPACITY (un):
❖ SOLUTION
From:P1
P3
P1 31.0
39.0
To:C1 15Un x Unit cost: $6.00 = Shipping cost:$90.00 + Fixed cost:$30.3 = Total:$120.33
From:P1 To:C2 17Un x Unit cost: $2.00 = Shipping cost:$34.00 + Fixed cost:$30.3 = Total:$ 64.33
P2 35.0
Below is the
From:P1 solution
To:C4 3Un achieved
x Unit by LINGO
cost: with= infeasibilities
$7.00 0, and the detailed
Shipping cost:$21.00 + Fixedreport that makes
cost:$30.3 up the 51.33
= Total:$ optimal
SOLUTION:
P3 31.0To:C3 22Un x Unit cost: $1.00 = Shipping cost:$22.00 + Fixed cost:$12.0 = Total:$ 34.00
From:P3
Global optimal solution found.
From:P3 To:C4 9Un x Unit cost: $5.00 = Shipping cost:$45.00 + Fixed cost:$12.0 = Total:$327.00
Objective 57.00
SOLUTION: value:
Objective
Global bound:solution found.
optimal 327.00
SLACK/SURPLUS
Infeasibilities: LIMIT = DEMAND: 0.00
Objective
PRODvalue:
LIMIT VALUE 327.00
Objective bound: 327.00
Model Class: MILP
Infeasibilities: 0.00
1
IDEAL
Model PLANNING PROGRAM:
Class: MILP
From:P1 To:C1 15Un x Unit cost: $6.00 = Shipping cost:$90.00 + Fixed cost:$30.3 = Total:$120.33
From:P1 To:C2 17Un
IDEAL PLANNING x Unit
PROGRAM: cost: $2.00 = Shipping cost:$34.00 + Fixed cost:$30.3 = Total:$ 64.33
From:P1
From:P1 To:C1 15Un xx Unit
To:C4 3Un Unit cost:
cost: $7.00
$6.00 == Shipping
Shipping cost:$21.00
cost:$90.00 ++ Fixed
Fixed cost:$30.3
cost:$30.3 == Total:$ 51.33
Total:$120.33
From:P3
From:P1 To:C3
To:C2 22Un
17Un xx Unit
Unit cost:
cost: $1.00
$2.00 == Shipping
Shipping cost:$22.00
cost:$34.00 ++ Fixed
Fixed cost:$12.0
cost:$30.3 == Total:$
Total:$ 34.00
64.33
From:P3
From:P1 To:C4
To:C4 9Un
3Un xx Unit
Unit cost:
cost: $5.00
$7.00 == Shipping
Shipping cost:$45.00
cost:$21.00 ++ Fixed
Fixed cost:$12.0
cost:$30.3 == Total:$
Total:$ 57.00
51.33
From:P3 To:C3 22Un x Unit cost: $1.00 = Shipping cost:$22.00 + Fixed cost:$12.0 = Total:$ 34.00
SLACK/SURPLUS
From:P3 To:C4 LIMIT
9Un =x DEMAND:
Unit cost: $5.00 = Shipping cost:$45.00 + Fixed cost:$12.0 = Total:$ 57.00
PROD LIMIT VALUE
SLACK/SURPLUS LIMIT = DEMAND:
PROD LIMIT VALUE 1

432
C2-B18 Solving Problems with LINGO Ship Load | Case 3 | Logistics

GOAL

3
Three ships will be loaded at the port of Santos with iron ore. The Ore Terminal has four pier,
each of them with a different capacity ship-loader.

Due to differences in the capacities of ships and ship-loaders, there are different loading times,
depending on the combinations between ships and pier as per table below.

Blocks
Terminal Ship Loaders
• Product Mix
LoadTime A B C
• Blend
P1 7 11 9
• Finance
P2 6 10 15
• Investments Pier
P3 12 16 14
• Diet
• Aviation P4 14 6 5

• Transport
Formulate the modeling so that the total time of ship loading is minimal.
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Plant
• Customer
• Trip

Source:
• Book 11
• Ex.: 31

433
C2-B18 Solving Problems with LINGO Ship Load | Case 3 | Logistics
MODEL:
SETS:
PIER: ;
SHIP: ;
RXP( PIER, SHIP): LOADTIME, PRODTIME;
ENDSETS
DATA:
! Pier attributes;
PIER =
P1
P2
P3
P4;
! Ship attributes;
SHIP =
A
B
C;
! Ship vs Pier A B C;
LOADTIME = 7 11 9 ! P1;
6 10 15 ! P2;
12 16 14 ! P3;
14 8 5; ! P4;
ENDDATA
SUBMODEL MIN3:
! Minimal loadtime;
[OBJ] MIN = @SUM( RXP( I, J): LOADTIME( I, J) * PRODTIME( I, J));
! Pier;
@FOR( PIER( I):
@SUM( SHIP( J): PRODTIME( I, J)) = 1);
! Ship;
@FOR( SHIP( J):
@SUM( PIER( I): PRODTIME( I, J)) >= 1);
@FOR(RXP(I,J): @BIN(PRODTIME(I,J)));
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" LOADTIME:", @NEWLINE( 1));
@TABLE(LOADTIME);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));;
! Execute sub-model;
@SOLVE(MIN3);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL LOGISTICS PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( RXP( I, J) | PRODTIME( I, J) #GT# 0: ' Pier: ', PIER( I), ' Ship: ', SHIP(J),' Loadtime: ', 17*'.',' ',
@FORMAT(LOADTIME(I,J),'%2.0f'),' hr',
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN3);
ENDCALC
END

434
C2-B18 Solving Problems with LINGO Ship Load | Case 3 | Logistics

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
LOADTIME:
A B C
P1 7.000000 11.00000 9.000000
P2 6.000000 10.00000 15.00000
P3 12.00000 16.00000 14.00000
P4 14.00000 8.000000 5.000000

SOLUTION:
Global optimal solution found.
Objective value: 34.00000
Objective bound: 34.00000
Infeasibilities: 0.000000

Model Class: LP

IDEAL LOGISTICS PROGRAM:


Pier: P1 Ship: B Loadtime: ................. 11 hr
Pier: P2 Ship: A Loadtime: ................. 6 hr
Pier: P3 Ship: A Loadtime: ................. 12 hr
Pier: P4 Ship: C Loadtime: ................. 5 hr

DATA:
LOADTIME:
DATA: A B C
P1 7.000000 11.00000 9.000000
LOADTIME:
P2 6.000000 A 10.00000 B 15.00000 C
P3 12.00000 16.00000
P1 7.000000 11.00000 9.000000 14.00000
P4
P2 14.00000
6.000000 8.000000 5.000000
10.00000 15.00000
❖ SOLUTION
P3 12.00000 16.00000 14.00000
SOLUTION:
Below is the solution
P4 14.00000 achieved by
8.000000 LINGO with infeasibilities 0, and the detailed report that makes up the optimal
5.000000
Global optimal solution found.
Objective
SOLUTION: value: 34.00000
Objective bound:
Global optimal solution found. 34.00000
Infeasibilities:
Objective value: 0.000000
34.00000
Objective bound: 34.00000
Model Class: LP
Infeasibilities: 0.000000

IDEAL
Model LOGISTICS
Class: LP PROGRAM:
Pier: P1 Ship: B Loadtime: ................. 11 hr
Pier:
IDEAL P2 Ship:PROGRAM:
LOGISTICS A Loadtime: ................. 6 hr
Pier:
Pier: P3
P1 Ship: A
Ship: B Loadtime:
Loadtime: .................
................. 12
11 hr
hr
Pier:
Pier: P4
P2 Ship:
Ship: C
A Loadtime:
Loadtime: .................
................. 5
6 hr
hr
Pier: P3 Ship: A Loadtime: ................. 12 hr
Pier: P4 Ship: C Loadtime: ................. 5 hr

1
435
BLOCK 19 Block: ENERGY

How to produce thermal energy for example, using Coal Mineral, Oil Diesel, etc. and
respect the limits of environmental pollution allowed?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

436
C2-B19 Solving Problems with LINGO Steam Production | Case 1 | Energy

GOAL

1 The City of Criciuma operates its own electric power generation plant from coal. This plant
burns three types of mineral to generate steam and thus to drive the turbines that produce
electric energy.

The Department of Environmental Protection (DPA) determines that the smoke generated by
Blocks burning coal can’t contain more than 2500 ppm of sulfur and no more than 2.8 kg of coal
dust.
• Product Mix
• Blend The specifications of the three types of coal to be blended are shown below. The three types
• Finance of coal can be mixed in any way.

• Investments
Coal
• Diet Resources / Products
• Aviation T1 T2 T3 Limit

• Transport
Sulfur ppm 1.7 3.2 2.4 2.8
• Agriculture
• Construction Goal Powder kg 1,000 3,500 2,700 2,500

• Refinery Steam ton 24,000 36,000 28,000 -


• Schedule
• Cutting
The plant manager wants to determine the ideal mix of generating the largest amount of
• Metallurgy steam without violating DPA determinations.
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Steam
• Protection
• Blend

Source:
• Book 2
• Page 234

437
C2-B19 Solving Problems with LINGO Steam Production | Case 1 | Energy

MODEL:
SETS:
HEADER1 / PROD, LIMIT, VALUE /:;
PRODUCT : STEAM, PRODUCE;
RESOURCE: LIMIT;
RXP( RESOURCE, PRODUCT) : USAGE;
YXP( RESOURCE, HEADER1) : SLASUR1;
ENDSETS
DATA:
! Resources attributes;
RESOURCE, LIMIT =
SULFUR 2.8
GOAL_POWDER 2500;
! Products attributes;
PRODUCT, STEAM =
COAL_T1 24000
COAL_T2 36000
COAL_T3 28000;
! Required COAL_T1 COAL_T2 COAL_T3;
USAGE = 1.7 3.2 2.4 ! SULFOR;
1000 3500 2700; ! GOAL_POWDER;
ENDDATA
SUBMODEL MIN1:
[OBJ] MIN = @SUM( PRODUCT( p): STEAM( p) * PRODUCE( p));
! Limit;
@FOR( RESOURCE( r):
[LIM] @SUM( PRODUCT( p): USAGE( r, p) * PRODUCE( p )) >= LIMIT( r););
ENDSUBMODEL
CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " RESOURCE (ppm,kg)):", @NEWLINE( 1));
@TABLE(USAGE);
@WRITE(" ", @NEWLINE( 1), " LIMIT (ppm,kg):", @NEWLINE( 1));
@TABLE(LIMIT);
@WRITE(" ", @NEWLINE( 1), " STEAM (ton):", @NEWLINE( 1));
@TABLE(STEAM);
@WRITE(" ", @NEWLINE( 1), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( PRODUCT(J)| PRODUCE(J) #GT# 0: ' Used: ', PRODUCT(J), ' ',
@FORMAT(PRODUCE( J) * 100,'%3.1f'),'%', ' x Steam:',
@FORMAT(STEAM(J),'%5.0f'),'ton',' = Total:',
@FORMAT(PRODUCE( J) * STEAM( J), '%5.0f'),'ton',
@NEWLINE( 1));
! Slack/Surplus Resources report;
@WRITE(" ", @NEWLINE( 1), " SLACK/SURPLUS LIMIT: ", @NEWLINE( 1));
@FOR(YXP(I,J):
SLASUR1(I,2) = LIMIT(I);
SLASUR1(I,1) = SLASUR1(I,2) - LIM(I);
SLASUR1(I,3) = SLASUR1(I,1) - SLASUR1(I,2));
@TABLE(SLASUR1);
@WRITE(" ", @NEWLINE( 1));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

438
C2-B19 Solving Problems with LINGO Steam Production | Case 1 | Energy

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:
RESOURCE (ppm,kg)):
COAL_T1 COAL_T2 COAL_T3
SULFOR 1.700000 3.200000 2.400000
GOAL_POWDER 1000.000 3500.000 2700.000

LIMIT (ppm,kg):
SULFOR 2.800000
GOAL_POWDER 2500.000

STEAM (ton):
COAL_T1 24000.00
COAL_T2 36000.00
COAL_T3 28000.00
DATA:
SOLUTION: (ppm,kg)):
RESOURCE
Global optimal solution
COAL_T1found.
COAL_T2 COAL_T3
Objective value:
DATA: 31500.00
SULFOR
Infeasibilities:
1.700000 3.200000 2.400000
0.000000
RESOURCE (ppm,kg)):
GOAL_POWDER 1000.000 3500.000 2700.000
COAL_T1 COAL_T2 COAL_T3
Model Class: LP
SULFOR
LIMIT (ppm,kg):1.700000 3.200000 2.400000
GOAL_POWDER
SULFOR
IDEAL 1000.000
2.800000 3500.000 2700.000
PLANNING PROGRAM:
Used: COAL_T2 87.5%
GOAL_POWDER x Steam:36000ton = Total:31500ton
2500.000
LIMIT (ppm,kg):
SULFOR
STEAM (ton): 2.800000
GOAL_POWDER 2500.000
COAL_T1 24000.00
COAL_T2 36000.00
STEAM
COAL_T3(ton): 28000.00
COAL_T1
❖ SOLUTION 24000.00
COAL_T2 36000.00
SOLUTION:
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
COAL_T3 28000.00
Global optimal solution found.
Objective value: 31500.00
SOLUTION:
Infeasibilities: 0.000000
Global optimal solution found.
Objective value: 31500.00
Model Class: LP
Infeasibilities: 0.000000
IDEAL PLANNING PROGRAM:
Model Class: LP
Used: COAL_T2 87.5% x Steam:36000ton = Total:31500ton
IDEAL PLANNING PROGRAM:
SLACK/SURPLUS LIMIT:
Used: COAL_T2 87.5% x Steam:36000ton = Total:31500ton
PROD LIMIT VALUE
SULFOR 2.800000 2.800000 0.000000
SLACK/SURPLUS LIMIT:
GOAL_POWDER 1937.500 2500.000 -562.5000
PROD LIMIT VALUE
SULFOR 2.800000 2.800000 0.000000
GOAL_POWDER 1937.500 2500.000 -562.5000
1

439
BLOCK 20 Block: ASSEMBLY LINE BALANCE

In an assembler company the big challenge is how to reduce the time in activities in the
stations of works, and with that it can produce more?

OTHER AVAILABLE BLOCKS


• Product Mix
• Blend
• Finance
• Investments
• Diet
• Aviation
• Transport
• Agriculture
• Construction
• Refinery
• Schedule
• Cutting
• Metallurgy
• Fertilizer
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line Balance

440
C2-B20 Solving Problems with LINGO Assembly Line Balancing

INTRODUCTION
Assembly line balancing is a production strategy that sets an intended rate of production to produce a
particular product within a particular time frame.

Also, the assembly line needs to be designed effectively and tasks needs to be distributed among
workers, machines and work stations ensuring that every line segments in the production process can be
met within the time frame and available production capacity.

Assembly line balancing can also be defined as assigning proper number of workers or machines for each
operations of an assembly line so as to meet required production rate with minimum or zero ideal time.

The very purpose of line balancing is to assign workloads to each assigned work station in a manner that
the every works stations has approximately same amount of work to be done.

Benefits of Assembly Line Balancing in organization.


1. Improved process efficiency
2. Increased production rate
3. Reduced total processing time
4. Minimum or Zero Ideal Time
5. Potential increase in profits and decrease in PROFITs

ASSEMBLY LINE PROBLEM


Problem:
The below product in a factory is assembled in an assembly line. This process needs to be re-arranged to
find a balance that minimizes the workstation cycle time.

EXISTING ASSEMBLY LINE


Below is an assembly line showing list of 13 activities that needs to be completed to produce a product.
The actual time required to produce each of this activity are as follows.

The assembly line has 5 workers (work stations) stationed on the line as follows where back tracking is
not allowed.

The activities assigned to each workstation by production team are as follows.

Activity, Time: A, 30 B,50 C,40 D,50 E,20 F,10 G,10 H,20 I,10 J,30 K,20 I,50 M,10

The assembly line has 5 workers (workstations - W1, W2, W3, W4, W5) stationed on the line as follows
where back tracking is not allowed.

The activities assigned to each workstation by production team are as follows.

441
C2-B20 Solving Problems with LINGO Assembly Line Balancing

NUMBER OF WORK STATION:


Number of Workstations (n) = 5
TOTAL PROCESSING TIME
Tp = ? Processing Time of all activities
Tp=30+50+40+50+20+20+10+10+10+20+30+50+10
Tp = 350 Seconds

CYCLE TIME OF EACH WORK STATION


Worker, Activities, Cycle Time
W1 A,B 80 (CW1)
W2 C,E 60 (CW2)
W3 C,E 70 (CW3)
W4 F,I,L 70 (CW4)
W5 G,J,K,M 70 (CW5)

CYCLE TIME OF ASSEMBLY LINE


Cycle time of Assembly Line is the maximum time of individual work stations.
CL = Maximum (CW1, CW2, CW3, CW4, CW5)
CL = Maximum (80, 60, 70, 70, 70)
CL = 80 Seconds

BALANCE DELAY
DL=[(5X80)–350]/[5X80]X100
DL = 12.5%

PRODUCTION RATE
Assuming Production happens 24 Hrs in 3 shifts each of 8 hrs.
Production rate (PL) = Available Time / Cycle Time PL=(24X60X60)/80
PL = 1,080 Units
Hence with existing assembly line, 1080 units can be produced per day.

REARRANGEMENT FOR BETTER BALANCE


Total Number of Workstations ( n ) = 5
Total Processing Time ( Tp ) = 350 Seconds
Average Time per work stations = Tp/ n = 350/5 = 70 Seconds

442
C2-B20 Solving Problems with LINGO Tasks by WS | Case 1 | Assembly Line Balance

GOAL

1 This model illustrates how to balance an assembly line in order to minimize its total cycle
time. An assembly line consists of a series of workstations in which each station performs
one or more specialized tasks in the manufacture of a final product. The cycle time is the
maximum time it takes any workstation to complete its assigned tasks.

The goal in balancing an assembly line is to assign tasks to stations, so equal amounts of
Blocks work are performed at each station. Improperly balanced assembly lines will experience
bottlenecks-workstations with less work are forced to wait on preceding station which have
• Product Mix
more work assigned.
• Blend
The problem is complicated further by precedence relations amongst the tasks, where some
• Finance
tasks must be completed before others may begin (e.g., when building a computer, installing
• Investments the disk drives must precede putting on the outer casing).
• Diet
The assignment of tasks to workstations must obey the precedence relations.For our
• Aviation example, we have eleven tasks (A through K) to assign to four stations (1 through4). We
• Transport need to find an assignment of tasks to workstations that minimize the assembly line's cycle
time.
• Agriculture
• Construction Given:

• Refinery • A set of tasks, each with a task time,

• Schedule • Precedence constraints among some of the tasks,

• Cutting • A limited number of stations;

• Metallurgy Problem:

• Fertilizer Minimize the maximum amount of work assigned to any station, subject to:

• Clinic • Each task is assigned to exactly one station,

• Classic • No task is assigned to a station prior to any of its predecessors;

• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Assembler
• Line
• Workstation
• Plant Floor

Source:
• Book 6
• Page 793

443
C2-B20 Solving Problems with LINGO Tasks by WS | Case 1 | Assembly Line Balance
MODEL:
! This model involves assigning tasks to stations in an assembly line so bottlenecks are avoided.
Ideally, each station would be assigned an equal amount of work.;
SETS:
! The set of tasks to be assigned are A through K, and each task has a time to complete, T;
TASK/ A B C D E F G H I J K/: T;
! Some predecessor, successor pairings must be observed(e.g. A must be done before B, B before C, etc.);
PRED( TASK, TASK)/ A,B B,C C,F C,G F,J G,J J,K D,E E,H E,I H,J I,J /;
! There are 4 workstations;
STATION/1..4/;
TXS( TASK, STATION): X;
! X is the attribute from the derived set TXS that represents the assignment. X(I,K) = 1 if task I is assigned to station K;
ENDSETS
DATA:
! Data taken from Chase and Aquilano, POM. There is an estimated time required for each task:
A B C D E F G H I J K;
T = 45 11 9 50 15 12 12 12 12 8 9;
ENDDATA
SUBMODEL MIN1:
! *Warning* may be slow for more than 15 tasks. For each task, there must be one assigned station;
@FOR( TASK( I):
@SUM( STATION( K): X( I, K)) = 1);
! For each precedence pair, the predecessor task I cannot be assigned to a later station than its successor task J;
@FOR( PRED( I, J):
@SUM( STATION( K): K * X( J, K) - K * X( I, K)) >= 0);
! For each station, the total time for the assigned tasks must be less than the maximum cycle time, CYCTIME;
@FOR( STATION( K):
@SUM( TXS( I, K): T( I) * X( I, K)) <= CYCTIME);
! Minimize the maximum cycle time;
[OBJ] MIN = CYCTIME;
! The X(I,J) assignment variables are binary integers;
@FOR( TXS: @BIN( X));
ENDSUBMODEL
CALC:
@SET('TERSEO',1); ! Output level: 0=Verbose, 1-Terse;
@SET('STAWIN',0); ! Post status windows, 1 Yes, 0 No;
! Data block;
@WRITE(" DATA:", @NEWLINE( 1), " ", @NEWLINE( 1), ' TASK: ');
@WRITEFOR(TASK: @FORMAT(TASK, '-4s'),);
@WRITE(" ", @NEWLINE( 2), ' STATION: ');
@WRITEFOR(STATION: @FORMAT(STATION, '-4s'),);
@WRITE(" ", @NEWLINE( 1), " ", @NEWLINE( 1),' TIME: ');
@WRITEFOR(TASK: @FORMAT(T, '%4.0f'),);
@WRITE(" ", @NEWLINE( 2), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN1);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( TXS( I, K) | T( I) * X( I, K) #GT# 0: ' For task:',TASK(I),', ',
@FORMAT(T( I) * X( I, K),'%3.0f'), ' sec of work is required in station: ',
@FORMAT(STATION(K),' 2s'),' ',
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(' Maximum time required (sec):', 24*' ',
@FORMAT(OBJ,'%2.0f'),
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

444
C2-B20 Solving Problems with LINGO Tasks by WS | Case 1 | Assembly Line Balance

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

❖ SOLUTION
Below is the solution achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal

445
C2-B20 Solving Problems with LINGO Tasks by WS | Case 1 | Assembly Line Balance

446
C2-B20 Solving Problems with LINGO Number of Stations | Case 2 | Assembly Line Balance

GOAL

2 This model illustrates how to balance an assembly line in order to minimize its total cycle time.
An assembly line consists of a series of workstations in which each station performs one or
more specialized tasks in the manufacture of a final product.

The cycle time is the maximum time it takes any workstation to complete its assigned tasks.
The goal in balancing an assembly line is to assign tasks to stations, so equal amounts of
Blocks work are performed at each station. Improperly balanced assembly lines will experience
• Product Mix bottlenecks-workstations with less work are forced to wait on preceding station which have
more work assigned.
• Blend
• Finance The problem is complicated further by precedence relations amongst the tasks, where some
tasks must be completed before others may begin (e.g., when building a computer, installing
• Investments the disk drives must precede putting on the outer casing). The assignment of tasks to
• Diet workstations must obey the precedence relations.For our example, we have eleven tasks (A
through K) to assign to four stations (1 through4). We need to find an assignment of tasks to
• Aviation workstations that minimize the assembly line's cycle time
• Transport
Given:
• Agriculture
• A set of tasks, each with a task time,
• Construction
• Precedence constraints among some of the tasks,
• Refinery
• A limited number of stations;
• Schedule
Problem:
• Cutting
Minimize the maximum amount of work assigned to any station, subject to:
• Metallurgy
• Each task is assigned to exactly one station,
• Fertilizer
• No task is assigned to an earlier station than any of its predecessors;
• Clinic
• Classic
• Dynamic
• Logistics
• Energy
• Assembly Line

Keywords:
• Assembler
• Line
• Workstation
• Plant Floor

Source:
• Book 4
• ASLBALCYC

447
C2-B20 Solving Problems with LINGO Number of Stations | Case 2 | Assembly Line Balance

MODEL:
! Assembly line balancing model: Assign tasks to stations in an assembly line so
1) precedence constraints among tasks are satisfied, and
2) each station is assigned no more than a specified amount of work,
3) Objective is to minimize the number stations required;
! Keywords: Line balancing, Assembly line balancing;
SETS:
! There is a set of tasks, each with a duration T;
TASK: T;
! Predecessor/successor pairings must be observed(e.g. A must be done before B, B before C, etc.);
PRED( TASK, TASK);
! There are a specified number of workstations;
STATION: USE;
TXS( TASK, STATION): X;
! X(i,k) = 1 if task i is assigned to station k, else 0;
ENDSETS
DATA:
! Data taken from Chase and Aquilano, POM. There is an estimated time required for each task..;
TASK= A B C D E F G H I J K;
T = 45 11 9 50 15 12 12 12 12 8 9;
PRED= A,B B,C C,F C,G F,J G,J J,K D,E E,H E,I H,J I,J ;
! There are 5 possible stations;
STATION= 1..5;
! Cycle time or upper limit on work in each station;
CYCTIME = 50;
ENDDATA
SUBMODEL MIN2:
! Variables: USE(k) = 1 if station k is used, else 0, X(i,k) = 1 if task i assigned to station k, else 0;
! The model, *Warning* may be slow for more than 15 tasks;
! Minimize the number of stations;
[OBJ] MIN = @SUM(STATION(k): USE(k));
! For each task, there must be one assigned station;
@FOR( TASK( i):
[DOTASK] @SUM( STATION( k): X( i, k)) = 1);
! Precedence constraints;
! For each precedence pair, the predecessor task i cannot be assigned to a later station than its
successor task j;
@FOR( PRED( i, j):
[PRD] @SUM( STATION( k): k * X( j, k) - k * X( i, k)) >= 0 );
! For each station, the total time for the assigned tasks must be less than the maximum cycle time, CYCTIME;
@FOR( STATION( k):
[KNAP] @SUM( TXS( i, k): T( i) * X( i, k)) <= CYCTIME*USE(k);
@BIN(USE(k)); ! USE(k) is a binary variable; );
! If station k is used, then station k-1 must also be;
@FOR( STATION(k) | k #GT# 1: [NOGAP] USE(k) <= USE(k-1); );
! The X(i,j) assignment variables are binary integers;
@FOR( TXS: @BIN( X));
! Some cuts;
! If task i assigned to station k, then k is used;
@FOR( TXS(i,k): [CUT] X(i,k) <= USE(k));
ENDSUBMODEL

448
C2-B20 Solving Problems with LINGO Number of Stations | Case 2 | Assembly Line Balance

CALC:
! Output level: 0=Verbose, 1-Terse;
@SET('TERSEO',1);
! Post status windows, 1 Yes, 0 No;
@SET('STAWIN',0);
! Data block;
@WRITE(" DATA:", @NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1), ' TASK: ');
@WRITEFOR(TASK: @FORMAT(TASK, '-4s'),);
@WRITE(" ", @NEWLINE( 2), ' STATION: ');
@WRITEFOR(STATION: @FORMAT(STATION, '-4s'),);
@WRITE(" ", @NEWLINE( 2), ' TIME: ');
@WRITEFOR(TASK: @FORMAT(T, '%4.0f'),);
@WRITE(" ", @NEWLINE( 2), " SOLUTION: ", @NEWLINE( 1));
! Execute sub-model;
@SOLVE(MIN2);
! Solution report;
@WRITE(" ", @NEWLINE( 1), " IDEAL PLANNING PROGRAM: ", @NEWLINE( 1));
@WRITEFOR( TXS( I, K) | T( I) * X( I, K) #GT# 0: ' For task:',TASK(I),', ',
@FORMAT(T( I) * X( I, K),'%3.0f'), ' sec of work is required in station: ',
@FORMAT(STATION(K),' 2s'),' ',
@NEWLINE( 1));
@WRITE(" ", @NEWLINE( 1));
@WRITE(' Total stations required::', 27*' ',
@FORMAT(OBJ,'%2.0f'),
@NEWLINE( 2));
!To see the corresponding model scalar, remove (!) From the line below;
!@GEN(MIN1);
ENDCALC
END

449
C2-B20 Solving Problems with LINGO Number of Stations | Case 2 | Assembly Line Balance

❖ DATA
All problem data is organized in the data block as a set of members and value attributes, which can be viewed below.

DATA:

TASK: A B C D E F G H I J K

STATION: 1 2 3 4 5

TIME: 45 11 9 50 15 12 12 12 12 8 9

SOLUTION:
❖ SOLUTION
Global optimal solution found.
Objective
Below value:
is the solution 4.000000
achieved by LINGO with infeasibilities 0, and the detailed report that makes up the optimal
Objective bound: 4.000000
Infeasibilities: 0.000000

Model Class: MILP

IDEAL PLANNING PROGRAM:


For task:A, 45 sec of work is required in station: 1
For task:B, 11 sec of work is required in station: 3
For task:C, 9 sec of work is required in station: 4
For task:D, 50 sec of work is required in station: 2
For task:E, 15 sec of work is required in station: 3
For task:F, 12 sec of work is required in station: 4
For task:G, 12 sec of work is required in station: 4
For task:H, 12 sec of work is required in station: 3
For task:I, 12 sec of work is required in station: 3
For task:J, 8 sec of work is required in station: 4
For task:K, 9 sec of work is required in station: 4

Total stations required:: 4

450
C2-B20 Solving Problems with LINGO Number of Stations | Case 2 | Assembly Line Balance

451
452
3 1
CHAPTER
BLOCK 1 BIBLIOGRAPHY

• Suggested Bibliography
• Source
• About the Author

2
C3-B1 SUGGESTED BIBLIOGRAPHY FOR READING

Anderson, Sweeney, and Williams, Introduction to Management Science, 8th ed. St. Paul, MN: West
Publishing, 1997.

Quantitative Methods for Business, 6th ed. St. Paul, MN: West Publishing, 1991.

Birge, J., and F. Louveaux, Introduction to Stochastic Programming, Volume 57, Springer-Verlag
New York, Inc., 1997.

Black, F., and M. Scholes. (1973). "The Pricing of Options and Corporate Liabilities.", Journal of
Political Economy, vol. 81, pp. 637-654.

Bradley, S.P., A.C. Hax, and T.L. Magnanti, Applied Mathematical Programming. Reading, MA :
Addison-Wesley Publishing Company, Inc., 1977.

Cochran, W.G., Sampling Techniques. 2nd ed. New York, NY : Wiley, 1963.

Conway, R.W., W.L. Maxwell, and L.W. Miller, Theory of Scheduling. Reading, MA : Addison-Wesley
Publishing Company, Inc.,1967.

Cox, John C. and Mark Rubinstein, Options Markets, Englewood Cliffs, NJ: Prentice-Hall, Inc.,
1985.

Dantzig, G.B., Linear Programming and Extensions., Princeton, N.J. : Princeton University Press,
1963.

Eppen, G.D., F.J. Gould, and Schmidt, C.P., Quantitative Concepts for Management: Decision
Making Without Algorithms, 3rd ed. Englewood Cliffs, N.J. : Prentice-Hall, Inc., 1989.

Introductory Management Science, 4th ed. Englewood Cliffs, N.J. : Prentice-Hall, Inc., 1993.

Gass, S., Decision Making, Models & Algorithms. New York: Wiley-Interscience, 1985.

Linear Programming, 5th ed. New York: McGraw-Hill, 1985.

Geoffrion, A., The Theory of Structured Modeling, Western Management Science Institute, UCLA,
1987.

Hadley, G., and T.M. Whitin, Analysis of Inventory Systems. Englewood Cliffs, N.J. : Prentice-Hall,
Inc., 1963.

Hillier, F., and G.J. Lieberman, Introduction to Operations Research, 9th ed. New York : McGraw-Hill,
Inc., 2010.

3
C3-B1 SUGGESTED BIBLIOGRAPHY FOR READING

Johnson, L., and D.C. Montgomery, Operations Research in Production Planning, Scheduling, and
Inventory Control. New York: John Wiley & Sons, Inc., 1974.

Knowles, T., Management Science. Homewood, IL: Irwin Publishing, 1989.

Lin, S., and B. Kernighan. (1973). "An effective Heuristic Algorithm for the Traveling Salesman
Problem.", Operations Research, vol. 10, pp. 463-471.

Markowitz, H. M., Portfolio Selection, Efficient Diversification of Investments, John Wiley & Sons,
1959.

Nemhauser, G., and L. Wolsey, Integer and Combinatorial Optimization, New York : John Wiley &
Sons, 1988.

Moder, Joseph J., and Salah E. Elmaghraby (editors), Handbook of Operations Research, New York:
Van Nostrand Reinhold Company, 1978.

Schrage, L., Optimization Modeling with LINDO, 5th. ed. Belmont, CA: Duxbury Press, 1997.

Optimization Modeling with LINGO, 6th. ed. Chicago, IL: LINDO Systems Inc, 2006.

Wagner, H.M., Principles of Management Science with Applications to Executive Decisions, 2nd ed.
Englewood Cliffs, N.J. : Prentice-Hall, Inc., 1975.

Principles of Operations Research, 2nd ed. Englewood Cliffs, N.J. : Prentice-Hall, Inc., 1975.

Winston, Wayne L., Introduction to Mathematical Programming: Applications and Algorithms, 3rd
ed.,. Belmont, CA: Duxbury Press, 1995.

Operations Research: Applications and Algorithms, 2nd ed., Belmont, CA: Duxbury Press, 1995

Darci Prado, Programação Linear, Serie Pesquisa Operacional Vol. 1, INDG Instituto de
Desenvolvimento Gerencial S/A, 2012

Marco Cesar Goldbarg, Henrique Pacca Loureiro Luna, Elizabeth Ferreira Gouvêa Goldbarg,
Programação Linear e Fluxos em Redes, Editora Campus, 2015.

Cláudio Boghi e Ricardo Shitsuka, Aplicações Práticas com o MS Office 2003 e Solver, Ferramentas
Computacionais para tomada de Decisão, Editora Érica Ltda, 2005

Optimization Modeling with LINGO by Linus Schrage, www.lindo.com, Chicago

4
C3-B1 Solution Problems with LINGO Source

SOURCE

Book Name Author Publishing company Year

1 Programação Linear Darci Prado INDG 2012

2 Solver Claudio Borghi & Ricardo Shitsuka Editora Erica Ltda 2005

Marco Cesar Goldbarg,


Programação Linear e
3 Loureiro Lima, Campus 2015
Fluxos em Redes
Elizabeth Ferreira Gouvêa Goldbarg.

4 Application Model Library Lindo Systems Inc Lindo Systems Inc 2018

Optimization Modeling with


5 Linus Schrage Lindo Systems Inc 2018
LINGO

LINGO the modeling


6 Lindo Systems Inc Lindo Systems Inc 2018
Language and Optimizar

7 Internet Document Msc. Fernando M. A. Nigeria EDP/FE/UFJF -

Lingo Manual de Aloisio de Castro Gomes Junior and


8 UFOP 2004
Referencias Marcone Jamilson Freitas Souza

9 Programação Linear Mauricio Pereira dos Santos DMA-IME/UFRJ -

10 Pesquisa Operacional Prof. Flavio Fogliato, Ph.D. DEPROT / UFRGS -

11 Alocação academia.edu - -

Manuela Magalhães Hill and Mariana


12 Investigação Operacional Edições Silabo Ltda 2018
Marques dos Santos

5
C3-B1 Solution Problems with LINGO About The Author

Companies / Projects worked

VOLKSWAGEN
• Development, Support and IBM-APL Language Training
• Just-In-Time System (IBM-DAE)
• Broadcasting System (Siemens)
• Powertrain Warehouse Systems
• Development of tools for implementation of Regelkreis methodology in Plant Floor
• Body Paint Mix Sequencing System
• Development of Linear Programming Models using IBM-APL

GEDAS
• Just-In-Time System
• e-Procurement System

T-SYSTEMS
• e-Procurement System
• Economic Feasibility of Projects System

PROTOTYPES:

• Acquisition of Times of the activities performed during the stay of the Aircraft in soil
• Acquisition of medical data from patients with cancer, for the Genome project.
• Development of Data Analysis (BI) for various activities

6
7

You might also like