メインコンテンツへスキップ
見出し画像

AMPLのライセンス

    AMPLには色々なライセンスがあるので、整理してみました。

    AMPL Community Edition自体には、変数や制約の数に関するサイズ制限は一切ありません。 これは、学習や小規模なプロジェクト、プロトタイピングを目的としたユーザーにとって非常に大きな利点です。

    ただし、以下の点に注意が必要です。

    • クラウドベースのライセンス: Community Editionはクラウドベースのライセンスを使用するため、利用にはインターネット接続が必要です。

    • 非商用利用限定: このライセンスは教育、学習、個人的なプロジェクト、プロトタイピング、ソルバーのテストといった非商用目的に限定されています。 既存の商用システムの検証など、ビジネス上の利益を得るための利用は許可されていません。

    • 個人での利用: ライセンスは登録した個人に紐づいており、共有することはできません。

    バンドルされているソルバーの制約

    問題のサイズを実質的に決定するのは、AMPLと組み合わせて使用するソルバーの方です。AMPL Community Editionには、いくつかのオープンソースソルバーと、商用ソルバーのトライアル版がバンドルされています。

    • オープンソースソルバー (サイズ制限なし)

      • HiGHS, CBC, SCIP, GCGなどのオープンソースソルバーは、AMPL Community Editionと組み合わせることで問題のサイズ制限なしに利用できます。 これらは線形計画問題や混合整数計画問題などを解くことができます。

    • 商用ソルバー (トライアル版はサイズ制限あり)

      • Gurobi, CPLEX, Xpress, Knitroといった高性能な商用ソルバーもバンドルされていますが、これらは30日間のトライアル版として提供されます。

      • これらのトライアル版ソルバーには、多くの場合、変数や制約の数に厳しい制限がかけられています。 例えば、古いデモ版では「変数10個、制約10個まで」といった制限がありました。 現在の制限はソルバーによって異なりますが、大規模な問題を解くことはできません。

    他の無料版との比較

    AMPLにはCommunity Editionの他に、以下のような無料の選択肢がありましたが、現在ではCommunity Editionに統合・集約されています。

    • 旧Student/Demo版: かつて提供されていた無料の学生版やデモ版には、「変数300個、制約300個まで」(線形問題では500個)といった明確なサイズ制限がありました。 現在のCommunity EditionにはこのようなAMPL自体の制限はありません。

    まとめ

    結論として、AMPL Community Editionを使えば、HiGHSやCBCといったオープンソースソルバーと組み合わせることで、コンピューターのメモリが許す限りの非常に大規模な問題を、サイズ制限を気にすることなく解くことができます。 商用ソルバーの性能を試したい場合は、トライアル版のサイズ制限内で試すか、NEOS Serverのような無料のオンラインサービスを利用する選択肢もあります。

    NEOSサーバーとは? なぜ便利なのか?

    まず、NEOSサーバーは、ウィスコンシン大学が運営する最適化問題の無料オンライン計算サービスです。ユーザーは自分のコンピューターに高価な商用ソルバー(Gurobi, CPLEX, KNITROなど)をインストールしていなくても、インターネット経由でこれらのソルバーに問題を投げて解かせることができます。

    メリット:

    • 無料: GurobiやCPLEXといった非常に高性能なソルバーを無料で利用できます。

    • インストール不要: 自分のPCにソルバーをインストールする必要がありません。

    • 強力な計算能力: 大規模で複雑な問題も、NEOSサーバーの強力な計算機で解くことができます。

    AMPLからNEOSを呼び出す仕組み: kestrel クライアント

    AMPLからNEOSサーバーを利用するには、kestrel という特別な「ソルバー」を使います。

    kestrel は、それ自体が問題を解くわけではありません。その役割は、AMPLで作成したモデルとデータをNEOSサーバーに送信し、NEOS上で指定したソルバー(例: CPLEX)に計算を依頼し、最終的に結果をAMPLに送り返す**「窓口」や「仲介役」**のようなものです。

    呼び出し方法の具体的な手順

    AMPLのコード内で、以下の3つのステップを踏むだけでNEOSサーバーを利用できます。

    ステップ1: 「窓口」として kestrel を指定する

    まず、AMPLに「これから使うソルバーはNEOSへの窓口である kestrel ですよ」と伝えます。

    option solver kestrel;

    ステップ2: NEOS上で使う「本当のソルバー」を指定する

    次に、kestrel のオプション機能を使って、NEOSサーバー上で実際に問題を解いてほしいソルバーの名前を指定します。同時に、NEOSから計算終了の通知を受け取るためのメールアドレスを設定しておくと便利です(任意ですが強く推奨します)。

    # kestrelのオプションを設定
    #   solver: NEOS上で使用するソルバー名(例: cplex, gurobi, knitro)
    #   neos_email: 通知を受け取るメールアドレス
    option kestrel_options 'solver=cplex neos_email=your.email@example.com';
    • solver=... の部分には、NEOSサーバーで利用可能なソルバーの名前を指定します。gurobi や knitro など、問題の種類に応じて選べます。

    • neos_email=... を設定しておくと、計算が開始・終了した際にメールで通知が届きます。大規模な問題で待機時間が長くなる場合に非常に便利です。

    ステップ3: 通常通り solve コマンドを実行する

    あとは、ローカルのソルバーを使うときと全く同じように solve コマンドを実行するだけです。

    solve;

    このコマンドが実行されると、kestrel が裏で働き、問題をNEOSに送信し、計算が終わるまで待機し、結果を受け取ります。

    完全なコード例

    以下は、簡単な線形計画問題をAMPLで記述し、NEOSサーバー上のCPLEXで解くための完全なコード例です。

    # モデルを定義
    var x >= 0;
    var y >= 0;
    
    maximize Profit: 40*x + 30*y;
    
    subject to
      Time_Limit_1: x + y <= 12;
      Time_Limit_2: 2*x + y <= 16;
    
    
    # --- ここからがNEOSサーバーの呼び出し設定 ---
    
    # 1. NEOSへの窓口としてkestrelを選択
    option solver kestrel;
    
    # 2. kestrelのオプションで、NEOS上で使うソルバーと通知用メールアドレスを指定
    #    ここではCPLEXを使用する例
    option kestrel_options 'solver=cplex neos_email=your.email@example.com';
    
    
    # 3. 通常通りsolveコマンドを実行
    solve;
    
    
    # --- 結果の表示 ---
    # solveが終われば、結果はローカルにあるかのように扱える
    display x, y, Profit;

    このコードをAMPLで実行すると、コンソールに以下のようなメッセージが表示され、NEOSとの通信が始まります。

    NEOS: Job 123456 submitted to NEOS server.
    NEOS: Job 123456 (password: AbCdEf)
    NEOS: job 123456, starting
    ... (計算中のメッセージ) ...
    NEOS: job 123456, done
    CPLEX 22.1.1.0: optimal solution; objective 400
    ... (結果の表示) ...

    Job ID と password が発行されるので、これをNEOSサーバーのウェブサイトで入力すれば、計算の進行状況を確認することもできます。

    利用可能なソルバーの確認方法

    NEOSサーバーでどのソルバーが利用可能かは、公式サイトで確認できます。

    NEOS Server Solver List: https://neos-server.org/neos/solvers/index.html

    このページで、問題のカテゴリ(例: lp (線形計画), milp (混合整数線形計画), nlp (非線形計画))ごとに利用できるソルバーの名前を確認し、option kestrel_options 'solver=...' の部分に指定してください。

    結論から言うと、NEOSサーバーは商用目的で利用すること自体は禁止されていません。しかし、実際にビジネスの現場で利用するには、理解しておくべき極めて重要な注意点と制約が存在します。

    NEOSサーバーの利用規約には、「非商用利用に限る」といった明確な文言はなく、広く一般に公開された公共の研究リソースという位置づけです。そのため、企業に所属する人が業務に関連する問題を解くために利用しても、規約違反にはあたりません。

    ただし、以下の致命的ともいえる制約を必ず理解してください。

    商用利用におけるNEOSサーバーの注意点・制約

    1. 機密性・セキュリティの欠如(最も重要な点)

    これが最大の注意点です。NEOSサーバーには、いかなる機密保持契約(NDA)も存在しません。

    • データは平文で送信される可能性: モデルやデータは暗号化されずにインターネット上を流れる可能性があり、第三者に傍受されるリスクがあります。

    • サーバー上でのデータ保護の保証がない: 送信した問題(モデルやデータ)がサーバー上でどのように扱われるか、いつ削除されるかについての保証はありません。

    • 「公共の」リソースである: NEOSは学術的な研究プロジェクトであり、企業の機密情報を保護するようには設計されていません。

    したがって、顧客データ、価格設定、製造原価、経営戦略に関する情報など、少しでも機密性が含まれる情報をNEOSサーバーに送信することは絶対に避けるべきです。

    2. パフォーマンスと安定性の保証がない

    NEOSサーバーは「ベストエフォート型」のサービスです。

    • 待ち時間(キュー): あなたが問題を送信したとき、他の多くのユーザーもサーバーを利用しています。問題は順番待ちの列(キュー)に入り、計算が始まるまでに数分から数時間、あるいはそれ以上待たされる可能性があります。

    • ダウンタイム: サーバーはメンテナンスや予期せぬトラブルで停止することがあります。いつ復旧するかの保証はありません。

    • 計算時間制限: 多くのソルバーには、1つの問題あたり最大8時間といった計算時間の上限が設けられています。

    ビジネスの現場で求められる「いつでも、すぐに、確実に」といった要求には全く応えられません。

    3. サポートがない

    何か問題が発生しても、専門のサポートチームはありません。あくまでも研究目的の無償サービスです。

    では、どのような「商用利用」なら可能か?

    上記の制約を理解した上で、以下のような限定的な用途であれば、ビジネスの文脈でも有効活用できます。

    • プロトタイピング:

      • 新しい数理モデルを構築した際に、「そもそもこの問題は解けるのか?」「どのソルバーが有効そうか?」といった技術的な検証を行う。

    • ソルバーの性能比較:

      • 自社でどの商用ソルバー(Gurobi, CPLEXなど)を購入すべきか検討するために、同じ問題(もちろん機密情報を含まないダミーデータ)を投げて性能を比較する。

    • 非機密データの分析:

      • 公開されている統計データや、社内でも機密性が全くないデータを使って分析を行う。

    • 社内での学習・トレーニング:

      • 社員が最適化モデリングを学習するために利用する。

    まとめ

    結論として、NEOSサーバーは「このアルゴリズムは機能するか?」といった技術的な検証やプロトタイピングには非常に便利なツールですが、企業の機密情報を含むデータを扱う本番の業務システムに組み込むことは、セキュリティリスクの観点から絶対に避けるべきです。 本格的な商用利用には、ソルバーのライセンスを正式に購入するか、セキュリティが保証されたクラウドサービスを利用するのが唯一の選択肢となります。


    あなたへのおすすめ