SAMPL (Stochastic AMPLの略)は、よく知られているAMPL言語を拡張構文とキーワードで拡張して作られた代数モデリング言語です。これは、確率的プログラミング問題[ 1 ]を表現するために特別に設計されており、最近の拡張により、確率制約、統合確率制約、およびロバスト最適化問題も表現できるようになりました。AMPLが接続するすべてのソルバー[ 2 ]を使用してインスタンスの決定論的等価バージョンを生成することも、 SMPS表現を生成してFortSPなどの特殊な分解ベースのソルバーを使用することもできます。
SAMPLはAMPLとすべての言語機能を共有し、シナリオベースの確率的プログラミングとロバスト最適化を表現するために特別に設計されたいくつかの構成要素を追加しています。
シナリオベースのSP問題を表現するために、ツリー構造を記述し、決定変数を段階ごとにグループ化する追加の構成要素が用意されています。さらに、ツリーの各ブランチの確率を格納するパラメータと、シナリオセットを表すセットを指定することも可能です。SP問題における確率制約や統合された確率制約を容易に定義するための他の構成要素も利用できます。これらの言語構成要素を使用することで、問題の構造を保持できるため、ソルバーがそれを利用できるようになります。ソルバーは、ベンダーズ分解などの特殊な分解手法を用いて、その構造を活用し、解法を高速化することができます。
SAMPLは、3種類の堅牢な最適化定式化を記述するための構成要素をサポートしています。
SAMPLは現在、ソフトウェアAMPLDev( www.optirisk-systems.comが配布)の一部として利用可能です。Windows 、Linux、Mac OS Xを含む多くの一般的な32ビットおよび64ビットプラットフォームをサポートしています。機能が制限された無料の評価版が利用可能です。[ 6 ]
以下は、SP関連の構成要素を示すための、単純な問題(Dakota [ 7 ] )のSAMPLバージョンです。データファイルは含まれていませんが、通常のAMPL構文に従います(詳細については、AMPL Wikipediaページに記載されている例を参照してください)。
setProd;setResource;# Scenarios (future possible realizations)シナリオセットScen;# Definition of the problem as a two-stage problemツリーTree := twostage ;# Demand for each product in each scenarioランダムパラメータDemand{Prod, Scen};# Probability of each scenario確率P{Scen};# Cost of each unit of resourceparamCost{Resource};# Requirement in terms of resources units to produce one unit of each productparamProdReq{Resource,Prod};# Selling price of each productparamPrice{Prod};# Initial budgetparamBudget;# Amount of resources to buyvarbuy{rinResource}>=0,接尾辞ステージ1;# Amount of each product to producevaramountprod{pinProd,sinScen}>=0,接尾辞ステージ2;# Amount of each product to sellvaramountsell{pinProd,sinScen}>=0,接尾辞ステージ2;# Total final wealth, as expected total income from sales minus costs for the resourcesmaximizewealth:sum{sinScen}P[s]*(sum{pinProd}Price[p]*amountsell[p,s]-sum{rinResource}Cost[r]*buy[r]);subjectto# Make sure you have enough resources to produce what we intend tobalance{rinResource,sinScen}:buy[r]>=sum{pinProd}ProdReq[r,p]*amountprod[p,s];# Make sure we do not sell what we did not produceproduction{pinProd,sinScen}:amountsell[p,s]<=amountprod[p,s];# Make sure we do not sell more than the market demandsales{pinProd,sinScen}:amountsell[p,s]<=Demand[p,s];# Respect initial budgetbudgetres:sum{rinResource}Cost[r]*buy[r]<=Budget;
SP問題におけるSAMPLインスタンスレベルのフォーマットはSMPSであるため、この規格をサポートするソルバーであればどれでも問題を解くことができます。そのようなソルバーの1つ(FortSP)は、標準のSAMPLディストリビューションに含まれています。ロバスト最適化問題に関しては、必要なソルバーは使用する具体的な定式化によって異なります。例えば、Ben-Tal定式化やNemirovski定式化では、2次錐解析に対応したソルバーが必要です。
{{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク){{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク)