2

私の問題は次のとおりです。AMPL を使用してブレンドに関する線形計画法の問題を解決する必要があります。モデルとデータの両方を含むファイルを作成することで解決できますが、データから分離した、より一般化されたモデルを作成する必要があります。私の問題は、変数間の制限にあります。それらを一般化し、後でデータに反映する方法がわかりません。たとえば、次の制限があります。

subject to restriction1:
    Xc2 + Xd2 <= Xa2 + Xb2;
subject to restriction2:
    Xc3 + Xd3 >= 0.5*(Xa3 + Xb3);

ここで、Xc2、Xd2、Xa2 などはすべて変数です。これを説明するチュートリアルが見つかりません。少しお役に立てば幸いです...

4

1 に答える 1

2

通常、モデル、パラメーター、およびコマンドは独立して変化する可能性があるため、それらを分離する必要があります。次に例を示します。

これをモデルファイルのexp.modに入れます

var x1 >= 0;
var x2 >= 0;

param c;

maximize z:
  x1 + x2;

s.t.
constraint_1:
  x1 + x2 <= c;

パラメータの実際の値を別のデータ ファイルexpamp.datに入れます。

data;

param c := 1;

すべてのコマンドを別のファイルexp.runに入れます

#option solver "enter your solve name here and remove the #";

solve;

display x1, x2;

これは、次のようにコマンド ラインから実行できます (オペレーティング システムと設定によって異なります)。

ampl 試験.mod 試験.dat 試験.実行

これは印刷します

LP_SOLVE 4.0.1.0: optimal, objective 1
1 simplex iterations
x1 = 0
x2 = 1

私のマシンで。

私が間違っていなければ、拡張子 .mod、.dat、および .run は必要ありません。.txt を使用することもできます。

さらに質問がある場合は、AMPL 開発者から直接、無料でダウンロードできる AMPL ブックをお勧めします。

http://www.ampl.com/BOOK/download.html

特に、1.4 AMPL の線形計画法モデル を参照してください。これらは、モデルをデータから分離する方法を示しています。


更新 質問を正しく理解しているかどうか、まだ100%確信が持てません。いくつかのシナリオに応じて、制約を有効/無効にしたいと思います。

以下の例では、単一のモデルがあり、ソルバーに渡される最終モデルに含まれる実際の制約をデータが決定します。この例では、有効にしていますconstraint_aが除外してconstraint_bいます。それに応じてモデルを作成する必要があるため、モデルを読み書きするのは不快です。

コマンドを使用して、生成されたモデルを調べることができますsolexpand _scon;。有効にする必要があるその他のオプションも参照してください。

var x1 >= 0;
var x2 >= 0;

param is_a_enabled;
param is_b_enabled;

maximize z:
  x1 + x2;

s.t.
constraint_a:
  is_a_enabled*(x1+x2-3) <= 0; # x1+x2<=3 if enabled, 0<=0 otherwise

constraint_b:
  is_b_enabled*(x1+2*x2-4)<=0; # x1+2*x2<=4 if enabled, 0<=0 otherwise

# you can put everything below into a separate file
data;

param is_a_enabled := 1;
param is_b_enabled := 0;

option presolve 10;
option substout 1;
option show_stats 1;

solve;

print "Constraints finally passed to the solver are:";
solexpand _scon;

print "Solution:";   
display x1, x2;

これにより、次の出力が生成されました

Presolve eliminates 1 constraint.
Adjusted problem:
2 variables, all linear
1 constraint, all linear; 2 nonzeros
        1 inequality constraint
1 linear objective; 2 nonzeros.

LP_SOLVE 4.0.1.0: optimal, objective 3
1 simplex iterations
Constraints finally passed to the solver are:
subject to constraint_a:
        x1 + x2 <= 3;

Solution:

x1 = 0
x2 = 3
于 2012-10-20T12:58:49.213 に答える