Gurobi 環境構築 2025

BYOD へ Gurobi をインストールする方法についての備忘録です。

:::note info
Mac で実行しています。他 OS のユーザは適宜読み替えてください。
:::

## 準備

Python の実行環境を用意してください。

```bash
$ python3 -V
Python 3.13.2
$ pip3 -V
pip 25.0 from /opt/homebrew/lib/python3.13/site-packages/pip (python 3.13)
```


</details>


## pip を利用したインストール方法

Gurobi 9.1 より [PyPI](https://pypi.org) からインストールできるようになったそうです。個人的にはインストーラを使う方法に比べ、仮想環境ごとに柔軟に管理できる点が好みなので `pip` を使ってインストールします。（もしお好みのパッケージマネージャがあればそちらを使っていただいて問題ありません）

> Starting with Gurobi 9.1, you can use pip to install Gurobi into your currently active Python environment:

https://support.gurobi.com/hc/en-us/articles/360044290292-How-do-I-install-Gurobi-for-Python

```bash
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip3 install gurobipy
pip install gurobipy
Collecting gurobipy
  Using cached gurobipy-12.0.1-cp313-cp313-macosx_10_13_universal2.whl.metadata (16 kB)
Using cached gurobipy-12.0.1-cp313-cp313-macosx_10_13_universal2.whl (12.1 MB)
Installing collected packages: gurobipy
Successfully installed gurobipy-12.0.1
```

## 動作確認

下記ファイルを作成し、コマンドラインから実行してください。

```python:mail.py
import gurobipy as gp

with gp.Model("x^2 + 4x - 3") as m:
    x = m.addVar(name="x")
    m.setObjective(x * x + 4 * x - 3, gp.GRB.MINIMIZE)

    m.setParam("OutputFlag", 0)  # Suppress Gurobi output
    m.optimize()

    if m.status == gp.GRB.OPTIMAL:
        print(f"Optimal value: {m.objVal}")
        print(f"Optimal solution: {x.X}")
    else:
        print("No optimal solution found.")

```

```bash
$ python3 main.py
Restricted license - for non-production use only - expires 2026-11-23
Optimal value: -7.0
Optimal solution: 2.0
```

<details>
  <summary>
    $y = x^2 + 4x - 3$ のグラフ
  </summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/8bcb1534-a0e2-4809-ac32-671757e9ad7e.png)

</details>

無事最小値を求めることができました。

出力の 1 行目に `Restricted license - for non-production use only - expires 2026-11-23` とあります。ドキュメントによると、pip 経由では予め制限付きライセンスが付与された状態でインストールされるそうです。

> Our pip package includes a limited license that allows you to solve small optimization problems.

https://support.gurobi.com/hc/en-us/articles/360044290292-How-do-I-install-Gurobi-for-Python

研究活動等の目的で大規模な問題も解くことが出来るように、アカデミックライセンスを取得します。

## アカデミックライセンスの取得

### その前に

アカデミックライセンスにも何種類かあるようで、そのうち主要なものを挙げます。

|Licenses|Pros|Cons|
|-|-|-|
|WLS|コンテナ環境を含めて、どこでも実行可能|Named-User License と比較すると解ける問題のサイズが小さくなる？|
|Named-User|無制限に Gurobi を利用できる？|1 ライセンスにつき 1 台のマシンしか利用できない|

最初はマシンの性能や状態に依らず利用できる WLS License で良いと思いますが、解きたい問題の規模が大きくなってきて WLS の限界に達したら Named-User License へ切り替えるという選択肢もあります。

### WLS ライセンスの取得方法

:::note warn
本節での作業は学内のネットワーク環境下で行う必要があります。
:::

