LAB 02 | المختبر 02

Fuzzy Logic Voltage Control

التحكم بالجهد باستخدام المنطق الضبابي
Membership Functions, Fuzzification, Rules, Defuzzification, and MATLAB
دوال العضوية والتضييب والقواعد وإزالة الضبابية والتطبيق باستخدام 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:

Vref = 1.00 pu

The measured voltage is:

V = 0.96 pu

Define the voltage error:

e = Vref - V

therefore:

e = 1.00 - 0.96 = 0.04 pu

1. مسألة التحكم بالجهد

لنفترض وجود عقدة في شبكة توزيع كهربائية، والجهد المرجعي المطلوب:

Vref = 1.00 pu

بينما الجهد المقاس:

V = 0.96 pu

نعرّف خطأ الجهد:

e = Vref - V = 0.04 pu
لأن الخطأ موجب، فهذا يعني أن الجهد الفعلي أقل من الجهد المرجعي.

2. Fuzzy Input Sets

We define three fuzzy sets for the voltage error:

Negative

Voltage is above the reference.

Zero

Voltage is close to the desired value.

Positive

Voltage is below the reference.

2. مجموعات دخل الخطأ

نستخدم ثلاث مجموعات ضبابية:

  • Negative | سالب
  • Zero | صفر
  • Positive | موجب

3. Membership Functions

Let the error range be:

-0.10 ≤ e ≤ 0.10 pu
Negative Zero Positive -0.10 0 0.10 Voltage Error e [pu]

3. دوال العضوية

نعرّف مجال خطأ الجهد من -0.10 إلى 0.10 pu، ثم نغطيه بثلاث مجموعات متداخلة.

التداخل يسمح للمتحكم بالانتقال بسلاسة بين الحالات بدل التبديل المفاجئ.

4. Triangular Membership Function

We use a triangular function:

μ(x;a,b,c) = max(min((x-a)/(b-a),(c-x)/(c-b)),0)

This is convenient for MATLAB implementation.

4. دالة العضوية المثلثية

μ(x;a,b,c) = max(min((x-a)/(b-a),(c-x)/(c-b)),0)

هذه الصيغة تجمع الجزأين الصاعد والهابط في علاقة برمجية واحدة.

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:

e = 0.04 pu

calculate:

mN = muN(e);
mZ = muZ(e);
mP = muP(e);

For the selected membership functions, approximately:

μNegative ≈ 0
μZero ≈ 0.2
μPositive ≈ 0.8

7. التضييب

عند الخطأ e=0.04 pu ينتمي الخطأ بدرجة كبيرة إلى المجموعة Positive وبدرجة صغيرة إلى المجموعة Zero.

لذلك سيتم تفعيل أكثر من قاعدة في الوقت نفسه.

8. Output Variable

Let the fuzzy-controller output be a reactive-power correction:

ΔQ [pu]

We define three singleton output values:

Decrease Q = -0.10
No Change = 0
Increase Q = +0.10

8. متغير الخرج

خرج المتحكم هو مقدار تصحيح في القدرة الردية:

ΔQ

نستخدم ثلاث قيم بسيطة: تقليل القدرة الردية، عدم تغييرها، أو زيادتها.

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:

α₁ = μNegative(e)
α₂ = μZero(e)
α₃ = μPositive(e)
a1 = mN;
a2 = mZ;
a3 = mP;

10. تفعيل القواعد

درجة تفعيل كل قاعدة تساوي درجة انتماء الخطأ إلى المجموعة المقابلة.

11. Defuzzification Using Weighted Average

Because we use singleton outputs, a convenient defuzzification equation is:

ΔQ = (α₁q₁ + α₂q₂ + α₃q₃) / (α₁ + α₂ + α₃)

where:

q₁=-0.10, q₂=0, q₃=0.10

11. إزالة الضبابية باستخدام المتوسط الموزون

بما أن قيم الخرج عبارة عن Singletons، يمكن حساب الخرج العددي باستخدام المتوسط الموزون.

ΔQ = Σ αᵢqᵢ / Σαᵢ

12. Numerical Example

Assume:

α₁=0
α₂=0.2
α₃=0.8

then:

ΔQ = [0(-0.10)+0.2(0)+0.8(0.10)] / (0+0.2+0.8)
ΔQ = 0.08 pu
The controller requests additional reactive power because the measured voltage is low.

