UP | HOME

Anaconda + Gurobi による科学技術計算環境の構築

目次

1 pyenv + Anaconda + Gurobi

  • Anaconda は jupyter や spyder など, Python 開発に便利なツールや科学計算に必要なライブラリがセットで入ったパッケージ. ただし, そのままインストールすると Mac OS システム自体に備わった環境を壊しかねない.
  • この「汚染」を防止するために, Python の環境を管理できるツールである pyenv で Anaconda を包む.
  • Gurobi は Python / C / Java などで使える最適化のためのパッケージ. homebrew/python とは整合しないが, Anaconda Python との共存は可能.

2 pyenv のインストール

  • Homebrew の段階で既にインストールされているはず.

    ターミナルから以下を入力

    echo '' >> ~/.bash_profile 
    echo '# the following lines were inserted for pyenv' >> ~/.bash_profile
    echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bash_profile
    echo 'export PATH="${PYENV_ROOT}/bin:$PATH"' >> ~/.bash_profile
    echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
    echo '# the above lines were inserted for pyenv' >> ~/.bash_profile
    exec $SHELL -l
    

3 Anaconda のインストール

  • pyenv を使って Anaconda3 系の最新バージョンを確認する

    ターミナルから以下を入力

    pyenv install -l | grep anaconda3-
      # 対応するバージョンが表示される
      anaconda3-2.0.0
      anaconda3-2.0.1
      anaconda3-2.1.0
      anaconda3-2.2.0
      anaconda3-2.3.0
      anaconda3-2.4.0
      anaconda3-2.4.1
      anaconda3-2.5.0
      anaconda3-4.0.0
      anaconda3-4.1.0
      anaconda3-4.1.1
      anaconda3-4.2.0
      anaconda3-4.3.0
      anaconda3-4.3.1
      anaconda3-4.4.0
      anaconda3-5.0.0
      anaconda3-5.0.1
      anaconda3-5.1.0
      anaconda3-5.2.0
      anaconda3-5.3.0 # ← 最新版のバージョンを覚えておく
    
  • pyenv を使って Anaconda をインストールする

    ターミナルから以下を入力

    pyenv install anaconda3-5.3.0 # 上で確認した最新版を入力
    
  • pyenv global を使って Python 環境を Anaconda3系 に切り替える

    pyenv global anaconda3-5.3.0
    

4 conda を使った Python モジュール管理

Anaconda と同時にインストールされる conda という Python 用パッケージ管理ツールを使えば, 新しいモジュールをインストールしたり, 既存のモジュールをアップデートしたりできる.

Anaconda のインストールが終わったら,ターミナルから下記を実行しよう:

conda update conda # conda 自身をアップデート
conda update --all # インストールされているモジュールをアップデート

次に,長江研で必要になる(or 必要になりそうな)モジュールは,以下の通り:

  1. numpy
  2. scipy
  3. matplotlib
  4. pandas
  5. networkx

特に最初の3つは無いと途方に暮れるレベルなので, conda install でインストールしておこう.

conda install numpy scipy matplotlib pandas networkx

Python condahomebrew の Anaconda/Python 版. 主な使い方は,ターミナルから下記のようなコマンドで利用可能.

conda install [モジュール名] # 指定したモジュールをインストール 
conda search [モジュール名] # 指定したモジュールを検索(*などのワイルドカードも使える)
conda update conda # conda 自身をアップデート
conda update --all # 全てのモジュールをアップデート

conda installconda update を実行するとどうなるかが知りたいだけの場合は, --dry-run オプションをつけて

conda install --dry-run [モジュール名]
conda update --dry-run --all

などとするとよい.

5 Gurobi のインストール

5.1 Gurobi アカウントの作成とアカデミック・ライセンスの取得

5.1.1 Gurobi のアカウント・ライセンスについて

Gurobi のアカデミック・ライセンスは以下の制約の下で利用可能である:

  • 学位授与機構を備えた学術機関の教員・学生もしくはスタッフのみが利用できる
  • 研究もしくは教育目的にのみ利用できる
  • 公認の学術機関ドメインから validate される必要がある.アカデミック・ライセンス の有効期限は12ヶ月だが,適切な教員・学生もしくはスタッフは,この手続きを繰り返 すことでライセンスを更新できる.

