Pandas를 사용하여 산업 플랜트에 대한 무작위 가동 중단 시뮬레이션 최적화

Python

정전 시뮬레이션 효율성 향상

산업 플랜트의 무작위 가동 중단을 시뮬레이션하는 것은 최적의 운영 계획과 위험 관리를 보장하는 데 중요한 작업입니다. 각 플랜트는 온라인이거나 오프라인일 수 있으며 이러한 가용성을 나타내는 시계열 데이터를 생성하는 것은 계산적으로 까다로울 수 있습니다. 전통적으로 기본 Python을 사용하여 기하학적 분포에서 일련의 중단 기간과 중단 간격을 그리는 것이 일반적인 접근 방식입니다.

그러나 이를 여러 공장으로 확장하면 프로세스가 느려지고 비효율적이 됩니다. 이 기사에서는 Pandas를 활용하여 시뮬레이션 속도를 높이고 강력한 데이터 조작 기능을 활용하여 이러한 시계열 데이터세트 생성을 간소화할 수 있는 방법을 살펴봅니다.

명령 설명
pd.date_range() 지정된 시작 날짜와 종료 날짜 사이의 날짜 범위를 생성합니다.
np.log() 기하학적 분포 표본을 생성하는 데 사용되는 입력의 자연 로그를 계산합니다.
random.random() 무작위 확률을 생성하는 데 사용되는 0.0과 1.0 사이의 무작위 부동 소수점 숫자를 반환합니다.
math.floor() float를 정수로 변환하는 데 사용되는 지정된 값보다 작거나 같은 가장 큰 정수를 반환합니다.
math.ceil() 가장 가까운 정수로 반올림하는 데 사용되는 지정된 값보다 크거나 같은 가장 작은 정수를 반환합니다.
pd.DataFrame() 표 형식의 데이터를 구성하고 조작하는 데 사용되는 사전에서 DataFrame 개체를 만듭니다.
extend() 여러 중단 상태를 한 번에 추가하는 데 사용되는 여러 항목을 목록 끝에 추가합니다.
datetime() 시뮬레이션 시작 및 종료 날짜를 정의하는 데 사용되는 특정 날짜 및 시간을 나타냅니다.

Pandas를 사용한 간소화된 공장 가동 중단 시뮬레이션

위의 스크립트는 Pandas를 사용하여 여러 산업 플랜트의 무작위 중단을 효율적으로 시뮬레이션하는 방법을 보여줍니다. 주요 목표는 온라인(1) 또는 오프라인(0)에서 각 플랜트의 가용성을 반영하는 시계열 데이터를 생성하는 것입니다. 처음에는 시뮬레이션 기간을 다음과 같이 정의합니다. 시작 날짜와 종료 날짜를 나타내는 객체입니다. 평균 정전 기간 및 평균 오프라인 시간 비율과 같은 상수도 설정됩니다. 이 값을 사용하여 기하학적 분포에 대한 매개변수를 계산합니다. 그리고 , 이는 임의의 간격을 생성하는 데 도움이 됩니다. 시뮬레이션의 핵심은 각 발전소의 정전 데이터를 생성하는 루프입니다. 이 루프 내에서 우리는 그리고 정전 기간과 정전 간 간격에 대한 샘플을 추출합니다. 그런 다음 이러한 샘플을 사용하여 각 공장의 상태를 매일 업데이트합니다. 플랜트가 오프라인인 경우 가동 중단 기간 동안 상태는 0으로 설정됩니다. 그렇지 않으면 1로 설정됩니다. 이 프로세스는 시뮬레이션 기간이 끝날 때까지 반복됩니다. 각 플랜트에 대해 생성된 상태 데이터는 Pandas DataFrame에 저장되므로 효율적인 데이터 조작 및 분석이 가능합니다.

두 번째 스크립트는 다음과 같은 함수에 논리를 캡슐화하여 중단 데이터 생성을 최적화합니다. . 이 함수는 동일한 단계를 따르지만 더 모듈화되고 재사용이 가능하여 더 깔끔하고 유지 관리하기 쉬운 코드가 가능합니다. 이 기능은 단일 플랜트의 가용성 상태를 생성하고 시뮬레이션 기간 동안 플랜트의 상태를 나타내는 목록을 반환합니다. 여러 플랜트에 대한 루프 내에서 이 함수를 호출하여 DataFrame을 각 플랜트의 중단 데이터로 채웁니다. 사용 일련의 날짜를 생성하고 데이터를 정리하면 시뮬레이션이 효율적이고 이해하기 쉬워집니다. 최종 DataFrame은 추가 분석이나 시각화에 사용될 수 있으며 산업 플랜트의 가용성 패턴에 대한 귀중한 통찰력을 제공합니다.

