GLPK のインストール

(最近はフリーソフトの中では SCIP が人気らしい)

Ubuntu 12.04.2 (64bit版)ではライセンスのトラブルのせいで起動できず。

Vine 6.1 (32bit版)ではインストール、起動に成功。

ここには、Vine 6.1 (32bit版)での例を記録。

インストール

ここからダウンロード。IBMのアカウントを作る必要あり。

実際にダウンロードしたのは、V12.5.1。

$ sudo sh cplex_studio1251.prev.linux-x86-32bin

いろいろ聞かれるが、適当に回答。

cplex は /opt/ibm/ILOG/CPLEX_Studio_Preview1251/cplex/bin/x86_sles10_4.1/cplex にある。

~/.bashrc に下記を追加。

## for CPLEX
export PATH=$PATH:/opt/ibm/ILOG/CPLEX_Studio_Preview1251/cplex/bin/x86_sles10_4.1/

## for oplrun
export LD_LIBRARY_PATH=/opt/ibm/ILOG/CPLEX_Studio_Preview1251/opl/bin/x86_sles10_4.1/

設定を有効化し、起動できることを確認。

$ source ~/.bashrc
$ which cplex
$ cplex
CPLEX>

というプロンプトが表示されれば成功。

線形計画法(LP)の実行

例題

最大化  x1 + 2 * x2 + 3 * x3
ただし -x1 +     x2 +     x3 <= 20
        x1 - 3 * x2 +     x3 <= 30
        0 <= x1 <= 40
        0 <= x2
        0 <= x3

対話的実行

参考(IBMのサイト)

$ cplex
IBM ILOG CPLEX Optimization Studio Preview Edition good for 88 more days.
The CPLEX Optimizers will solve problems up to 500 variables and 500 constraints.

Welcome to IBM(R) ILOG(R) CPLEX(R) Interactive Optimizer 12.5.1.0
  with Simplex, Mixed Integer & Barrier Optimizers
5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55 5655-Y21
Copyright IBM Corp. 1988, 2013.  All Rights Reserved.

Type 'help' for a list of available commands.
Type 'help' followed by a command name for more
information on commands.

CPLEX> enter example
Enter new problem ['end' on a separate line terminates]:
maximize x1 + 2 x2 + 3 x3
subject to -x1 + x2 + x3 <= 20
            x1 - 3 x2 + x3 <= 30
bounds
0 <= x1 <= 40
0 <= x2
0 <= x3
end
CPLEX> optimize
Tried aggregator 1 time.
No LP presolve or aggregator reductions.
Presolve time = 0.05 sec. (0.00 ticks)

Iteration log . . .
Iteration:     1   Dual infeasibility =             0.000000
Iteration:     2   Dual objective     =           202.500000

Dual simplex - Optimal:  Objective =  2.0250000000e+02
Solution time =    0.12 sec.  Iterations = 2 (1)
Deterministic time = 0.00 ticks  (0.03 ticks/sec)

CPLEX> display solution variables x1-x3
Variable Name           Solution Value
x1                           40.000000
x2                           17.500000
x3                           42.500000
CPLEX> quit

バッチ化

対話的実行で入力したCPLEXコマンドをあらかじめ一つのファイルに書き込んでおく。 (LP-example.modとする。)

enter example
maximize x1 + 2 x2 + 3 x3
subject to -x1 + x2 + x3 <= 20
            x1 - 3 x2 + x3 <= 30
bounds
0 <= x1 <= 40
0 <= x2
0 <= x3
end

optimize

display solution variables x1-x3
quit 

-f オプションでバッチ的実行。

$ cplex -f LP-example.mod 
IBM ILOG CPLEX Optimization Studio Preview Edition good for 88 more days.
The CPLEX Optimizers will solve problems up to 500 variables and 500 constraints.

Welcome to IBM(R) ILOG(R) CPLEX(R) Interactive Optimizer 12.5.1.0
 with Simplex, Mixed Integer & Barrier Optimizers
5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55 5655-Y21
Copyright IBM Corp. 1988, 2013.  All Rights Reserved.

Type 'help' for a list of available commands.
Type 'help' followed by a command name for more
information on commands.

