Введение

Вы стоите на углу оживленной улицы, в окружении высоких небоскребов и нескончаемого потока автомобилей и автобусов. Внезапно в городе отключили электричество, и все погасло. Ваш телефон разряжен, светофоры выключены, и вы остались посреди хаотической сцены.

Но не волнуйтесь, потому что у инженеров, спроектировавших энергосистему, есть секретное оружие, которое поможет им понять, что пошло не так, и решить проблему: эквивалентная модель Тевенина.

В этой статье мы объясним, как можно использовать машинное обучение для вычисления эквивалентной модели Тевенина на основе входных данных PMU (единица векторного измерения). Этот мощный метод может помочь аналитикам энергосистем лучше понять поведение энергосистемы и выявить потенциальные проблемы до того, как они приведут к сбоям в работе.

Выбор модели

Одной из ключевых проблем при использовании машинного обучения для анализа энергосистем является выбор подходящей модели для поставленной задачи. Для этой цели можно использовать множество различных типов моделей машинного обучения, каждая из которых имеет свои сильные и слабые стороны.

Например, одним из вариантов является использование традиционной нейронной сети с прямой связью, которая представляет собой тип модели, состоящей из нескольких слоев взаимосвязанных узлов. Эта модель может изучать сложные взаимосвязи между входными данными и эквивалентной моделью Тевенина, но у нее могут возникнуть проблемы с обработкой данных, зависящих от времени.

Другим вариантом является использование сверточной нейронной сети (CNN), которая является типом модели, специально разработанной для работы с данными, имеющими сеточную структуру, такими как изображения или данные временных рядов. Эта модель может изучать пространственные и временные закономерности в данных, но для достижения хорошей производительности может потребоваться большой объем обучающих данных.

Другим вариантом является использование рекуррентной нейронной сети (RNN), которая представляет собой тип модели, которая может обрабатывать данные, зависящие от времени, используя скрытые векторы состояния для запоминания информации из предыдущих временных шагов. Эта модель может изучать долгосрочные зависимости в данных, но может столкнуться с исчезновением или взрывом градиентов.

После рассмотрения плюсов и минусов этих различных моделей для анализа была выбрана сеть с долговременной кратковременной памятью (LSTM). LSTM — это тип RNN, в котором используются механизмы шлюза для управления потоком информации через сеть, что позволяет им лучше справляться с долгосрочными зависимостями в данных.

Набор данных

LSTM был обучен на большом наборе данных измерений PMU из реальной энергосистемы, и модель смогла изучить сложные взаимосвязи между входными данными и эквивалентной моделью Тевенина. В экспериментах LSTM достиг высокой точности и надежности, что сделало его многообещающим инструментом для анализа энергосистем.

Данные PMU — это тип данных измерений, которые собираются датчиками, установленными в энергосистеме. Эти датчики, известные как векторные измерительные устройства, измеряют амплитуду и фазовый угол различных электрических величин, таких как напряжение, ток и мощность. Данные PMU обычно собираются с высокой частотой, порядка нескольких выборок в секунду, и они могут предоставить подробную информацию о поведении энергосистемы.

Выполнение

В нашей реализации модели LSTM мы использовали данные PMU с тремя каналами: напряжение шины генератора на высоковольтной подстанции, активная мощность и реактивная мощность. Эти три величины важны для характеристики поведения энергосистемы, и их можно использовать для расчета эквивалентной модели Тевенена.

Для сборки модели LSTM мы использовали TensorFlow, платформу машинного обучения с открытым исходным кодом, разработанную Google. TensorFlow предоставляет широкий спектр инструментов и библиотек для создания, обучения и развертывания моделей машинного обучения, что делает его популярным выбором для многих исследователей и практиков.

Вот упрощенный пример того, как мы использовали TensorFlow для определения архитектуры модели LSTM и ее обучения на данных PMU:

import tensorflow as tf

# define the input data and the target variable
x = tf.placeholder(tf.float32, shape=[None, 3])
y = tf.placeholder(tf.float32, shape=[None, 1])

Сначала мы импортируем модуль Tensorflow и определяем переменные для ввода и вывода. Теперь соберем рекуррентную нейронную сеть LSTM:

