80 likes | 267 Views
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];
E N D
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のファイル構成 • 施設候補地は2 • 需要地は7 • 施設の容量は… • 各顧客の需要は.. SAMPLE.MOD SAMPLE.RUN SAMPLE.DAT • 定式化を記述するファイル • 必要な目的関数,制約,記号の定義を列挙する • アルゴリズムを記述するファイル • どの問題をいつ何回解くのか? • どのデータを使うのかを指定する • 実験のデータを記述するファイル • 各種インスタンス • (集合,定数)を列挙
実際に問題を解く • 施設配置問題 • 施設を開設する場所と,輸送量を決定したい 施設を建てる建てないを Yj={0,1}で表現 輸送量はxij 各需要地の需要Diは満たさねばならない 各施設には生産上限Ljがある
モデルファイル(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]; モデルの記述
スクリプトファイル(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】 ErrorDebugging 【課題1】 TASK.run,TASK.modにはエラーがあります。TASK.runを実行してエラーメッセージを確認し,デバッグしてみてください