AMPL(A Mathematical Programming Language)は、線形計画・整数計画・非線形計画などの数理最適化問題を、数式に近い記法で記述するためのモデリング言語です。モデルの記述に専念し、実際に解を求める計算は外部の最適化ソルバーに任せる「フロントエンド」に位置づけられます。この記事では、AMPLの基本文法、ソルバー(CPLEX・Gurobi・HiGHS)の設定、Python連携(amplpy)、無料のCommunity Editionの導入手順、そしてPyomo・GAMSなど他言語との違いまでを実例で解説します。
なお検索では株式指標のAMPL(Amplitude社のティッカー)と混同されることがありますが、本記事が扱うのは数理最適化のモデリング言語AMPLです。最適化そのものの位置づけを整理したい場合はAIと最適化の違いもあわせて参照してください。
まとめ: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の解説が参考になります。
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の解説記事も参考になります。
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の最適化関数も確認しておくとよいでしょう。
他の最適化モデリング言語との違いと使い分け
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が向きます。一方、数式そのままの読みやすい記法を保ちつつ、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が選ばれやすい傾向です。