# define the LSTM model
lstm = tf.contrib.rnn.LSTMCell(num_units=10)
outputs, states = tf.nn.dynamic_rnn(lstm, x, dtype=tf.float32)

В этом коде мы сначала определяем модель LSTM, используя класс LSTMCell из модуля contrib.rnn TensorFlow. Этот класс создает базовую ячейку LSTM с указанным количеством единиц (в данном случае 10).

Затем мы используем функцию dynamic_rnn для запуска модели LSTM на входных данных и генерации выходных данных. Эта функция возвращает последовательность выходных данных для каждого временного шага, а также конечное состояние ячейки LSTM. В нашем случае нас интересует только конечный результат, который соответствует эквивалентной модели Тевенена.

# define the output layer
outputs = tf.layers.dense(outputs[:, -1, :], 1)

Чтобы получить окончательный вывод, мы используем функцию dense из модуля layers TensorFlow для создания полностью подключенного выходного слоя, который принимает окончательный вывод ячейки LSTM в качестве входных данных и создает один скалярный вывод. Эти выходные данные являются предсказанной эквивалентной моделью Тевенина.

# define the loss function and the optimizer
loss = tf.losses.mean_squared_error(y, outputs)
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

Затем мы определяем функцию потерь и оптимизатор для обучения модели. В этом случае мы используем среднеквадратичную ошибку между предсказанной и истинной эквивалентными моделями Тевенина в качестве функции потерь и оптимизатором Адама для обновления параметров модели.

# train the model
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(num_steps):
        x_batch, y_batch = next_batch(batch_size)
        _, loss_value = sess.run([optimizer, loss], feed_dict={x: x_batch, y: y_batch})

Наконец, мы обучаем модель, перебирая обучающие данные в мини-пакетах и ​​запуская оптимизатор для обновления параметров модели. Этот процесс продолжается в течение заданного количества шагов обучения (num_steps), а окончательная обученная модель сохраняется в сеансе TensorFlow.

После обучения модели мы можем оценить ее производительность на тестовом наборе данных, как показано в следующем блоке кода:

# evaluate the model
x_test, y_test = load_test_data()
y_pred = sess.run(outputs, feed_dict={x: x_test})
mse = tf.losses.mean_squared_error(y_test, y_pred).eval()
print("Mean squared error: {:.3f}".format(mse))

# compute the Thévenin equivalent model
v_th = v_g - i_l * z_l
z_th = z_l

В этом коде мы оцениваем модель LSTM, делая прогнозы на тестовом наборе данных с использованием тензора outputs. Этот тензор содержит предсказанную эквивалентную модель Тевенина для каждого примера в тестовом наборе данных.

Чтобы оценить производительность модели, мы вычисляем среднеквадратичную ошибку между прогнозами и истинными значениями. Это дает представление о том, насколько хорошо модель научилась предсказывать эквивалентную модель Тевенина на основе входных данных PMU.

Получив предсказанную эквивалентную модель Тевенина, мы можем использовать ее для вычисления фактической эквивалентной модели Тевенина, используя приведенные выше уравнения. Затем эту модель можно использовать для задач анализа энергосистемы, таких как анализ отказов, анализ стабильности и анализ непредвиденных обстоятельств.

Готовый скрипт выглядит примерно так:

import tensorflow as tf

# define the input data and the target variable
x = tf.placeholder(tf.float32, shape=[None, 3])
y = tf.placeholder(tf.float32, shape=[None, 1])

# define the LSTM model
lstm = tf.contrib.rnn.LSTMCell(num_units=10)
outputs, states = tf.nn.dynamic_rnn(lstm, x, dtype=tf.float32)

# define the output layer
outputs = tf.layers.dense(outputs[:, -1, :], 1)

# define the loss function and the optimizer
loss = tf.losses.mean_squared_error(y, outputs)
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

# train the model
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(num_steps):
        x_batch, y_batch = next_batch(batch_size)
        _, loss_value = sess.run([optimizer, loss], feed_dict={x: x_batch, y: y_batch})
        
    # evaluate the model
    x_test, y_test = load_test_data()
    y_pred = sess.run(outputs, feed_dict={x: x_test})
    mse = tf.losses.mean_squared_error(y_test, y_pred).eval()
    print("Mean squared error: {:.3f}".format(mse))
    
    # compute the Thévenin equivalent model
    v_th = v_g - i_l * z_l
    z_th = z_l

