rev |
line source |
alpar@9
|
1 %* glpk09.tex *%
|
alpar@9
|
2
|
alpar@9
|
3 \chapter{CPLEX LP Format}
|
alpar@9
|
4 \label{chacplex}
|
alpar@9
|
5
|
alpar@9
|
6 \section{Prelude}
|
alpar@9
|
7
|
alpar@9
|
8 The CPLEX LP format\footnote{The CPLEX LP format was developed in
|
alpar@9
|
9 the end of 1980's by CPLEX Optimization, Inc. as an input format for
|
alpar@9
|
10 the CPLEX linear programming system. Although the CPLEX LP format is
|
alpar@9
|
11 not as widely used as the MPS format, being row-oriented it is more
|
alpar@9
|
12 convenient for coding mathematical programming models by human. This
|
alpar@9
|
13 appendix describes only the features of the CPLEX LP format which are
|
alpar@9
|
14 implemented in the GLPK package.} is intended for coding LP/MIP problem
|
alpar@9
|
15 data. It is a row-oriented format that assumes the formulation of LP/MIP
|
alpar@9
|
16 problem (1.1)---(1.3) (see Section \ref{seclp}, page \pageref{seclp}).
|
alpar@9
|
17
|
alpar@9
|
18 CPLEX LP file is a plain text file written in CPLEX LP format. Each text
|
alpar@9
|
19 line of this file may contain up to 255 characters\footnote{GLPK allows
|
alpar@9
|
20 text lines of arbitrary length.}. Blank lines are ignored. If a line
|
alpar@9
|
21 contains the backslash character ($\backslash$), this character and
|
alpar@9
|
22 everything that follows it until the end of line are considered as a
|
alpar@9
|
23 comment and also ignored.
|
alpar@9
|
24
|
alpar@9
|
25 An LP file is coded by the user using the following elements:
|
alpar@9
|
26
|
alpar@9
|
27 $\bullet$ keywords;
|
alpar@9
|
28
|
alpar@9
|
29 $\bullet$ symbolic names;
|
alpar@9
|
30
|
alpar@9
|
31 $\bullet$ numeric constants;
|
alpar@9
|
32
|
alpar@9
|
33 $\bullet$ delimiters;
|
alpar@9
|
34
|
alpar@9
|
35 $\bullet$ blanks.
|
alpar@9
|
36
|
alpar@9
|
37 \newpage
|
alpar@9
|
38
|
alpar@9
|
39 {\it Keywords} which may be used in the LP file are the following:
|
alpar@9
|
40
|
alpar@9
|
41 \begin{verbatim}
|
alpar@9
|
42 minimize minimum min
|
alpar@9
|
43 maximize maximum max
|
alpar@9
|
44 subject to such that s.t. st. st
|
alpar@9
|
45 bounds bound
|
alpar@9
|
46 general generals gen
|
alpar@9
|
47 integer integers int
|
alpar@9
|
48 binary binaries bin
|
alpar@9
|
49 infinity inf
|
alpar@9
|
50 free
|
alpar@9
|
51 end
|
alpar@9
|
52 \end{verbatim}
|
alpar@9
|
53
|
alpar@9
|
54 \noindent
|
alpar@9
|
55 All the keywords are case insensitive. Keywords given above on the same
|
alpar@9
|
56 line are equivalent. Any keyword (except \verb|infinity|, \verb|inf|,
|
alpar@9
|
57 and \verb|free|) being used in the LP file must start at the beginning
|
alpar@9
|
58 of a text line.
|
alpar@9
|
59
|
alpar@9
|
60 {\it Symbolic names} are used to identify the objective function,
|
alpar@9
|
61 constraints (rows), and variables (columns). All symbolic names are case
|
alpar@9
|
62 sensitive and may contain up to 16 alphanumeric characters\footnote{GLPK
|
alpar@9
|
63 allows symbolic names having up to 255 characters.} (\verb|a|, \dots,
|
alpar@9
|
64 \verb|z|, \verb|A|, \dots, \verb|Z|, \verb|0|, \dots, \verb|9|) as well
|
alpar@9
|
65 as the following characters:
|
alpar@9
|
66
|
alpar@9
|
67 \begin{verbatim}
|
alpar@9
|
68 ! " # $ % & ( ) / , . ; ? @ _ ` ' { } | ~
|
alpar@9
|
69 \end{verbatim}
|
alpar@9
|
70
|
alpar@9
|
71 \noindent
|
alpar@9
|
72 with exception that no symbolic name can begin with a digit or a period.
|
alpar@9
|
73
|
alpar@9
|
74 {\it Numeric constants} are used to denote constraint and objective
|
alpar@9
|
75 coefficients, right-hand sides of constraints, and bounds of variables.
|
alpar@9
|
76 They are coded in the standard form $xx$\verb|E|$syy$, where $xx$ is
|
alpar@9
|
77 a real number with optional decimal point, $s$ is a sign (\verb|+| or
|
alpar@9
|
78 \verb|-|), $yy$ is an integer decimal exponent. Numeric constants may
|
alpar@9
|
79 contain arbitrary number of characters. The exponent part is optional.
|
alpar@9
|
80 The letter `\verb|E|' can be coded as `\verb|e|'. If the sign $s$ is
|
alpar@9
|
81 omitted, plus is assumed.
|
alpar@9
|
82
|
alpar@9
|
83 {\it Delimiters} that may be used in the LP file are the following:
|
alpar@9
|
84
|
alpar@9
|
85 \begin{verbatim}
|
alpar@9
|
86 :
|
alpar@9
|
87 +
|
alpar@9
|
88 -
|
alpar@9
|
89 < <= =<
|
alpar@9
|
90 > >= =>
|
alpar@9
|
91 =
|
alpar@9
|
92 \end{verbatim}
|
alpar@9
|
93
|
alpar@9
|
94 \noindent
|
alpar@9
|
95 Delimiters given above on the same line are equivalent. The meaning of
|
alpar@9
|
96 the delimiters will be explained below.
|
alpar@9
|
97
|
alpar@9
|
98 {\it Blanks} are non-significant characters. They may be used freely to
|
alpar@9
|
99 improve readability of the LP file. Besides, blanks should be used to
|
alpar@9
|
100 separate elements from each other if there is no other way to do that
|
alpar@9
|
101 (for example, to separate a keyword from a following symbolic name).
|
alpar@9
|
102
|
alpar@9
|
103 The order of an LP file is:
|
alpar@9
|
104
|
alpar@9
|
105 $\bullet$ objective function definition;
|
alpar@9
|
106
|
alpar@9
|
107 $\bullet$ constraints section;
|
alpar@9
|
108
|
alpar@9
|
109 $\bullet$ bounds section;
|
alpar@9
|
110
|
alpar@9
|
111 $\bullet$ general, integer, and binary sections (can appear in arbitrary
|
alpar@9
|
112 order);
|
alpar@9
|
113
|
alpar@9
|
114 $\bullet$ end keyword.
|
alpar@9
|
115
|
alpar@9
|
116 These components are discussed in following sections.
|
alpar@9
|
117
|
alpar@9
|
118 \section{Objective function definition}
|
alpar@9
|
119
|
alpar@9
|
120 The objective function definition must appear first in the LP file. It
|
alpar@9
|
121 defines the objective function and specifies the optimization direction.
|
alpar@9
|
122
|
alpar@9
|
123 The objective function definition has the following form:
|
alpar@9
|
124 $$
|
alpar@9
|
125 \left\{
|
alpar@9
|
126 \begin{array}{@{}c@{}}
|
alpar@9
|
127 {\tt minimize} \\ {\tt maximize}
|
alpar@9
|
128 \end{array}
|
alpar@9
|
129 \right\}\ f\ {\tt :}\ s\ c\ x\ s\ c\ x\ \dots\ s\ c\ x
|
alpar@9
|
130 $$
|
alpar@9
|
131 where $f$ is a symbolic name of the objective function, $s$ is a sign
|
alpar@9
|
132 \verb|+| or \verb|-|, $c$ is a numeric constant that denotes an
|
alpar@9
|
133 objective coefficient, $x$ is a symbolic name of a variable.
|
alpar@9
|
134
|
alpar@9
|
135 If necessary, the objective function definition can be continued on as
|
alpar@9
|
136 many text lines as desired.
|
alpar@9
|
137
|
alpar@9
|
138 The name of the objective function is optional and may be omitted
|
alpar@9
|
139 (together with the semicolon that follows it). In this case the default
|
alpar@9
|
140 name `\verb|obj|' is assigned to the objective function.
|
alpar@9
|
141
|
alpar@9
|
142 If the very first sign $s$ is omitted, the sign plus is assumed. Other
|
alpar@9
|
143 signs cannot be omitted.
|
alpar@9
|
144
|
alpar@9
|
145 If some objective coefficient $c$ is omitted, 1 is assumed.
|
alpar@9
|
146
|
alpar@9
|
147 Symbolic names $x$ used to denote variables are recognized by context
|
alpar@9
|
148 and therefore needn't to be declared somewhere else.
|
alpar@9
|
149
|
alpar@9
|
150 Here is an example of the objective function definition:
|
alpar@9
|
151
|
alpar@9
|
152 \begin{verbatim}
|
alpar@9
|
153 Minimize Z : - x1 + 2 x2 - 3.5 x3 + 4.997e3x(4) + x5 + x6 +
|
alpar@9
|
154 x7 - .01x8
|
alpar@9
|
155 \end{verbatim}
|
alpar@9
|
156
|
alpar@9
|
157 \section{Constraints section}
|
alpar@9
|
158
|
alpar@9
|
159 The constraints section must follow the objective function definition.
|
alpar@9
|
160 It defines a system of equality and/or inequality constraints.
|
alpar@9
|
161
|
alpar@9
|
162 The constraint section has the following form:
|
alpar@9
|
163
|
alpar@9
|
164 \begin{center}
|
alpar@9
|
165 \begin{tabular}{l}
|
alpar@9
|
166 \verb|subject to| \\
|
alpar@9
|
167 {\it constraint}$_1$ \\
|
alpar@9
|
168 {\it constraint}$_2$ \\
|
alpar@9
|
169 \hspace{20pt}\dots \\
|
alpar@9
|
170 {\it constraint}$_m$ \\
|
alpar@9
|
171 \end{tabular}
|
alpar@9
|
172 \end{center}
|
alpar@9
|
173
|
alpar@9
|
174 \noindent where {\it constraint}$_i, i=1,\dots,m,$ is a particular
|
alpar@9
|
175 constraint definition.
|
alpar@9
|
176
|
alpar@9
|
177 Each constraint definition can be continued on as many text lines as
|
alpar@9
|
178 desired. However, each constraint definition must begin on a new line
|
alpar@9
|
179 except the very first constraint definition which can begin on the same
|
alpar@9
|
180 line as the keyword `\verb|subject to|'.
|
alpar@9
|
181
|
alpar@9
|
182 Constraint definitions have the following form:
|
alpar@9
|
183 $$
|
alpar@9
|
184 r\ {\tt:}\ s\ c\ x\ s\ c\ x\ \dots\ s\ c\ x
|
alpar@9
|
185 \ \left\{
|
alpar@9
|
186 \begin{array}{@{}c@{}}
|
alpar@9
|
187 \mbox{\tt<=} \\ \mbox{\tt>=} \\ \mbox{\tt=}
|
alpar@9
|
188 \end{array}
|
alpar@9
|
189 \right\}\ b
|
alpar@9
|
190 $$
|
alpar@9
|
191 where $r$ is a symbolic name of a constraint, $s$ is a sign \verb|+| or
|
alpar@9
|
192 \verb|-|, $c$ is a numeric constant that denotes a constraint
|
alpar@9
|
193 coefficient, $x$ is a symbolic name of a variable, $b$ is a right-hand
|
alpar@9
|
194 side.
|
alpar@9
|
195
|
alpar@9
|
196 The name $r$ of a constraint (which is the name of the corresponding
|
alpar@9
|
197 auxiliary variable) is optional and may be omitted (together with the
|
alpar@9
|
198 semicolon that follows it). In this case the default names like
|
alpar@9
|
199 `\verb|r.nnn|' are assigned to unnamed constraints.
|
alpar@9
|
200
|
alpar@9
|
201 The linear form $s\ c\ x\ s\ c\ x\ \dots\ s\ c\ x$ in the left-hand
|
alpar@9
|
202 side of a constraint definition has exactly the same meaning as in the
|
alpar@9
|
203 case of the objective function definition (see above).
|
alpar@9
|
204
|
alpar@9
|
205 After the linear form one of the following delimiters that indicate
|
alpar@9
|
206 the constraint sense must be specified:
|
alpar@9
|
207
|
alpar@9
|
208 \verb|<=| \ means `less than or equal to'
|
alpar@9
|
209
|
alpar@9
|
210 \verb|>=| \ means `greater than or equal to'
|
alpar@9
|
211
|
alpar@9
|
212 \verb|= | \ means `equal to'
|
alpar@9
|
213
|
alpar@9
|
214 The right hand side $b$ is a numeric constant with an optional sign.
|
alpar@9
|
215
|
alpar@9
|
216 Here is an example of the constraints section:
|
alpar@9
|
217
|
alpar@9
|
218 \begin{verbatim}
|
alpar@9
|
219 Subject To
|
alpar@9
|
220 one: y1 + 3 a1 - a2 - b >= 1.5
|
alpar@9
|
221 y2 + 2 a3 + 2
|
alpar@9
|
222 a4 - b >= -1.5
|
alpar@9
|
223 two : y4 + 3 a1 + 4 a5 - b <= +1
|
alpar@9
|
224 .20y5 + 5 a2 - b = 0
|
alpar@9
|
225 1.7 y6 - a6 + 5 a777 - b >= 1
|
alpar@9
|
226 \end{verbatim}
|
alpar@9
|
227
|
alpar@9
|
228 (Should note that it is impossible to express ranged constraints in the
|
alpar@9
|
229 CPLEX LP format. Each a ranged constraint can be coded as two
|
alpar@9
|
230 constraints with identical linear forms in the left-hand side, one of
|
alpar@9
|
231 which specifies a lower bound and other does an upper one of the
|
alpar@9
|
232 original ranged constraint.)
|
alpar@9
|
233
|
alpar@9
|
234 \section{Bounds section}
|
alpar@9
|
235
|
alpar@9
|
236 The bounds section is intended to define bounds of variables. This
|
alpar@9
|
237 section is optional; if it is specified, it must follow the constraints
|
alpar@9
|
238 section. If the bound section is omitted, all variables are assumed to
|
alpar@9
|
239 be non-negative (i.e. that they have zero lower bound and no upper
|
alpar@9
|
240 bound).
|
alpar@9
|
241
|
alpar@9
|
242 The bounds section has the following form:
|
alpar@9
|
243
|
alpar@9
|
244 \begin{center}
|
alpar@9
|
245 \begin{tabular}{l}
|
alpar@9
|
246 \verb|bounds| \\
|
alpar@9
|
247 {\it definition}$_1$ \\
|
alpar@9
|
248 {\it definition}$_2$ \\
|
alpar@9
|
249 \hspace{20pt}\dots \\
|
alpar@9
|
250 {\it definition}$_p$ \\
|
alpar@9
|
251 \end{tabular}
|
alpar@9
|
252 \end{center}
|
alpar@9
|
253
|
alpar@9
|
254 \noindent
|
alpar@9
|
255 where {\it definition}$_k, k=1,\dots,p,$ is a particular bound
|
alpar@9
|
256 definition.
|
alpar@9
|
257
|
alpar@9
|
258 Each bound definition must begin on a new line\footnote{The GLPK
|
alpar@9
|
259 implementation allows several bound definitions to be placed on the same
|
alpar@9
|
260 line.} except the very first bound definition which can begin on the
|
alpar@9
|
261 same line as the keyword `\verb|bounds|'.
|
alpar@9
|
262
|
alpar@9
|
263 Syntactically constraint definitions can have one of the following six
|
alpar@9
|
264 forms:
|
alpar@9
|
265
|
alpar@9
|
266 \begin{center}
|
alpar@9
|
267 \begin{tabular}{ll}
|
alpar@9
|
268 $x$ \verb|>=| $l$ & specifies a lower bound \\
|
alpar@9
|
269 $l$ \verb|<=| $x$ & specifies a lower bound \\
|
alpar@9
|
270 $x$ \verb|<=| $u$ & specifies an upper bound \\
|
alpar@9
|
271 $l$ \verb|<=| $x$ \verb|<=| $u$ &specifies both lower and upper bounds\\
|
alpar@9
|
272 $x$ \verb|=| $t$ &specifies a fixed value \\
|
alpar@9
|
273 $x$ \verb|free| &specifies free variable
|
alpar@9
|
274 \end{tabular}
|
alpar@9
|
275 \end{center}
|
alpar@9
|
276
|
alpar@9
|
277 \noindent
|
alpar@9
|
278 where $x$ is a symbolic name of a variable, $l$ is a numeric constant
|
alpar@9
|
279 with an optional sign that defines a lower bound of the variable or
|
alpar@9
|
280 \verb|-inf| that means that the variable has no lower bound, $u$ is a
|
alpar@9
|
281 numeric constant with an optional sign that defines an upper bound of
|
alpar@9
|
282 the variable or \verb|+inf| that means that the variable has no upper
|
alpar@9
|
283 bound, $t$ is a numeric constant with an optional sign that defines a
|
alpar@9
|
284 fixed value of the variable.
|
alpar@9
|
285
|
alpar@9
|
286 By default all variables are non-negative, i.e. have zero lower bound
|
alpar@9
|
287 and no upper bound. Therefore definitions of these default bounds can be
|
alpar@9
|
288 omitted in the bounds section.
|
alpar@9
|
289
|
alpar@9
|
290 Here is an example of the bounds section:
|
alpar@9
|
291
|
alpar@9
|
292 \begin{verbatim}
|
alpar@9
|
293 Bounds
|
alpar@9
|
294 -inf <= a1 <= 100
|
alpar@9
|
295 -100 <= a2
|
alpar@9
|
296 b <= 100
|
alpar@9
|
297 x2 = +123.456
|
alpar@9
|
298 x3 free
|
alpar@9
|
299 \end{verbatim}
|
alpar@9
|
300
|
alpar@9
|
301 \section{General, integer, and binary sections}
|
alpar@9
|
302
|
alpar@9
|
303 The general, integer, and binary sections are intended to define
|
alpar@9
|
304 some variables as integer or binary. All these sections are optional
|
alpar@9
|
305 and needed only in case of MIP problems. If they are specified, they
|
alpar@9
|
306 must follow the bounds section or, if the latter is omitted, the
|
alpar@9
|
307 constraints section.
|
alpar@9
|
308
|
alpar@9
|
309 All the general, integer, and binary sections have the same form as
|
alpar@9
|
310 follows:
|
alpar@9
|
311
|
alpar@9
|
312 \begin{center}
|
alpar@9
|
313 \begin{tabular}{l}
|
alpar@9
|
314 $
|
alpar@9
|
315 \left\{
|
alpar@9
|
316 \begin{array}{@{}l@{}}
|
alpar@9
|
317 \verb|general| \\
|
alpar@9
|
318 \verb|integer| \\
|
alpar@9
|
319 \verb|binary | \\
|
alpar@9
|
320 \end{array}
|
alpar@9
|
321 \right\}
|
alpar@9
|
322 $ \\
|
alpar@9
|
323 \hspace{10pt}$x_1$ \\
|
alpar@9
|
324 \hspace{10pt}$x_2$ \\
|
alpar@9
|
325 \hspace{10pt}\dots \\
|
alpar@9
|
326 \hspace{10pt}$x_q$ \\
|
alpar@9
|
327 \end{tabular}
|
alpar@9
|
328 \end{center}
|
alpar@9
|
329
|
alpar@9
|
330 \noindent
|
alpar@9
|
331 where $x_k$ is a symbolic name of variable, $k=1,\dots,q$.
|
alpar@9
|
332
|
alpar@9
|
333 Each symbolic name must begin on a new line\footnote{The GLPK
|
alpar@9
|
334 implementation allows several symbolic names to be placed on the same
|
alpar@9
|
335 line.} except the very first symbolic name which can begin on the same
|
alpar@9
|
336 line as the keyword `\verb|general|', `\verb|integer|', or
|
alpar@9
|
337 `\verb|binary|'.
|
alpar@9
|
338
|
alpar@9
|
339 If a variable appears in the general or the integer section, it is
|
alpar@9
|
340 assumed to be general integer variable. If a variable appears in the
|
alpar@9
|
341 binary section, it is assumed to be binary variable, i.e. an integer
|
alpar@9
|
342 variable whose lower bound is zero and upper bound is one. (Note that
|
alpar@9
|
343 if bounds of a variable are specified in the bounds section and then
|
alpar@9
|
344 the variable appears in the binary section, its previously specified
|
alpar@9
|
345 bounds are ignored.)
|
alpar@9
|
346
|
alpar@9
|
347 Here is an example of the integer section:
|
alpar@9
|
348
|
alpar@9
|
349 \begin{verbatim}
|
alpar@9
|
350 Integer
|
alpar@9
|
351 z12
|
alpar@9
|
352 z22
|
alpar@9
|
353 z35
|
alpar@9
|
354 \end{verbatim}
|
alpar@9
|
355
|
alpar@9
|
356 \section{End keyword}
|
alpar@9
|
357
|
alpar@9
|
358 The keyword `\verb|end|' is intended to end the LP file. It must begin
|
alpar@9
|
359 on a separate line and no other elements (except comments and blank
|
alpar@9
|
360 lines) must follow it. Although this keyword is optional, it is strongly
|
alpar@9
|
361 recommended to include it in the LP file.
|
alpar@9
|
362
|
alpar@9
|
363 \section{Example of CPLEX LP file}
|
alpar@9
|
364
|
alpar@9
|
365 Here is a complete example of CPLEX LP file that corresponds to the
|
alpar@9
|
366 example given in Section \ref{secmpsex}, page \pageref{secmpsex}.
|
alpar@9
|
367
|
alpar@9
|
368 {\footnotesize
|
alpar@9
|
369 \begin{verbatim}
|
alpar@9
|
370 \* plan.lp *\
|
alpar@9
|
371
|
alpar@9
|
372 Minimize
|
alpar@9
|
373 value: .03 bin1 + .08 bin2 + .17 bin3 + .12 bin4 + .15 bin5 +
|
alpar@9
|
374 .21 alum + .38 silicon
|
alpar@9
|
375
|
alpar@9
|
376 Subject To
|
alpar@9
|
377 yield: bin1 + bin2 + bin3 + bin4 + bin5 +
|
alpar@9
|
378 alum + silicon = 2000
|
alpar@9
|
379
|
alpar@9
|
380 fe: .15 bin1 + .04 bin2 + .02 bin3 + .04 bin4 + .02 bin5 +
|
alpar@9
|
381 .01 alum + .03 silicon <= 60
|
alpar@9
|
382
|
alpar@9
|
383 cu: .03 bin1 + .05 bin2 + .08 bin3 + .02 bin4 + .06 bin5 +
|
alpar@9
|
384 .01 alum <= 100
|
alpar@9
|
385
|
alpar@9
|
386 mn: .02 bin1 + .04 bin2 + .01 bin3 + .02 bin4 + .02 bin5 <= 40
|
alpar@9
|
387
|
alpar@9
|
388 mg: .02 bin1 + .03 bin2 + .01 bin5 <= 30
|
alpar@9
|
389
|
alpar@9
|
390 al: .70 bin1 + .75 bin2 + .80 bin3 + .75 bin4 + .80 bin5 +
|
alpar@9
|
391 .97 alum >= 1500
|
alpar@9
|
392
|
alpar@9
|
393 si1: .02 bin1 + .06 bin2 + .08 bin3 + .12 bin4 + .02 bin5 +
|
alpar@9
|
394 .01 alum + .97 silicon >= 250
|
alpar@9
|
395
|
alpar@9
|
396 si2: .02 bin1 + .06 bin2 + .08 bin3 + .12 bin4 + .02 bin5 +
|
alpar@9
|
397 .01 alum + .97 silicon <= 300
|
alpar@9
|
398
|
alpar@9
|
399 Bounds
|
alpar@9
|
400 bin1 <= 200
|
alpar@9
|
401 bin2 <= 2500
|
alpar@9
|
402 400 <= bin3 <= 800
|
alpar@9
|
403 100 <= bin4 <= 700
|
alpar@9
|
404 bin5 <= 1500
|
alpar@9
|
405
|
alpar@9
|
406 End
|
alpar@9
|
407
|
alpar@9
|
408 \* eof *\
|
alpar@9
|
409 \end{verbatim}
|
alpar@9
|
410
|
alpar@9
|
411 }
|
alpar@9
|
412
|
alpar@9
|
413 %* eof *%
|