2016-11-03 2 views
0

저는 GLPK 및 선형 프로그래밍의 초보자입니다. 일부 데이터를 .csv 파일로 출력하려고하는데 파일로 출력하고 있지만 데이터를 쉼표로 구분하지는 않습니다. 여기 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처럼 된 .csv STH에 저장하려면, ..., 제 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; 

: 대신 "의 < = 10 "첫 번째 제약 조건에서 01020304050과 같은 다른 값을 갖고이 코드 제목을이 값으로 실행하고"out.csv "파일에 값을 저장하고 싶습니다. 이 특정 경우에는 out.csv 6 행에 값을 쉼표로 구분했습니다. 함수 목표와 제약 조건을 "for"안에 넣을 수 없습니다. 예를 들어. 그래서, 아이디어?

미리 감사드립니다.

답변

0

첫 번째 문제는 올바른 구문으로 해결됩니다. 당신의 출력을 병합하는 &,의 insted 사용

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

마음하시기 바랍니다 루프는 라인의 끝 부분에 쉼표를 넣어 것입니다!

매개 변수 스위치와 glpk가 모델을 다시 해석하게하려면 mathprog 외부에서 스크립트를 작성해야합니다.이 스크립트는 "10"에 대한 값을 변경합니다. 다른 스크립트 언어/가능성에 대한 첫 번째 개요를 보려면 GLPK Wiki을 살펴보십시오. 기본 개념은 데이터 파일의 매개 변수 값을 다시 쓰고 glpsol을 다시 실행하는 것입니다.