제약조건 관리
개요
이 화면은 무엇인가요? APS 스케줄링 시 준수해야 하는 제약조건(용량, 자재, 금형, 인력, 시간 윈도우, 순서 의존 등)을 정의하고 관리하는 화면입니다. 경성 제약(반드시 준수)과 연성 제약(위반 시 페널티)을 구분하여 현실적인 스케줄을 수립합니다.
누가 사용하나요?
- APS 계획자: 제약조건 등록 및 우선순위 조정
- 생산관리자: 현장 제약 반영 (설비, 인력, 공간 등)
- 설비관리자: 설비 관련 제약 정보 제공
언제 사용하나요?
- 신규 제약조건이 발생할 때 (설비 추가/제거, 규제 변경 등)
- 스케줄링 결과에서 비현실적인 배정이 나올 때 제약을 추가할 때
- 제약 완화 또는 강화가 필요할 때
주요 기능
1. 제약조건 등록
무엇을 하나요?: 스케줄링 제약을 유형별로 정의합니다.
어떻게 사용하나요?:
- "신규" 버튼을 클릭합니다
- 제약유형(capacity/material/tooling/labor/time_window/sequence 등)을 선택합니다
- 제약범주를 지정합니다: hard(절대 위반 불가), soft(위반 시 페널티), preference(선호 수준)
- 자원, 작업장, 용량 한계 등 세부 내용을 입력합니다
- 적용범위(global/plant/line/work_center/equipment)를 설정합니다
💡 팁: 경성제약(hard)이 너무 많으면 실현 가능 한 스케줄을 찾기 어려울 수 있습니다. 초기에는 핵심 제약만 hard로 설정하고, 나머지는 soft + 페널티로 운영하는 것이 효과적입니다.
2. 자동해소 전략 설정
무엇을 하나요?: 제약 위반 시 자동으로 해소할 전략을 설정합니다.
어떻게 사용하나요?:
- 자동해소활성화를 true로 설정합니다
- 자동해소전략(시간이동/대체자원/배치분할/외주/잔업/우선순위변경)을 선택합니다
- 전파활성화를 설정하면 한 제약 해소가 다른 작업에 미치는 영향을 자동 계산합니다
업무 흐름에서의 위치
입력 항목 가이드
| 항목 | 설명 | 입력 방법 | 예시 |
|---|---|---|---|
| 제약코드 | 제약 고유 코드 | 직접 입력 (필수) | CON-CAP-001 |
| 제약조건명 | 제약 이름 | 직접 입력 (필수) | CNC 가공 용량 제 한 |
| 제약유형 | 제약 종류 | 선택 (필수) | capacity |
| 제약범주 | 경성/연성 | 선택 (필수): hard/soft/preference | hard |
| 작업장 | 적용 작업장 | 작업장 선택 | WC-MACH-001 |
| 최대용량 | 허용 최대값 | 숫자 입력 | 480 |
| 우선순위 | 제약 우선순위 | 정수 입력 (필수) | 1 |
| 적용범위 | 적용 범위 | 선택 (필수): global/plant/line/work_center/equipment | work_center |
| 페널티단가 | 위반 시 단위 페널티 | 숫자 입력 | 10000 |
자주 묻는 질문 (FAQ)
경성 제약(hard)과 연성 제약(soft)의 차이는 무엇인가요?
- 경성 제약(hard): 스케줄러가 절대 위반하지 않습니다. 위반하면 실현 불가능(infeasible) 판정됩니다. 예: 설비 물리적 용량 한계, 법적 작업시간 제한
- 연성 제약(soft): 위반은 가능하지만 페널티가 부과됩니다. 스케줄러가 페널티를 최소화하는 방향으로 최적화합니다. 예: 목표 가동률, 선호 작업 시간대
- 선호(preference): 가장 약한 제약. 가능하면 준수하되 다른 제약과 충돌하면 무시됩니다.
참고: 데이터 구조
테이블 및 관계 상세
테이블: aps_constraints
주요 컬럼: constraint_code, constraint_name, constraint_type, constraint_category, resource_type, work_center_id(FK), max_capacity, priority, is_hard, penalty_cost_per_unit, penalty_function, auto_resolve_enabled, auto_resolve_strategy, scope, effective_from, is_active
주요 연관 테이블: 제약위반이력(aps_constraint_violations), 작업장(aps_work_centers)