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