Научный журнал
Современные наукоемкие технологии
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 0,940

ПРОГРАММНЫЙ АЛГОРИТМ АППРОКСИМАЦИИ СЛОЖНОГО ДИНАМИЧЕСКОГО ЗВЕНА АПЕРИОДИЧЕСКИМ ЗВЕНОМ ВТОРОГО ПОРЯДКА ПРИ ПОМОЩИ МЕТОДА РОЯ ЧАСТИЦ

Пиотровский Д.Л. 1 Куколев А.А. 2 Подгорный С.А. 2
1 ФГБОУ ВО «Московский государственный университет технологий и управления имени К.Г. Разумовского»
2 ФГБОУ ВО «Кубанский государственный технологический университет»
К настоящему времени, в связи с повсеместной интеграцией электронно-вычислительных и сетевых технологий взаимодействия, возросла тенденция к использованию методов, позволяющих реализовать автоматизированный поиск оптимального решения в соответствии с заданным набором ограничений, регламентируемых поставленной задачей. Одним из подобных методов является предложенный Джеймсом Кеннеди и Расселом Эберхартом алгоритм роя частиц. Концепция алгоритма была частично основана на результатах исследования поведения скоплений животных (косяков рыб, стай птиц и т.д.). Данная статья предлагает к рассмотрению программную реализацию метода роя частиц в задаче определения эквивалентного аппроксимирующего звена, соответствующего сложному звену с заранее известной переходной характеристикой. Статья предоставляет к рассмотрению некоторые аспекты реализации метода в программной среде Microsoft Visual Studio. За основу сложного звена взят контур подготовки топлива судового главного малооборотного двигателя с электронным управлением подачей топлива MAN B&W 6S90 ME-C. Описание структуры звена предоставлено в рамках необходимого для рассмотрения основного вопроса исследования объема. Статья также предоставляет описание некоторых полученных после моделирования результатов и соответствующих заключений.
обработка информации
оптимизация
метод роя частиц
управление
Visual C#
Microsoft Visual Studio
1. Хемди А. Таха. Глава 3. Симплекс-метод. М.: «Вильямс», 2007. 912 с.
2. John Von Neumann The computer and the brain: The Silliman Memorial Lectures Series, 2012. 136 p.
3. Канторович Л.В. Математические методы организации планирования производства // Издание Ленинградского государственного университета. М.: Ленинград, 1939. 760 с.
4. Гальперин В.М. Математическое, или «линейное», программирование: нематематическое представление // Вехи экономической мысли. Т. 2. Теория фирмы / Под ред. В.М. Гальперина. СПб.: Экономическая школа, 2000. 534 с.
5. Grechuk B., Molyboha A., Zabarankin M. Mean-deviation analysis in theory of choise. Risk Analysis: An International Journal. 2012. T. 32. № 8. Р. 1277–1292.
6. Дайнего Ю.Г. Эксплуатация судовых энергетических установок, механизмов и систем. Практические советы и рекомендации М.: «Моркнига», 2018. 340 с.
7. Xinchao Z. A perturbed particle swarm algorithm for numerical optimization. Applied Soft Computing. 2010. Т. 10. № 1. Р. 11–124.
8. Маккаффри Д. Метод роя частиц // MSDN Magazine Issues-Artificial intelligence. 2011. № 8. [Electronic resource]. URL: https://docs.microsoft.com/ru-ru/archive/msdn-magazine/2011/august/artificial-intelligence-particle-swarm-optimization (date of access: 21.04.2021).
9. Пиотровский Д.Л., Подгорный С.А., Куколев А.А. Программное описание алгоритма работы ПИД-регулятора на языке C# для применения в замкнутой системе автоматического управления // Сборник научных трудов НГТУ. 2020. № 1–2 (97). С. 40–54.

Методы оптимизации и линейного программирования берут свое начало в 1820 г., когда Фурье предложил метод направленного перебора смежных вершин в направлении возрастания целевой функции – симплекс-метод, ставший на долгое время основным при решении задач линейного программирования [1]. Позднее в 1947 г. метод был расширен и дополнен американским ученым Джоржем Данцигом. Класс экстремальных задач, определяемых линейным функционалом на множестве, задаваемом линейными ограничениями, относят к 1930-м гг., когда появились первые разработки по решению задач линейного программирования исследователей Джона фон Неймана, Л.В. Канторовича [2, 3]. Тем же Канторовичем совместно с М.К. Гавуриным в 1949 г. был разработан метод потенциалов, являвшийся модификацией симплекс-метода решения задачи линейного программирования применительно к транспортной задаче. В последующих работах Л.В. Канторович, В.С. Немчинов, В.В. Новожилов, А.Л. Лурье, А. Брудно развили математическую теорию линейного и нелинейного программирования, в том числе развивая приложения к этой теории. В целом, в связи с развитием электронно-вычислительных средств и компьютерной техники, начиная с 1955 г. опубликовано множество работ как в области нелинейного программирования, так и в области квадратичного программирования (работы Баранкина, Дорфмана и пр.) [4, 5].

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

