최적화 솔버의 infeasible과 unknown을 구별하고 충돌 제약을 현장 의사결정으로 연결합니다.
왜 이 문제가 생길까
스케줄 최적화 화면에서 '해가 없습니다'라고만 보여 주면 현장은 모델을 신뢰하기 어렵습니다. 실제로는 모든 조건을 만족하는 일정이 존재하지 않을 수도 있고, 아직 찾지 못했을 수도 있습니다. 이 둘은 다른 문제이며 대응 방법도 다릅니다.
시스템은 무엇을 구분해야 할까
솔버 결과를 최적·가능해 발견·불가능 증명·시간 제한/미확인으로 나눠 표시합니다. 불가능이 증명되면 최소 충돌 제약 집합이나 가정 기반 진단으로 원인을 좁힙니다. 예를 들어 납기·작업자 자격·장비 점검 중 어떤 조건이 동시에 성립할 수 없는지 보여 줍니다. 완화 가능한 선호 조건과 절대 지켜야 할 안전 제약은 애초에 분리하고, 완화는 관리자의 명시적 승인 이후에만 적용합니다.

현장에서 적용하면
자격 보유 작업자가 한 명인데 같은 시간대의 두 작업에 동시에 필요하다면 일정을 아무리 탐색해도 답이 없습니다. 시스템은 '작업 A와 B의 동시 요구'를 설명하고 시간 이동이나 자격자 추가라는 선택지를 제시해야 합니다. 반대로 30초 제한에 걸려 결과가 없었다면 모델을 불가능하다고 단정하지 않고 탐색 시간을 늘리거나 기존 일정으로 돌아갑니다.

도입할 때 놓치기 쉬운 점
모든 제약에 벌점만 부여하면 안전 규칙까지 비용으로 우회하는 위험한 결과가 나올 수 있습니다. 반대로 모든 현장 규칙을 절대 제약으로 만들면 작은 예외에도 해가 사라집니다. 제약의 출처, 소유자, 변경 이력을 관리해야 진단 결과를 실제 의사결정에 쓸 수 있습니다.
시작 전 점검할 세 가지
- 불가능과 시간 초과를 화면에서 구분하는가
- 충돌 제약의 업무 의미를 설명할 수 있는가
- 완화 권한과 절대 제약의 경계가 정해졌는가
참고 자료: Google OR-Tools의 CP-SAT 솔버 상태 설명
#최적화 #수리모델 #제약충돌 #Infeasible #CP-SAT #스케줄링 #운영의사결정 #생산계획 #솔버 #알고리즘