数理最適化ソルバーGurobi Optimizer（アカデミックライセンス）インストール方法

# 2021/09/06 追記
最近、下記の方法で米国公式サイトからのインストールを試みても、日本からアクセスした場合は、日本の代理店を案内されるようです。日本に代理店を持つ企業が日本からのアクセスに対してそのような案内をすることは当然の行為ですので、この記事に書かれているやり方を日本（あるいは日本所属の機関）から実施することに対して、保証をしませんし、お勧めもいたしません。


また、無償で商用利用可能なソルバーの案内を、MIPCLから**Python-MIP**に変更しました。

あと、2021/09/04に、記事中にて`pip install gurobipy-stubs`
で`urobipy-stubs`もインストールしておいたほうがよい旨も追記しました。


# はじめに
ざっくり言うと、大学にて研究・教育目的の場合、数理最適化ソルバーGurobi Optimizerのフル機能を無償で使用できたりします。ここでは、そのインストール方法を書きます。

(2021/09/06 編集) なお、無償で商用利用可能なソルバーについては、こちらの記事をご覧ください。

[今度こそ？使い物になるフリーの数理最適化（混合整数最適化）ソルバー Python-MIP](https://qiita.com/keisukesato-ac/items/f2fb63140b80226ba687)

Python-MIPはGurobiと文法が近いですし、**同じコードを実行しても**、Gurobi Optimizerがインストールされている環境ではソルバーのエンジンとしてGurobi Optimizerが選択され、Gurobiがインストールされていない環境ではPython-MIP付属の（やや性能の劣る）ソルバーが選択されるので、開発や運用で便利です。



# その方法の分かれ道
米国公式サイトから入手する方法と、日本の代理店から入手する方法があります。


# 詳しい規約
- 米国公式サイト
https://www.gurobi.com/academia/academic-program-and-licenses/

- 日本の代理店のサイト
https://www.octobersky.jp/license/academic.html

（※日米で規約が同じとは限りません。）

以下、**米国公式サイト**から入手する場合について書きます。日本の代理店のサイトから入手する場合は上記のサイトを見てください。

(2021/09/06 追記の再掲) 最近、下記の方法で米国公式サイトからのインストールを試みても、日本からアクセスした場合は、日本の代理店を案内されるようです。日本に代理店を持つ企業が日本からのアクセスに対してそのような案内をすることは当然の行為ですので、この記事に書かれているやり方を日本（あるいは日本所属の機関）から実施することに対して、保証をしませんし、お勧めもいたしません。


# 想定環境
- Windows 10 ver. 1909 64bit
    - 管理者権限が取得可能であること
- 大学（～.ac.jp）のネットワークからインターネットにアクセスしていること
    - 自宅などからVPN接続で大学に接続した場合でもいける模様
    - 大学内からインターネットに接続する際に、プロキシーを経由していないことを想定
- Gurobi Optimizer 9.0.2


# （※ Anacondaの場合のみ）本体のダウンロードとインストール
よく知られているPythonディストリビューションであるAnacondaから**しか**Gurobi Optimizerを利用しない場合は、コマンドプロンプト（Anacondaのパスを通している場合）またはAnaconda Promptから以下を実行するだけでダウンロードとインストールが完了するそうです。
※ セキュリティーソフト（ファイアーウォール）が作動したら、通信を許可してください。

```
conda config --add channels http://conda.anaconda.org/gurobi
conda install gurobi
```
（参照： https://www.gurobi.com/documentation/9.0/quickstart_windows/ins_the_anaconda_python_di.html ）
途中、`Proceed ([y]/n)?`と尋ねられたら、`y`を入力してください。


# （2021/09/04追記）（※ （Anacondaを含む）Pythonの場合のみ）本体のダウンロードとインストール
```
pip install gurobi
```
最近のバージョンは、上記のでもいけます。

AnacondaやPythonで上記の方法でインストールまでできたら、以下の記述のうち、「ユーザー登録」 → 「ライセンスファイルファイルのダウンロード」 の順に進んでください。

なお、ここでは、いろいろな言語からGurobi Optimizerを使えたほうがよいという観点から、**公式サイトからインストーラーをダウンロードしてインストールする方法をおすすめ**します。以下、「言語別の追加設定」の手前までの手順をひととおり実行ください。


# ユーザー登録
1. Gurobi Optimization社のトップページ（ https://www.gurobi.com/ ） → 右上のRegister → Academicを選択 → 以下を入力してAccess Now
    - First Name | 名    
    - Last Name | 姓    
    - Company Email Address | ～@～.ac.jp のアドレスが望ましいが、そうでなくてもOKみたい
    - University | 大学名
    - Academic Position | 適切な種別を選択する
        - Faculty = 教員，Research Staff = 技術職員？，Administrative Staff = 事務職員？，Student = 学生
    - Phone Number | +81-(0)xx-xxx-xxxx
        - 大学の（研究室の）電話番号がよい
        - xxx の部分には、電話番号の最初の0を除いたものを記入
    - Country | Japan
    - Check this box if ～ | チェックしない
1. メールが届くので、メールに書かれているURLをクリック → New password と New password confirmation に同じものを入力 → Update 
1. （Gurobi Optimization社のトップページに戻っているはずなので） 右上のLogin → メールアドレス・パスワードを入力 → Login


# 本体のダウンロード
1. （Gurobi Optimization社の任意？のページで）右上のDownloads & Licenses → Gurobi Optimizer → I accept the End User License Agreement → Gurobi-9.0.2-win64.msi


# 本体のインストール
1. Gurobi-9.0.2-win64.msi をダブルクリック
2. Next → I accept ～ にチェック → Next
3. インストール先が`C:\gurobi902\`になっていることを確認して、Next
    - 最新のバージョンではわかりませんが、昔のバージョンでは、空き領域が最も大きいドライブが初期値として入力されている仕様だったと記憶しています。その場合は、Cドライブに変更することをお勧めします。
    - フォルダー名の`902`の部分が、Gurobi Optimizerのバージョン番号（今回の想定は9.0.2）に対応しています。ということは、（たとえマイナーバージョンアップであっても）バージョンが変わればインストールフォルダーが変わるということです。
4. Install
    - ここで、Windowsのユーザーアカウント制御の機能が働き、管理者権限が求められたり、インストールしてもよいかのメッセージが表示されることがあります。その場合は、インストールする方向の選択をしてください。
5. Completed the Gurobi ～ という画面になったら、Finish
6. You must restart ～ というウィンドウが表示されたら、Yes
    - PCが再起動します。


# ライセンスファイルのダウンロード
（※ 大学のネットワーク（VPNからでもいける模様）から実行してください。）

1. Gurobi Optimization社のトップページ（ https://www.gurobi.com/ ）にアクセス 
    - ログインしていなければ、 右上のLogin → メールアドレス・パスワードを入力 → Login をする
1. 右上のDownloads & Licenses → Academic License → I Accept These Conditions
1. 表示されたページの下のほうに、`grbgetkey (英数字の羅列)` が書かれているので、コピー
1. Windows 10の検索ボックスに、コピーしたものをペーストし、Enter
    - コマンドプロンプトを開き、コピーしたものをペーストし、EnterしてもOK
1. `In which folder would you like to store the Gurobi license key file? [hit Enter to store it in C:\Users\(ユーザー名)]:` と表示されるので、Enter
    - ここで、ライセンスファイルのダウンロードが始まります。セキュリティーソフト（ファイアーウォール）が作動したら、通信を許可してください。
    - 大学内からインターネットにアクセスする際にプロキシーを経由している場合などでは、このダウンロードがうまくいかないことがあるようです。その場合の対策が、 
 https://www.gurobi.com/documentation/9.0/quickstart_windows/academic_validation.html に書かれていますが、それでうまくいくかは知りません。

# （2回目以降）ライセンスファイルを更新する場合
ライセンスファイルは期限つきです。期限が切れたら、上記「ライセンスファイルのダウンロード」の手続きをやり直すと新しいライセンスファイルが発行されるはずです。
なお、ライセンスファイルのダウンロードの際に、以下が表示されたら、`Y`を入力しEnterしてください。

```
A license key file already exists in 'C:\Users\(ユーザー名)\gurobi.lic'
Continue? [Y/n]
```


# 有効なライセンスが付与されているかの確認
デスクトップのGurobi 9.0.2をダブルクリックして、以下のような表示がでればOKです。

```
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Using license file C:\Users\(ユーザー名)\gurobi.lic
Set parameter LogFile to value gurobi.log
Academic license - for non-commercial use only

Gurobi Interactive Shell (win64), Version 9.0.2
Copyright (c) 2020, Gurobi Optimization, LLC
Type "help()" for help

gurobi>
```

以下のような表示が出た場合は、ライセンスファイルが正しくダウンロードされていないか、ファイルの配置場所が正しくありません。

```
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Set parameter LogFile to value gurobi.log

No Gurobi license found (user (ユーザー名), host (ホスト名), hostid (ホストID), cores (コア数))

Running grbgetkey...
info  : grbgetkey version 9.0.2, build v9.0.2rc0

Enter the Key Code for the license you are activating
(format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx):
```


# 言語別の追加設定
## Python
### 想定環境
- Python 3.7系 64bit版
    - Gurobi Optimizerのバージョン9.0.2自体にもPython 3.7系が付属していますが、**別途、3.7～3.9系を入手して、Gurobi Optimizerと連携させる**ことを強くお勧めします。
        - Anacondaを入れるのが楽だと思います。

### 手順
1. コマンドプロンプトを開き、以下を入力

    ```
    > cd C:\gurobi902\win64
    > python setup.py install
    ```

2. `pip list`と入力し、表れるパッケージのリストのなかに`gurobipy 9.0.2`があればOK


### （2021/09/04追記）その他
```
pip install gurobipy-stubs
```
これもやっておいたほうがよいです。`gurobipy-stubs`をインストールすると、Visual Studio CodeなどのIDEでGurobi関係のコード補完か効くようになり、とても便利です。「あのパラメーター名なんだっけ…」とど忘れしてリファレンスマニュアルを探す回数が減ります。


## Python以外
- 一般的な言語 | C, C++, Java, Microsoft.NET (C#, Visual Basic), MATLAB, R
    - `C:\gurobi902\win64\`以下を見れば、DLLやサンプルコードやVisual Studioのサンプルソリューションファイルがあります。それらを手がかりに設定してください（なげやり）。
- モデリング言語 | AIMMS, AMPL, MPL
    - やり方を知りません。
- その他 | Links to Excel through Premium Solver Platform and Risk Solver Platform
    - やり方を知りません。

（※参照 | https://www.gurobi.com/products/gurobi-optimizer ）


# 発展記事
- [Gurobi Optimizer + Pythonのサンプルコード（その1）](https://qiita.com/keisukesato-ac/items/a3c284aedb2ca8550238)
- [Gurobi Optimizer + Pythonのサンプルコード（その2）](https://qiita.com/keisukesato-ac/items/526543004141a1018a51)