CPLEX> Enter new problem ['end' on a separate line terminates]:
CPLEX> CPLEX> Tried aggregator 1 time.
No LP presolve or aggregator reductions.
Presolve time = 0.08 sec. (0.00 ticks)

Iteration log . . .
Iteration:     1   Dual infeasibility =             0.000000
Iteration:     2   Dual objective     =           202.500000

Dual simplex - Optimal:  Objective =  2.0250000000e+02
Solution time =    0.16 sec.  Iterations = 2 (1)
Deterministic time = 0.00 ticks  (0.02 ticks/sec)

CPLEX> CPLEX> Variable Name           Solution Value
x1                           40.000000
x2                           17.500000
x3                           42.500000

二次計画法(QP)の実行

参考(ここで扱った例題)

参考(もっと複雑な例題)

参考(MPS形式の説明)

例題

最小化  a + b + 1/2 * (a^2 + 4*a*b + 7*b^2)
ただし  a + b >= 10
        a >= 0
        b >= 0

ここから拝借の例題。

バッチ処理

問題をMPS形式で記述。 ここでは、QP-example.mps

NAME problem
ROWS
  N obj
  G c1
COLUMNS
  a obj 1  c1 1
  b obj 1  c1 1
RHS
  rhs c1 10
QMATRIX
  a a 1
  a b 2
  b a 2
  b b 7
ENDATA
  • 式の名前
    • obj: a + b + 1/2 * QMATRIX
    • c1: a + b >= 10
  • "ROWS"の中では、
    • N: 最初の"N"は目的関数。2つ目以降は無効化。
    • G: >= (Greater than)
    • L: <= (Less than)
    • E: == (Equality)
  • "RHS"は Right Hand Side の意味。右辺の定数を記述。
  • QMATRIX は目的関数内の 1/2*Q の行列Qを記述。
  • ここにはないが、BOUNDS というセクションで各変数の上限と下限を設定できる。

MPS形式の詳細については wikipediaを参照。

CPLEXでバッチ実行するためのファイルを作成。(QP-example.mod)

read QP-example.mps
optimize
display solution variables a-b
quit

いよいよ、バッチ処理を実行。

$ cplex -f QP-example.mod
IBM ILOG CPLEX Optimization Studio Preview Edition good for 88 more days.
The CPLEX Optimizers will solve problems up to 500 variables and 500 constraints.

Welcome to IBM(R) ILOG(R) CPLEX(R) Interactive Optimizer 12.5.1.0
  with Simplex, Mixed Integer & Barrier Optimizers
5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55 5655-Y21
Copyright IBM Corp. 1988, 2013.  All Rights Reserved.

Type 'help' for a list of available commands.
Type 'help' followed by a command name for more
information on commands.

CPLEX> Selected objective sense:  MINIMIZE
Selected objective  name:  obj
Selected RHS        name:  rhs
Problem 'QP-example.mps' read.
Read time = 0.16 sec. (0.00 ticks)
CPLEX> Number of nonzeros in lower triangle of Q = 1
Using Approximate Minimum Degree ordering
Total time for automatic ordering = 0.00 sec. (0.00 ticks)
Summary statistics for factor of Q:
  Rows in Factor            = 2
  Integer space required    = 2
  Total non-zeros in factor = 3
  Total FP ops to factor    = 5