Pandas를 사용하여 공장 가동 중단 시뮬레이션 최적화

Python - 효율적인 시계열 시뮬레이션을 위해 Pandas 사용

import pandas as pd
import numpy as np
import random
import math
from datetime import datetime, timedelta

# Constants
SIMULATION_START_DATE = datetime(2024, 1, 1)
SIMULATION_END_DATE = datetime(2025, 1, 1)
mean_outage_duration = 3
mean_fraction_offline = 0.05

# Simulation Parameters
days_in_simulation = (SIMULATION_END_DATE - SIMULATION_START_DATE).days
outage_length_mu = -1 / mean_outage_duration
between_outages_mu = -1 / (days_in_simulation * mean_fraction_offline)

# DataFrame to hold the time-series data
plants = 10  # Number of plants
data = pd.DataFrame({'day': pd.date_range(start=SIMULATION_START_DATE, end=SIMULATION_END_DATE)})
for plant in range(plants):
    status = []
    sum_of_days = 0
    while sum_of_days < days_in_simulation:
        outage_length = math.floor(np.log(1 - random.random()) / outage_length_mu)
        days_until_next_outage = math.ceil(np.log(1 - random.random()) / between_outages_mu)
        if random.random() > mean_fraction_offline:
            days_until_next_outage = 0
        sum_of_days += days_until_next_outage
        for _ in range(days_until_next_outage):
            if sum_of_days >= days_in_simulation:
                break
            status.append(1)
            sum_of_days += 1
        for _ in range(outage_length):
            if sum_of_days >= days_in_simulation:
                break
            status.append(0)
            sum_of_days += 1
    data[f'plant_{plant}'] = status[:days_in_simulation]

print(data.head())

발전소 가동 중단에 대한 효율적인 시계열 생성

Python - 더 나은 성능을 위해 Pandas로 최적화

import pandas as pd
import numpy as np
import random
from datetime import datetime, timedelta

# Constants
SIMULATION_START_DATE = datetime(2024, 1, 1)
SIMULATION_END_DATE = datetime(2025, 1, 1)
mean_outage_duration = 3
mean_fraction_offline = 0.05

# Simulation Parameters
days_in_simulation = (SIMULATION_END_DATE - SIMULATION_START_DATE).days
outage_length_mu = -1 / mean_outage_duration
between_outages_mu = -1 / (days_in_simulation * mean_fraction_offline)

# Function to generate a single plant's outage data
def generate_outages():
    status = []
    sum_of_days = 0
    while sum_of_days < days_in_simulation:
        outage_length = math.floor(np.log(1 - random.random()) / outage_length_mu)
        days_until_next_outage = math.ceil(np.log(1 - random.random()) / between_outages_mu)
        if random.random() > mean_fraction_offline:
            days_until_next_outage = 0
        sum_of_days += days_until_next_outage
        status.extend([1] * min(days_until_next_outage, days_in_simulation - sum_of_days))
        sum_of_days += outage_length
        status.extend([0] * min(outage_length, days_in_simulation - sum_of_days))
    return status[:days_in_simulation]

# Generate DataFrame for multiple plants
plants = 10
data = pd.DataFrame({'day': pd.date_range(start=SIMULATION_START_DATE, end=SIMULATION_END_DATE)})
for plant in range(plants):
    data[f'plant_{plant}'] = generate_outages()

print(data.head())

고급 Pandas 기술로 중단 시뮬레이션 최적화

Pandas를 사용한 기본 시계열 시뮬레이션 외에도 프로세스를 더욱 최적화할 수 있는 몇 가지 고급 기술과 기능이 있습니다. 그러한 기술 중 하나는 개별 요소를 반복하는 대신 전체 배열에 대한 작업을 수행하는 벡터화입니다. Pandas의 벡터화된 작업을 활용함으로써 중단 시뮬레이션 프로세스의 속도를 크게 높일 수 있습니다. 이 접근 방식은 Python 루프의 오버헤드를 줄이고 Pandas의 내부 최적화를 최대한 활용합니다. 또 다른 중요한 측면은 대규모 데이터 세트를 효율적으로 처리하는 것입니다. 장기간에 걸쳐 수많은 플랜트에 대한 시뮬레이션을 처리할 때는 메모리 관리가 필수적입니다. 공장 상태에 대한 Pandas의 범주형 데이터 유형과 같이 메모리를 덜 소비하는 데이터 유형을 활용하면 성능이 크게 향상될 수 있습니다. 또한 데이터 세트가 더 작은 청크로 처리되는 청킹과 같은 기술을 사용하면 메모리 사용량을 효과적으로 관리하고 시뮬레이션 중에 잠재적인 메모리 오버플로 문제를 방지하는 데 도움이 될 수 있습니다.