12. مثال عددي

بما أن الخطأ موجب بدرجة عالية، تكون قاعدة زيادة القدرة الردية هي الأكثر تأثيرًا.

ΔQ = 0.08 pu
الخرج موجب، أي أن المتحكم يطلب زيادة القدرة الردية للمساعدة في رفع الجهد.

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:

e → ΔQ
e < 0

Voltage is too high → reduce reactive power.

e ≈ 0

Voltage is close to reference → little or no action.

e > 0

Voltage is too low → increase reactive power.

15. فهم منحني المتحكم

يوضح المنحني كيف يتحول خطأ الجهد بصورة سلسة إلى أمر قدرة ردية.

هذه السلاسة هي إحدى الميزات الرئيسية للمنطق الضبابي مقارنة بقواعد تشغيل حادة ومفاجئة.

16. Physical Interpretation

In many simplified voltage-control situations:

Increase Q → Voltage tends to rise
Decrease Q → Voltage tends to fall
The exact sensitivity depends on the network, operating point, line parameters, and converter/control configuration.

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:

e, μNegative, μZero, μPositive, ΔQ

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);
A wider Zero set makes the controller less aggressive near the reference voltage.

18. التجربة 2 — تغيير عرض دالة العضوية

عندما تصبح مجموعة Zero أعرض، يصبح المتحكم أقل حساسية للأخطاء الصغيرة.

19. Experiment 3 — Change Output Strength

Compare:

qN = -0.10;
qP =  0.10;

with:

qN = -0.20;
qP =  0.20;
Larger singleton magnitudes produce stronger control actions.

19. التجربة 3 — تغيير قوة خرج المتحكم

زيادة قيم qN وqP تجعل استجابة المتحكم أقوى لنفس خطأ الجهد.

20. Optional Closed-Loop Simulation

We can create a very simple educational voltage-response model:

V(k+1) = V(k) + KQ ΔQ(k)

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. محاكاة اختيارية للحلقة المغلقة

نستخدم نموذجًا تعليميًا مبسطًا:

V(k+1) = V(k) + KQ ΔQ(k)

لمشاهدة كيف يقوم المتحكم تدريجيًا بإعادة الجهد نحو القيمة المرجعية.

هذا نموذج تعليمي مبسط، وليس نموذج تدفق قدرة كامل للشبكة.

21. Lab Tasks

  1. Run the complete fuzzy-controller program.
  2. Record membership degrees for V=0.96 pu.
  3. Calculate ΔQ manually and compare with MATLAB.
  4. Test five different voltage values.
  5. Change the width of the Zero membership function.
  6. Change the output singleton values.
  7. Plot the controller characteristic e→ΔQ.
  8. Run the optional closed-loop example.
  9. Explain the physical meaning of the resulting control action.

21. مهام المختبر

  1. شغّل البرنامج الكامل.
  2. سجل درجات العضوية عند V=0.96 pu.
  3. احسب ΔQ يدويًا وقارنه بنتيجة MATLAB.
  4. اختبر خمس قيم مختلفة للجهد.
  5. غيّر عرض مجموعة Zero.
  6. غيّر قيم الخرج Singleton.
  7. ارسم العلاقة e→ΔQ.
  8. نفّذ مثال الحلقة المغلقة الاختياري.
  9. اشرح المعنى الفيزيائي لأمر التحكم الناتج.

📝 Questions

  1. Why do fuzzy membership functions overlap?
  2. What is fuzzification?
  3. Why can several rules be active simultaneously?
  4. What does a positive voltage error mean?
  5. Why does a positive error produce positive ΔQ in this example?
  6. What is the effect of widening the Zero membership function?
  7. What is the effect of increasing qP?
  8. Why is the fuzzy-control characteristic smooth?

📝 أسئلة المختبر

  1. لماذا تتداخل دوال العضوية الضبابية؟
  2. ما المقصود بالتضييب؟
  3. لماذا يمكن تفعيل عدة قواعد في الوقت نفسه؟
  4. ماذا يعني خطأ جهد موجب؟
  5. لماذا يؤدي الخطأ الموجب إلى ΔQ موجبة في هذا المثال؟
  6. ماذا يحدث عند توسيع دالة العضوية Zero؟
  7. ماذا يحدث عند زيادة qP؟
  8. لماذا تكون استجابة المتحكم الضبابي سلسة؟