Tried aggregator 1 time.
Reduced QP has 3 rows, 4 columns, and 7 nonzeros.
Reduced QP objective Q matrix has 2 nonzeros.
Presolve time = 0.14 sec. (0.00 ticks)
Parallel mode: none, using 1 thread for barrier
Number of nonzeros in lower triangle of A*A' = 3
Using Approximate Minimum Degree ordering
Total time for automatic ordering = 0.00 sec. (0.00 ticks)
Summary statistics for Cholesky factor:
  Rows in Factor            = 3
  Integer space required    = 3
  Total non-zeros in factor = 6
  Total FP ops to factor    = 14
 Itn      Primal Obj        Dual Obj  Prim Inf Upper Inf  Dual Inf          
   0   1.8888889e+01  -5.5555556e+00  2.57e+01  0.00e+00  3.00e+03
   1   3.5121861e+02  -5.8968959e+01  2.34e-01  0.00e+00  2.73e+01
   2   1.2394863e+02   3.6580427e+01  9.77e-15  0.00e+00  1.95e-14
   3   6.7418358e+01   5.9268709e+01  6.22e-15  0.00e+00  3.22e-15
   4   6.0243475e+01   5.9993002e+01  2.57e-13  0.00e+00  4.55e-15
   5   6.0055047e+01   5.9972087e+01  2.30e-13  0.00e+00  2.79e-15
   6   6.0018405e+01   5.9990779e+01  5.33e-15  0.00e+00  6.14e-15
   7   6.0006136e+01   5.9996930e+01  3.55e-15  0.00e+00  3.71e-15
   8   6.0002045e+01   5.9998977e+01  4.44e-15  0.00e+00  2.46e-16
   9   6.0000682e+01   5.9999659e+01  4.44e-15  0.00e+00  8.04e-16
  10   6.0000227e+01   5.9999886e+01  7.11e-15  0.00e+00  2.12e-16
  11   6.0000076e+01   5.9999962e+01  3.55e-15  0.00e+00  3.93e-15
  12   6.0000025e+01   5.9999987e+01  5.33e-15  0.00e+00  5.22e-17
  13   6.0000008e+01   5.9999996e+01  3.55e-15  0.00e+00  5.85e-15
  14   6.0000003e+01   5.9999999e+01  8.88e-16  0.00e+00  3.96e-16
  15   6.0000001e+01   6.0000000e+01  4.44e-15  0.00e+00  2.04e-15
  16   6.0000000e+01   6.0000000e+01  7.99e-15  0.00e+00  4.18e-15
Barrier time = 0.14 sec. (0.02 ticks)

Total time on 1 threads = 0.14 sec. (0.02 ticks)

Barrier - Optimal:  Objective =  6.0000000312e+01
Solution time =    0.14 sec.  Iterations = 16
Deterministic time = 0.02 ticks  (0.17 ticks/sec)

CPLEX> Variable Name           Solution Value
a                            10.000000
b                             0.000000

上記実行結果を見ても分かるように、最小化問題になる。 最大化問題に切り替える方法は現状では不明。 その方法が判明するまでは、目的関数をマイナスにして無理矢理逆にすること。

Cのプログラムから実行

web上で拾ってきたC/C++のファイルをそのままコンパイルできたことがない。(例1例2

サンプルプログラムをベースに開発すべきだろう。

とりあえずサンプルプログラムのコンパイルと実行

$ cd /opt/ibm/ILOG/CPLEX_Studio_Preview1251/properties/version/ITLM
$ sudo chown -R nagai .
$ unzip Tags.zip
$ cd Tags
$ unzip CoS\ 1251\ FCT\ Tags.zip
$ unzip Other\ PA\ Tags.zip
$ unzip Table\ 1\ PA\ Tags.zip
$ cd /opt/ibm/ILOG/CPLEX_Studio_Preview1251/opl/examples/opl_interfaces/cpp/x86_sles10_4.1/static_pic
$ sudo chmod nagai .
$ make

ソースコードは /opt/ibm/ILOG/CPLEX_Studio_Preview1251/opl/examples/opl_interfaces/cpp/src/ 以下に存在。

/opt/ibm/ILOG/CPLEX_Studio_Preview1251/opl/examples/opl_interfaces/cpp/src/mulprod.cpp の場合、 /opt/ibm/ILOG/CPLEX_Studio_Preview1251/opl/examples/opl/mulprod/mulprod.{dat,mod} に問題のデータがある。

M-file からの実行

C言語のプログラムを M-file から実行することもできる

CPLEX の使用法とM- le による自動化(pdf)

JAVAからの実行

参考(CPLEX Tutorial Handout)

参考(IBMのページ)

Pythonからの実行

参考(数理最適化とPython)

OPL

CPLEX は独自の script言語であるOPLを備えている。

そのコマンドである oplrun は /opt/ibm/ILOG/CPLEX_Studio_Preview1251/opl/bin/x86_sles10_4.1/oplrun にある。

$ oplrun qpex1.mod -o qpex1.sol

のように実行するらしい。 が、しかし、Vine 6.1 では実行できない。

上記のサンプルプログラム(例えば mulprod.*)は実行できているので、 それを参考に解明すべき。

OPLのサンプル集(IBMのサイト)


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-09-22 (日) 18:22:18 (1522d)