---
title: "AMPLとは？数理最適化モデリング言語の使い方とソルバー・Python連携"
url: "https://www.issoh.co.jp/tech/details/3035/"
published: 2024-07-12
updated: 2026-07-18
categories: ["AI"]
publisher: "株式会社一創"
---

# AMPLとは？数理最適化モデリング言語の使い方とソルバー・Python連携

AMPL（A Mathematical Programming Language）は、線形計画・整数計画・非線形計画などの数理最適化問題を、数式に近い記法で記述するためのモデリング言語です。モデルの記述に専念し、実際に解を求める計算は外部の最適化ソルバーに任せる「フロントエンド」に位置づけられます。この記事では、AMPLの基本文法、ソルバー（CPLEX・Gurobi・HiGHS）の設定、Python連携（amplpy）、無料のCommunity Editionの導入手順、そしてPyomo・GAMSなど他言語との違いまでを実例で解説します。

なお検索では株式指標のAMPL（Amplitude社のティッカー）と混同されることがありますが、本記事が扱うのは数理最適化のモデリング言語AMPLです。最適化そのものの位置づけを整理したい場合は[AIと最適化の違い](https://www.issoh.co.jp/column/details/2973/)もあわせて参照してください。

## まとめ：AMPLはモデル記述に特化した最適化言語

先に結論をまとめます。

- **役割**：AMPLは最適化問題を「変数・目的関数・制約」の数式として記述する言語で、計算はCPLEX・Gurobi・HiGHSなどのソルバーが担う（言語とソルバーは別物）。
- **強み**：数式そのままに近い記法と、対応ソルバー数の多さ。モデルとデータ（`.mod`と`.dat`）を分離でき、大規模問題でも記述が破綻しにくい。
- **費用**：無料のCommunity Editionが提供され、オープンソースソルバー（HiGHS・CBC等）を問題サイズ制限なしで利用できる。商用ソルバーやサポートが必要なら有償版。
- **Python連携**：`amplpy`でPythonからモデル生成・求解・結果取得ができ、pandasやscikit-learnと組み合わせやすい。
- **選び方**：完全に無償・Pythonネイティブで完結させたいならPyomoやOR-Tools、商用の高速ソルバーを数式記法で使い分けたいならAMPLが向く。

## AMPLとは何か：モデリング言語としての位置づけ

数理最適化では、「何を決めるか（変数）」「何を最大化・最小化するか（目的関数）」「守るべき条件（制約）」の3要素で問題を定義します。AMPLはこの3要素を、数学の式に近い形でそのまま書き下せる代数モデリング言語（Algebraic Modeling Language）です。集合（set）やパラメータ（param）を使うため、拠点数や品目数が増えてもモデル本体を書き換えずにデータ側だけを差し替えられます。

重要なのは、AMPL自体は最適解を計算しない点です。AMPLはモデルを標準形に変換してソルバーへ渡し、ソルバーが計算した解を受け取って表示します。つまりAMPLは「翻訳役」で、実際の求解エンジンは別に用意します。ソルバーの役割を詳しく知りたい場合は[Gurobiの解説](https://www.issoh.co.jp/tech/details/2756/)が参考になります。

### AMPLの開発経緯：ベル研究所と3人の設計者

AMPLは1980年代半ば、米ベル研究所（Bell Laboratories）のRobert Fourer、David Gay、Brian Kernighan（C言語やAWKの開発でも知られる）によって設計されました。最初の学術論文は1989〜1990年に発表され（”A Modeling Language for Mathematical Programming”, Management Science誌）、1993年には解説書『AMPL: A Modeling Language for Mathematical Programming』が刊行されています。現在はAMPL Optimization社が開発・提供を続けています。

## 導入とライセンス：Community Editionは無料

AMPLは有償という印象が持たれがちですが、現在は無料のCommunity Editionが用意されています。サインアップするだけで期限のないライセンスが得られ、HiGHS・CBC・Ipopt・Bonmin・Couenneといったオープンソースソルバーを問題サイズの制限なく利用できます。個人利用・学術利用のほか、商用のプロトタイピングにも使えます（クラウド方式のライセンスのため、利用時はインターネット接続が必要）。

本格運用でCPLEX・Gurobiなどの商用ソルバーやサポートを使う場合は、有償のライセンスへ移行します。導入はPython経由が最も手軽です（amplpyはPythonからAMPLを操作するインターフェースで、AMPLエンジンとソルバー本体はモジュールとして別途取得します）。

| 区分                | 費用     | 利用できるソルバー              | 主な用途     |
| ----------------- | ------ | ---------------------- | -------- |
| Community Edition | 無料・無期限 | OSS（HiGHS/CBC/Ipopt 等） | 学習・個人・試作 |
| 商用ライセンス           | 有償     | 商用（CPLEX/Gurobi 等）＋OSS | 本番運用・大規模 |

### Python経由でのインストール手順

Pythonが入っていれば、次のコマンドでamplpy（AMPLを操作するPythonパッケージ）とAMPLエンジン・ソルバーを導入できます。amplpyは2026年時点で0.17系が最新で、Python 3.8〜3.14に対応します。バージョンは更新が速いため最新は公式で確認してください。

```
python -m pip install amplpy --upgrade
python -m amplpy.modules install highs cbc
python -m amplpy.modules activate <ライセンスUUID>
```

`modules install`で使いたいソルバー（ここではHiGHSとCBC）を追加し、`modules activate`にCommunity Editionのライセンスキーを渡せば準備完了です。従来のインストーラ版（デスクトップ用のAMPL IDE）も公式サイトから入手できますが、新規に始めるならこのPythonモジュール方式が扱いやすいです。

## 基本文法とコマンド：モデル記述から求解まで

AMPLのモデルは、集合・パラメータ・変数・目的関数・制約で構成します。次は「利益を最大化する生産量を、資源制約の下で決める」線形計画の例です。

```
set PRODUCTS;
param profit {PRODUCTS};
param use {PRODUCTS};
param capacity;

var make {PRODUCTS} >= 0;

maximize TotalProfit:
    sum {p in PRODUCTS} profit[p] * make[p];

subject to Capacity:
    sum {p in PRODUCTS} use[p] * make[p] <= capacity;
```

`set`で品目の集合を宣言し、`param`で各品目の利益と資源使用量を、`var`で決定変数（生産量）を定義しています。`maximize`が目的関数、`subject to`が制約です。データを別ファイル（`.dat`）に分ければ、モデルを変えずに数値だけ差し替えられます。

モデルを解く手順は次の通りです。対話シェルでもスクリプトでも同じコマンドを使います。

```
model prod.mod;
data prod.dat;
option solver highs;
solve;
display make, TotalProfit;
```

`model`と`data`で定義と数値を読み込み、`option solver`で使うソルバーを指定し、`solve`で求解、`display`で結果を表示します。`reset`でモデルを初期化して条件を変えながら試す、という使い方もよく行われます。

## ソルバーの選択と設定：CPLEX・Gurobi・HiGHS

AMPLの実力はソルバーとの組み合わせで決まります。`option solver`の値を変えるだけで、モデルを書き換えずにソルバーを切り替えられるのがAMPLの利点です。対応ソルバーは代数モデリング言語の中でも最多クラスで、商用・オープンソースの双方をそろえています。

| 種別      | 代表的なソルバー                                 | 得意領域               |
| ------- | ---------------------------------------- | ------------------ |
| 商用      | CPLEX / Gurobi / Xpress / MOSEK / Knitro | 大規模なLP・MIP・非線形・凸錐  |
| オープンソース | HiGHS / SCIP / CBC / Ipopt / Bonmin      | LP・MIP・非線形（無料で利用可） |

無料で始めるなら、MITライセンスで開発が活発なHiGHSが第一候補です。線形計画・混合整数計画・凸二次計画に対応し、Community Editionにもそのまま含まれます。商用ソルバーが必要になったときは、`option solver cplex;`や`option solver gurobi;`に変えるだけで移行でき、モデル本体は変更不要です。ソルバー単体の使い方は[Gurobiの解説記事](https://www.issoh.co.jp/tech/details/2756/)も参考になります。

## PythonからAMPLを使う（amplpy）

データの前処理・可視化・自動化はPythonの得意分野です。`amplpy`を使うと、Pythonの中でAMPLモデルを組み立て、求解し、結果をpandasのDataFrameとして受け取れます。先ほどの生産計画をPythonで書くと次のようになります。

```
from amplpy import AMPL

ampl = AMPL()
ampl.eval(r"""
    set PRODUCTS;
    param profit {PRODUCTS};
    var make {PRODUCTS} >= 0;
    maximize TotalProfit:
        sum {p in PRODUCTS} profit[p] * make[p];
""")

ampl.set["PRODUCTS"] = ["A", "B"]
ampl.param["profit"] = {"A": 40, "B": 30}

ampl.solve(solver="highs")
print(ampl.get_variable("make").to_pandas())
```

`eval`でモデルを文字列として渡し、`set`や`param`にPythonの辞書・リストでデータを流し込み、`solve`で求解します。結果は`to_pandas()`でDataFrame化できるため、そのまま集計や可視化に回せます。需要予測モデル（scikit-learn等）の出力を`param`に渡して最適化する、といった機械学習との連携も自然に書けます。Python標準の最適化関数と比べたい場合は[SciPyの最適化関数](https://www.issoh.co.jp/tech/details/2049/)も確認しておくとよいでしょう。

## 他の最適化モデリング言語との違いと使い分け

AMPLは唯一の選択肢ではありません。代表的な代替として、Python製のPyomo、Julia製のJuMP、老舗商用のGAMS、GoogleのOR-Toolsがあります。特徴を整理します。

| ツール      | 種別        | 記述環境         | 特徴               |
| -------- | --------- | ------------ | ---------------- |
| AMPL     | 商用（無料版あり） | 独自言語＋各種API   | 数式に近い記法・対応ソルバー最多 |
| GAMS     | 商用        | 独自言語         | 歴史が長く大規模実務で実績    |
| Pyomo    | オープンソース   | Python       | Pythonネイティブで無償   |
| JuMP     | オープンソース   | Julia        | 高速・研究用途で人気       |
| OR-Tools | オープンソース   | Python/C++ 他 | 組合せ最適化・ルーティングに強い |

選び方の指針は明確です。ライセンス費用をかけず、データ処理から求解までPython一つで完結させたいならPyomoか[OR-Tools](https://www.issoh.co.jp/tech/details/3477/)が向きます。一方、数式そのままの読みやすい記法を保ちつつ、CPLEXやGurobiといった商用の高速ソルバーを状況に応じて差し替えたい——特に大規模なLP・MIPを扱う実務では、AMPLの表現力とソルバー中立性が効いてきます。逆に言えば、小規模な問題を無償で解くだけならAMPLである必然性は薄く、PyomoやSciPyで十分なことも多いです。導入コストと問題規模で判断してください。

## よくある質問

### AMPLとは何の略ですか？

A Mathematical Programming Language（数理計画法のための言語）の略です。最適化問題を数式に近い形で記述する代数モデリング言語で、計算は外部ソルバーが担当します。

### AMPLは無料で使えますか？

無料のCommunity Editionがあります。期限なしで、HiGHSやCBCなどのオープンソースソルバーを問題サイズ制限なしに利用できます。CPLEXやGurobiなどの商用ソルバーやサポートが必要な場合は有償版になります。

### AMPLでCPLEXやGurobiは使えますか？

使えます。ライセンスがあれば`option solver cplex;`や`option solver gurobi;`と指定するだけで切り替えられ、モデル本体を書き換える必要はありません。AMPLは対応ソルバー数が多いのが特徴です。

### PythonからAMPLを使うにはどうすればよいですか？

`python -m pip install amplpy --upgrade`でamplpyを導入し、Pythonコード内で`AMPL()`インスタンスを生成します。モデルの記述・求解・結果取得をPythonで完結でき、結果はpandasのDataFrameとして扱えます。

### AMPLとPyomoはどちらを選ぶべきですか？

無償かつPythonネイティブで完結させたいならPyomo、数式に近い記法で商用ソルバーを柔軟に使い分けたいならAMPLが向きます。大規模な実務最適化ではAMPL、学習や小規模用途ではPyomoやSciPyが選ばれやすい傾向です。

## 関連記事

- [Gurobiとは？Pythonでの使い方・インストール・価格を解説](https://www.issoh.co.jp/tech/details/2756/)
- [Google OR-Toolsとは？機能・インストール・実装例まで解説](https://www.issoh.co.jp/tech/details/3477/)
- [実務で役立つPythonの最適化関数（SciPy）：効率的な利用シーンと事例紹介](https://www.issoh.co.jp/tech/details/2049/)
- [AIと最適化の違いとは？技術の基礎と応用を解説](https://www.issoh.co.jp/column/details/2973/)

---

出典: [AMPLとは？数理最適化モデリング言語の使い方とソルバー・Python連携](<https://www.issoh.co.jp/tech/details/3035/>)（株式会社一創）