Авторами была сформулирована цель исследования – рассмотреть и проанализировать возможность программной реализации метода роя частиц (МРЧ) в задаче аппроксимации сложного динамического звена простым апериодическим звеном второго порядка.

Материалы и методы исследования

Для рассмотрения передаточной функции топливной аппаратуры необходимо рассмотреть принцип произведения впрыска в судовом главном двигателе с электронным управлением подачей топлива типа MAN B&W xSxx ME-C. Принцип действия топливной аппаратуры раскрывает рис. 1 [6]. На последних моделях двигателей MAN B&W серии ME-C в качестве гидравлического блока цилиндра используется гидравлический блок HCU (Hydraulic cylinder unit), состоящий из топливного насоса высокого давления (ТНВД), исполнительного механизма выпускного клапана, гидравлического аккумулятора, лубрикатора цилиндра, электрогидравлического клапана корректировки подачи топлива, блока распределения гидравлики, трубопроводов, а также датчиков положения механизмов.

missing image file

Рис. 1. Устройство и принцип действия блока HCU двигателя MAN B&W 6S90 ME-C

missing image file

Рис. 2. Структурная схема контура подготовки топлива и клапана FIVA

Таким образом, в данном случае процесс подачи топлива можно представить в виде нескольких систем уравнений: уравнений работы электромеханической части электромагнитного клапана корректировки, уравнений работы гидравлической части электромагнитного клапана корректировки, уравнений работы распределителя гидравлики с трубопроводами, а также уравнений ТНВД с форсункой (рис. 2).

Положим эквивалентную передаточную функцию сложного звена равной

Wтопл(s) = missing image file

Тогда целевой задачей является аппроксимация звена Wтопл(s) звеном:

Wэкв(s) = missing image file

Алгоритм роя частиц декларирует в своем составе рой одинаковых с точки зрения выполняемой функции частиц, обладающих положением и скоростью в текущий момент времени. Такими же свойствами обладает и весь рой в целом. Решение задачи оптимизации сводится к поиску оптимального положения частицы в n-мерном пространстве поиска решения посредством определения текущей ошибки положения частицы, вычисления скорости частицы, а также соответствующих свойств роя.

Корректировка скоростей и положений каждой из частиц в изначальной конфигурации производилась в соответствии с формулами [7]:

missing image file;

missing image file

где vn(t + 1) – скорость частицы n в момент времени (t + 1), vn(t) – скорость частицы в текущий момент времени t, c1 = const – когнитивная весовая доля, r1 = const – случайная переменная в диапазоне [0;1], missing image file – векторная величина, описывающая лучшее положение частицы, найденное на данный момент, missing image file – текущая позиция частицы, missing image file – лучшая известная позиция, найденная для любой из частиц в рое, missing image file – положение частицы n в момент времени (t + 1).

Текущая задача была решена на основе приложения, написанного на языке Visual C#. Для этого целесообразно рассмотреть алгоритм решения поставленной задачи при помощи рис. 3.

missing image file

Рис. 3. Алгоритм решения задачи поиска минимума функции по методу роя частиц

Алгоритм берет свое начало с процедуры определения заданных оператором параметров расчета. Среди них – количество эпох расчета для каждого шага времени t, количество частиц n, размерность пространства поиска решений, а также максимально допустимые значения искомых параметров. Следом производится расчет начального положения частиц и их скоростей, исходя из значений которых определяется текущая ошибка расчета:

missing image file

где y(t) и z(t) – временные зависимости заданной и искомой временной характеристики.

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

В основу работы приложения заложен метод, реализующий инициализацию роя частиц, описание их свойств, расчет текущих скоростей и положений и определение ошибки положения каждой частицы и всего роя, который представляет собой код [8, 9]:

1 private void button2_Click(object sender, EventArgs e)

