Upload
vanessa-day
View
226
Download
2
Tags:
Embed Size (px)
Citation preview
ILOG CPLEX introduction
Presenter: Meng-yen Li
Outline• Introduction• Using the interactive interface• Read problem from file• LP format• Demo with FS problem
Introduction
• ILOG CPLEX is an optimization package.• Usually shortened as “cplex”
• Named after Simplex method and C language.• Originally developed by Robert E. Bixby.• Now IBM has the acquisition of ILOG CPLEX.
• CPLEX was acquired by ILOG in 1997• ILOG was acquired by IBM in 2009
Capability
• CPLEX can solve…• Very large linear programming problems(LP)• Mixed integer programming problems(MIP)• Quadratic objective programming problems(QP)• Quadratic constraint programming problems(QCP)
Reference
• “ILOG CPLEX <Version> Getting Started”• Ref. - “ILOG CPLEX 11.0 Getting Started”, 2007• For CPLEX starter.
• “ILOG CPLEX <Version> File Formats”• Ref. - “ILOG CPLEX 10.0 File Formats”, 2006• For knowing file format detail, especially LP format.
• “ILOG CPLEX <Version> User’s Manual”• Ref. - “ILOG CPLEX 9.0 User’s Manual”, 2003• For manually using CPLEX Classes and Library in C++.
• You can get these documents by Google.• Current version is 12.1.0• Easy / Hard
How to use
• CPLEX is currently installed on eda union 13• Login to edaunion.ee.ntu.edu.tw:40063• Just directly execute cplex
– Type cplex
• Unfortunately, the License is only for one user.• So if others are using or link dead when using,
you may see error message from ILM(license manager)
Interactive Interface
r97160@edaU13:~$ cplexIBM ILOG License Manager: "ntu-taiwan " is accessing CPLEX 12 with option(s): "e
m b q use=1 MaintenanceEnd=20121031 ".
Welcome to CPLEX Interactive Optimizer 12.1.0 with Simplex, Mixed Integer & Barrier Optimizers5724-Y48 (c) Copyright IBM Corp. 1988, 2009. All Rights Reserved.CPLEX is a registered trademark of IBM Corp.
Type 'help' for a list of available commands.Type 'help' followed by a command name for moreinformation on commands.
CPLEX>
Example with manually inputCPLEX> enter exampleEnter new problem ['end' on a separate line terminates]:maximize x1 + 2 x2 + 3 x3subject to -x1 + x2 + x3 <= 20x1 - 3 x2 + x3 <= 30bounds0 <= x1 <= 400 <= x20 <= x3end
Example with manually inputCPLEX> enter exampleEnter new problem ['end' on a separate line terminates]:maximize x1 + 2 x2 + 3 x3subject to -x1 + x2 + x3 <= 20x1 - 3 x2 + x3 <= 30bounds0 <= x1 <= 400 <= x20 <= x3end
Keyword enter with problem name example
ProblemObjective Function maximize Subject to constraints subject toVariable bounds boundsend to finish input problem
Solving the problemCPLEX> optimizeTried aggregator 1 time.No LP presolve or aggregator reductions.Presolve time = 0.00 sec.
Iteration log . . .Iteration: 1 Dual infeasibility = 0.000000Iteration: 2 Dual objective = 202.500000
Dual simplex - Optimal: Objective = 2.0250000000e+02Solution time = 0.00 sec. Iterations = 2 (1)
View solutionCPLEX> display solution variables x1-x3Variable Name Solution Valuex1 40.000000x2 17.500000x3 42.500000
Read problem from file
• Manually input is too tedious.• We can read the problem from file if it is
stored in LP format file.• You can read in many ways:
• read (then to be prompted to input file name)– example (then to be prompted to input file format)– lp
• read example lp (same to above but without prompt)• read example.lp (specify extension also works)
LP format
Keyword abbreviation default name
enterread
er
by manually input(input filename)
maximizeminimize
maxmin
(obj)
subject to st (c1 …. cn)
bounds
end
LP format: variable naming
• The variable name cannot be longer than 255 characters• All alphanumeric characters (a-z, A-Z, 0-9) and certain
symbols: ! " # $ % & ( ) , . ; ? @ _ ‘ ’ { } ~ can be used.• Any combinations are allowed except the followings.• Cannot start with numbers or period(.)• Cannot start with e/E with another number or e• (because e is reseverd for exponents and equal sense)• Some examples:
– O x123, x@#$ , #4x.3e, Example– X e2, eels, .123, 3x4
LP format: constraint naming
• As previous table shows• The default name for objective function is obj.• The default name for constraints is c1 … cn.• You can change by adding labels before the linear
(in)eqaulities.• example:
max mymax: x1 + 2x2 + 3x3st time: -x1 + x2 + x3 <= 20 labor: x1 - 3x2 + x3 <= 30
LP format: input limit
• Any line with more than 510 characters is truncated.• You can enter linear (in)equalities on separate lines, but
without cutting the variables.• example:
– correct inputtime: -x1 + x2 + <return>x3 <= 20 <return>labor: x1 - 3x2 + x3 <= 30 <return>
– incorrect inputtime: -x1 + x2 + x <return>3 <= 20 <return>labor: x1 - 3x2 + x3 <= 30 <return>
LP format: sense
• X1 – 3x2 + x3 <= 30• Yellow part is called sense.• Blue part is called Right Hand Side(RHS).• CPLEX parse constraints by these key parts.• So if you add ; after a line(like c/c++) will get this warning.
– Warning, line 55: Characters after RHS value are ignored.
Sense =
Input format <= >= =
Synonym <, <=, =<, l(less) >, =>, >=, g(greater) =, e(equal)
Note < is interpreted as <= by cplex
> is interpreted as=> by cplex
LP format: bounds• Variable bounds can enter as
– ln <= xn <= un• You can also separately enter the bounds
– ln <= xn – xn =< un
• Default setting– lower bound: 0– upper bound: +∞
• For infinity, set the bounds as +infinity(+inf) / -infinity(-inf)• also you can use free to indicate no bounds
– x7 free– same as –inf <= x7 <= +inf
LP format: Integer
• Add section general/binary to list which variable is integer/0-1 integer.
• General/Generals/Gen is all acceptable.• Binary/Binaries/Bin is all acceptable.
LP format:Mixed IntegerMaximize
obj: x1 + 2 x2 + 3 x3 + x4Subject To
c1: - x1 + x2 + x3 + 10 x4 <= 20c2: x1 - 3 x2 + x3 <= 30c3: x2 - 3.5 x4 = 0
Bounds0 <= x1 <= 402 <= x4 <= 3
Generalx4
Binaryx2
End
Demo
• Using CPLEX to solve FS problem• Problem Input:
X0 X1 F
0 0 1
1 0 0
2 0 1
3 0 1
0 1 0
1 1 1
2 1 0
3 1 0
X0 X1 F
0 0 0
1 0 0
2 0 1
3 0 1
0 1 0
1 1 1
2 1 0
3 1 0
fsp1.lp(infeasible) fsp2.lp(has solution)
Formulation
• FS constraint:• f(ma)f(mb) (ma[bit])(mb[bit])
• (ma[bit])(mb[bit])
| (ma[bit]) (mb[bit]) | 1
((ma[bit]) (mb[bit]) 1)
((mb [bit]) (m a[bit]) 1)
• At first I didn’t know how to write a Linear Constraint for this, so I wrote a Quadratic Constraint instead.
• | (ma[bit]) (mb[bit]) | 1
( (ma[bit]) (mb[bit]) )2 1
X F
1
ma a[0]
a[1]
a[2]
a[3]
0
1
mb b[0]
b[1]
b[2]
b[3]
1
0
0
Convert constraints in MIQCPmin dummy
\x grc group/row/column\z grrc group/pairs of row/column\problem\x x0x1 encode f\0 0 0 x000 x001 x100 1\1 1 0 x010 x011 x100 0\2 2 0 x020 x021 x100 1\3 3 0 x030 x031 x100 1\4 0 1 x000 x001 x110 0\5 1 1 x010 x011 x110 1\6 2 1 x020 x021 x110 0\7 3 1 x030 x031 x110 0
Use dummy variable for there’s no objective function
Use \ to comment a line
This problem is infeasible.And if this bit changes to 0It will become feasible
Convert constraints in MIQCPst\full symmetry property\pair01FSpair01: [ x000 * x000 + x000 * x001 + x000 * x100 - x000 * x010 - x000 * x011 - x000 * x100 + x001 * x000 + x001 * x001 + x001 * x100 - x001 * x010 - x001 * x011 - x001 * x100 + x100 * x000 + x100 * x001 + x100 * x100 - x100 * x010 - x100 * x011 - x100 * x100 - x010 * x000 - x010 * x001 - x010 * x100 + x010 * x010 + x010 * x011 + x010 * x100 - x011 * x000 - x011 * x001 - x011 * x100 + x011 * x010 + x011 * x011 + x011 * x100 - x100 * x000 - x100 * x001 - x100 * x100 + x100 * x010 + x100 * x011 + x100 * x100 ] >= 1 \this is the infeasible one’s FS QC(quadratic constraint) for example, other QC are omitted\Quadratic terms must put inside of square brackets []
Convert constraints in MIQCP\x0 encode\x0 pair 01ENCODEx0bit0pair01LB: x000 + x010 - 2 z0010 >= -1ENCODEx0bit0pair01UB: x000 + x010 - 2 z0010 <= 0ENCODEx0bit1pair01LB: x001 + x011 - 2 z0011 >= -1ENCODEx0bit1pair01UB: x001 + x011 - 2 z0011 <= 0ENCODEx0pair01: 2 z0010 + 2 z0011 - x000 - x010 - x001 - x011 >= 1\(… from pair01 to pair23)\x1 encode\x1 pair 01ENCODEx1bit0pair01LB: x100 + x110 - 2 z1010 >= -1ENCODEx1bit0pair01UB: x100 + x110 - 2 z1010 <= 0ENCODEx1pair23: 2 z1010 - x100 - x110 >= 1 Cplex interpret > 0 as >= 0
here need change to >=1
Convert constraints in MIQCPbindummy\x0x000 x001x010 x011x020 x021x030 x031\x1x100x110
\z0z0010 z0011z0020 z0021z0030 z0031
z0120 z0121z0130 z0131
z0230 z0231\z1z1010end Remember to add end at last line
Use the interactive interfaceCPLEX> read fsp1.lpProblem 'fsp1.lp' read.Read time = 0.00 sec.CPLEX> display problem statsProblem name: fsp1.lpVariables : 24 [Binary: 24]Objective nonzeros : 1Linear constraints : 33 [Less: 13, Greater: 20] Nonzeros : 117 RHS nonzeros : 20Quadratic constraints: 16 [Greater: 16] Linear terms : 0 Quadratic terms : 256 RHS nonzeros : 16
Use the interactive interfaceCPLEX> opt(…message too long so omitted here)MIP - Integer infeasible.Current MIP best bound is infinite.Solution time = 0.12 sec. Iterations = 350 Nodes = 68(Change the problem and rewrite constraints, store in fsp2.lp)CPLEX> r fsp2.lpCPLEX> opt(…message too long so omitted here)Solution pool: 1 solution saved.
MIP - Integer optimal solution: Objective = 0.0000000000e+00Solution time = 0.01 sec. Iterations = 37 Nodes = 0
Command needed not to type in full if the shortened one is not ambiguous.For example, read can also just type r.
Use the interactive interfaceCPLEX> display sol var *Incumbent solutionVariable Name Solution Valuex100 1.000000x020 1.000000x031 1.000000x010 1.000000x011 1.000000(…other auxiliary z variables are omitted here)z1010 1.000000All other variables matching '*' are 0.
Shortened for commanddisplay solution variables ** is a wildcard character which meansany matching charactersthat is, display all variables
Solution for FS
• CPLEX showed a solution to the problem– x100 x020 x031 x010 x011 are 1, others are 0
• We got the solution!X0 X1 Y
0 0 1 0
1 1 1 0
1 0 1 1
0 1 1 1
0 0 0 0
1 1 0 1
1 0 0 0
0 1 0 0
Formulation
• But now I know how to formulate in Linear Constraint.• | x y | 1 ( (x-y) + M*b 1 ) ( (y-x) + M*(1-b) 1 )
( (x-y) + M*b 1 ) ( (y-x) - M*b 1-M )• x, y +Integer, b Binary, M is a large enough +integer.• Because |x-y| Max(x, y) (∵ x, y +Integer)• Let M = #bit + 1
FS in Linear Constraint\full symmetry property\#bit =3, M=4FSpair02p: x000 + x001 + x100 - x020 - x021 - x100 + 4 fs02 >= 1FSpair02n: x020 + x021 + x100 - x000 - x001 - x100 - 4 fs02 >= -3
FSpair03p: x000 + x001 + x100 - x030 - x031 - x100 + 4 fs03 >= 1FSpair03n: x030 + x031 + x100 - x000 - x001 - x100 - 4 fs03 >= -3
FSpair05p: x000 + x001 + x100 - x010 - x011 - x110 + 4 fs05 >= 1FSpair05n: x010 + x011 + x110 - x000 - x001 - x100 - 4 fs05 >= -3
FS in Linear ConstraintCPLEX> r fsp3.lpProblem 'fsp3.lp' read.Read time = 0.00 sec.CPLEX> dis pro staProblem name: fsp3.lpVariables : 39 [Binary: 39]Objective nonzeros : 1Linear constraints : 63 [Less: 13, Greater: 50] Nonzeros : 275 RHS nonzeros : 50
Variables : Min LB: 0.000000 Max UB: 1.000000Objective nonzeros : Min : 1.000000 Max : 1.000000Linear constraints : Nonzeros : Min : 1.000000 Max : 4.000000 RHS nonzeros : Min : 1.000000 Max : 3.000000
FS in Linear ConstraintCPLEX> optTried aggregator 1 time.(…)Root node processing (before b&c): Real time = 0.01Parallel b&c, 8 threads: Real time = 0.00 Sync time (average) = 0.00 Wait time (average) = 0.00 -------Total (root+branch&cut) = 0.01 sec.
Solution pool: 1 solution saved.
MIP - Integer optimal solution: Objective = 0.0000000000e+00Solution time = 0.01 sec. Iterations = 60 Nodes = 0
FS in Linear ConstraintCPLEX> dis sol var *Incumbent solutionVariable Name Solution Valuex000 1.000000x001 1.000000x021 1.000000x030 1.000000x110 1.000000(…)All other variables matching '*' are 0.
Solution for FS
• CPLEX showed another solution to the problem– x000 x001 x021 x030 x110 are 1, others are 0.– It’s in fact a complement encoding compare to QCP’s.
X0 X1 Y
0 0 1 0
1 1 1 0
1 0 1 1
0 1 1 1
0 0 0 0
1 1 0 1
1 0 0 0
0 1 0 0
X0 X1 Y
1 1 0 0
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
0 0 1 1
0 1 1 0
1 0 1 0
solution from QCP formulation solution from LP formulation
FS: maxmize multivalue f
• Problem Input:
X F
0 0
1 1
2 2
3 3
4 0
5 2
6 2
7 0
fsp5.lp(both function FS feasible)
X F
0 2
1 1
2 2
3 3
4 0
5 2
6 2
7 0
fsp6.lp(both function FS feasible)
Problem Encoding
• X variables: x[minterm][bit]• example : x71 means 7-th minterm’s “1-th” bit• All start from 0!
• Y variables: b[minterm][bit]
Formulation
For each pair of two minterm row of X.If Y-multivalue same, skip. Add LP constraint of
b-encoding not samesummation not same
Min m0+m1+…\b00 + b10 - 2z >= -1\b00 + b10 - 2z <= 0\2z - b00 - b10 >= 1 = ...\sum2 - sum3 +Mfs +(1-...) + m0>=1\sum3 - sum2 +M(1-fs)+(1-...) + m0>=1
Thank you.