1

私は GLPK と線形計画法の初心者です。一部のデータを .csv ファイルに出力しようとしていますが、ファイルに出力していますが、データをコンマで区切っていません。

set I; /*equipments */
set J; /* maintenance plans */
param cost{I}; /* failure cost for equip i in I */
param maint{J}; 
param prob{I, J}; /* failure probab i in I under j in J */
param filename, symbolic := "out.csv";

var x{I, J} binary; /* 1 if include maintenance plan, 0 otherwise */

minimize MainCost: sum{i in I} sum{j in J} prob[i,j]*cost[i]*x[i,j];

 s.t. MaintCost{j in I}: sum{(i,j) in {I, J}}(maint[j]*x[i,j]) <= 10;
 s.t. Unit {i in I}: sum{j in J} x[i,j] = 1; 

solve;
printf {(i,j) in {I, J}: x[i,j] = 1}
j,"," >> filename;

最初の問題: 1,3,2,1,...,1 のように .csv sth に保存したい

data;
param: I: cost:=
1     5
2     10 
3     9
4     3
5     6
6     5
7     7
8     6
9     10
10     6;

param: J: maint:=
1     0
2     1
3     2 ;

param prob 
:           1                   2                       3           :=
1     0.71349520313981     0.608394373323201     0.46473857148101     
2     0.604843473690396     0.494158592651351     0.35715264359696     
3     0.640260888759684     0.532400290182621     0.394600541097475     
4     0.71349520313981     0.608394373323201     0.46473857148101     
5     0.500170157438303     0.383902444963231     0.256863101331242     
6     0.696759243580332     0.582579242310187     0.433239819885668     
7     0.604843473690396     0.494158592651351     0.35715264359696     
8     0.660549568442532     0.553447396825782     0.414065533311644     
9     0.612144282180733     0.502294490808246     0.365501585646775     
10     0.71349520313981     0.608394373323201     0.46473857148101     ;

end;

2 番目: 1 番目の制約の「<=10」の代わりに、0、10、20、30、40、50 などの異なる値を設定し、これらの値に対してこのコード サブジェクトを実行し、値を「 out.csv」ファイル。この特定のケースでは、out.csv に 6 行があり、値はカンマで区切られています。たとえば、関数の目的と制約を「for」の中に入れることはできません。それで、アイデア?

よろしくお願いします。

4

3 に答える 3

1

最初の問題は、正しい構文で解決されます。&insted ofを使用,して、出力をマージします。

printf {(i,j) in {I, J}: x[i,j] = 1}
j & "," >> filename;
printf "\n" >> filename;

ループでは行末にコンマも追加されることに注意してください。

パラメータを切り替えて glpk でモデルを再度解決するには、mathprog の外部でスクリプトを作成する必要があります。これにより、 の値が変更されます"10"GLPK Wikiを調べて、さまざまなスクリプト言語/可能性の最初の概要を取得してください。主な概念は、データ ファイルのパラメーター値を書き換えてから、glpsol を再実行することです。

于 2016-11-08T17:21:16.387 に答える