5.1.2 アカウント作成,ライセンスの取得および認証の方法

  1. http://www.gurobi.com にアクセスし,Register をクリック

    grb_register.png

  2. 以下に従って必要な情報を入力:
    • Account Type は「Academic」を選択
    • Email は tohoku.ac.jp で終わるアドレスを入力
    • Company/University には「Tohoku University」を入力
  3. 登録したメールアドレスにメールが届くので, それに従ってパスワードを設定する.
  4. http://www.gurobi.com のメニューバーから Login する
  5. http://www.gurobi.com のメニューバーから DOWNLOADS > Licenses > University License を選択

    grb_menu_university_license.png

  6. Free Academic License のページが表示されるので, End User License Agreement を よく読んだ後, 2箇所をチェックして Request License する.

    grb_academic_license.png

  7. ライセンスが発行される. ここで表示される grbgetkey 以下のコマンドを, 大学のネットワークに繋がった状態で ターミナルに入力して実行すると ユーザーディレクトリ(/Users/****)にライセンスファイルが生成され, 登録が完了する.

    grb_license_detail.png

6 jupyter を使ってみる

6.1 jupyter とは

Python の対話型インタープリタを拡張したもの.

jupyter console
ハイライトや補完が可能なインタプリタを ターミナル上 で起動.
jupyter qtconsole
グラフをインライン表示できる高機能なインタプリタを 別ウィンドウ上 で起動.
jupyter notebook
ノート機能つきの高機能なインタプリタを ブラウザ上 で起動.

6.2 jupyter qtconsole を使ってみる

  • ターミナルから以下を入力:

    jupyter qtconsole &
    

    行末に & をつけないと, jupyter qtconsole を閉じるまでターミナルが入力を受け付けなくなる.

  • 線形計画問題の例を入力

    開いたコンソールに以下を入力. Ctrl+RET で(実行せずに)セル内で改行. Shift+RET でセルを実行.

    from gurobipy import *
    m = Model()
    v0 = m.addVar()
    v1 = m.addVar()
    m.update()
    m.addConstr(v0-v1 <= 4) # Constraint 1
    m.addConstr(v0+v1 <= 4) # Constraint 2
    m.addConstr(-0.25*v0 + v1 <= 1) # Constraint 3
    m.setObjective(v1, GRB.MAXIMIZE) # Objective: maximize v1
    m.params.outputflag = 0
    m.optimize()
    

    続いて, 下記を入力して実行:

    %matplotlib inline # これを実行すると, qtconsole 上にグラフをプロットできる
    import matplotlib.pyplot as pyplot
    pyplot.plot([0,4], [0,4]) # Constraint 1
    pyplot.plot([4,0], [0,4]) # Constraint 2
    pyplot.plot([0,4], [1,2]) # Constraint 3
    pyplot.plot([v0.x], [v1.x], 'ro') # Plot the optimal vertex
    pyplot.show()
    

    こんな感じで, コマンドとグラフを同じウィンドウ上に表示させられる.

    jupyter_qtconsole.png

6.3 jupyter notebook を使ってみる

  • ターミナルから以下を入力:

    mkdir ~/Downloads/jupyter_notebook
    pushd ~/Downloads/jupyter_notebook
    jupyter notebook 
    

    行末に & をつけずに起動することで, 確実に kill できる.

    メニューバーから New > Notebooks > Python [default] を選択

    jupyter_notebook_new.png

  • Markdown を記述

    最初のセルを選択した後, メニューバーのセル種別を Markdown に設定

    jupyter_notebook_markdown.png そのセルに 以下を記述:

    # Solve A Linear Programming Problem by Gurobi
    Use ```Gurobi``` to find the *optimal solution* for the following **linear programming problem**:
    \begin{align}
    \max_{v_{0}, v_{1}} \quad&v_{1}\\
    \text{sub to} \quad
    & v_{0} - v_{1} \leq 4 \\
    & v_{0} + v_{1} \leq 4 \\
    & -\tfrac{1}{4} v_{0} + v_{1} \leq 1 \\
    & v_{0} \geq 0, v_{1}, \geq 0
    \end{align}
    

    Shift+RET で評価すると数式部分がコンパイルされる.

  • 2つ目のセルの種別が Code になっていることを確認した上で, 以下を記述:

    from gurobipy import *
    m = Model()
    v0 = m.addVar()                  # Unknown variable 1
    v1 = m.addVar()                  # Unknown variable 2
    m.update()                       # Update the model
    m.addConstr(v0-v1 <= 4)          # Constraint 1
    m.addConstr(v0+v1 <= 4)          # Constraint 2
    m.addConstr(-0.25*v0 + v1 <= 1)  # Constraint 3
    m.setObjective(v1, GRB.MAXIMIZE) # Objective: maximize v1
    m.params.outputflag = 0          # Silent mode
    m.optimize()                     # Do optimize
    import matplotlib.pyplot as pyplot
    pyplot.plot([0,4], [0,4])         # Constraint 1
    pyplot.plot([4,0], [0,4])         # Constraint 2
    pyplot.plot([0,4], [1,2])         # Constraint 3
    pyplot.plot([v0.x], [v1.x], 'ro') # The optimal solution
    pyplot.show()
    

    Shift+RET でセルを評価するとグラフと最適解が表示される.

    jupyter_notebook.png

  • タイトルを編集し, ノートブックに名前をつけて保存する

    • タイトルをダブルクリックすれば編集できる
    • メニューバーから File > Save & Checkpoint を選べば, 現在のノートブックを保存できる.

    jupyter_notebook_title_save.png

  • 保存したノートブックは以下の方法で再度開くことができる:
    • ダッシュボードでダブルクリック
    • メニューバーから File > Open
    • ターミナルから

      jupyter notebook [タイトル].ipynb 
      
  • File > Download as > PDF via LaTeX (.pdf) とすれば, LaTeX でコンパイルした上で PDF ファイルにしてくれる. 日本語の入ったノートブックを PDF 化するには ちょっと工夫 が必要.

著者: Takeshi Nagae

Created: 2018-12-21 Fri 09:35

Emacs 24.3.1 (Org mode 8.2.5h)

Validate