2 {

3 Random ran = null;

4 ran = new Random(0);

5 try

6 {

7 Particle[] swarm = new Particle[numberParticles];

8 double bestGlobalFitness = double.MaxValue;

9 double minV = -1.0 * maxX;

10 double maxV = maxX;

11 for (int i = 0; i < swarm.Length; ++i) 30 {

12 double[] randomPosition = new double[Dim];

13 for (int j = 0; j < randomPosition.Length; ++j)

14 {

15 double lo = minX;

16 double hi = maxX;

17 randomPosition[j] = (hi - lo) * ran.NextDouble() + lo;

18 }

19 double fitness = ObjectiveFunction(randomPosition);

20 double[] randomVelocity = new double[Dim];

21 for (int j = 0; j < randomVelocity.Length; ++j)

22 {

23 double lo = -1.0 * Math.Abs(maxX - minX);

24 double hi = Math.Abs(maxX - minX);

25 randomVelocity[j] = (hi - lo) * ran.NextDouble() + lo;

26 }

27 swarm[i] = new Particle(randomPosition, fitness, randomVelocity, randomPosition, fitness);

28 if (swarm[i].fitness < bestGlobalFitness)

29 {

30 bestGlobalFitness = swarm[i].fitness;

31 swarm[i].position.CopyTo(bestGlobalPosition, 0);

32 }

33 }

34 double w = 0.729;

35 double c1 = 1.49445;

36 double c2 = 1.49445;

37 double r1, r2;

38 while (iteration < numberIterations)

39 {

40 ++iteration;

41 double[] newVelocity = new double[Dim];

42 double[] newPosition = new double[Dim];

43 double newFitness;

44 for (int i = 0; i < swarm.Length; ++i)

45 {

46 Particle currP = swarm[i];

47 for (int j = 0; j < currP.velocity.Length; ++j)

48 {

49 r1 = ran.NextDouble();

50 r2 = ran.NextDouble();

51 newVelocity[j] = (w * currP.velocity[j]) +

52 (c1 * r1 * (currP.bestPosition[j] - currP.position[j])) +

53 (c2 * r2 * (bestGlobalPosition[j] - currP.position[j]));

54 if (newVelocity[j] < minV)

55 newVelocity[j] = minV;

56 else if (newVelocity[j] > maxV)

57 newVelocity[j] = maxV;

58 }

59 newVelocity.CopyTo(currP.velocity, 0);

60 for (int j = 0; j < currP.position.Length; ++j)

61 {

62 newPosition[j] = currP.position[j] + newVelocity[j];

63 if (newPosition[j] < minX)

64 newPosition[j] = minX;

65 else if (newPosition[j] > maxX)

66 newPosition[j] = maxX;

67 }

68 newPosition.CopyTo(currP.position, 0);

69 newFitness = ObjectiveFunction(newPosition);

70 currP.fitness = newFitness;

71 if (newFitness < currP.bestFitness)

72 {

73 newPosition.CopyTo(currP.bestPosition, 0);

74 currP.bestFitness = newFitness;

75 }

76 if (newFitness < bestGlobalFitness)

77 {

78 newPosition.CopyTo(bestGlobalPosition, 0);

79 bestGlobalFitness = newFitness;

80 }

81 }

82 }

83 }

84 catch (Exception ex)

85 {

86 }

87 }

Цикл начинается с присваивания случайного значения переменной ran, необходимой для расчета случайного значения коэффициентов r1 и r2 в формуле определения последующей скорости частицы vn(t + 1). Строка 5 инициализирует цикл try, в котором и осуществляется расчет всех параметров частиц на всех итерациях состояний всех моментов времени до появления некоторой ошибки расчета, реализуемой функцией catch (Exception ex). Инициализация роя частиц возложена на код строки 7, в котором при помощи внешнего класса Particle инициализируется переменная swarm, передающая в конструктор один-единственный заданный оператором параметр – numberParticles – количество частиц роя. Цикл строки 13 определяет положение текущей частицы в текущий момент времени. Строка 19 определяет ошибку текущего положения текущей частицы на каждой итерации времени моделирования посредством вызова внешнего метода ObjectiveFunction:

static double ObjectiveFunction(double[] k_T_b)

