Fuzzy Logic Voltage Control
دوال العضوية والتضييب والقواعد وإزالة الضبابية والتطبيق باستخدام MATLAB
🎯 Lab Objectives
- Implement fuzzy membership functions in MATLAB.
- Calculate voltage error.
- Convert a crisp voltage error into fuzzy memberships.
- Evaluate fuzzy IF–THEN rules.
- Calculate a crisp reactive-power control action.
- Plot membership functions and controller response.
- Understand the physical meaning of fuzzy voltage control.
🎯 أهداف المختبر
- تنفيذ دوال العضوية الضبابية في MATLAB.
- حساب خطأ الجهد.
- تحويل خطأ الجهد العددي إلى درجات عضوية ضبابية.
- تقييم قواعد IF–THEN.
- حساب أمر قدرة ردية عددي.
- رسم دوال العضوية واستجابة المتحكم.
- فهم المعنى الفيزيائي للتحكم الضبابي بالجهد.
1. Voltage-Control Problem
Consider a bus in an electrical distribution network.
The desired voltage is:
The measured voltage is:
Define the voltage error:
therefore:
1. مسألة التحكم بالجهد
لنفترض وجود عقدة في شبكة توزيع كهربائية، والجهد المرجعي المطلوب:
بينما الجهد المقاس:
نعرّف خطأ الجهد:
2. Fuzzy Input Sets
We define three fuzzy sets for the voltage error:
Voltage is above the reference.
Voltage is close to the desired value.
Voltage is below the reference.
2. مجموعات دخل الخطأ
نستخدم ثلاث مجموعات ضبابية:
- Negative | سالب
- Zero | صفر
- Positive | موجب
3. Membership Functions
Let the error range be:
3. دوال العضوية
نعرّف مجال خطأ الجهد من -0.10 إلى 0.10 pu، ثم نغطيه بثلاث مجموعات متداخلة.
4. Triangular Membership Function
We use a triangular function:
This is convenient for MATLAB implementation.
4. دالة العضوية المثلثية
هذه الصيغة تجمع الجزأين الصاعد والهابط في علاقة برمجية واحدة.
5. MATLAB Membership Function
trimf = @(x,a,b,c) ...
max(min((x-a)/(b-a),(c-x)/(c-b)),0);
This anonymous MATLAB function evaluates a triangular membership function.
5. دالة العضوية في MATLAB
يمثل هذا السطر دالة عضوية مثلثية عامة يمكن استخدامها مع مجموعات متعددة.
6. Define the Error Membership Sets
muN = @(e) trimf(e,-0.10,-0.05,0.00);
muZ = @(e) trimf(e,-0.05, 0.00,0.05);
muP = @(e) trimf(e, 0.00, 0.05,0.10);
where:
- muN = Negative membership
- muZ = Zero membership
- muP = Positive membership
6. تعريف مجموعات خطأ الجهد
نعرّف ثلاث دوال عضوية تمثل الخطأ السالب والصفر والخطأ الموجب.
7. Fuzzification
For:
calculate:
mN = muN(e);
mZ = muZ(e);
mP = muP(e);
For the selected membership functions, approximately:
7. التضييب
عند الخطأ e=0.04 pu ينتمي الخطأ بدرجة كبيرة إلى المجموعة Positive وبدرجة صغيرة إلى المجموعة Zero.
8. Output Variable
Let the fuzzy-controller output be a reactive-power correction:
We define three singleton output values:
8. متغير الخرج
خرج المتحكم هو مقدار تصحيح في القدرة الردية:
نستخدم ثلاث قيم بسيطة: تقليل القدرة الردية، عدم تغييرها، أو زيادتها.
9. Fuzzy Rule Base
| Rule | IF Voltage Error... | THEN ΔQ... |
|---|---|---|
| R1 | Negative | Decrease Q |
| R2 | Zero | No Change |
| R3 | Positive | Increase Q |
9. قاعدة القواعد الضبابية
- إذا كان الخطأ سالبًا → قلل Q.
- إذا كان الخطأ قريبًا من الصفر → لا تغيّر Q.
- إذا كان الخطأ موجبًا → زد Q.
10. Rule Activation
The activation levels are simply the input membership degrees:
a1 = mN;
a2 = mZ;
a3 = mP;
10. تفعيل القواعد
درجة تفعيل كل قاعدة تساوي درجة انتماء الخطأ إلى المجموعة المقابلة.
11. Defuzzification Using Weighted Average
Because we use singleton outputs, a convenient defuzzification equation is:
where:
11. إزالة الضبابية باستخدام المتوسط الموزون
بما أن قيم الخرج عبارة عن Singletons، يمكن حساب الخرج العددي باستخدام المتوسط الموزون.
12. Numerical Example
Assume:
then:
12. مثال عددي
بما أن الخطأ موجب بدرجة عالية، تكون قاعدة زيادة القدرة الردية هي الأكثر تأثيرًا.
13. MATLAB Controller Calculation
Vref = 1.00;
V = 0.96;
e = Vref - V;
mN = muN(e);
mZ = muZ(e);
mP = muP(e);
qN = -0.10;
qZ = 0.00;
qP = 0.10;
dQ = (mN*qN + mZ*qZ + mP*qP) / ...
(mN + mZ + mP);
13. حساب خرج المتحكم في MATLAB
يحسب البرنامج أولًا خطأ الجهد، ثم درجات العضوية، وبعدها يجمع نتائج القواعد لإنتاج ΔQ.
14. Complete MATLAB Program
clear; clc; close all;
% ------------------------------------------------
% Fuzzy Logic Voltage Controller
% ------------------------------------------------
Vref = 1.00;
V = 0.96;
% Voltage error
e = Vref - V;
% Triangular membership function
trimf = @(x,a,b,c) ...
max(min((x-a)/(b-a),(c-x)/(c-b)),0);
% Input fuzzy sets
muN = @(e) trimf(e,-0.10,-0.05,0.00);
muZ = @(e) trimf(e,-0.05, 0.00,0.05);
muP = @(e) trimf(e, 0.00, 0.05,0.10);
% Fuzzification
mN = muN(e);
mZ = muZ(e);
mP = muP(e);
% Singleton output values
qN = -0.10;
qZ = 0.00;
qP = 0.10;
% Defuzzification
den = mN + mZ + mP;
if den > 0
dQ = (mN*qN + mZ*qZ + mP*qP)/den;
else
dQ = 0;
end
% Display results
fprintf('Vref = %.3f pu\n',Vref)
fprintf('V = %.3f pu\n',V)
fprintf('Error e = %.3f pu\n\n',e)
fprintf('muNegative = %.3f\n',mN)
fprintf('muZero = %.3f\n',mZ)
fprintf('muPositive = %.3f\n\n',mP)
fprintf('Reactive power correction dQ = %.4f pu\n',dQ)
% ------------------------------------------------
% Plot membership functions
% ------------------------------------------------
eVec = linspace(-0.10,0.10,500);
N = zeros(size(eVec));
Z = zeros(size(eVec));
P = zeros(size(eVec));
for k = 1:length(eVec)
N(k) = muN(eVec(k));
Z(k) = muZ(eVec(k));
P(k) = muP(eVec(k));
end
figure
plot(eVec,N,'LineWidth',1.6)
hold on
plot(eVec,Z,'LineWidth',1.6)
plot(eVec,P,'LineWidth',1.6)
xline(e,'--','Current Error')
grid on
xlabel('Voltage Error e [pu]')
ylabel('Membership Degree')
legend('Negative','Zero','Positive')
title('Fuzzy Membership Functions')
% ------------------------------------------------
% Controller characteristic
% ------------------------------------------------
dQVec = zeros(size(eVec));
for k = 1:length(eVec)
aN = muN(eVec(k));
aZ = muZ(eVec(k));
aP = muP(eVec(k));
den = aN + aZ + aP;
if den > 0
dQVec(k) = ...
(aN*qN + aZ*qZ + aP*qP)/den;
else
dQVec(k) = 0;
end
end
figure
plot(eVec,dQVec,'LineWidth',1.6)
grid on
xlabel('Voltage Error e [pu]')
ylabel('Reactive Power Correction \DeltaQ [pu]')
title('Fuzzy Voltage Controller Characteristic')
14. البرنامج الكامل في MATLAB
يحتوي البرنامج على جميع مراحل المتحكم: حساب الخطأ، التضييب، تقييم القواعد، إزالة الضبابية، رسم دوال العضوية، ورسم العلاقة بين خطأ الجهد وأمر القدرة الردية.
15. Understanding the Controller Characteristic
The second figure shows:
Voltage is too high → reduce reactive power.
Voltage is close to reference → little or no action.
Voltage is too low → increase reactive power.
15. فهم منحني المتحكم
يوضح المنحني كيف يتحول خطأ الجهد بصورة سلسة إلى أمر قدرة ردية.
16. Physical Interpretation
In many simplified voltage-control situations:
16. التفسير الفيزيائي
في كثير من حالات التحكم المبسطة، تساعد زيادة حقن القدرة الردية على رفع الجهد، بينما يساعد تقليلها على خفضه.
17. Experiment 1 — Change the Measured Voltage
Try:
V = 0.92;
V = 0.98;
V = 1.00;
V = 1.03;
V = 1.08;
Record the resulting:
17. التجربة 1 — تغيير الجهد المقاس
غيّر الجهد ولاحظ كيف تتغير درجات العضوية وأمر القدرة الردية.
18. Experiment 2 — Change Membership Width
Compare:
muZ = @(e) trimf(e,-0.05,0,0.05);
with a wider Zero set:
muZ = @(e) trimf(e,-0.08,0,0.08);
18. التجربة 2 — تغيير عرض دالة العضوية
عندما تصبح مجموعة Zero أعرض، يصبح المتحكم أقل حساسية للأخطاء الصغيرة.
19. Experiment 3 — Change Output Strength
Compare:
qN = -0.10;
qP = 0.10;
with:
qN = -0.20;
qP = 0.20;
19. التجربة 3 — تغيير قوة خرج المتحكم
زيادة قيم qN وqP تجعل استجابة المتحكم أقوى لنفس خطأ الجهد.
20. Optional Closed-Loop Simulation
We can create a very simple educational voltage-response model:
where KQ is an assumed voltage sensitivity.
KQ = 0.10;
V = 0.94;
for k = 1:20
e = Vref - V;
mN = muN(e);
mZ = muZ(e);
mP = muP(e);
den = mN + mZ + mP;
if den > 0
dQ = (mN*qN + mZ*qZ + mP*qP)/den;
else
dQ = 0;
end
V = V + KQ*dQ;
Vhist(k) = V;
end
figure
plot(1:20,Vhist,'o-','LineWidth',1.6)
hold on
yline(Vref,'--')
grid on
xlabel('Iteration')
ylabel('Voltage [pu]')
title('Closed-Loop Fuzzy Voltage Control')
20. محاكاة اختيارية للحلقة المغلقة
نستخدم نموذجًا تعليميًا مبسطًا:
لمشاهدة كيف يقوم المتحكم تدريجيًا بإعادة الجهد نحو القيمة المرجعية.
21. Lab Tasks
- Run the complete fuzzy-controller program.
- Record membership degrees for V=0.96 pu.
- Calculate ΔQ manually and compare with MATLAB.
- Test five different voltage values.
- Change the width of the Zero membership function.
- Change the output singleton values.
- Plot the controller characteristic e→ΔQ.
- Run the optional closed-loop example.
- Explain the physical meaning of the resulting control action.
21. مهام المختبر
- شغّل البرنامج الكامل.
- سجل درجات العضوية عند V=0.96 pu.
- احسب ΔQ يدويًا وقارنه بنتيجة MATLAB.
- اختبر خمس قيم مختلفة للجهد.
- غيّر عرض مجموعة Zero.
- غيّر قيم الخرج Singleton.
- ارسم العلاقة e→ΔQ.
- نفّذ مثال الحلقة المغلقة الاختياري.
- اشرح المعنى الفيزيائي لأمر التحكم الناتج.
📝 Questions
- Why do fuzzy membership functions overlap?
- What is fuzzification?
- Why can several rules be active simultaneously?
- What does a positive voltage error mean?
- Why does a positive error produce positive ΔQ in this example?
- What is the effect of widening the Zero membership function?
- What is the effect of increasing qP?
- Why is the fuzzy-control characteristic smooth?
📝 أسئلة المختبر
- لماذا تتداخل دوال العضوية الضبابية؟
- ما المقصود بالتضييب؟
- لماذا يمكن تفعيل عدة قواعد في الوقت نفسه؟
- ماذا يعني خطأ جهد موجب؟
- لماذا يؤدي الخطأ الموجب إلى ΔQ موجبة في هذا المثال؟
- ماذا يحدث عند توسيع دالة العضوية Zero؟
- ماذا يحدث عند زيادة qP؟
- لماذا تكون استجابة المتحكم الضبابي سلسة؟