Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
В реальном управлении управляемая система не является линейной и не зависящей от времени, и ей часто требуется динамическая настройка параметров ПИД-регулятора. Нечеткое управление может удовлетворить это требование, поэтому в следующем разделе мы обсудим нечеткий ПИД-регулятор. сопутствующие вопросы. Нечеткий ПИД-регулятор — это алгоритм управления, который сочетает в себе нечеткий алгоритм с самонастройкой параметров ПИД-регулирования. Можно сказать, что это применение нечеткого алгоритма при настройке параметров ПИД.
Нечеткий алгоритм — это алгоритм, основанный на интеллектуальном рассуждении. Хотя он и называется нечетким алгоритмом, на самом деле это идея постепенного усовершенствования. Нечеткий контроллер в основном состоит из трех функциональных модулей: фаззификации, механизма нечеткого вывода и точности, а также базы знаний (включая базу данных и базу правил). Здесь мы обсудим несколько основных вопросов нечеткого управления.
Все входные данные точны, и для реализации нечеткого алгоритма их необходимо оценить количественно. Так называемое квантование заключается в проецировании входной величины на определенный числовой уровень с помощью функции квантования, которая обычно представляет собой числовой интервал, симметричный относительно 0. Конкретный прогнозируемый интервал зависит от реальной ситуации, поскольку это напрямую влияет на точность расчета.
Фаззификация — очень важный шаг в нечетком алгоритме. Сначала определяется нечеткое подмножество, соответствующее каждой лингвистической переменной. Затем на основе результатов количественного определения мы можем определить набор, к которому принадлежат входные данные, и вычислить соответствующую степень членства. Существует множество методов расчета принадлежности. Наиболее часто используемый метод — использование треугольной функции принадлежности или трапециевидной функции принадлежности.
База правил основана на фаззификации управляющих величин и является основой для нечетких рассуждений, которые в значительной степени опираются на опыт. База правил может быть выражена во многих формах, а конкретная форма реализации зависит от удобства нашей реализации.
Рассуждение и принятие решений являются основой нечеткого управления. Он использует информацию из базы знаний и методы нечетких вычислений для моделирования мышления людей, методов рассуждения и принятия решений, а также активирует соответствующие правила управления при определенных входных условиях, чтобы обеспечить соответствующее нечеткое управление. выход.
Путем нечетких рассуждений мы получаем серию нечетких выражений, и нам нужно выполнить операции дефаззификации, чтобы получить дефицитные данные. Обычно используемые методы дефаззификации включают в себя:
Выходные данные управления системой представляют собой точное число, но это не физическая величина, которую можно напрямую использовать для управления объектом, поэтому в конечном итоге ее необходимо преобразовать в соответствии с нашими потребностями. Например, параметры, соответствующие ПИД-регулятору, можно при необходимости преобразовать и скорректировать перед выводом на ПИД-регулятор.
Основные принципы нечеткого алгоритма были кратко описаны выше. Далее мы обсудим, как его применить к ПИД-управлению. Так называемое нечеткое ПИД-регулирование принимает отклонение e и изменение отклонения ec в качестве входных данных и использует правила нечеткого управления для настройки параметров ПИД в режиме онлайн для удовлетворения различных требований различного отклонения e и приращения отклонения ec. параметры ПИД. Его структурная схема выглядит следующим образом:
Фаззификация входного значения заключается в сопоставлении входных данных, используемых для расчета, со стандартизированным числовым интервалом и получении степени принадлежности входных данных к подмножеству на основе результата квантования и подмножества фаззификации. Когда мы используем отклонение e и приращение отклонения ec в качестве входных данных для настройки параметров управления, нам необходимо фаззифицировать e и ec.
Сначала мы определяем нечеткие подмножества e и ec. Для ПИД-регулирования мы выбираем: отрицательное большое [NB], отрицательное среднее [NM], отрицательное маленькое [NS], ноль [ZO], положительное маленькое [PS], положительное среднее. [PM], Zhengda [PB] и другие семь лингвистических переменных могут с достаточной точностью выразить свое нечеткое подмножество. Поэтому мы определяем нечеткие подмножества e и ec как {NB, NM, NS, ZO, PS, PM, PB}.
После определения нечеткого подмножества, как нам сопоставить конкретные значения e и ec нечеткому множеству? Нам нужно ввести функцию квантования. Чтобы определить функцию квантования, мы сначала вводим вселенную дискурса, соответствующую нечетким множествам e и ec, определяемым как {-6, -5, -4, -3, -2, -1, 0, 1, 2, 3. , 4, 5 ,6}. Для любого сигнала измерения физической величины существует диапазон, который мы записываем как Vmax и Vmin, который, естественно, должен быть таким же, как диапазон заданного значения во время регулировки ПИД, поэтому диапазон отклонения e представляет собой диапазон от От Vmin-Vmax до Vmax-Vmin Диапазон приращения отклонения вдвое больше. Здесь мы используем линейную количественную оценку, и функциональная зависимость такова:
Используя приведенную выше функцию квантования, e и ec можно квантовать, и мы можем получить определенное нечеткое подмножество, используя такие методы, как округление. Однако, учитывая, что изменения e и ec являются непрерывными изменениями, округление от 4 до 5 может повлиять на точность управления, поэтому для реализации этого процесса мы вводим степень принадлежности.
Наконец, мы определяем степени принадлежности e и ec нечеткому подмножеству. Степень членства — это значение от 0 до 1, используемое для описания степени принадлежности входных данных определенному нечеткому «я». Обычно мы описываем ее как функцию принадлежности. Здесь можно использовать линейную функцию принадлежности или треугольную функцию принадлежности. Ее функциональная связь следующая:
Если наш количественный результат равен 1, то степень членства, принадлежащая ZO, равна 0,5, а степень принадлежности, также принадлежащая PS, равна 0,5. На этом этапе фаззификация завершена.
Ранее мы кратко описали фаззификацию входных данных, но нечеткое рассуждение является основой нечеткого управления. Чтобы реализовать нечеткие рассуждения, нам сначала нужно создать базу правил или базу знаний для нечетких рассуждений, а затем построить машину вывода для рассуждений.
Во-первых, давайте создадим базу нечетких правил. Здесь нам нужно настроить три параметра Kp, Ki и Kd, поэтому нам нужно создать базу нечетких правил для этих трех переменных.
В ПИД-регуляторе выбор значения Kp зависит от скорости реакции системы. Увеличение Kp может улучшить скорость реакции и уменьшить установившееся отклонение, однако, если значение Kp слишком велико, это приведет к большому перерегулированию и даже сделает систему нестабильной. Уменьшение Kp может уменьшить перерегулирование и улучшить стабильность. Значение Kp слишком мало, это замедлит скорость отклика и продлит время регулировки. Поэтому на ранней стадии регулировки следует выбрать большее значение Kp, чтобы улучшить скорость реакции. На средней стадии регулировки Kp следует установить на меньшее значение, чтобы система имела меньшее перерегулирование и обеспечивала определенное значение. скорость реакции, а на более позднем этапе процесса регулировки следует установить меньшее значение Kp. Затем отрегулируйте значение Kp до большего значения, чтобы уменьшить статическую разницу и повысить точность управления. Основываясь на приведенном выше описании, мы определяем нечеткие правила Kp следующим образом:
В управлении системой интегральное управление в основном используется для устранения установившегося отклонения системы. По некоторым причинам (например, нелинейность насыщения и т. д.) процесс интегрирования может привести к насыщению интеграла на ранней стадии процесса настройки, что приводит к большому перерегулированию в процессе настройки. Следовательно, на ранней стадии процесса корректировки, чтобы предотвратить интегральное насыщение, ее интегральный эффект должен быть слабее или даже нулевым, на средней стадии корректировки, чтобы не влиять на стабильность, его интегральный эффект должен быть умеренным; и, наконец, на более позднем этапе процесса необходимо усилить интегральный эффект, чтобы уменьшить ошибку статической регулировки. На основе приведенного выше анализа мы сформулировали следующие нечеткие правила Ки:
Регулировка дифференциального звена в основном вводится для больших инерционных процессов, а функция коэффициента дифференциального звена заключается в изменении динамических характеристик системы. Коэффициент дифференциальной связи системы может отражать тенденцию изменения сигнала и может вводить в систему эффективный сигнал ранней коррекции до того, как сигнал отклонения изменится слишком сильно, тем самым ускоряя скорость реакции, сокращая время регулировки и устраняя колебания. В конечном итоге изменение динамических характеристик системы. Поэтому выбор значения Kd оказывает большое влияние на динамические характеристики регулировки. Если значение Kd слишком велико, процесс торможения будет опережать процесс регулировки, в результате чего время регулировки будет слишком длинным. Если значение Kd слишком мало, процесс торможения будет отставать, что приведет к увеличению перерегулирования; Согласно реальному опыту процесса, на ранней стадии регулировки дифференциальный эффект следует увеличить, чтобы получить меньшее или даже избежать перерегулирования в среднесрочной перспективе, поскольку характеристики регулировки более чувствительны к изменениям значения Kd; , значение Kd должно быть соответственно меньше и должно оставаться фиксированным, тогда на более позднем этапе регулировки значение Kd должно быть уменьшено, чтобы уменьшить эффект торможения контролируемого процесса, тем самым компенсируя вызванное удлинение времени процесса регулировки; большим значением Kd на ранней стадии процесса корректировки. На основе приведенного выше анализа сформулируем нечеткие правила для Kd следующим образом:
Затем нечеткие подмножества, соответствующие ΔKp, ΔKi и ΔKd, выводятся на основе результатов фаззификации отклонения E и приращения отклонения EC и базы правил. Поскольку ранее мы разработали функцию принадлежности для определения степени принадлежности входных и выходных величин нечеткому подмножеству, полученные нечеткие подмножества ΔKp, ΔKi и ΔKd обычно представляют собой матрицу, состоящую из нечетких переменных. Входные величины E и EC представляют собой вектор, состоящий из нечетких переменных.
Наконец, нам необходимо уточнить количественные данные, соответствующие различным нечетким переменным. Соответствие этих количественных данных физическим величинам совершенно различно в зависимости от конкретных объектов.
Для полученного целевого объекта нам также необходимо его фаззить, чтобы он соответствовал конкретной физической величине. В нечетком PID-посредничестве нам нужны Kp, Ki и Kd, поэтому нам нужно получить нужные нам значения Kp, Ki и Kd на основе результатов нечеткого вывода.
Ранее мы разработали треугольную функцию принадлежности и использовали ту же цель количественной оценки, то есть область дискурса {-6, 6}, поэтому в определенный момент степени принадлежности нечетких переменных, в которых расположены входные и выходные данные, равны То же самое. Основываясь на этом, мы используем метод центра тяжести для расчета количественного значения каждой выходной величины. Формула выглядит следующим образом:
Фактически, из-за особенностей используемой нами функции принадлежности сумма вычисленных степеней принадлежности в любом направлении равна 1, поэтому знаменатель можно опустить. Таким образом, расчет каждого объекта на самом деле является матричной операцией, а формула выглядит следующим образом:
Если используется количественное значение, его необходимо преобразовать в фактическое значение. В этом случае не проблема напрямую использовать физическое значение. Как с ним обращаться, определяется в соответствии с фактическими потребностями. После получения приращения мы также можем ввести коэффициенты для усиления и уменьшения изменений Kp, Ki и Kd. Конкретная формула реализации выглядит следующим образом:
, где ΔK — рассчитанное нами значение, а α — коэффициент, задающий влияние приращения на конечный результат.
Ранее мы описали весь процесс работы алгоритма, а затем написали код для его реализации. Во-первых, нам все еще нужно определить объект структуры нечеткого ПИД-регулятора.
/*Определение структур и государственных органов*/
typedef struct
{
float setpoint; /*значение настройки*/
float kp; /*Коэффициент пропорциональности*/
float ki; /*Интегральный коэффициент*/
float kd; /*дифференциальный коэффициент*/
float lasterror; /*Отклонение предыдущего выстрела*/
float preerror; /*Отклонение в первых двух долях*/
float deadband; /*мертвая зона*/
float output; /*выходное значение*/
float result; /*Выходное значение физической величины*/
float maximum; /*Верхний предел выходного значения*/
float minimum; /*Нижний предел выходного значения*/
float maxdKp; /*Максимальный предел приращения Kp*/
float mindKp; /*Минимальный предел приращения Kp*/
float qKp; /*Коэффициент влияния приращения Kp*/
float maxdKi; /*Максимальный предел приращения Ki*/
float mindKi; /*Минимальный предел приращения Ki*/
float qKi; /*Коэффициент влияния приращения Ki*/
float maxdKd; /*Максимальный предел приращения Kd*/
float mindKd; /*Минимальный предел приращения Kd*/
float qKd; /*Коэффициент влияния приращения Kd*/
}FUZZYPID;
Затем фаззифицируйте входное значение. Ранее мы разработали использование функций линейного квантования и треугольных функций принадлежности, поэтому реализация проста.
/*Операционная функция линейного квантования, область {-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6}*/
статическая пустота LinearQuantization(FUZZYPID *vPID,float pv,float *qValue)
{
float thisError;
float deltaError;
thisError=vPID->setpoint-pv; //Рассчитываем значение отклонения
deltaError=thisError-vPID->lasterror; //Рассчитываем шаг отклонения
qValue[0]=6.0*thisError/(vPID->maximum-vPID->minimum);
qValue[1]=3.0*deltaError/(vPID->maximum-vPID->minimum);
}
Для количественной функции на самом деле можно использовать различные функции в зависимости от потребностей, такие как функция кривой падения, функция нормального распределения и другие унарные функции и т. д., но для нашей цели достаточно использования линейной функции. Существует также много вариантов функции принадлежности. Здесь мы используем треугольную функцию принадлежности с небольшим объемом вычислений:
/*Функция расчета членства*/
static void CalcMembership(float *ms,float qv,int * index)
{
if((qv>=-NB)&&(qv<-NM))
{
index[0]=0;
index[1]=1;
ms[0]=-0.5*qv-2.0; //y=-0.5x-2.0
ms[1]=0.5*qv+3.0; //y=0.5x+3.0
}
else if((qv>=-NM)&&(qv<-NS))
{
index[0]=1;
index[1]=2;
ms[0]=-0.5*qv-1.0; //y=-0.5x-1.0
ms[1]=0.5*qv+2.0; //y=0.5x+2.0
}
else if((qv>=-NS)&&(qv<ZO))
{
index[0]=2;
index[1]=3;
ms[0]=-0.5*qv; //y=-0.5x
ms[1]=0.5*qv+1.0; //y=0.5x+1.0
}
else if((qv>=ZO)&&(qv<PS))
{
index[0]=3;
index[1]=4;
ms[0]=-0.5*qv+1.0; //y=-0.5x+1.0
ms[1]=0.5*qv; //y=0.5x
}
else if((qv>=PS)&&(qv<PM))
{
index[0]=4;
index[1]=5;
ms[0]=-0.5*qv+2.0; //y=-0.5x+2.0
ms[1]=0.5*qv-1.0; //y=0.5x-1.0
}
else if((qv>=PM)&&(qv<=PB))
{
index[0]=5;
index[1]=6;
ms[0]=-0.5*qv+3.0; //y=-0.5x+3.0
ms[1]=0.5*qv-2.0; //y=0.5x-2.0
}
}
Далее мы реализуем функцию нечеткого вывода. С учетом предыдущей основы и библиотеки нечетких правил функция нечетких вычислений на самом деле проста.
/*Операция дефаззификации,Корректировка в соответствии с конкретной функцией количественного определения и функцией принадлежности*/
статическая пустота FuzzyComputation (FUZZYPID *vPID,float pv,float *deltaK)
{
float qValue[2]={0,0}; //Количественное значение отклонения и его приращение
int indexE[2]={0,0}; //Индекс принадлежности отклонения
float msE[2]={0,0}; //Степень принадлежности отклонения
int indexEC[2]={0,0}; //Индекс членства приращения отклонения
float msEC[2]={0,0}; //Степень принадлежности приращения отклонения
float qValueK[3];
LinearQuantization(vPID,pv,qValue);
CalcMembership(msE,qValue[0],indexE);
CalcMembership(msEC,qValue[1],indexEC);
qValueK[0]=msE[0]*(msEC[0]*ruleKp[indexE[0]][indexEC[0]]+msEC[1]*ruleKp[indexE[0]][indexEC[1]])
+msE[1]*(msEC[0]*ruleKp[indexE[1]][indexEC[0]]+msEC[1]*ruleKp[indexE[1]][indexEC[1]]);
qValueK[1]=msE[0]*(msEC[0]*ruleKi[indexE[0]][indexEC[0]]+msEC[1]*ruleKi[indexE[0]][indexEC[1]])
+msE[1]*(msEC[0]*ruleKi[indexE[1]][indexEC[0]]+msEC[1]*ruleKi[indexE[1]][indexEC[1]]);
qValueK[2]=msE[0]*(msEC[0]*ruleKd[indexE[0]][indexEC[0]]+msEC[1]*ruleKd[indexE[0]][indexEC[1]])
+msE[1]*(msEC[0]*ruleKd[indexE[1]][indexEC[0]]+msEC[1]*ruleKd[indexE[1]][indexEC[1]]);
deltaK[0]=LinearRealization(vPID->maxdKp,vPID->mindKp,qValueK[0]);
deltaK[1]=LinearRealization(vPID->maxdKi,vPID->mindKi,qValueK[1]);
deltaK[2]=LinearRealization(vPID->maxdKd,vPID->mindKd,qValueK[2]);
}
На этом этапе приращения Kp, Ki и Kd получены. Осталось только скорректировать три параметра и использовать их для реализации ПИД-регулирования. Они ничем не отличаются от обычного приращения ПИД-регулятора и не будут описываться снова.
Алгоритм нечеткого ПИД — это применение нечеткого алгоритма при настройке параметров ПИД, которое отличается от чистого алгоритма нечеткого управления. Обычные нечеткие регуляторы подходят для прямого расчета выходных сигналов регулятора, в то время как нечеткие ПИД-алгоритмы используют нечеткие алгоритмы для изменения параметров ПИД, а окончательный выходной сигнал регулятора по-прежнему реализуется ПИД-регулятором.
Само по себе нечеткое управление очень сложно и имеет множество специфических методов применения. Большинство из них являются профессиональными контроллерами для конкретных объектов и вышли из категории универсальных контроллеров типа ПИД. Кроме того, более популярный нечеткий многопараметрический регулятор относится к категории усовершенствованных систем управления (APC), о которых мы еще поговорим, когда у нас будет такая возможность.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/134973.html Исходная ссылка: https://javaforall.cn