정보통신기술(ICT)

에너지 제어 시뮬레이선 파이썬 코드

해머슴 2024. 11. 16. 11:37
import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
import matplotlib as mpl

# 한글 폰트 설정 (맑은 고딕 사용)
mpl.rcParams['font.family'] = 'Malgun Gothic'
mpl.rcParams['axes.unicode_minus'] = False  # 음수 기호 표시 문제 해결

# 에너지 제어 알고리즘 (간단한 부하 분산 예제)
def energy_control(input_value):
    # 에너지 흐름 시뮬레이션 (단순화)
    grid_capacity = 100  # 그리드 최대 용량 (단위: MW)
    energy_usage = np.linspace(0, grid_capacity, 100)
    control_output = np.clip(grid_capacity - (energy_usage * input_value / 100), 0, grid_capacity)
    return energy_usage, control_output

# GUI 생성
class EnergyControlApp:
    def __init__(self, root):
        self.root = root
        self.root.title("에너지 제어 장치 시뮬레이션")
       
        # 입력 필드
        self.label = ttk.Label(root, text="부하 증가율 (%):")
        self.label.grid(row=0, column=0, padx=10, pady=10)
        self.input_field = ttk.Entry(root, width=10)
        self.input_field.grid(row=0, column=1, padx=10, pady=10)
        self.input_field.insert(0, "50")  # 기본값 설정
       
        # 버튼
        self.plot_button = ttk.Button(root, text="그래프 표시", command=self.plot_graph)
        self.plot_button.grid(row=0, column=2, padx=10, pady=10)
       
        # 그래프 출력 영역
        self.figure = plt.Figure(figsize=(6, 4), dpi=100)
        self.ax = self.figure.add_subplot(111)
        self.canvas = FigureCanvasTkAgg(self.figure, root)
        self.canvas.get_tk_widget().grid(row=1, column=0, columnspan=3, padx=10, pady=10)
   
    def plot_graph(self):
        # 입력값 확인
        try:
            input_value = float(self.input_field.get())
        except ValueError:
            self.label.config(text="유효한 숫자를 입력하세요!")
            return
       
        # 에너지 제어 데이터 생성
        energy_usage, control_output = energy_control(input_value)
       
        # 그래프 그리기
        self.ax.clear()
        self.ax.plot(energy_usage, control_output, label="에너지 잔여 용량", color="blue")
        self.ax.set_title("에너지 제어 시뮬레이션", fontsize=14, fontweight='bold')
        self.ax.set_xlabel("에너지 사용량 (MW)", fontsize=12)
        self.ax.set_ylabel("잔여 용량 (MW)", fontsize=12)
        self.ax.legend(loc="upper right", fontsize=10, title="설명")
        self.ax.grid()
        self.canvas.draw()

# 애플리케이션 실행
if __name__ == "__main__":
    root = tk.Tk()
    app = EnergyControlApp(root)
    root.mainloop()