AMPLについて 2011年12月2日(金) 経営システム工学科 森戸 晋
直感的なモデル記述 minimize TOTAL_COST: sum{i in 1..N, j in 1..M}C[i,j]*x[i,j] +sum{j in 1..M}F[j]*y[j]; subject to DEMAND{i in 1..N}: sum{j in 1..M}x[i,j]>=D[i]; subject to CAPACITY{j in 1..M}: sum{i in 1..N}x[i,j]<=L[j]; subject to LOGIC{i in 1..N,j in 1..M}: x[i,j]<=M*y[j];
AMPLのファイル構成 SAMPLE.MOD SAMPLE.RUN SAMPLE.DAT 施設候補地は2 需要地は7 施設の容量は… 各顧客の需要は.. SAMPLE.MOD SAMPLE.RUN SAMPLE.DAT 定式化を記述するファイル 必要な目的関数,制約,記号の定義を列挙する アルゴリズムを記述するファイル どの問題をいつ何回解くのか? どのデータを使うのかを指定する 実験のデータを記述するファイル 各種インスタンス (集合,定数)を列挙
実際に問題を解く 施設配置問題 施設を開設する場所と,輸送量を決定したい 施設を建てる建てないを Yj={0,1}で表現 輸送量はxij 各需要地の需要Diは満たさねばならない 各施設には生産上限Ljがある
モデルファイル(FLP.mod)を読む パラメータ(定数)を指定 決定変数を指定 (xは非負,yはバイナリ) 記号の定義 モデルの記述 param N; param M; param C{i in 1..N, j in 1..M}; param F{j in 1..M}; param D{i in 1..N}; param L{j in 1..M}; var x{i in 1..N, j in 1..M} >= 0; var y{j in 1..M} integer in 0..1; パラメータ(定数)を指定 決定変数を指定 (xは非負,yはバイナリ) 記号の定義 minimize TOTAL_COST: Sum{i in 1..N,j in 1..M}C[i,j]*x[i,j]+sum{j in 1..M}F[j]*y[j]; subject to DEMAND{i in 1..M}: Sum{j in 1..N}x[i,j]>=D[i]; subject to CAPACITY{j in 1..M}: Sum{i in 1..N}x[i,j]<=L[j]; subject to LOGIC{i in 1..N,j in 1..M}: x[i,j]<=M*y[j]; モデルの記述
スクリプトファイル(FLP.run)を読む model FLP.mod; data FLP.dat; option solver CPLEX; problem FLP: x, y, TOTAL_COST, DEMAND, CAPACITY, LOGIC; solve FLP; 変数はxとy 目的関数は「TOTAL」 制約式は「DEMAND…」 display FLP; display x; display y; display FLP > FLP.sol; display x > FLP.sol; display y > FLP.sol; 解の表示,書き込み
⇒コマンドプロンプトから当該フォルダに移動し, コマンドプロンプト上から実行 ⇒コマンドプロンプトから当該フォルダに移動し, 「ampl FLP.run」で実行される 結果は? modelの後のCAPACITYを削除してもう一度実行すると答えはどうなる? WorkspaceフォルダにFLP.solというファイルができてるはずなので,テキストエディタで開いてみましょう
【課題1】 Error Debugging 【課題1】 TASK.run,TASK.modにはエラーがあります。TASK.runを実行してエラーメッセージを確認し,デバッグしてみてください