我是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;
这是第一个问题:我想保存.csv ......例如1,3,2,1,...,1
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;
第二:代替第一个约束中的“&lt; = 10”,我想要有不同的值,例如0,10,20,30,40,50,并为这些值运行此代码主题并保存“out.csv”文件中的值。在这个特定情况下,我将在out.csv 6行中使用逗号分隔值。 我不能将函数目标和约束放在“for”中,例如。那么,想法?
提前多多感谢。
答案 0 :(得分:1)
只需使用正确的语法即可解决您的第一个问题。使用&
,
{}}}来合并您的输出:
printf {(i,j) in {I, J}: x[i,j] = 1}
j & "," >> filename;
printf "\n" >> filename;
请注意你的循环也会在行尾添加一个逗号!
要使参数切换和glpk再次解决模型,您必须在mathprog之外构建一个脚本,它会更改"10"
的值。请查看GLPK Wiki以获得不同脚本语言/可能性的第一个概述 - 主要概念是重写数据文件中的参数值,然后重新运行glpsol。
答案 1 :(得分:0)
您可以使用table OUT "CSV"
,例如:
table tbl{(i,j) in {I, J}: x[i,j] = 1} OUT "CSV" "filename.csv": j;
尽管我没有针对您的问题和您对x
的过滤进行测试,但该一般性说明对我有用。请参阅发行版中包含的《建模语言GNU MathProg语言参考》的第42页“表声明”的第4.11节。
我同意@Paul G.的第二个问题。
答案 2 :(得分:0)
我是GLPK和线性编程的新手。我正在尝试将一些数据输出到.csv文件,并将其输出到该文件,但它没有用逗号分隔数据。
glpsol每次呼叫只能解决一个混合线性问题。但是您可以使用脚本来解决不同参数值的问题。
请阅读https://en.wikibooks.org/wiki/GLPK/Scripting_plus_MathProg#Parametric_studies_and_MathProg