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

고객지원

기술문의

cplex로 연립방정식도 풀 수 있을까요?

  • 김주범
  • 2013.09.12
  • 조회수 2,303
안녕하세요.
많은 도움을 주심에 감사드립니다.
한가지 질문이 있어 글을 올리게 되었습니다.

간단히 제가 풀고자 하는 문제를 설명드리면,
- 변수가 6개 (P00, P10, P20, P01, P11, P02) 있으며 각 변수들은 확률입니다.
따라서 0 <= 변수 <= 1 사이의 값을 갖습니다.
- 조건식은 7개입니다.
2*P00 = P10
2*P00 + (4/3)*P20 + P01 = 3*P10
P10 + (19/24)*P11 = (10/3)*P20
P10 + (2/3)*P11 = 2*P01
2*P20 + P01 + (19/12)*P02 = (59/24)*P11
P11 = (19/12)*P02
P00 + P10 + P20 + P01 + P11 + P02 = 1 (모든 변수의 확률을 더하면 1이 됩니다)

(질문1)여기서 변수의 값을 구해서 그 값으로 Thsum 를 구하려고 합니다.
제 생각에는 변수 갯수가 6개이고, 조건식이 7개면 유일한 P00, P10, ..., P02 이 존재할꺼 같은데막상 cplex를 풀어보니 해가 없다고 하네요.

(질문2) objective function를 Maximize로 해야하는지요? 아니면 Minimize로 해야하는지요?
값이 1개만 존재한다면 Maximize나 Minimize나 같다는 생각이 듭니다만, 아니면 다른 방법이 있는지요?

제가 작성한 코드를 첨부합니다. 참고해주시면 감사하겠습니다.

참고로 위의 연립방정식을 손으로 풀면 해가 존재합니다.
P00 = 0.082957821
P10 = 0.165915643
P20 = 0.116460018
P01 = 0.176551261
P11 = 0.280780319
P02 = 0.177334938

곧 추석인데 즐겁고 풍성한 한가위 보내셨으면 합니다.

감사합니다. 다운로드아이콘example_1.txt

댓글 3

  • 이병기2013-09-16
    안녕하세요.
    KSTEC 이병기입니다.

    질문1) 유일한 해가 존재합니다.
    Thsum.end(); 를 제거해 보시기 바랍니다.
    solve() 이전에 end() 를 하면 클래스가 제거됩니다.

    질문2) 유일한 해가 존재한다면 Maximize와 Minimize는 동일한 해를 나타냅니다. 이러한 case의 문제는 objective를 명시하지 않고 풀어도 동일한 해가 나옵니다.

    이상입니다.
    감사합니다.
    아이콘삭제
  • 김주범2013-09-17
    바쁘신데도 불구하고 답변 주셔서 감사드립니다.

    말씀하신 대로 solve() 이전에 Thsum.end()를 제거하고 풀어보았는데
    풀리지 않네요. 또한 objective를 제거하고 풀어도 마찬가지입니다.

    말씀하신대로 수정한 코드를 첨부합니다.
    어느 부분이 잘 못 된걸까요? 바쁘신데 자꾸 질문드려 죄송합니다.

    감사합니다.
    그리고, 추석연휴 잘 보내세요.

    김주범 드림
    아이콘삭제
  • 황순현2013-09-23
    안녕하세요.
    KSTEC 황순현입니다.
    연휴로 인해 답변이 늦어진점 사과드리겠습니다.

    코드상에서 숫자계산이 모두 int형으로 이루어져 제약상에 오류가 발생하였습니다.
    Example) 2*P00 + (4/3)*P20 + P01 == 3*P10
    -> 2*P00 + ((double)4/(double)3)*P20 + P01 == 3*P10
    와 같이 모든 제약의 숫자계산을 변경하시면 원하시는 값이 나올것입니다.

    감사합니다.
    아이콘삭제

댓글 입력