2015-01-13 11 views
1

나는 GLPK와 mathprog 언어로 주위를 둘러 보려고합니다. 나는 하이드로 스토리지 (단순한 터빈, 펌프 없음)에 대한 간단한 모델을 구현하려고합니다. 그러나 나는 실격을 받고 있습니다.GLPK 하이드로 스토리지 - 실행 불가능

초기 조건에서 붓는 것이 가능해야합니다. 여기


코드입니다 :

set T; 

#======================================================== 
# Time Series 

# Price 
param price{i in T}; 
# Inflow 
param inflow{i in T}; 

#======================================================== 
# Unit description 

param release_max>=0; 
param release_min>=0; 
param fill_max>=0; 
param fill_min>=0; 
param fill_start>=0; 
param fill_end>=0; 


#======================================================== 
# optimization variables 
var release{i in T}>=0; 
var fill{i in T}, >=fill_min, <=fill_max; 

# objective: Maximize profit 
maximize obj: sum{i in T} price[i] * release[i]; 
s.t. fill_current {i in T: i>1}: 
     fill[i] = fill[i-1] - release[i] + inflow[i]; 
s.t. fill_con_start {i in T: i=1}: 
     fill[i] = fill_start; 
s.t. fill_con_end {i in T: i=card(T)}: 
     fill[i]>=fill_end; 

solve; 
data; 

param release_max:=100; 
param release_min:=0; 
param fill_max:=10000; 
param fill_min:=0; 
param fill_start:=5000; 
param fill_end:=5000; 

param : T : price inflow := 
     0  15  150 
     1  17  170 
     2  18  180 
     3  22  220 
     4  55  550 
     5  40  400 
     6  65  650 
     7  10  100 
     8  12  120 
     9  4  40 
; 
end; 

여기 출력 :

GLPSOL: GLPK LP/MIP Solver, v4.55 
Parameter(s) specified in the command line: 
--cover --clique --gomory --mir -m Hydro_test.mod 
Reading model section from Hydro_test.mod... 
Reading data section from Hydro_test.mod... 
58 lines were read 
Generating obj... 
Generating fill_current... 
Generating fill_con_start... 
Generating fill_con_end... 
Model has been successfully generated 
GLPK Simplex Optimizer, v4.55 
10 rows, 19 columns, 35 non-zeros 
Preprocessing... 
PROBLEM HAS NO DUAL FEASIBLE SOLUTION 
Time used: 0.0 secs 
Memory used: 0.1 Mb (102683 bytes) 
>Exit code: 0 Time: 0.316 

이 사람이 나를 도울 수 있습니까? 바보

답변

1

는 않습니다 바보 같은 것입니다 :

내가 릴리스 매개 변수를 제한하는 것을 잊었다 인덱스 (너무 늦게 등을 할당 예를 들어, 초기 충전 레벨) 몇 가지 문제가 있었다.

# objective: Maximize profit 
maximize obj: sum{i in T} price[i] * release[i]; 
s.t. fill_current {i in T: i>0}: 
     fill[i] = fill[i-1] - release[i] + inflow[i]; 
s.t. fill_con_start {i in T: i=0}: 
     fill[i] = fill_start; 
s.t. fill_con_end {i in T: i=card(T)-1}: 
     fill[i]>=fill_end; 
s.t. release_current {i in T}: 
     release_max>=release[i]>=release_min; 
: 따라서 문제는 목적은 (마지막 줄 참조)과 같아야합니다

바운드 형식이었다