memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

IBM ILOG CPLEXをmac(10.6.4)にインストールしてEclipseで利用するまでの手順(自分用メモ)

先日のスケジューリングシンポジウム2010で大学の時間割をソルバーを利用して作成している、という研究を聞きました。意外と簡単にできそうな印象でした(もちろん、うまく解かせるために本質的な理解と試行錯誤が必要だと感じましたが)。

本学部でも時間割の作成に苦慮していると聞いていました(直接の担当になったことがないので)。「時間割なんて毎年同じでいいじゃん」と思われるかもしれませんが、意外なことに制約条件(例えば、学生数や担当教員の構成、教室など)が毎年変動するので大変です。あと、(特に私大は)カリキュラムの見直しも定期的に行われるため2つのカリキュラムが同時に進行すると大変なようです。

横道に逸れましたが、とりあえずソルバーがないと始まらないので、CPLEXを入手して、まず動かしてみようと思いました。

CPLEXは大学で講義や研究で利用する場合、無償で入手することができます。企業の方や一般の方はお金を出さなければなりません。ですので、あまり役に立たない情報ですね。。。とりあえず今回やってみて手順を忘れそうなので自分用にメモしておこうというのが動機です。自分用なので、手順とポイントだけ書きます。

手順1 以下にアクセスしてIBM Academic Initiativeのメンバー登録をします。ちょっと迷ったのが「ネット上で自分がその大学に所属していることを確認できるURLを示せ」という項目。とりあえず学科HPの教員一覧を入力しました。個人情報を入力してsubmitボタンを押すと、数分後に承認完了メールが届きます。
https://www.ibm.com/developerworks/university/membership/join.html

手順2 次に以下にアクセスしてソフトウェアをダウンロードするためカタログページに移動します。カタログページでCPLEXと入力して、windows版とosx版をダウンロードしました。
https://www14.software.ibm.com/webapp/iwm/web/reg/signup.do?source=scholars

※以下、osx版のみ書きます(windows版はまだ試していません)

手順3 ダウンロードしたファイルはcplex_studio122.acad.macos.binなのですが、このファイルをダブルクリックしても圧縮が始まるだけで展開できません。検索してみるとターミナルを起動して「bash cplex_studio122.acad.macos.bin」と入力するとインストーラが起動します。インストール先はどこでもいいようなので自分のホームディレクトリ以下(/Users/hoge←ユーザ名がhogeの場合)にインストールしました。

手順4 ライセンスファイルを取得してインストールします。私はこれを忘れて1時間くらいムダにしました。以下のアドレスにアクセスします。
http://www.ibm.com/services/forms/preLogin.do?lang=en_US&source=ai-ILOGKEY

自分の登録情報が表示されるので確認してsubmitボタンを押します。ページが切り替わるのでaccess.ilmの右にあるDownload nowのリンクをクリックするとaccess.ilmというファイルがダウンロードできます。このファイセンスファイルの登録の仕方は(http://download.boulder.ibm.com/ibmdl/pub/software/dw/university/support/ILOGQuickStart.pdf)に
書いています。設置方法は2通りあります。1つは /usr/ilog/ilm/というディレクトリを作成してそこに置くか、その他の好きな場所に置く場合です。私は後者を選択しました。CPLEXをホームディレクトリにインストールしたので/Users/hoge/ILOG/CPLEX_Studio_AcademicResearch122/licenses/access.ilmに置きました(ユーザ名がhogeの場合です)。で、ホームディレクトリの.bash_profileに以下の行を追加しました。

export ILOG_LICENSE_FILE=/Users/ktakahas/ILOG/CPLEX_Studio_AcademicResearch122/licenses/access.ilm

手順5 ライセンスファイルが正しく登録できたか確認します。ターミナルで以下のコマンドを実行します。cplexのコマンドインタフェースです。正しく起動すると起動メッセージのあとにCPLEX> と表示されコマンド入力待ちになります。うまくいかなければ環境変数名の間違いやパス名の間違いなどが考えられます。

/Users/hoge/ILOG/CPLEX_Studio_AcademicResearch122/cplex/bin/x86-64_darwin9_gcc4.0/cplex

※ここまででとりあえずCPLEXのインストールは終了です。以降はCPLEXをeclipse上のJavaから利用する手順を書きます。これも結構大変でした。。。わかってしまえば何てことはないのですが。。。もう長くなったので手順は要点だけ書きます。


手順6 eclipseを起動します。Javaプロジェクトを新規作成してApplicationというクラスを新規作成します。このプロジェクトのビルドパスを開き外部JARにcplex.jarを追加します。場所は~//ILOG/CPLEX_Studio_AcademicResearch122/cplex/libにあります。クラスの使い方はこれから勉強するとして、とりあえず動作することを確認したいと思います。以下のページにサンプルプログラムがあります。これをコピペします。で、外部JARが正しく設定できていればコンパイルは問題なくいくはずです(Eclipseではコンパイルは自動的になされますので赤波線が表示されなければOKです)
http://www.lkn.ei.tum.de/arbeiten/faq/man/ILOG/CPLEX/cplex75/doc/javaguide/html/CPLEX_Java_Ch1_Start2.html

ちなみに短いので上記のリンクにあるプログラムを以下に示します。

 import ilog.concert.*;
  import ilog.cplex.*;
  static public class Application {
    static public main(String[] args) {
       try {
         IloCplex cplex = new IloCplex();
         // create model and solve it
       } catch (IloException e) {
          System.err.println("Concert exception caught: " + e);
       }
     }
   }

手順7 コピペしたプログラムを実行するには少し準備が必要です。私はここでもはまりました。。。30分くらいのロス。やったことは2つです。私はEclipseを日本語化していないのでメニュー名が異なると思いますがもし以下参考にされる方は適宜、読み替えてください。

(1)トップメニューからRun→Run Configurations...を選択します。Argumentsタブを押してVM argumentsの入力欄に以下を入力します。

 -Djava.library.path=/Users/hoge/ILOG/CPLEX_Studio_AcademicResearch122/cplex/bin/x86-64_darwin9_gcc4.0

(2)次にEnvironmentsタブを押して名前「ILOG_LICENSE_FILE」、値「/Users/hoge/ILOG/CPLEX_Studio_AcademicResearch122/licenses/access.ilm」の変数を1つ追加します。やってはいませんが、恐らく、ライセンスファイルをデフォルタの場所(/usr/ilog/ilm/)においた人はこの設定は不要と思われます。

以上で設定は終了なので実行ボタンを押してください(Java Applicationとして実行)。実行が成功するとConsoleウィンドウに赤字で以下が表示されるはずです。

IBM ILOG License Manager: "IBM ILOG Optimization Suite for Academic Initiative" is accessing CPLEX 12 with option(s): "e m b q ".

手順8 手順6−7のプログラムは何も計算させていないので動いたかどうかわかりません。そこで以下のページのプログラムをコピペして再度実行します。このプログラムのクラス名はLPex1なのでクラス名を変えるかクラスファイル名を変えるなどして両者をあわせてください。あと、このプログラムは実行時引数(-rとか-cとか)が必要です。その設定も上記のRunメニューからしてくださいね。

http://www.lkn.ei.tum.de/arbeiten/faq/man/ILOG/CPLEX/cplex75/doc/javaguide/html/CPLEX_Java_Ch2_LPex16.html

ふーーーう、長かった。とりあえずこれからやっと勉強。