주메뉴 바로가기 본문 바로가기 하단 바로가기

고객지원

기술문의

cplex.getValue()

  • 위주영
  • 2009.12.01
  • 조회수 2,357
문제를 잘풀고 나서 cplex.getValue()에서 프로그램이 죽습니다. export한 lp 파일을 cplex에서 직접 풀었을 때도 solution이 제대로 잘 나온 것을 확인할 수 있었구요.
확인 부탁드립니다.

cout<<"test start..."<<endl;
cout<<cplex.getValue(x[1][1][1])<<endl;
cout<<"test end..."<<endl;


for(i=1; i<n+2; i++){
for ( j=1; j<n+2; j++ ) {
for ( k=1; k<= n; k++ ) {
cout<<i<<", "<<j<<", "<<k<<endl;

if ( cplex.getValue(x[i][j][k])>0.9999)
cout<<i<<", "<<j<<", "<<k<<endl;

// cout<<i<<", "<<j<<", "<<k<<": "<<cplex.getValue(x[i][j][k])<<endl;
// float temp = (float) cplex.getValue(x[i][j][k]);
// if ( temp > 0.9 ) {
// cout<<i<<", "<<j<<", "<<k<<endl;
// }
}
}
cout<<endl;
} 다운로드아이콘test.txt

댓글 3

  • 김민규2009-12-01
    안녕하세요.
    KSTEC의 김민규입니다.

    전화로 말씀드린 함수 사용법의 예입니다.

    if(cplex.isExtracted(x[i][j][k])) {
    cout << cplex.getValue(x[i][j][k]) << endl;
    }

    이렇게 작성하시면 x[i][j][k] 변수가 모델내에서 bound 되었을 경우만 getValue로 값을 반환합니다.

    보내주신 소스파일만 봐서는 정확한 오류를 찾기 힘드네요.
    가능하시다면 관련 소스를 모두 보내주세요.
    확인 후 답변 드리겠습니다.
    아이콘삭제
  • 위주영2009-12-02
    감사합니다. 덕분에 문제가 잘 해결되었습니다.
    아이콘삭제
  • 소경철2009-12-01
    이러한 유형의 문제는 다음과 같은 2가지 경우에 발생할 수가 있습니다.

    1. 해당 i,j,k index에 대한 변수가 생성되지 않은 경우
    - 해당 인덱스 조합으로 생성된 변수가 없는데도 불구하고 해당 인덱스 조합에 해당하는 변수에 접근하려고 하는 경우 에러 발생

    2. 해당 i,j,k index에 대한 변수가 LP 모델에 반영되지 않은 경우
    - 해당 인덱스 조합으로 변수는 생성되었으나, 제약과 목적함수 구성시 포함되지 않는 경우에 해당 변수의 값은 Bound가 되지 않은 상태이므로 변수의 값을 가져올 수 없음

    위의 2가지 중 어느 경우에 해당되는지 확인해보시기 바랍니다.
    아이콘삭제

댓글 입력