또한 NumPy 및 SciPy와 같은 다른 라이브러리를 통합하면 중단 시뮬레이션의 기능과 성능을 향상시킬 수 있습니다. 예를 들어, NumPy의 무작위 샘플링 기능은 고도로 최적화되어 있으며 중단 기간과 간격을 보다 효율적으로 생성하는 데 사용할 수 있습니다. SciPy는 보다 복잡한 시뮬레이션에 도움이 될 수 있는 고급 통계 기능을 제공합니다. 이러한 라이브러리를 Pandas와 결합하면 다양한 시나리오를 처리하고 플랜트 가용성 패턴에 대한 더 깊은 통찰력을 제공할 수 있는 더욱 강력하고 확장 가능한 시뮬레이션 프레임워크가 가능해집니다.

  1. 중단 시뮬레이션에 Pandas를 사용하면 어떤 이점이 있나요?
  2. Pandas는 효율적인 데이터 조작 및 분석 기능을 제공하므로 기본 Python 루프에 비해 대규모 데이터 세트를 더 빠르게 시뮬레이션할 수 있습니다.
  3. 벡터화는 가동 중단 시뮬레이션의 성능을 어떻게 향상시킵니까?
  4. 벡터화는 전체 배열에 대한 작업을 한 번에 수행하여 루프의 오버헤드를 줄이고 Pandas의 내부 최적화를 활용합니다.
  5. 역할은 무엇입니까? 시뮬레이션 스크립트에서?
  6. 자연 로그를 계산하는 데 사용되며 이는 정전 기간 및 간격에 대한 기하학적 분포에서 샘플을 생성하는 데 도움이 됩니다.
  7. 대규모 시뮬레이션에서 메모리 관리가 중요한 이유는 무엇입니까?
  8. 효율적인 메모리 관리는 특히 장기간에 걸쳐 수많은 플랜트를 시뮬레이션할 때 메모리 오버플로를 방지하고 원활한 실행을 보장합니다.
  9. Pandas의 범주형 데이터 유형이 시뮬레이션 최적화에 어떻게 도움이 됩니까?
  10. 범주형 데이터 유형은 반복되는 값을 보다 효율적으로 표현하여 메모리 사용량을 줄이며 이는 플랜트 상태 데이터를 처리하는 데 유용합니다.
  11. 가동 중단 시뮬레이션을 향상할 수 있는 다른 라이브러리는 무엇입니까?
  12. NumPy 및 SciPy와 같은 라이브러리는 무작위 샘플링 및 통계 분석에 최적화된 기능을 제공하여 Pandas의 데이터 조작 기능을 보완합니다.
  13. 중단 시뮬레이션에서 대규모 데이터 세트를 관리하는 데 청킹을 사용할 수 있습니까?
  14. 예, 데이터 세트를 더 작은 청크로 처리하면 메모리 사용량을 효과적으로 관리하는 데 도움이 되며 시뮬레이션이 문제 없이 대규모 데이터 세트를 처리할 수 있습니다.
  15. 시뮬레이션을 위해 NumPy를 Pandas와 통합하면 어떤 이점이 있나요?
  16. NumPy의 최적화된 무작위 샘플링 기능은 중단 길이와 간격을 보다 효율적으로 생성하여 시뮬레이션의 전반적인 성능을 향상시킬 수 있습니다.

산업 플랜트의 무작위 가동 중단 시뮬레이션을 위해 Pandas를 통합하면 프로세스 효율성이 크게 향상됩니다. Pandas의 강력한 데이터 조작 기능을 활용하여 공장 가용성에 대한 정확한 시계열 데이터를 생성할 수 있습니다. 이 접근 방식은 시뮬레이션 속도를 향상시킬 뿐만 아니라 더 나은 메모리 관리 및 확장성을 보장합니다. 벡터화를 사용하고 NumPy 및 SciPy와 같은 라이브러리를 통합하면 시뮬레이션이 더욱 최적화되어 대규모 데이터 세트에 대해 강력하고 확장 가능해집니다. 전반적으로 Pandas는 공장 가동 중단을 효율적으로 시뮬레이션하고 분석하여 더 나은 운영 계획과 위험 관리를 가능하게 하는 포괄적인 솔루션을 제공합니다.