to solve current problem set

advertisement
Process Optimization
Tier II: Case Studies
Section 1:
Lingo Optimization Software
Optimization Software
• Many of the optimization methods
previously outlined can be tedious and
require a lot of work to solve, especially as
models get more complex and move
beyond two or three variables, which will
often be the case
• Software can be used to solve these
problems more efficiently
Optimization Software
• Software that is available usually uses the
same methods previously outlined, but can
of course perform the calculations quicker,
allowing the effect of variations in the
model to be studied more easily
Optimization Software
• Some optimization examples have already
been shown using Excel
• Another program, Lingo, will now be
demonstrated
• A trial version of this software can be
downloaded at
www.lindo.com/cgi/frameset.cgi?leftlingo.h
tml;lingof.html
Lingo
• Lingo is a program designed specifically
for solving optimization problems
• It uses a syntax that is similar to what
would be written by hand, or what would
be used in Excel, not requiring variables to
be declared
• For example, y = 3*x^2 is y = 3x2
Lingo Operators
• Many of Lingo’s mathematical operators
are similar to what Excel uses:
– Addition: +
- Multiplication: *
– Subtraction: - Division: /
– For exponents: X^n
– Equals: =
– Greater than or less than: > or <
• Note: Lingo accepts ‘<’ as being ‘<=’. It does not
support strictly less than or greater than.
Lingo Operators, con’t
• Absolute value of x: @abs(x)
• Natural log of x: @log(x)
• Trigonometric functions: @sin(x), @cos(x),
@tan(x) (x in radians)
• Exponentials: @exp(x)
• To return integer portion of decimal
number: @floor(x)
• @sign(x): returns -1 if x < 0, or else 1
Lingo Operators, con’t
• Find max or min value in a set:
@smax(x1,x2…,xn) or @smin(x1,x2…,xn)
• To find maximum or minimum of a
function: max or min
• To allow negative variables: @free(x)
• Lingo has a number of other operators, but
these are the mathematical operators that
are most likely to be used
Using Lingo
• Other operators, like logic operators, can
be found in the help file’s complete list of
operators
• Now that we have the mathematical
operators that are likely to be used, we
can demonstrate how Lingo works with
some examples
• Lingo can be used strictly as an equation
solver or as an optimizer
Lingo Screenshot
If additional help is
needed
Solve – to solve
current problem set
Basic Equation Solver
This will find the intersection of
the lines “y = 3x + 4” and
“y = 5x + 1”
Solution
Note: Lingo does not distinguish
between small and capital letters
Equation Solver #2
Solution #2
Only one solution was found! There
should be two solutions to this
problem. The solver automatically
stops when it finds the first solution.
Solution #2
20
15
10
Y
7.791
5
3.2087
0
-5
0
5
10
-5
3.2087
X
7.791
15
Non-linear Difficulties
• Lingo is not designed to deal with nonlinear equations
• It cannot find multiple solutions
• There is a problem with solving non-linear
problems, especially if the solution is in the
negative domain
Maximum and Minimum
• The maximum and minimum functions are
the most important functions needed for
optimization problems
• These functions are used as follows:
max = objective function;
min = objective function;
Solving Optimization Problems
• Several optimization examples that were
worked through in previous sections will
now be solved using Lingo
• The first example is from the introduction
section
Chemical Plant Example
• Objective: Maximize 1000x1 + 1500x2
• Constraints:
4x1 + 2x2 <= 80
2x1 + 5x2 <= 60
4x1 + 4x2 <= 75
x1, x2 >= 0
Chemical Plant Example
Lingo Solution
Solution, including
value of objective
function at
optimum and
optimum point
Transportation Scheme Problem
Problem #2 Solution
Negative Values
• Lingo cannot automatically solve for a
negative variable value
• If it is suspected that a solution will be
negative, then that variable will need to be
specifically declared as free:
@free(x);
• It is a good idea to declare all variables
like this, unless of course a negative value
is infeasible
Attempting to Obtain a Negative
Solution
• The following example will demonstrate
what happens if a negative value is
required to get an optimum solution
• Lingo will automatically solve for the
optimum solution obtained from only
positive variables, even if this is not the
true optimum
Attempting to Obtain a Negative
Solution
Attempting to Obtain a Negative
Solution
This solution is
viable if the
variable values
must be positive,
but this is not
the true optimum
Attempting to Obtain a Negative
Solution
These statements allow
negative values to be used for
these variables
Attempting to Obtain a Negative
Solution
Now the true
optimum is
obtained, with
negative
variables
Greater Than or Less Than
• Another potential problem that will be
encountered using Lingo is that it treats
< the same as <=, and > the same as >=
• Thus, if a variable must be strictly greater
than a value, the constraint is best treated
as follows:
– For x > A, where A is a solution otherwise, use
x > A + b;
where b is an arbitrary value, like 0.1, that
covers a portion where the solution will not lie
Example of < or >
Example of < or >
Clearly this is not
correct as X1 was
constrained to be
greater than 0!
Example of < or >
This will now force X1 and X2
to be greater than 0. We can
do this because we know X1
and X2 are also greater than
0.1.
Example of < or >
Variables now
obey desired
constraints.
Objective just
happens to be the
same in this case.
Conclusions
• Lingo is effective and efficient for solving
optimization problems if they are linear
• It is not designed to deal with non-linear
problems
• It is not very good at dealing with non-linear
problems, so these must be approached with
caution
• It does not handle multiple maximum or
minimum points very well in non-linear cases
Download