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

고객지원

기술문의

debug error 관련

  • 권순욱
  • 2009.08.11
  • 조회수 2,287
X& IloArray::operator[] (IloInt i) : Out of bounds operation: index superior to
size of array
Assertion failed: (i < _impl->getSize()) || (ILOSTD(cerr) << "X& IloArray::opera
tor[] (IloInt i) : Out of bounds operation: index superior to size of array" <<
ILOSTD(endl), ilo_stop_assert()), file c:\ilog\concert25\include\ilconcert\iloen
v.h, line 1964


C++ 실행 도중에 위와 같은 디버그 에러가 뜹니다.

제가 예비 실험으로

item 3, 5, 7
period 3, 5, 7

을 각각 조합한 문제를 푸는데, 5X3 과 7X5만 위와 같은 에러가 뜨네요.(item수가 period수보다 큰경우, 즉 행수가 열수 보다 큰경우 임), infeasible 한 문제도 있어서 infeasible이면 infeasible이라도 떠야 되는데 알길이 없군요;

아무래도 결정변수 선언쪽에 문제가 있는거 같은데, 한번 봐주셨으면 좋겠습니다.

사실 결정변수 선언 부분은 결정변수에 index가 2개 혹은 3개까지 붙는 건 어떻게 처리하는지 몰라서 여기 Q&A 게시판에 다른 답변들을 참고하면서 선언했었거든요. 그쪽에 문제가 있는거 같습니다.

한번 검토 부탁드립니다.


ps. 추가질문
Q1) C++을 실행 시켰을 때 위에 문제 푸는 과정이 실행창에 안나타나게는 할 수 없나요? 다른 코딩 파일에서 최적해 값은 파일에다 출력하게끔 해두었는데, 그다지 크지 않은 사이즈 문제도 생각 이상의 시간이 걸리는 이유가 혹시 실행화면에 문제 푸는 과정을 화면에 보여주는 시간 때문인가 해서요. 다운로드아이콘test_2.zip

댓글 3

  • 이보헌2009-08-12
    안녕하세요.

    1. 위 에러 메시지는 배열 사이즈를 잘못 지정해 준것이 맞습니다.

    간단한 C 코딩상의 에러입니다.
    double Mit[nb_item][nb_priod];
    의 값을 읽는 부분을 수정하세요.

    결정변수 선언부는 잘 되었습니다.

    2. infeasible 또는 No Solution 메시지가 정상 출력됩니다.

    3.
    cplex.setParam(IloCplex::SimDisplay, 0);
    cplex.setParam(IloCplex::MIPDisplay, 0);
    을 사용하면 풀이로그를 안보이게 할 수 있습니다.
    cplex int param 을 참고하세요.

    ps.
    cplex.extract(clsp); 는 clsp라는 IloModel 객체를 cplex라는 IloCplex 객체에 넘겨주는 구문입니다.
    IloCplex를 선언하는 두가지 방법 - IloEnv객체, IloModel객체 - 중 IloEnv 객체를 사용해서 선언한 경우 IloModel 객체를 넘겨주기 위해 사용합니다.
    즉, 현재는 IloModel객체를 사용해서 IloCplex객체를 생성했으므로 extrat를 할 필요가 없습니다.
    아이콘삭제
  • 권순욱2009-08-12
    배열 첨자의 에러란 말씀에

    처음부터 하나하나 다 체크를 해보니 역시 몇 가지 오류가

    있었더군요. 모르고 있던 것도 잡아내서 참 다행이네요.

    감사합니다.



    아 그리고, 실행창에 문제 풀이화면을 없애준다는

    cplex.setParam(IloCplex::SimDisplay, 0);
    cplex.setParam(IloCplex::MIPDisplay, 0);

    이 두개 중 어떤걸 써야 되나요?

    그리고 헤더파일 include 할게 있을거 같은데 어떻게 해야될지~

    C:\ILOG\CPLEX110\include\ilcplex 안에
    ilocplexi.h 란 파일 맞나요? 이것 저것 뒤져 보긴 했거든요..;



    #include 꺽쇠 ilocplexi.h 꺽쇠

    이렇게 인클루드 해보니

    fatal error C1083: 포함 파일을 열 수 없습니다. 'ilocplexi.h': No such file or directory

    라고 뜨네요.


    어찌된 영문이지 원..;
    아이콘삭제
  • 이보헌2009-08-13
    IloCplex::SimDisplay 는 LP 풀이 로그를,
    IloCplex::MIPDisplay 는 MIP 풀이 로그를 나타내는 수준을 의미합니다.
    두가지 다 사용하세요.

    ilocplexi.h 를 include하는 경우는 아직까지 보지 못했는데요.
    에러 메시지는 추가포함디렉토리에 해당 파일 루트를 입력해 주지 않아서 발생한 에러입니다.
    자세한 사항은 c, c++ 자료를 찾아보시기 바랍니다.
    아이콘삭제

댓글 입력