まず、[ここ](https://portal.gurobi.com/iam/register/)からユーザ登録をします。必要事項を入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/b02d5482-6337-4a5e-b8fc-985a991e2c3c.png)

登録ができたら[ユーザポータル](https://portal.gurobi.com/iam/licenses/request/?type=academic)からライセンスを発行しましょう。"WLS Academic" → "GENERATE NOW!" をクリックし、WLS Academic License を作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/43d81ad0-3527-434c-98f8-f39b4ce2daac.png)


ライセンスを発行できたら[ライセンスマネージャ](https://license.gurobi.com/manager/licenses) から API Key を発行します。"DOWNLOAD" → "CREATE NEW API KEY" → (お好みで applicateion name と description を入力し) → "CREATE" と順に進めてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/18558421-e79e-4d34-a16c-a16696cc1e5d.png)

最後この画面になれば、"DOWNLOAD" をクリックしライセンスファイルをダウンロードしてください。（スクリーンショットの API Key は既に削除されています）自動的に `gurobi.lic` がダウンロードされるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/74141b6d-1ca4-4a5e-9fd4-94a2bf09fd5e.png)

### Named-User ライセンスの取得方法

ライセンスの認証に伴い、`grbgetkey` コマンドを叩く必要があります。もし公式インストーラ経由で Gurobi をインストールした場合は既にインストールされていますが、本エントリの手順に沿って作業している場合は別途手順を踏む必要があります。

嬉しいことに `grbgetkey` の実行ファイルをダウンロードする手段が提供されています。（なんてユーザ想いな企業なのでしょう！）[このページ](https://support.gurobi.com/hc/en-us/articles/360059842732-How-do-I-set-up-a-license-without-installing-the-full-Gurobi-package) からお使いのマシンの OS に合った zip ファイルをダウンロードします。

次にライセンスを取得します。WLS ライセンスと同様に [ここ](https://portal.gurobi.com/iam/register/)からユーザ登録を行います。（既に登録済みの場合はスキップ）

登録ができたら[ユーザポータル](https://portal.gurobi.com/iam/licenses/request/?type=academic)からライセンスを発行します。"Named-User Academic" → "GENERATE NOW!" をクリックし、Named-User Academic License を作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/43d81ad0-3527-434c-98f8-f39b4ce2daac.png)

自動的に次のようなモーダル画面に遷移すると思います。中央の `grbgetkey ...` から始まる値をコピーしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/37e8c3c4-660c-44b4-a42d-032371e7cbee.png)

最後にコマンドラインから `grbgetkey` コマンドを実行してください。引数に先ほどコピーした値を渡します。なお、実行中に一度ライセンスファイルの保存先の入力を求められますが、そのままリターンを押して進めてください。（お好みの保存先があれば入力してください、何も入力しないとホームディレクトリに保存されます）

```bash
$ ~/Downloads/licensetools12.0.1_macos_universal2/grbgetkey f1...
info  : grbgetkey version 12.0.1, build v12.0.1rc0
info  : Platform is mac64 (darwin) - Darwin 24.4.0 24E263
info  : Contacting Gurobi license server...
info  : License file for license ID 2655165 was successfully retrieved
info  : License expires at the end of the day on 2026-04-22
info  : Saving license file...

In which directory would you like to store the Gurobi license file?
[hit Enter to store it in /Users/daikiokayama]: 

info  : License 2655165 written to file /Users/daikiokayama/gurobi.lic
```

:::note info
実行ファイルを検証できない旨のポップアップが出て実行できない場合、"System Settings" → "Privacy & Security" → "Security" → "'grbgetkey' was blocked to protect your Mac." → "Allow Anyway" からこの警告を無視できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2315462/3fdfc85f-2f27-4b13-b01d-413d406df97b.png)

:::

ホームディレクトリ（設定した場合はその保存先）にライセンスファイルが生成されていることを確認してください。

```bash
$ ls ~/gurobi.llc
gurobi.llc
```

## アカデミックライセンスを用いた動作確認

ライセンスファイルをホームディレクトリに配置してください。

```bash
$ mv ~/Downloads/gurobi.llc ~/
```

あるいは、プログラム中で環境パラメータを設定することでも同じように動作します。

```diff:main.py
import gurobipy as gp

+ env = gp.Env(
+     params={
+         "WLSACCESSID": "gurobi.llc の中身に対応させてください",
+         "WLSSECRET": "gurobi.llc の中身に対応させてください",
+         "LICENSEID": 2591426,
+     }
+ )

- with gp.Model("minimize x^2 - 4x - 3") as m:
+ with gp.Model("minimize x^2 - 4x - 3", env) as m:
      x = m.addVar(name="x")
...

```

いずれかの下で実行すると、

```bash
$ py main.py
Set parameter WLSAccessID
Set parameter WLSSecret
Set parameter LicenseID to value 2591426
Academic license 2591426 - for non-commercial use only - registered to fa___@guh.u-hyogo.ac.jp
Optimal value: -7.0
Optimal solution: 2.0
```

無事アカデミックライセンスにて実行できていることが確認できました。

## おわりに

Gurobi のインストールを行い、アカデミックライセンスを利用する方法を紹介しました。エントリ内の情報に誤りがあれば、お手数ですがコメント欄にてご指摘いただけると幸いです。