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];
2
AMPLのファイル構成
•施設候補地は2
•需要地は7
•施設の容量は…
•各顧客の需要は..
SAMPLE.MOD
定式化を記述するファイル
必要な目的関数,制約,記号
の定義を列挙する
SAMPLE.RUN
アルゴリズムを記述するファイル
どの問題をいつ何回解くのか?
どのデータを使うのかを指定す
る
SAMPLE.DAT
実験のデータを記述する
ファイル
各種インスタンス
(集合,定数)を列挙
3
実際に問題を解く
 施設配置問題
 施設を開設する場所と,輸送量を決定したい
施設を建てる建てないを
Yj={0,1}で表現
輸送量はxij
各需要地の需要Diは満たさねばならない
各施設には生産上限Ljがある
4
モデルファイル(FLP.mod)を読む
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];
モデルの記述
5
スクリプトファイル(FLP.run)を読む
model FLP.mod;
data FLP.dat;
option solver CPLEX;
problem FLP:
x, y, TOTAL_COST, DEMAND, CAPACITY, LOGIC;
solve FLP;
display FLP;
display x;
display y;
display FLP > FLP.sol;
display x > FLP.sol;
display y > FLP.sol;
変数はxとy
目的関数は「TOTAL」
制約式は「DEMAND…」
解の表示,書き込み
6
コマンドプロンプト上から実行
⇒コマンドプロンプトから当該フォルダに移動し,
「ampl FLP.run」で実行される
 結果は?
 modelの後のCAPACITYを削除してもう一度
実行すると答えはどうなる?
 WorkspaceフォルダにFLP.solというファイル
ができてるはずなので,テキストエディタで開
いてみましょう
7
【課題1】 Error Debugging
【課題1】
TASK.run,TASK.modにはエラーがあります。
TASK.runを実行してエラーメッセージを確認
し,デバッグしてみてください
8
ダウンロード

第9回配布資料