{

int k = 0;

double[] cur_error = new double[101];

double result = 1;

for (int n = 0; n < cur_error.Length; ++n)

{

cur_error[n] = 1;

}

for (double i = 0.1; i < 10.1; i=i+.1)

{

cur_error[k] = (2.46 * Math.Pow(10, -15) * Math.Exp(-5 * Math.Pow(10, -3)) * i + 7.68 * Math.Pow(10, -46) * Math.Exp(-1.81 * Math.Pow(10, 7)) - 1.62 * Math.Pow(10, -27) * Math.Exp(-1.67 * Math.Pow(10, 5) * i) - 26.6 * Math.Exp(-1 * i) + 12.9 + 13.7 * Math.Exp(-10 * i) * Math.Cosh(7.92 * i) + 13.8 * Math.Exp(-10 * i) * Math.Sinh(7.92 * i) - 7.11 * Math.Pow(10, -4) * Math.Exp(-8.57 * i) * Math.Cos(54.9 * i) + 2.84 * Math.Pow(10, -3) * Math.Exp(-8.57 * i) * Math.Sin(54.9 * i) - 8.92 * Math.Pow(10, -9) * Math.Cos(354 * i) -2.74 * Math.Pow(10, -7) * Math.Exp(-221 * i) * Math.Sin(354 * i)) - (1 * (k_T_b[0] - k_T_b[0] * Math.Exp(k_T_b[1] * i) * Math.Cos(k_T_b[2] * i) - 0.115 * Math.Exp(k_T_b[1] * i) * Math.Sin(k_T_b[2] * i)));

k = k + 1;

}

for (int j = 0; j < cur_error.Length; ++j)

{

result = Math.Abs(result * cur_error[j]);

}

return result;

}

Цикл строки 21 определяет массив значений скоростей каждой частицы. Строка 21 инициализирует частицу swarm с определенными ранее параметрами. Условие if строки 28 проверяет соответствие значения текущей ошибки положения частицы заданному. Далее инициализируются переменные расчета новых положения и скорости частицы c1, c2, r1, r2 и весовой коэффициент инерции w. Последующие циклы определяют новое положение и скорость текущей частицы и новую ошибку ее положения, в случае нового минимального значения которой последнее обновляется и ему присваивается значение текущей ошибки расчета.

Результаты исследования и их обсуждение

Задачей алгоритма служит определение коэффициентов α, β и γ аппроксимирующего звена в соответствии с его временной характеристикой:

missing image file

полученной посредством обратного преобразования Фурье:

missing image file

Функция ObjectiveFunction принимает в качестве параметра лишь один аргумент – массив значений переменных α, β и γ double[] k_T_b. В этом массиве содержатся все текущие значения решений поставленной задачи аппроксимации. Цикл for (double i = 0.1; i < 10.1; i = i+.1) производит определение текущей ошибки E итерации k посредством определения разности значения переходной характеристики эталонного звена и искомого аппроксимирующего звена, а также заполняет массив значений cur_error[k]. Переменная result определяет результирующую ошибку расчета на всех итерациях, возвращая рассчитанное значение в основной цикл try.

Итогом расчета является оптимальное положение частицы в трехмерном пространстве поиска решения. В данном случае аппроксимация указанной сложной передаточной функции реализуется массивом тысячи эпох перемещения частиц посредством звена вида (рис. 4):

Wтопл(s) = missing image file

которому соответствует временная характеристика вида

missing image file

missing image file

Рис. 4. Интерфейс программного обеспечения для поиска минимума по МРЧ

Заключение

Рассмотренная структура предназначена для аппроксимации сложных звеньев и подтверждает допустимую возможность определения аппроксимирующего апериодического звена второго порядка для сложного динамического звена. Как видно из предоставленного результата, данный метод не лишен недостатков. Стоит отметить уже обозначенный выше недостаток – вероятность определения неистинного минимума, что косвенно подтверждается и в данном случае. Начало переходного процесса полученного звена недостаточно корректно соответствует эталонному сложному звену. Однако здесь следует сделать замечание относительно возможностей описанного алгоритма. Так как поиск решения ведется в трехмерном пространстве, то неизменным остается коэффициент -0,114 при отрицательной части полинома. По этой причине очевидна дальнейшая необходимость модификации описанной структуры с целью минимизации ошибки расчета и поиска решения на пространстве четырех измерений.


Библиографическая ссылка

Пиотровский Д.Л., Куколев А.А., Подгорный С.А. ПРОГРАММНЫЙ АЛГОРИТМ АППРОКСИМАЦИИ СЛОЖНОГО ДИНАМИЧЕСКОГО ЗВЕНА АПЕРИОДИЧЕСКИМ ЗВЕНОМ ВТОРОГО ПОРЯДКА ПРИ ПОМОЩИ МЕТОДА РОЯ ЧАСТИЦ // Современные наукоемкие технологии. – 2021. – № 5. – С. 81-87;
URL: https://top-technologies.ru/ru/article/view?id=38662 (дата обращения: 02.05.2024).

Предлагаем вашему вниманию журналы, издающиеся в издательстве «Академия Естествознания»
(Высокий импакт-фактор РИНЦ, тематика журналов охватывает все научные направления)

«Фундаментальные исследования» список ВАК ИФ РИНЦ = 1,674