Вывод 1

В целом, этот код демонстрирует, как использовать TensorFlow для определения, обучения и оценки модели LSTM для вычисления модели, эквивалентной Тевенину, на основе входных данных PMU. Изменяя код и экспериментируя с различными архитектурами моделей и гиперпараметрами, вы можете повысить производительность модели и применить ее к реальным задачам анализа энергосистемы.

На пути к развертыванию

После того, как модель LSTM была обучена и оценена, ее можно развернуть в качестве живого API, который можно использовать для вычисления эквивалентной модели Тевенина в режиме реального времени. Это может быть полезно для приложений, требующих быстрых и точных прогнозов эквивалентной модели Тевенина, таких как мониторинг и управление энергосистемой.

Чтобы настроить живой API для модели LSTM, мы можем использовать веб-фреймворк, такой как Flask, который позволяет нам легко определять конечные точки HTTP и обрабатывать входящие запросы. Вот пример того, как мы можем использовать Flask для определения простого API, который принимает входные данные PMU в качестве входных данных и возвращает предсказанную эквивалентную модель Тевенина в качестве выходных данных:

from flask import Flask, request
import tensorflow as tf

app = Flask(__name__)

@app.route('/thévenin', methods=['POST'])
def compute_thévenin():
    # parse the input data from the request
    data = request.get_json()
    x = data['x']
    
    # evaluate the model
    y_pred = sess.run(outputs, feed_dict={x: x})
    
    # compute the Thévenin equivalent model
    v_th = v_g - i_l * z_l
    z_th = z_l
    
    # return the result
    return {'v_th': v_th, 'z_th': z_th}

if __name__ == '__main__':
    app.run()

В этом коде мы определяем простое приложение Flask с одной конечной точкой HTTP, /thévenin, которая принимает запросы POST с входными данными PMU в кодировке JSON. Когда запрос получен, входные данные анализируются и передаются в модель LSTM. Затем модель делает прогноз, который используется для расчета эквивалентной модели Тевенина с использованием приведенных выше уравнений. Наконец, результат возвращается клиенту в виде ответа в формате JSON.

Этот простой API можно легко развернуть на сервере, что позволяет клиентам делать запросы на вычисление модели, эквивалентной Тевенину, в режиме реального времени. Например, приложение для мониторинга энергосистемы может использовать этот API для прогнозирования эквивалентной модели Тевенина через регулярные промежутки времени и сравнения прогнозов с измеренными значениями для обнаружения потенциальных проблем или уязвимостей в системе.

Заключительные выводы

В целом, этот код демонстрирует, как настроить работающий API для модели LSTM, что позволяет легко интегрировать его в приложения для анализа энергосистем. Изменяя код и экспериментируя с различными архитектурами и конструкциями API, вы можете адаптировать API к своим конкретным требованиям и использовать его для поддержки широкого спектра задач анализа энергосистемы. С помощью машинного обучения мы можем автоматизировать процесс вычисления эквивалентной модели Тевенина на основе данных PMU, сделав его быстрее, точнее и масштабируемее, чем традиционные методы.

В заключение мы увидели, как использовать модель LSTM для вычисления эквивалентной модели Тевенина на основе входных данных PMU. Мы также продемонстрировали, как использовать TensorFlow для определения, обучения и оценки модели LSTM, а также как настроить работающий API для реализации модели в приложениях реального времени.

Следуя шагам, описанным в этой статье, вы можете построить свою собственную модель LSTM для вычисления эквивалентной модели Тевенина на основе данных PMU и применить ее к задачам анализа энергосистемы. С помощью машинного обучения мы можем раскрыть весь потенциал данных PMU и улучшить наше понимание поведения энергосистемы.

[1] Дуглас, Д. Дж., Константинопулос, С., Осипов, Д., и Чоу, Дж. Х. (2021, июнь). ThévNN: онлайн-оценка тевенинового эквивалента на основе данных с использованием BiLSTM. В 2021 IEEE Madrid PowerTech (стр. 1–6). IEEE.