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

고객지원

기술문의

제약조건을 자동으로 만들기 위해서?

  • 이상원
  • 2007.03.13
  • 조회수 1,768
아래에서 보시는 것처럼 제약조건을 입력해놓았습니다
그런데 i의 갯수가 늘어나면 그에 맞춰서 제약조건을 계속
타이핑을 해 넣어야 하나요?


IloExpr SUM0(env);
for(i=0; i<Order; i++)
{
SUM0+=Q[i][0];
}
mod.add(S[0]>=SUM0);

IloExpr SUM1(env);
for(i=0; i<Order; i++)
{
SUM1+=Q[i][1];
}
mod.add(S[1]>=SUM1);


IloExpr SUM2(env);
for(i=0; i<Order; i++)
{
SUM2+=Q[i][2];
}
mod.add(S[2]>=SUM2);

IloExpr SUM3(env);
for(i=0; i<Order; i++)
{
SUM3+=Q[i][3];
}
mod.add(S[3]>=SUM3);

IloExpr SUM4(env);
for(i=0; i<Order; i++)
{
SUM4+=Q[i][4];
}
mod.add(S[4]>=SUM4);




아래와 같이 시도해보았습니다만...

IloExprArray Sum(env, Item);
for (j=0; j<Item; j++)
{
for (i=0; i<Order; i++)
{
Sum[j] += Q[i][j];
}
}

배열을 만들어서 생성하려 했으나 실행이 되지 않습니다.
일일이 추가해줘야 하나요?
Visual C++ 환경입니다 다운로드아이콘OFR_main.cpp

댓글 2

  • 이보헌2007-03-13
    >>
    //아래와 같이 시도해보았습니다만...

    IloExprArray Sum(env, Item);
    for (j=0; j {
    for (i=0; i {
    Sum[j] += Q[i][j];
    }
    }

    에서......

    Expr Sum 선언 부분을 다음과 같이 고쳐 보세요.

    IloExprArray Sum(env, Item);

    for (i=0 ; i<item ; i++)
    Sum[i] = IloExpr(env);

    또는

    for (j=0; j<item ; j++)
    {
    IloExpr Sum (env);
    for (i=0; i<item ; i++)
    {
    Sum += Q[i][j];
    }
    mod.add(S[j] >= Sum);

    }

    이런 방법을 사용하시는게 좋을것 같네요.

    아이콘삭제
  • 유환주2007-03-13
    .
    효율적인 코딩을 위해서는 의사결정항목 하나 하나를 각각의 명시적인 변수로 생성하지 않는 것이 좋습니다.(예: SUM0, SUM1,...)
    그 대신 배열을 사용하여 변수를 생성하고 논리적으로 제약을 부여하는 것이 좋습니다.
    제가 첨부한 파일은 변수와 제약에 대한 코드를 효율적으로 변경한 쏘스 입니다.
    입력 데이터가 없어서 수정한 쏘스를 실행해 보지는 못했습니다.
    .
    참고 하시기 바랍니다.
    .

    아이콘삭제

댓글 입력