0

nの数値を入力できる線形プログラムがあり、この特定のnのLPの出力が得られます。さまざまな n=10...1000 に対してこれを実行したいと思います。n ごとに手動で行う必要がなく、代わりにこれを自動的に行い、ファイル内の n ごとに LP の解を出力する手法はありますか? 後でグラフをプロットするのが好きです。

これは私の線形プログラムです:

#Specify the number of n for the linear program.
param n := 5000;

#This is the set of probabilities of 
set N := {1 .. n};
#We specify the variables for the probabilities p_1,...p_n.
var p[<i> in N] real >= 0; 

#These are the values of the vector c. It specifies a constant for each p_i.
param c[<i> in N] := i/n ;

#We define the entries a_{ij} of the Matrix A.
defnumb a(i,j) := 
            if i < j then 0 
            else if i == j then i 
            else 1 end end;

#The objective function.
maximize prob: sum <i> in N : c[i] * p[i];

#The condition which needs to be fulfilled.
 subto condition:
    forall <i> in N:
      sum <j> in N: a(i,j) * p[j] <= 1;
4

1 に答える 1

2

コンソールを介して次のように引数を指定できます。

-D n=[number you want] -o [output file]

次に、シェルスクリプトを使用するだけで、いくつかの n を繰り返すことができます。

for i in {1..100}
do
 zimpl -D n=$i -o 'output_'$i yourfile.zpl
done
于 2015-09-06T10:19:11.977 に答える