2017-11-03 20 views
1

GLPK for Java (http://glpk-java.sourceforge.net/)를 사용하여 이진 변수를 기반으로 선형 프로그래밍 문제를 해결하려고하지만 계산 결과에 변수에 대한 소수 결과가 표시됩니다.GLPK for Java - 이진 변수 MIP는 분수 결과를 제공합니다.

는 I 코드의 대부분을 생략하지만, 중요 부분은 I

GLPK.glp_add_cols(lp, data.size()); 
for (int i = 0; i < data.size(); i++) { 
      GLPK.glp_set_col_name(lp, i + 1, "x" + (i + 1)); 
      GLPK.glp_set_col_kind(lp, i + 1, GLPKConstants.GLP_BV); 
      } 

데이터 계수들을 포함하는 테이블이다 이진

같이 변수를 정의하는 다음이다.

나는 (제안 문서에 의해) 내가 단면을 사용하여 사전 처리를 추가하면 presolver에게 오류

glp_intopt: optimal basis to initial LP relaxation not provided 
The problem could not be solved 

glp_iocp iocpParm = new glp_iocp(); 
iocpParm.setPresolve(GLPK.GLP_ON); 
GLPK.glp_init_iocp(iocpParm); 
ret = GLPK.glp_intopt(lp, iocpParm); 

결과입니다 사용하여 문제를 해결하려고하면

glp_smcp smcpParm = new glp_smcp(); 
GLPK.glp_init_smcp(smcpParm); 
GLPK.glp_simplex(lp, smcpParm); 

결과는 분수

Problem created 
GLPK Simplex Optimizer, v4.63 
1 row, 4 columns, 4 non-zeros 
     0: obj = 0.000000000e+00 inf = 1.231e+03 (1) 
     1: obj = 1.231000000e+03 inf = 0.000e+00 (0) 
OPTIMAL LP SOLUTION FOUND 
GLPK Integer Optimizer, v4.63 
1 row, 4 columns, 4 non-zeros 
4 integer variables, all of which are binary 
Integer optimization begins... 
+  1: mip =  not found yet >=    -inf  (1; 0) 
Solution found by heuristic: 1600 
+  2: >>>>> 1.400000000e+03 >= 1.400000000e+03 0.0% (1; 0) 
+  2: mip = 1.400000000e+03 >=  tree is empty 0.0% (0; 1) 
INTEGER OPTIMAL SOLUTION FOUND 
z = 1231.0 
x1 = 0.769375 
x2 = 0.0 
x3 = 0.0 
x4 = 0.0 

어떻게하면 바이너리 솔루션을 얻을 수 있습니까?

+1

결과를 어떻게 읽습니까? – harold

+1

당신은 요점이 있어요! 감사. glp_mip_col_val 대신 glp_get_col_prim을 사용하고있었습니다. 당신이 대답을 쓰면 나는 그것을 받아 들일 것입니다. – sthor69

답변

1

GLPK는 다른 종류의 솔버 (MIP, 내부 점, 단면)에 대해 별도의 결과를 유지하므로 특정 솔버의 결과를 얻으려면 해당 기능을 사용해야합니다.

  • 심플 렉스 솔버를 사용하여 결과를 얻으려면 glp_get 기능을 사용하십시오.
  • 내부 포인터 해석기의 경우 glp_ipt 함수를 사용하십시오.
  • MIP 해석기의 경우 glp_mip 함수를 사용하십시오.

나머지 기능 이름에는 약간의 불일치가 있습니다.