<aside>
💡
Q-time과 예방보전을 고려한 반도체 공정 flexible job shop 스케줄링
- Q-time(Queue time)
- 반도체 공정에서 한 공정이 끝난 후 다음 공정으로 이동하여 처리되기까지 허용되는 최대 대기 시간
- 초과시 웨이퍼 품질 저하 발생 → 폐기 또는 불량
- 예방보전(Preventive Maintenance)
- 설비에서 일어나는 여러 사고 방지를 위해 주기적으로 부품을 교체하고 정비하는 것
- flexible job shop scheduling(FJSP)
- 각 공정(operation)을 수행할 수 있는 기계가 하나가 아니라 여러 개 존재하는 Job Shop Scheduling 문제
- 각 공정마다 선택 가능한 기계 집합이 존재
- 어느 기계에서, 언제 처리할까를 결정
→ Q-time을 준수하면서, 우발적인 사고/정지를 사전에 방지하는 예방보전 활동을 포함하여, 작업(공정)별 기계를 배정하고, 전체 반도체 공정 스케줄을 제공
</aside>
<aside>
💡
연구 step by step
데이터 정의 → 데이터 생성 → 시뮬레이션 + 알고리즘 → 비교 → 모델 정리 → 논문화
- 데이터 스키마 설정
- machine, operation의 시간 범위, q-time 범위, 고장 발생률(지수/와이블 분포) 범위, operation-machine 매핑 등
- 일종의 제약과 범위를 설정
- 반도체 공정의 특성을 적용하기 위해, q-time, 재진입 등의 변수 고려
- 데이터 생성
- 1.의 데이터 스키마를 기반으로 python을 이용해 csv 생성
- machine, job, operation, operation_machine 매핑, q_time 제약 등의 데이터를 가진 csv
- 최적화 모델링 & 시뮬레이션
- 기본적으로 simpy 환경에서 실행,평가
- 2.에서 생성된 csv파일을 사용하여 다양한 연구방법 적용
- 연구방법
- rule-based
- simpy 내부에서 쉽게 적용이 가능하다
- spt, lpt, fifo등의 일반적인 기법을 이용해 스케줄링
- 연구와 결과비교의 baseline처럼 사용할 수 있다
- (선택) heuristic
- 별도의 최적화 모델을 이용하여 스케줄링 결과 도출 후 simpy에서 결과 확인하는 방식으로 사용
- 유전 알고리즘, 우리만의 독창적인 알고리즘을 사용
- (선택) reinforce learning
- simpy 내부의 환경에서 rl을 적용하여 그 환경 안에서 상호작용과 학습
- rl의 개입 시점(작업이 끝났을 때, machine idle일때)에 현재 state 정의, action 정의, reward 설계하여 학습
- pytorch, gymnasium 등
- 설계한 연구방법별로 결과 비교 및 평가, 제일 우수한 모델 선정
- 모델 정리
- 3.에서의 결과물을 바탕으로 최적 모델의 문제 정의, 수리모델, 제약조건, 알고리즘 구조 등등 정리
- 논문 작성
</aside>
<aside>
💡
나의 의견
- 현재 step 1,2가 진행중이고, 3에서 실행환경 만들어지는 중임
- 교수님의 말씀대로 일단 시뮬레이션 돌려보고 결과 확인해보는 것이 필요함
따라서
- 최소한의 데이터 생성(machine 1~2개, 작업 4~5개로, 직접 손으로 간트차트 그릴수 있는 정도)
- simpy 환경에서 제일 기본적인 rule(spt,lpt) 하나로 시뮬레이션
- 결과확인, 우리가 직접 그려본 간트 차트와 비교 (기본적으로 우리의 요구사항, 조건이 잘 반영되게 시뮬레이션이 되는지 확인하는 과정)
이게 잘 된다면,
- 데이터 생성에서 machine, 작업의 수를 늘려보거나, 제약 조건을 하나씩 추가
- 똑같이 simpy에서 실행 후 검증
- rule 기반이 잘 작동한다면, 다음 방법론 확인
→ 이 사이클 계속 반복하기
물론 RL, heuristic 할땐 확실히 알고리즘 수립, state/action/reward 설계가 필요할듯하다.
</aside>