결론부터: AI·데이터 활용 아이디어 10개를 적용 위치에 따라 A. 기존 기능 안(5개), B. 기능 사이 연결(2개), C. 새 기능(3개)으로 나눴습니다. 가장 중요한 것은 03 설비·가동률 자동 결정입니다. "어느 설비를 몇 %로 누를지"를 정하는 일로, 01(예측)과 02(감축표)가 그 재료를 만듭니다. 아이디어마다 입력·출력·방법·학습 데이터와 정답·켜는 기준을 적었고, 강화학습이 필요한 곳은 학습 방법까지 적었습니다.
적용 위치A 기존 기능 안B 기능 사이C 새 기능확인 코드·회의로 확인가정 추정·미확인
0
한눈에 보기
A. 기존 기능 안에서기능 하나의 내부만 바뀜
남은 구간 예측기피크제어 · 지도학습
설비 감축표 자동 생성피크제어 · 집계·곡선 맞춤
설비·가동률 자동 결정피크제어 · 최적화 + 비용 학습 (강화학습은 선택)
절전 스케줄 자동 추천절전 스케줄러 · 통계
시운전 자동 진단부하적응 · 곡선 맞춤
B. 기능 사이 연결두 기능이 공유 테이블로 값을 주고받음
기동 정보 공유운전 스케줄러 → 피크제어 · 규칙 + 통계
절전 해제 순차 복귀절전 → 운전 스케줄러 · 규칙
C. 새 기능제어를 바꾸지 않고 추가
피크 위험 예보알림 화면 · 지도학습
절감 효과 리포트리포트 · 집계
설치 설정 도우미설치 도구 · 규칙 계산 + LLM 설명
1
공통 틀
1-1
AI 값과 기본값, 그리고 기록
모든 아이디어는 같은 틀 위에 올라갑니다. AI(또는 데이터 학습)가 값을 만들고, 룰도 기존 방식으로 같은 값을 만듭니다. 둘 다 공유 테이블에 쓰고, 룰이 어느 쪽을 쓸지 정한 뒤 어느 쪽을 썼는지 기록합니다. AI가 멈추거나 이상한 값을 내도 기본값으로 계속 동작합니다.
그림 1. AI와 룰이 같은 값을 각자 만들고, 룰이 어느 쪽을 쓸지 정합니다. AI가 멈추거나 틀려도 룰 기본값으로 계속 동작하므로, AI는 "있으면 좋아지는 것"이지 "없으면 멈추는 것"이 아닙니다.
이 기록이 쌓이면 AI를 켜도 되는지 판단할 수 있고(그림자 단계 비교), 09번 리포트처럼 다른 분석의 재료로도 쓸 수 있습니다.
1-2
"AI"의 네 가지 수준
아이디어마다 필요한 기술 수준이 다릅니다. 모두가 딥러닝이나 강화학습을 필요로 하지는 않고, 대부분은 집계나 곡선 맞춤으로 충분합니다. 교수님 원칙(딥러닝 우선, 강화학습은 신중하게)에 따라 낮은 수준으로 되는 것은 낮은 수준으로 합니다.
수준
무엇인가
정답 데이터
해당 아이디어
규칙
사람이 정한 식과 조건
필요 없음
07, 10(계산 부분), 06(일부)
집계·곡선 맞춤
쌓인 기록의 평균·빈도를 내거나, 정해진 식의 계수를 데이터로 맞춤
측정값 그 자체
02, 04, 05, 06(학습 부분), 09
지도학습
입력과 정답이 짝지어진 과거 데이터로 예측 모델을 학습(회귀, 분위 회귀, Chronos 같은 시계열 모델)
과거에 실제로 일어난 값
01, 08
최적화 + 비용 학습
매 순간 정해진 식으로 최선의 조합을 풀고, 식의 계수(비용)를 운영 결과로 조금씩 고침
운영자 개입, 공정 경보
03
강화학습(선택)
시뮬레이터 안에서 시행착오로 정책을 학습
보상 함수
03의 장기 확장(교수님 2안)
1-3
학습이 필요한 아이디어의 공통 절차
데이터 저장학습에 쓸 해상도로 따로 저장(예: 총전력 10초 단위)
정답 만들기과거 기록에서 "그때 실제로 일어난 값"을 잘라 입력과 짝지음
오프라인 학습·시험앞 기간으로 학습, 뒤 기간으로 시험(백테스트)
그림자 운영AI 값을 기록만 하고 기본값과 같이 비교(2주 이상)
전환카드에 적은 기준을 넘으면 AI 값 사용
재학습·감시주 1회 재학습, 성능이 떨어지면 자동으로 기본값
학습은 서버의 AI 프로세스(지금 aiControlProc 계열이 도는 곳)에서 하고, 결과는 공유 테이블에 씁니다. 모델은 현장마다 따로 학습합니다. 실제 고객 현장 데이터가 아직 없으므로, 모든 학습 아이디어는 도입 후 2~4주 데이터가 쌓일 때까지 기본값으로 운영합니다. 확인
2
A. 기존 기능 안에서
01
남은 구간 예측기
A · 피크제어지도학습
잔여 허용량 계산(3층 문서 층 1)에서 "구간 끝까지 얼마나 쓸지"를 지금은 최근 3분 평균으로 잡습니다. 이걸 예측 모델로 바꿉니다.
지금은최근 3분 평균이 계속된다고 가정합니다. 공정 쪽에서 몇 분짜리 기동 피크가 생기면 계속될 부하로 보여 필요 이상으로 누릅니다(3층 문서 그림 6).
바꾸면요일·시각 패턴과 최근 흐름을 같이 보는 모델이 남은 시간의 평균을 예측합니다. 금방 끝날 피크와 계속될 부하를 구분합니다.
구현 상세
입력
최근 30분 비제어 부하(main − 제어 설비 합)를 10초 간격으로, 현재 구간 경과 초, 요일·시각, 공휴일 여부
출력
남은 시간 동안 비제어 부하의 평균 kW. 보통값(중앙값)과 넉넉한 값(90% 분위) 두 개
방법
1단계(통계): 같은 요일·같은 시각 구간들에서 "구간 중간 → 끝" 변화량의 중앙값을 표로 만들어 최근 평균에 더함. 학습이라기보다 표 만들기라 바로 시작 가능
2단계(지도학습): 위 입력으로 남은 평균을 맞히는 회귀 모델(예: LightGBM 분위 회귀). 또는 이미 쓰고 있는 Chronos로 남은 몇 분을 10초 단위로 예측해 평균
정답 데이터
과거 모든 구간의 모든 시점 t에 대해 "t부터 구간 끝까지 실제 비제어 부하 평균". 저장된 총전력에서 바로 잘라 만들 수 있음
학습 주기
현장별로 주 1회. 최소 2주 데이터부터 시작, 8주까지 늘림
켜는 기준
그림자 2주 동안 "구간 종료 평균" 예측 오차(MAE)가 최근 평균 방식보다 20% 이상 작고, 90% 분위 값이 실제를 넘는 비율이 85~95%일 때
쓰는 곳
P_end 계산에는 중앙값, 해제 판단(3층 5-3)에는 90% 분위 값을 써서 해제를 보수적으로
코드 위치(예상)
aiControlProc2(이미 다음 15분 예측을 함)를 확장해 결과를 공유 테이블에 쓰고, dataserver의 층 1 계산이 읽음 가정
남는 질문
지금 총전력은 1분 단위로만 보관되므로, 10초 단위 학습용 저장을 새로 시작해야 함. jems가 직접 켜는 기동은 여기서 예측하지 않고 06번으로 처리
02
설비 감축표 자동 생성
A · 피크제어집계·곡선 맞춤
설비를 누를 때마다 전후 kW를 기록해서, 설비별로 "가동률을 몇 %로 하면 몇 kW가 줄고 몇 초 걸리는지"를 표와 식으로 만듭니다. 03번의 핵심 재료입니다.
지금은제한값을 쓰고 쓰기 성공만 확인합니다. 실제로 몇 kW가 줄었는지 모릅니다 확인.
바꾸면설비마다 감축 곡선과 응답 시간이 생깁니다. 제어 여력 C, 복귀 kW(3층 5-3), 03번의 조합 고르기가 이 값을 씁니다.
구현 상세
입력
제어 이벤트(설비, 가동률 변경 전→후, 시각)와 설비 kW 1초 값
출력
설비별 ① 감축 비율 곡선: 가동률 r → 직전 대비 kW 비율, ② 응답 시간 τ(변화의 90%에 닿는 시간), ③ 곡선 지수 m
방법
이벤트마다 직전 10초 평균 kW와 60초 뒤 10초 평균 kW로 감축 비율 = 뒤 ÷ 직전을 계산
같은 시간에 다른 설비가 바뀌었거나, 직전 1분 동안 kW가 크게 흔들린 이벤트는 제외(공정 변화가 섞인 경우)
최근 이벤트를 따로 떼어 둔 시험에서, 곡선으로 예측한 감축과 실제 감축의 차이가 중앙값 기준 15% 이내
코드 위치(예상)
D1010을 쓰는 지점(emsPlcClient)에서 이벤트를 남기고, units_data의 설비 kW와 D1020(PLC가 최종으로 건 Hz)으로 결과를 붙여 새 테이블에 저장 가정
남는 질문
누르는 동안 공정 요구가 바뀐 이벤트가 섞일 수 있어 편차를 같이 봐야 함. 계측기가 없는 설비는 만들 수 없음
03
설비·가동률 자동 결정
A · 피크제어최적화 + 비용 학습
"지금 얼마를 줄여야 하는데, 어느 설비를 몇 %로 누를까"를 매 간격 계산으로 정합니다. 사람이 레벨별 행을 짜는 대신, 설비마다 비용(누르면 생산에 주는 부담)만 정해 두면 조합은 계산이 고릅니다. 3층 문서 10장 B를 실제로 돌리는 방법입니다.
지금은사람이 레벨마다 어느 설비를 몇 %로 누를지 행으로 등록합니다. 현장마다 감으로 정하고, 설비 특성(가동률을 같이 내려도 정토크 설비는 팬류보다 덜 줄어듦)이나 실제 감축량은 반영되지 않습니다.
바꾸면필요 감축량(ΔP), 설비별 감축량(02), 설비별 비용을 넣으면 "비용 대비 감축이 큰 단계부터" 골라 필요량을 채웁니다. 비용은 운영 결과(운영자가 수동으로 푼 설비, 공정 경보)를 보고 조금씩 고쳐집니다.
그림 2. 매 간격 도는 결정 순환입니다. 실행 결과는 감축표(02)를 고치고, 운영자 개입과 공정 경보는 비용을 고칩니다. 실행 전 룰 검사는 그대로 남습니다.
구현 상세
설비 등록값
설비마다 한 번: 허용 가동률 단계(예: 100 → 85 → 74 → 62 → 51%), 하한, 비용 등급(A 눌러도 됨 / B 짧게만 / C 가급적 안 누름), 최대 연속 제한 시간
입력(매 간격)
ΔP(층 1 계산), 설비별 현재 가동률과 kW, 02번 감축 곡선, 설비별 현재 비용
출력
설비별 목표 가동률(이번 간격에 바꿀 것은 한 단계까지)
방법
설비마다 "지금보다 한 단계 더 누르면" 줄어드는 kW를 02번 곡선으로 계산
그 단계의 비용 = 비용 등급 가중치(A 1, B 2, C 5) × 깊이 가중치 × 이미 누른 시간 가중치
줄어드는 kW ÷ 비용이 가장 큰 단계를 고르고, 그 설비의 다음 단계를 후보에 다시 넣음
고른 단계들의 감축 합이 ΔP × (1 + 여유)에 닿을 때까지 반복
하한, 최대 연속 제한 시간, 변경 제한, 해제 확인(3층 5-3)을 룰로 검사한 뒤 실행
설비가 20대 이하, 단계가 5개 정도라 매 간격 계산해도 부담이 없습니다. 더 정확히 하려면 같은 문제를 배낭 문제로 풀어 최적 조합을 구할 수도 있습니다.
비용 학습
비용 등급은 처음 값일 뿐이고, 운영 중 아래 신호로 고칩니다.
운영자 수동 해제·제외: 그 설비·그 깊이의 비용을 1.2배
공정 경보(압력 저하, 차압 상승, 온도 이탈 등 해당 설비에 연결된 신호): 1.5배
아무 일 없이 끝난 제어: 조금씩 원래 값 쪽으로 되돌림(예: 하루 2%)
정답 데이터가 "운영자 개입과 경보 기록"이므로, 화면에 "이 설비 제어 해제/제외" 버튼과 그 이유 기록이 있어야 합니다.
켜는 기준
그림자 2주 동안 03번이 고른 조합을 기록만 하고, 실제 운영(레벨별 행) 대비 ① 15분 초과가 늘지 않고 ② 예상 감축 kWh 대비 생산 부담(비용 합)이 줄었을 때
코드 위치(예상)
get_control_candidates·runControlUnit의 후보 선정 부분을 이 계산으로 교체. 등록 화면(optctlpower)에 설비 단위 등록 추가 가정
남는 질문
비용 등급의 초기값은 현장 담당자가 정해야 함(10번 도우미가 질문으로 받음). 공정 경보 신호가 없는 현장은 운영자 개입만으로 학습하므로 느림
예시: 25kW를 줄여야 할 때
순서
후보(다음 한 단계)
줄어드는 kW
비용
kW ÷ 비용
누적
1
집진기(팬, 60kW) 100 → 85%
9.0
1
9.0
9.0
2
집진기 85 → 74%
6.6
1
6.6
15.6
3
블로어(팬, 40kW) 100 → 85%
6.0
1
6.0
21.6
4
블로어 85 → 74%
4.4
1
4.4
26.0 → 멈춤
—
압축기(정토크, 60kW) 100 → 85%
3.2
1
3.2
선택 안 됨
—
펌프(팬, 30kW, 등급 B) 100 → 85%
4.5
2
2.3
선택 안 됨
가동률이 전력 비율이라 팬류는 내린 만큼 kW가 줄어 먼저 뽑히고, 압축기는 같은 15%를 걸어도 Hz가 60 → 56.8로만 내려가 3.2kW만 줄어 뒤로 밀립니다. 결과는 집진기 74%, 블로어 74%입니다. 감축량은 60Hz 정상 운전에서 시작한다고 본 계산이고, 02번 표가 쌓이면 실측값으로 바뀝니다.
강화학습이 필요할 때 — 교수님 2안 (장기, 선택)
위 방법은 "지금 이 간격"만 보고 고릅니다. 구간 초반에 얕게 미리 누를지, 나중에 세게 누를지처럼 시간에 걸친 판단까지 최적화하고 싶을 때 강화학습을 검토합니다. 그 경우에도 실제 설비로 시행착오를 하지 않고, 아래처럼 시뮬레이터 안에서만 학습합니다.
시뮬레이터: 과거 15분 구간의 실제 부하를 다시 틀고, 설비 응답은 02번 감축 곡선과 응답 시간으로, 비제어 부하 변화는 01번 예측의 오차 분포로 만듦
상태: 구간 경과 시간, 남은 허용량 E_r, 예측 P_예측, 설비별 현재 단계와 마지막 변경 시각
행동: 설비별 "한 단계 내림 / 유지 / 한 단계 올림". 하한·변경 제한을 어기는 행동은 아예 고를 수 없게 막음
보상: −(15분 초과 kWh × 큰 가중치) − (생산 부담 비용 합) − (변경 횟수 × 작은 가중치)
학습: 과거 구간 수천 개를 에피소드로 PPO나 DQN 같은 알고리즘으로 오프라인 학습
평가와 적용: 시뮬레이터에서 위의 최적화 방식보다 나은지 먼저 보고, 실제 현장에서는 그림자로 추천만 기록. 나을 때만 추천값으로 쓰고, 룰 검사는 항상 거침
최소 수개월치 제어 결과 데이터가 있어야 시뮬레이터가 현실과 비슷해지므로, 01·02·03이 자리 잡은 뒤의 과제입니다.
04
절전 스케줄 자동 추천
A · 절전 스케줄러통계
설비가 실제로 언제 돌고 언제 쉬는지 이력으로 절전 스케줄 초안을 만듭니다. 사람은 승인하고 예외만 등록합니다.
지금은요일·시간대별 절전 구간을 사람이 전부 등록합니다. 한 번 정하면 그대로 갑니다.
바꾸면설비별·요일별·시간대별로 "실제로 일하고 있던 비율"을 계산해 거의 쉬는 시간대를 절전 후보로 제안하고, 매주 갱신합니다. 야근·특근은 사람이 등록하고 룰이 우선합니다.
구현 상세
입력
최근 4~8주 설비별 1분 kW, 공휴일·근무 캘린더
출력
설비 × 요일 × 15분 칸마다 절전 후보 여부와 신뢰도, 그리고 지금 스케줄과의 차이
방법
설비별 kW 분포를 세 덩어리(정지 / 무부하 / 일하는 중)로 나눠 "일하는 중"의 기준 kW를 자동으로 정함
칸마다 "일하는 중"이었던 비율 p를 주차별로 계산
p가 10% 미만인 칸이 1시간 이상 이어지면 절전 후보. 평소 가동 시작 15분 전은 예열 여유로 제외
후보를 묶어 시간대로 만들고, 지금 스케줄과 다른 곳만 "추천"으로 표시
정답 데이터
과거 실제 가동 여부(kW로 판정). 학습 모델 없이 빈도 계산
켜는 기준
추천만 표시해 승인받는 단계에서 2주 동안 "절전 중 가동이 필요해 해제된 횟수"가 1회 이하이면 자동 갱신으로 전환
덤으로 나오는 것
생산이 없는 시간에 "무부하"로 도는 시간 × kW = 공회전 낭비 kWh, 주말에 압축기가 주기적으로 돌면 배관 누설 후보. 09번 리포트에 넣음
코드 위치(예상)
절전 스케줄 등록 화면에 "추천" 영역 추가, 계산은 서버 배치 작업 가정
남는 질문
생산 일정이 매주 바뀌는 현장은 p가 애매해져 추천이 적게 나옴. 그런 현장은 승인 방식으로 유지
05
시운전 자동 진단
A · 부하적응곡선 맞춤
부하적응 설비를 설치할 때 Hz를 몇 단계 바꿔 보며 kW와 토크를 재서, 설비 유형과 Hz 범위를 자동으로 제안합니다.
지금은Hz 범위와 보정상수를 사람이 현장에서 계측하며 정합니다. 블로어와 컴프레서는 부하에 따라 토크가 반대로 움직여서 유형을 잘못 알면 제어 방향이 틀립니다 확인.
바꾸면"자동 진단"을 누르면 정해진 순서로 Hz를 바꾸며 측정하고, 결과로 유형·Hz 범위·응답 시간을 제안합니다. 담당자가 확인해 저장합니다.
그림 3. 네 점만 재도 곡선의 모양(지수)이 드러납니다.
구현 상세
입력
진단 중 측정한 Hz, kW, 인버터 토크(1초)
출력
설비 유형(팬류 / 정토크 / 판단 보류), 지수 n, Hz 범위 제안, 응답 시간 τ
방법
Hz를 60 → 54 → 48 → 42Hz로 바꾸며 단계마다 kW·토크가 안정될 때까지 대기(변화가 10초 동안 1% 이내)
ln(kW ÷ kW60) = n × ln(Hz ÷ 60)로 n을 구함. n > 2.2면 팬류, n < 1.5면 정토크, 그 사이는 판단 보류로 담당자에게 확인 요청
각 단계로 바뀐 순간부터 안정까지의 시간으로 τ를 구함
토크 방향(부하가 늘 때 토크가 줄어드는지)은 담당자가 댐퍼나 밸브를 한 번 바꿔 줄 수 있을 때만 측정하고, 못 하면 유형 기본값을 씀
토크가 불안정해지기 시작하는 Hz 바로 위를 하한으로 제안
정답 데이터
측정값 그 자체(학습 모델 없음)
쓰는 곳
부하적응 설정값, 그리고 설비 정보에 저장해 02번(초기 곡선), 03번(유형), 10번(제어 여력 계산)이 씀
코드 위치(예상)
부하적응 설정 화면에 진단 버튼, adaptiveControl의 Hz 지령 경로를 진단 모드로 사용 가정
남는 질문
진단 중 설비 속도를 바꾸므로 생산 영향이 없는 시간에 담당자 입회로만 실행. 보정상수는 공정 목표값을 알아야 해서 여전히 사람이 정함
3
B. 기능 사이 연결
교수님이 말씀하신 "피크제어와 운전 스케줄러 통합"을 기능을 합치지 않고 시작하는 방법입니다. 두 기능은 지금처럼 따로 두고 공유 테이블로 정보만 주고받습니다. 기동 스파이크는 누가 켰느냐로 나눕니다. jems가 켠 기동(운전 스케줄러, 절전 해제)은 jems가 이미 알므로 알려 주기만 하면 되고(06·07), jems가 모르는 기동(비제어 설비, 공정 쪽)은 01번이 예측합니다.
06
기동 정보 공유
B · 운전 스케줄러 → 피크제어규칙 + 통계
운전 스케줄러가 설비를 켜기 직전에 기동 예정 정보를 공유 테이블에 쓰고, 피크제어는 그 정보를 보고 판단합니다.
지금은피크제어는 스케줄러가 무엇을 켰는지 모릅니다. 순간값 방식은 돌입 몇 초 동안 임계를 넘은 것처럼 보여 다른 설비를 누를 수 있고, 잔여 허용량 방식은 켜진 설비의 정상 부하를 최근 평균이 따라잡을 때까지 몇 분 동안 과소 예측합니다.
바꾸면돌입은 "잠깐 쓰는 에너지"로만 계산하고, 정상 부하는 켜는 순간부터 예측에 더합니다.
그림 4. 5분에 jems가 설비를 켜는 경우. 최근 평균(주황 점선)은 늘어난 부하를 3분에 걸쳐 늦게 따라가고, 기동 정보를 반영한 예측(청록)은 켜는 순간 맞춰집니다.
구현 상세
주고받는 값
설비 번호, 기동 시각, 예상 돌입 최대 kW, 돌입 지속 초, 예상 정상 부하 kW, 값의 출처(학습값 / 기본값)
피크제어 쪽 계산
P_end = (지금까지 kWh + 남은 돌입 에너지 + (기존 예측 + 정상 부하) × 남은 시간) ÷ 0.25h. 남은 돌입 에너지는 (돌입 최대 − 정상 부하) × 남은 돌입 초 ÷ 2 ÷ 3600으로 근사
학습(통계)
설비별 과거 기동 이력에서 ① 돌입 최대 kW, ② 정상 부하보다 10% 이상 높았던 시간, ③ 기동 2~5분 뒤 kW 중앙값을 뽑고, 최근 10회 기동의 중앙값을 씀. 이력이 없으면 정격 기준 기본값
켜는 기준
기동 전후 5분 동안 P_end 예측 오차가 정보 공유 없이 계산했을 때보다 작을 때
3층 문서와의 관계
켜기 전에는 스케줄러가 3층 5-5의 기동 허용 조건(E_r)을 보고, 켠 뒤에는 피크제어가 이 정보를 씀. 두 식이 같은 돌입·정상 부하 값을 공유
코드 위치(예상)
스케줄러 기동 처리부(smartScheduler.runUnits)에서 쓰고, dataserver의 층 1 계산이 읽음 가정
남는 질문
스케줄러 밖에서 사람이 수동으로 켠 기동은 알 수 없으므로 01번이 처리
07
절전 해제 순차 복귀
B · 절전 → 운전 스케줄러규칙
절전 시간이 끝날 때 여러 설비가 동시에 돌아오며 생기는 스파이크를 운전 스케줄러의 순차 기동 방식으로 나눠 복귀시킵니다.
지금은절전이 끝나는 시각(예: 08:00)에 해당 설비가 한꺼번에 돌아옵니다. 15분 구간이 막 시작되는 정각과 겹쳐 그 구간 초반에 부하가 몰립니다 가정.
바꾸면절전 스케줄러는 복귀할 설비 목록만 운전 스케줄러에 넘기고, 운전 스케줄러가 순서·간격과 기동 허용 조건으로 하나씩 복귀시킵니다. 복귀할 때도 06번처럼 정보를 공유합니다.
구현 상세
방법
절전 종료 시각에 복귀 대상 목록을 운전 스케줄러 대기열에 넣음
복귀 순서: 처음엔 등록 순번, 06번 학습값이 생기면 정상 부하가 큰 설비를 구간 초반에 배치
각 복귀는 3층 5-5의 기동 허용 조건을 통과해야 진행. 통과하지 못하면 다음 구간 초반으로 미룸(최대 지연 시간 설정)
학습
별도 학습 없음. 06번의 정상 부하 학습값을 재사용
켜는 기준
절전 해제 직후 첫 15분 구간 평균이 순차 복귀 전보다 낮아지고, 복귀 완료까지의 지연이 허용 범위 안일 때
코드 위치(예상)
절전 스케줄 종료 처리부와 운전 스케줄러 대기열 사이에 연결 추가 가정
남는 질문
절전 해제 시 PLC가 "최소 가동 → 정상"인지 "정지 → 기동"인지 먼저 확인 필요. 최소 가동이면 스파이크가 작아 효과도 작음
4
C. 새 기능
제어 로직은 건드리지 않고 화면·리포트·도구로 추가합니다. 설비에 영향이 없어 위험이 가장 낮습니다.
08
피크 위험 예보
C · 알림 화면지도학습
다음 1~2시간의 15분 구간마다 피크 위험도를 미리 보여 주고 원인이 될 만한 설비를 표시합니다. 사람이 생산 일정을 미리 조정할 수 있습니다.
구현 상세
입력
15분 평균 이력, 요일·시각·공휴일, 예정된 일정(운전 스케줄 기동, 절전 해제 시각과 06번 정상 부하 학습값)
출력
앞으로 8개 구간 각각의 예상 평균 kW(중앙값, 90% 분위)와 "주의 임계를 넘을 확률", 원인 후보(그 구간에 예정된 기동)
방법
기본: 같은 요일·같은 시각 구간 평균의 중앙값에 최근 편차를 보정
여기에 예정 일정의 정상 부하를 겹친 시간만큼 더함
지도학습: 위 입력으로 구간 평균을 맞히는 분위 회귀 모델(LightGBM 등), 또는 Chronos 다단계 예측. 분위 값으로 넘을 확률을 계산
정답 데이터
과거 각 구간의 실제 15분 평균(이미 저장 중)
켜는 기준
그림자 4주 동안 "위험 30%로 예보한 구간이 실제로 넘은 비율이 30% 근처"(확률이 믿을 만한지)이고, 실제로 넘은 구간을 1시간 전에 위험으로 예보한 비율이 70% 이상
코드 위치(예상)
AI 프로세스에서 계산해 공유 테이블에 쓰고, 웹 화면(peak15minmonitoring 계열)에 표시 가정
남는 질문
1~2시간 앞은 정확도가 떨어지므로 위험도와 신뢰도를 같이 표시해야 함
09
절감 효과 리포트
C · 리포트집계
공통 틀에 쌓인 기록으로 "제어 덕분에 무엇이 달라졌는지"를 월간 리포트로 자동 정리합니다. 아직 납품 실적이 없는 단계라 영업과 외부 실증(5% 목표)에 가장 필요한 숫자입니다.
구현 상세
계산 항목
회피한 피크: 구간마다 Σ(설비 감축 kW × 제어 시간) ÷ 900초(02번 감축표 사용) = "제어가 없었다면" 평균과 실제 평균의 차이
방어한 구간 수: "제어가 없었다면" 목표를 넘었는데 실제로는 안 넘은 구간
절전 절감 kWh: 절전 시간대마다 (같은 요일·시각의 평소 kW − 실제 kW) × 시간
공회전·누설 낭비: 04번에서 나온 값
AI 효과: 공통 틀 기록으로 "AI 값을 쓴 구간 / 기본값을 쓴 구간"의 지표 비교
학습
없음(집계)
기준선
실증용으로는 "제어가 없었다면" 추정 대신, 도입 전후 비교(생산량·기온 보정) 또는 날짜를 번갈아 제어 ON/OFF 하는 방식 중 하나를 미리 정해야 함
코드 위치(예상)
서버 월간 배치로 집계해 리포트 화면과 PDF 내보내기 가정
남는 질문
"제어가 없었다면"은 추정값이라, 기준선 방식을 문서로 정해 두지 않으면 숫자의 신뢰도를 설명하기 어려움
10
설치 설정 도우미
C · 설치 도구규칙 계산 + LLM 설명
설치 시점에는 운영 데이터가 없으므로, 현장 정보로 첫 설정값을 계산해 줍니다. 설치 후 데이터가 쌓이면 03번이 이어받아 계속 고칩니다. LLM은 계산하지 않고 "왜 이 값인지"만 설명합니다.
지금은설정을 사람이 하나씩 입력합니다. 간격 기본값 3600초를 그대로 두거나, 정상가동률을 피크 행 값보다 낮게 넣어도 막는 검증이 없습니다(11/6 정정: 한 설비를 여러 정책에 등록하는 것은 정상이며, 매초 우선순위로 하나만 적용됨) 확인.
바꾸면입력한 현장 정보로 적용전력·임계·간격·설비별 단계와 비용 등급 초안을 계산하고, 실수는 룰로 경고합니다.
구현 상세 — 계산 순서
입력
계약전력, 최근 12개월 최대수요, 목표 피크, 설비 목록(정격 kW, 평소 부하율, 유형은 05번 진단 결과 또는 입력, 공정상 최저 가동률, 연속 제한 허용 시간, 비용 등급 A/B/C), 근무 캘린더
① 적용전력
담당자가 고른 목표 피크(예: 최근 12개월 최대의 95%)
② 제어 여력
설비마다 평소 kW × (1 − 최저 가동률n), 합계 C. 화면에 "C는 목표의 ○%, 이만큼 넘치는 구간까지 막을 수 있음"으로 표시. 목표의 3% 미만이면 "방어력 부족" 경고
③ 간격
설비 응답 시간 τ(05번 진단, 없으면 30초) 이상, 60초 이하. 3600초는 허용하지 않음
④ 임계
단계를 모두 올리는 데 걸리는 시간 T = 단계 수 × 간격 + 반영 지연과, 과거 고지서·계측으로 본 최대 초과폭 O로 필요한 마진을 계산: 마진 = (O − 100) × T ÷ (15분 − T). 예: 4단계 × 30초 + 30초 = 2.5분, O = 110%면 마진 2% → 위기 임계 98%(마진이 갚아 줄 수 있는 초과 지속시간 15분 × 마진 ÷ (초과폭 + 마진)을 거꾸로 푼 것)
⑤ 설비 단계·순서
03번 방식이면 설비별 단계와 비용 등급만 저장. 기존 레벨별 행 방식이면 비용 등급 A부터, 같은 등급 안에서는 첫 단계 감축 kW가 큰 설비(팬류)부터 배치해 레벨 1·2·3의 누적 감축이 각각 C의 약 ⅓·⅔·전부가 되게 행을 만듦
⑥ 검사 규칙
간격 3600초, 정상가동률 < 피크 행 값, 행 가동률 < 최저 가동률, 레벨 1 누적 감축이 0인 경우를 경고. 여러 정책에 등록된 설비는 경고 대상이 아니고, 어떤 순서로 적용되는지 안내만 함(11/6 정정)
⑦ LLM 설명
①~⑥의 계산값과 근거를 정해진 형식으로 넘기면 LLM이 담당자용 설명문을 씀. 숫자는 바꾸지 못하게 계산값을 그대로 인용하도록 함
학습
없음(설치 시점엔 데이터가 없음). 설치 2주 뒤 02·05번 실측값으로 ②~⑤를 다시 계산해 갱신 제안
코드 위치(예상)
설정 화면(optctlpower)에 "설정 도우미" 단계 추가, 계산은 서버 가정
남는 질문
비용 등급과 최저 가동률은 현장 담당자만 알 수 있어 질문 형식으로 받아야 함. 최대 초과폭 O를 고지서로 알 수 없으면 기본값(예: 110%)으로 시작
5
무엇부터 할까
단계
아이디어
이유
바로
공통 틀 기록 · 02 감축표(기록부터) · 10의 검사 규칙(⑥) · 01의 1단계(통계 표)와 학습용 10초 저장
지금 수집 중인 데이터와 코드로 시작 가능. 설비에 영향 없음
다음
04 절전 추천 · 06 기동 정보 공유 · 09 리포트 · 10 계산(①~⑤)
이력만 있으면 되거나 작은 연결 하나
그다음
03 설비·가동률 자동 결정(그림자부터) · 01의 2단계(지도학습) · 05 시운전 진단 · 08 위험 예보 · 07 순차 복귀
03은 02의 감축표가, 01 2단계와 08은 수주치 학습 데이터가, 05는 설치 절차가, 07은 PLC 복귀 동작 확인이 먼저 필요
장기
03의 강화학습 확장
수개월치 제어 결과로 시뮬레이터를 만든 뒤
3층 문서와의 관계로 보면, 01·02·06은 잔여 허용량 계산을 정확하게 만들고, 02·03·05는 위기 단계 자동화(3층 10장)를 실제로 돌리는 부분입니다. 나머지(04, 07~10)는 3층 문서와 독립적으로 진행할 수 있습니다.
한 줄로
핵심은 03 "어느 설비를 몇 %로 누를지"를 계산으로 정하는 것이고, 01(예측)과 02(감축표)가 그 재료를 만듭니다. 대부분은 집계와 곡선 맞춤으로 시작할 수 있고, 강화학습은 데이터가 충분히 쌓인 뒤 시뮬레이터 안에서만 학습합니다.