برق، مهندسی 331 بازدید

توان خروجی یک نیروگاه معمولی را که برخلاف نیروگاه خورشیدی که به ماهیت منبع انرژی ‎(خورشید)‎ و سایر عوامل محیطی نظیر دمای محیط وابسته است، می‌توان به‌ سادگی کنترل کرد. مشکل اصلی سیستم‌های فتوولتاییک، نامعینی توان خروجی آن‌هاست. بنابراین، برای استفاده مؤثر از این سیستم‌ها، باید توان خروجی آن‌ها را پیش‌بینی کرد. با پیش‌بینی دقیق توان خروجی سیستم می‌توان بر ماهیت نامعین توان تولیدی غلبه کرد و در نتیجه قابلیت اطمینان کل سیستم را بهبود داد. مدل‌سازی یکی از راه‌های انجام این کار است. در این آموزش، با مدل سازی آرایه فتوولتاییک آشنا می‌شویم.

مدل سازی آرایه فتوولتاییک با شبکه عصبی

مدل‌های مبتنی بر شبکه عصبی مصنوعی ‎(ANN)‎ راهکاری برای حل مشکل شرایط آب ‌و هوایی متغیر هستند که رابطه غیرخطی بین متغیرهای ورودی و خروجی سیستم پیچیده را توصیف می‌کنند. توانایی خودیادگیری شبکه‌های عصبی، مزیت اصلی این مدل‌ها محسوب می‌شود. بنابراین، این مدل‌ها حین عملکرد نامعین، مانند توان خروجی آرایه سیستم، دقیق هستند.

شبکه عصبی مصنوعی، مجموعه‌ای از تکنیک‌های پردازش اطلاعات با الهام از رویکرد اطلاعات پردازش سیستم عصبی بیولوژیکی است. یک ‎ANN‎ از واحدهای جزئی موازی به نام نرون تشکیل شده است. نرون‌ها به وسیله شمار زیادی از پیوندهای وزنی به هم وصل می‌شوند که امکان انتقال سیگنال یا اطلاعات را دارند. یک نرون، ورودی‌ها را از طریق اتصالات ورودی خود دریافت و ورودی‌ها و خروجی‌ها را ترکیب می‌کند. مفهوم اصلی شبکه‌های عصبی ساختار سیستم پردازش اطلاعات، مشابه تکنیک تفکر انسان است. شبکه عصبی می‌تواند رابطه بین متغیرهای ورودی و خروجی را با مطالعه داده‌های ثبت شده قبلی یاد بگیرد. مزیت اصلی ‎ANN‎ این است که با استفاده از آن می‌توان برای مسائل پیچیده مربوط به فناوری‌های معمول که راه‌حل الگوریتمی ندارند یا برای حل نیازمند یک الگوریتم پیچیده‌تر هستند، راه‌حل مناسبی ارائه کرد.

برخی از شبکه‌های عصبی مختلف، عبارتند از: «شبکه‌های عصبی تابع پایه شعاعی» (‎Radial Basis Fnction Networks) یا RBF، «شبکه‌های پیوند تابعی» (Functional Link Networks)، «شبکه‌های عصبی رگرسیون عمومی» (General Regression Neural Networks) یا GRNN، «شبکه‌های کوهونن» (Kohonen Networks)، «شبکه‌های رو به‌ جلوی آبشاری» (Cascade Forward Neural Network) یا CFNN، «شبکه‌های عصبی پیش‌خور» (Feedforward Neural Network) یا FFNN، «شبکه‌های گرام-شارلی» (‎Gram–Charlier Networks‎)، «کوانتیزاسیون بردار یادگیری» (Learning Vector Quantization)، «شبکه‌های هب» (Hebb Networks)، «شبکه‌های آدلاین» (Adaline Networks)، «شبکه‌های غیرمشارکتی» (‎Heteroassociative Networks)، «شبکه‌های بازگشتی» (Recurrent Networks) و «شبکه‌های ترکیبی» (Hybrid networks) هستند.

در این آموزش، شبکه‌های ‎FFNN‎ ،‎GRNN‎ و ‎CFNN را برای مدل‌سازی جریان خروجی آرایه ‎فتوولتاییک‎ انتخاب می‌کنیم. برای انتخاب بهترین مدل جهت این کار، شبکه‌های عصبی مختلف مانند ‎CFNN‎ و FFNN‎ مقایسه شده‌اند. این مدل‌ها با استفاده از متلب تشکیل شده، آموزش دیده و اعتبارسنجی می‌شوند.

GRNN‎ یک شبکه مبتنی بر احتمالات است. این شبکه وقتی متغیر هدف قطعی است طبقه‌بندی انجام می‌دهد، در حالی که وقتی متغیر هدف پیوسته باشد رگرسیون انجام می‌دهد. ‎GRNN‎ها شامل لایه‌های ورودی، الگو، جمع‌کننده و خروجی هستند. شکل ‎۱ نمودار کلی GRNN‎ را نشان می‌دهد.

شکل ۱: نمودار شماتیکی ‎GRNN
شکل ۱: نمودار شماتیکی ‎GRNN

‎DFNN یک شبکه ‎«خودسازمانده»‎ و به‌ نوعی شبیه FFNN‎ است. هر دو شبکه مذکور از الگوریتم پس‌انتشار (BP) برای به‌روزرسانی وزن‌ها استفاده می‌کنند. شکل ۲ نمودار شماتیک کلی ‎CFNN را نشان می‌دهد.

شکل ۲: نمودار شماتیکی CFNN
شکل ۲: نمودار شماتیکی CFNN

از سوی دیگر، شکل۳ نمودار شماتیک FFNN‎ را نشان می‌دهد. این شبکه شامل لایه‌های ورودی، مخفی و خروجی است. پیش‌خور بدین معنی است که مقادیر فقط از لایه ورودی به لایه مخفی و سپس به لایه‌های خروجی حرکت می‌کنند.

شکل۳: نمودار شماتیکی FFNN
شکل۳: نمودار شماتیکی FFNN

بدون آموزش دادن و تخمین خطای تعمیم، هیچ قاعده مستقیمی برای یافتن تعداد بهینه نرون‌های مخفی وجود ندارد. با این‌ حال، اگر تعداد نرون‌های مخفی کم باشد، ممکن است کم‌برازش رخ دهد که سبب خطای آموزش و خطای تعمیم بالا خواهد شد. هنگامی‌ که تعداد زیادی نرون در لایه مخفی اعمال شود، بیش‌برازش و واریانس بالا رخ می‌دهد. معمولاً تعداد گره‌های مخفی را می‌توان با برخی قوانین سرانگشتی به‌ دست آورد. برای مثال، تعداد نرون‌های لایه مخفی باید عددی بین اندازه لایه ورودی و اندازه لایه خروجی باشد. برخی نیز پیشنهاد کرده‌اند که تعداد نرون‌های مخفی نباید بیش از دو برابر تعداد ورودی‌ها باشد. در جایی دیگر توصیه شده که تعداد گره‌های مخفی ‎دو سوم‎ یا ‎70‎ تا ‎90 درصد تعداد گره‌های ورودی باشد. بر اساس پیشنهادهای فوق، تعداد نرون‌های لایه مخفی مدل‌های ‎FFNN‎ و CFNN‎ برابر با دو گره مخفی در نظر گرفته شده‌اند.

برای ارزیابی مدل پیشنهادی، از سه خطای آماری استفاده شده است که عبارت‌اند از: «درصد میانگین قدر مطلق خطا» (Mean Absolute Percentage Error) یا MAPE، «خطای انحراف میانگین» (Mean Bias Error) یا MBE و «خطای جذر میانگین مربعات» (Root Mean Square Error) یا ‎RMSE‎.

دقت کلی یک شبکه عصبی را می‌توان با ‎MAPE‎ بررسی کرد. ‎MAPE‎ به صورت زیر تعریف می‌شود:

$$ \large ‎\mathrm { M A P E } = \dfrac { 1 } { n } \sum \limits _ { t = 1 } ^ { n } { \left \vert \dfrac { M – P } { M } \right \vert }‎ $$‎

که در آن، ‎$$M$$‎ داده‌های اندازه‌گیری‌ شده و ‎$$P$$‎ داده‌های پیش‌بینی‌ شده هستند.

از سوی دیگر، شاخص انحراف میانگین مقادیر پیش‌بینی‌ شده از داده‌های اندازه‌گیری‌ شده را می‌توان با ‎MBE‎ بیان کرد. مقدار MBE‎ مثبت نشان‌ دهنده تخمین بیش‌ از حد است. اطلاعات عملکرد طولانی‌ مدت مدل شبکه عصبی نیز با MBE‎ ارزیابی می‌شود. MBE‎ را می‌توان به‌صورت زیر محاسبه کرد:

$$ \large ‎‎\mathrm { M B E } = \dfrac { 1 } { n } \sum \limits _ { i = 1 } ^ { n } { ( P _ i – M _ i ) }‎ $$

که در آن، ‎$$M$$‎ داده‌های اندازه‌گیری‌شده و $$P$$ داده‌های پیش‌بینی‌شده هستند.

شاخص خطای آماری که در این آموزش استفاده می‌شود ‎RMSE‎ است. اطلاعات عملکرد کوتاه‌مدت مدل را می‌توان با ‎RMSE‎ ارزیابی کرد. این، نشان‌ دهنده اندازه‌گیری تغییرات داده‌های پیش‌بینی‌ شده حول داده‌های اندازه‌گیری‌ شده است. همچنین ‎RMSE‎ نشان‌ دهنده بازدهی مدل تشکیل‌ شده در پیش‌بینی مقادیر بعدی است. یک ‎RMSE‎ مثبت و بزرگ، انحراف بزرگ در داده‌های پیش‌بینی‌ شده از داده‌های اندازه‌گیری‌ شده را نشان می‌دهد. ‎RMSE را می‌توان با فرمول زیر محاسبه کرد:

$$ \large ‎\mathrm { R MS E } = \sqrt { \dfrac { 1 } { n } \sum \limits _ { i = 1 } ^ { n } { ( P _ i – M _ i ) ^ 2 } } $$‎

مثال ‎مدل سازی آرایه فتوولتاییک با شبکه عصبی

مدلی را در متلب تشکیل دهید که سه مدل فوق را با هم مقایسه کند. نتایج منبع داده‌های ‎«Source 2»‎ را آزمایش و آن‌ها را با مدل‌های تجربی و آماری مقایسه کنید.

حل: برنامه زیر، پاسخ این مسئله است:

clc
%Modeling of PV systems using MATLAB
fileName = PV Modeling Book Source.xls';
sheetName = Source 2' ;
G=xlsread(fileName, sheetName , 'A2:A36002');
Temp=xlsread(fileName, sheetName , 'B2:B36002');
I_PV=xlsread(fileName, sheetName , 'C2:C36002');
%-------------------------------------------------------
---G_Test=xlsread(fileName, sheetName , 'A36003:A43201');
Temp_Test=xlsread(fileName, sheetName , 'B36003:B43201');
I_PV_Test=xlsread(fileName, sheetName , 'C36003:C43201');
%-----------------------ANNmodels-------------------------
%---------inputs-------
inputs = [G, Temp];
I=inputs';
targets= I_PV;
T=targets';
% %----------------------
k=menu('chose the network type','FFANN','GRNN');
if k==1;
net = newff(I,T,5);
end
if k==2;
net = newcf(I,T,2);
end
%---------------------
Y = sim(net,I);
net.trainParam.epochs = 100;
net = train(net,I,T);
test=[G_Test, Temp_Test];
Test1=test';
C_ANN1 = sim(net,Test1);
C_ANN= C_ANN1';
%========End of ANN=====================================
%=======Theoretical current =========================
C_th=(G_Test./1000)*7.91;
%==============Regression==================================
C_Reg=-1.17112+0.009*G+0.055*Temp;
x_Reg=1:1:26;
%========plotting results=============================
plot(I_PV,'red')
plot(C_ANN)
hold on
plot(C_Test, 'red');
hold on
plot(C_th, 'g')
hold on
plot (x_Reg,C_Reg)
%----- ---------Modifying C_Test for Error calculation---
---
steps=5760;
x_C_Test=C_Test;
AV_C_Test=[];
for i=1:steps:round(length(x_C_Test)/steps)*steps
AV_C_Test=[AV_C_Test;sum(x_C_Test(i:i+steps-1))/
steps];
end
AV_C_Test;
%----- ---------Modifying C_ANN for Error calculation---
----
steps=5760;
x_C_ANN=C_ANN;
AV_C_ANN=[];
for i=1:steps:round(length(x_C_ANN)/steps)*steps
AV_C_ANN=[AV_C_ANN;sum(x_C_ANN(i:i+steps-1))/steps];
end
AV_C_ANN;
%----------------------------------------------------------
n_ANN = length(AV_C_ANN);
E3_Hour=AV_C_Test-AV_C_ANN;
ANN_MAPE= abs(E3_Hour./AV_C_Test);
ANN_meanMAPE1 = sum(ANN_MAPE)/n_ANN;
ANN_meanMAPE=ANN_meanMAPE1*100
ANN_RMSE= sqrt(sum((AV_C_ANN-AV_C_Test).^2/n_ANN));
ANN_MBE=sum(AV_C_ANN-AV_C_Test)/n_ANN;
SUM=(sum(AV_C_ANN)./n_ANN);
ANN_RMSE_Percentage =(ANN_RMSE/SUM)*100
ANN_MBE_Percentage=(ANN_MBE/SUM)*100

شکل‌های زیر، حاصل از اجرای این برنامه هستند.

پیش‌بینی جریان خروجی برای یک روز عادی در ماه مارس
شکل ۴: پیش‌بینی جریان خروجی برای یک روز عادی در ماه مارس
پیش‌بینی جریان خروجی برای یک روز ابری در ماه مارس
شکل ۵: پیش‌بینی جریان خروجی برای یک روز ابری در ماه مارس

جدول زیر، ارزیابی آماری مدل‌ها را نشان می‌دهد.

جدول نتیجه

مدل ‌سازی آرایه فتوولتاییک با الگوریتم جنگل تصادفی

در بخش قبل، مدل‌سازی توان خروجی سیستم فتوولتاییک با شبکه‌های عصبی انجام شد. این شبکه‌ها می‌توانند نامعینی‌های خروجی سیستم را مدیریت کنند. با این‌ حال، استفاده از شبکه‌های عصبی برای چنین هدفی، همراه با محدودیت‌ها و چالش‌هایی مانند پیچیدگی فرایند آموزش، محاسبه نرون‌های لایه مخفی و توانایی اداره داده‌های بسیار نامعین است. برای حل این مشکل می‌توان از برخی روش‌های جدید با دقت و توانایی بالا در مدیریت داده‌های بسیار نامعین مانند «مدل‌های مبتنی بر جنگل تصادفی» (Random Forest-based Models) یا RF‎ استفاده کرد.

مدل RF‎ شامل درخت‌های تصمیم تصادفی و کیسه‌بندی است. «کیسه‌بندی» (Bagging) روشی برای کاهش واریانس تابع پیش‌بینی تخمینی است. درخت‌های تصمصم که از درختان ناهم‌بسته استفاده می‌کنند، تعمیمی از کیسه‌بندی هستند. ساده‌ترین RFها با انتخاب گروه کوچکی از متغیرهای ورودی برای انشعاب تصادفی در هر گره تشکیل می‌شوند.

روش جنگل تصادفی، با ایجاد یک مجموعه جدید از مقادیر شروع می‌‌شود که با اندازه داده‌‌های اصلی برابرند و به‌ صورت تصادفی از مجموعه داده‌‌های اصلی به وسیله خودراه‌‌اندازی یا بوت‌استرپ انتخاب می‌شوند. پس از آن، داده‌های جدید به‌ صورت دنباله‌ای از انشعابات باینری ‎(دوتایی)‎ برای ایجاد درخت‌های تصمیم مرتب می‌شوند. در هر گره‌ای از این درخت‌ها، انشعاب با انتخاب مقدار و متغیر با خطای کمینه محاسبه می‌شود. در پایان، یک میانگین ساده از پیش‌‌بین‌‌های تجمعی برای پیش‌‌بینی رگرسیون و یک رأی اکثریت ساده برای پیش‌‌بینی در طبقه‌‌بندی گرفته می‌‌شود.

تکنیک‌‌های تجمعی خودراه‌‌انداز با دقت پیش‌‌بینی تقویت می‌‌شوند و تعیین میزان‌ خطا و اهمیت متغیر را ممکن می‌‌سازند. میزان‌ خطا و اهمیت متغیر با حذف مقادیر هر نمونه خودراه‌‌انداز محاسبه می‌‌شوند که داده‌‌های «خارج از کیسه» (Out-of-bag) یا OOB‎ نام دارند. داده‌‌های ‎OOB‎ نقش اصلی را در رشد درخت ایفا می‌‌کنند، بدین معنی که این داده‌‌ها با مقادیر پیش‌‌بینی‌‌ شده در هر مرحله مقایسه می‌‌شوند. در این روش، میزان‌‌های خطا به ‌دست آمده و از OOB نیز برای تعیین اهمیت متغیر استفاده می‌‌شود.

طبقه‌‌بندی و رگرسیون

درخت‌‌های طبقه‌‌بندی و رگرسیون پاسخ‌های پیش‌‌بینی‌ شده به داده‌‌ها هستند. هنگام پیش‌‌بینی پاسخ، تصمیم، هر درخت را از گره اصلی به یک گره برگ در جنگل هدایت می‌کند که حاوی پاسخ است. درخت‌‌های رگرسیون پاسخ را به‌ شکل عددی و درخت‌‌های طبقه‌‌بندی آن را به‌ صورت اسمی (درست یا غلط) بیان می‌‌کنند.

جنگل‌های تصادفی، بسته به درخت‌‌های طبقه‌‌بندی و رگرسیون ایجاد شده تغییر می‌‌کنند و طی مراحل زیر ساخته می‌‌شوند. در مرحله اول، همه داده‌‌های ورودی برای آزمایش تمام انشعابات دوتایی ممکن در هر پیش‌‌بین استفاده شده، سپس انشعابی انتخاب می‌‌شود که بهترین مقیاس بهینه‌‌سازی را دارد. در مرحله دوم، انشعاب انتخاب‌‌ شده به دو گره فرزند جدید تقسیم می‌‌شود. این فرایند برای گره‌‌های فرزند جدید تکرار می‌‌شود.

اما دو مورد مقیاس بهینه‌‌سازی و دستور توقف برای کامل کردن فرایند قبل لازم است. مقیاس بهینه‌‌سازی مشخص می‌‌کند که انشعاب انتخابی برای کمینه «میانگین مربعات خطا» (Mean Square Error) یا MSE داده‌‌های پیش‌‌بینی نسبت به داده‌‌های آموزشی باید بررسی شود. در مقابل، در درخت‌‌های طبقه‌‌بندی، یکی از سه روش «شاخص تنوع جینی» (Gini’s Diversity Index) انحراف یا «قانون تقسیم‌بندی دوحالتی» (Towing Rule) برای انتخاب انشعاب به کار می‌‌رود.

طبقه‌‌بندی فرایندی است که در آن موضوعات شناخته، درک و متمایز می‌‌شوند. این فرایند، موضوعات را به‌ صورت دسته‌‌‌‌های مستقل برای اهداف خاص دسته‌‌بندی می‌‌کند. طبقه‌‌بندی، فهم روابط بین موضوعات و زیرموضوعات را فراهم می‌‌کند. این فرایند در زبان، استنباط، تصمیم‌‌گیری، پیش‌‌بینی و انواع برهم‌‌کنش محیطی به‌ کار می‌رود. طبقه‌‌بندی مانند رگرسیون در یادگیری ماشین نقش دارد.

رگرسیون یک فرایند آماری برای تعیین روابط بین متغیرهاست. هنگامی‌ که روابط بین یک متغیر وابسته (یا یک‎ «متغیر معیار») و یک یا چند متغیر مستقل بررسی می‌‌شوند، تکنیک‌‌های بسیاری برای مدل‌سازی و تحلیل در رگرسیون گنجانده می‌‌شود.

از رگرسیون برای پیش‌‌بینی استفاده می‌شود و در طبقه‌‌بندی با یادگیری ماشین اشتراک دارد. در جنگل‌های تصادفی، رگرسیون با رشد هر درخت مربوط به یک بردار تصادفی تشکیل می‌‌شود. مقادیر خروجی، عددی هستند. پیش‌‌بین درخت تصمیم با میانگین‌‌گیری از همه درخت‌‌های جنگل ساخته می‌‌شود.

الگوریتم رگرسیون

الگوریتم جنگل تصادفی، ترکیبی از مراحل آموزش و آزمایش است. در مرحلهٔ آموزش، الگوریتم، $$N$$ نمونه خودراه‌‌انداز را از داده‌‌های آموزش اصلی رسم می‌‌کند و سپس تعدادی از درخت‌‌های رگرسیون یا طبقه‌‌بندی هرس‌ نشده (Unpruned) یا ‎CART‎ را برای هر نمونه خودراه‌‌انداز ایجاد می‌‌کند. بهترین انشعاب صرفاً از نمونه تصادفی پیش‌‌بین‌‌ها در هر گره‌‌ای از CART‎ جدا ‎(انتخاب)‎ شده و انشعابی انتخاب می‌‌شود که خطا را به حداقل می‌‌رساند.

در هر تکرار خودراه‌‌انداز، داده‌‌ها با استفاده از تکنیک رشد درخت با نمونه خودراه‌‌انداز پیش‌‌بینی می‌‌شوند. میزان خطا برای هر پیش‌‌بین و پیش‌‌بینی‌‌های OBB تجمعی محاسبه می‌‌شوند. اکنون گره‌‌های پایانی داده‌‌های جدیدی دارند که با تعیین میانگین تجمعی پیش‌‌بین‌‌ها از میان تمام درخت‌‌ها پیش‌‌بینی می‌‌شوند. خطای درخت جنگل تصادفی به دو پارامتر وابسته است: همبستگی بین هر دو درخت و استحکام ‎(مقاومت)‎ هر درخت به‌ صورت مجزا. هنگامی ‌که مجموعه آموزشی یک درخت به‌ وسیله نمونه‌‌برداری رسم می‌‌شود، تعداد متغیرهای هر سطح در بهبود عملکرد مهم هستند. شکل ‎۶ مراحل اصلی الگوریتم جنگل تصادفی را نشان می‌‌دهد.

فلوچارت الگوریتم RF
شکل ۶: فلوچارت الگوریتم RF

وقتی مجموعه آموزش به‌ وسیله نمونه‌‌برداری برای یک درخت خاص رسم می‌‌شود، از حدود یک‌‌سوم نمونه‌‌های مجموعه چشم‌پوشی خواهد شد. این نمونه‌‌ها داده‌‌های ‎OBB نامیده شده و برای تخمین اهمیت متغیر و ساختار داخلی داده‌‌ها (اندازه نزدیکی) به‌کار می‌‌روند. در این‌جا، ‎$$\beta ^{(t)}$$‎ نمونه‌‌های داخل کیسه برای درخت خاص ‎$$t$$‎ و ‎$$\beta ^{c(t)}$$ نمونه‌‌های مکمل برای همان درخت را نمایش می‌‌دهد.

علاوه بر الگوریتم رگرسیون، جنگل‌های تصادفی، اندازه‌‌گیری قابل‌ توجهی از اهمیت متغیر (اثرات خاص ورودی‌‌ها روی خروجی) بر اساس داده‌‌های ‎OOB‎ و نیز اندازه‌‌گیری اهمیت-تغییر انجام می‌دهند. اهمیت هر متغیر را می‌‌توان با تغییر تمام مقادیر متغیر ‎$$f$$‎ در نمونه‌‌های ‎OOB‎ برای هر درخت به‌ صورت تصادفی به‌ دست آورد. اندازه‌‌گیری اهمیت متغیر به‌ صورت اختلاف بین دقت‌‌های پیش‌‌بینی قبل و بعد از تغییر متغیر ‎$$f$$ محاسبه می‌‌شود که روی تمام پیش‌‌بین‌‌ها میانگین گرفته است. وقتی اهمیت متغیر کاهش یابد، دقت پیش‌‌بینی زیاد می‌شود. مقدار اهمیت هر متغیر با میانگین اهمیت تمام درخت‌‌ها با استفاده از رابطه زیر به‌ دست می‌‌آید:

$$ \large {
‎ V I ^ { ( t ) } ( f ) = \dfrac { \sum _ { T } { ( \dfrac { \sum _ { x _ i \in \beta ^ { c ( t ) } } { I \left ( L _ j = { c _ i } ^ { ( t ) } \right ) } } { \left \vert \beta ^ { c ( t ) } \right \vert }‎
– ‎\dfrac { \sum _ { x _ i \in \beta ^ { c ( t ) } } { I \left ( L _ j = { c _ { i , \pi f } } ^ { ( t ) } \right ) } } { \left \vert \beta ^ { c ( t ) } \right \vert} ) } } { T } } ‎ $$

که در آن، ‎$$\beta ^{c(t)}$$‎ متناظر با نمونه‌‌های خارج از کیسه برای یک درخت خاص، ‎$$t$$‎ تعداد درخت‌ها ‎($$1‎, ‎2‎, ‎\cdots‎, ‎T$$)‎ و $$T$$ تعداد کل درخت‌‌هاست. همچنین ‎$$c_i^{(t)}$$‎ و ‎$$c_{i,\pi f}^{(t)}$$‎ دسته‌‌های پیش‌‌بینی‌‌ شده برای هر نمونه‌‌ مربوط به یک درخت قبل و بعد از تغییر متغیر هستند. پارامتر $$x_i$$‎ مقدار نمونه و ‎$$L_j$$‎ برچسب درستی است که هردوی آن‌ها در مرحله آموزش هستند.

پیش‌‌بینی جریان خروجی یک سیستم فتوولتاییک، با تنظیم اولیه متغیرها و نمونه‌‌های ورودی در الگوریتم کیسه‌پرکن شروع می‌‌شود. در اینجا، ورودی‌‌ها تابش خورشید، دمای محیط، شماره روز، ساعت، عرض جغرافیایی، طول جغرافیایی و تعداد ماژول‌ها هستند. در حقیقت، با هیچ فرمول ریاضی نمی‌توان تعداد بهینه درخت‌‌ها را تنظیم کرد. تعداد درخت‌‌ها نصف تعداد نمونه‌‌ها فرض می‌‌شود و تعداد برگ‌‌های هر درخت به‌ صورت پیش‌‌فرض ‎5‎ است.

مثال مدل ‌سازی آرایه فتوولتاییک با الگوریتم جنگل تصادفی

جریان خروجی سیستم فتوولتاییک مثال ‎قبل را با استفاده از مدل جنگل تصادفی پیش‌‌بینی کرده و آن را با مدل مبتنی بر شبکه عصبی مقایسه کنید.

حل: برنامه جنگل تصادفی، با تعریف متغیرهای الگوریتم از قبیل شماره روز، تعداد ساعات در روز، دمای محیط، عرض جغرافیایی، طول جغرافیایی و تعداد ماژول‌‌‌ها به‌ عنوان ورودی‌‌ها و جریان خروجی فتوولتاییک به‌ عنوان خروجی شروع می‌‌شود. در مرحله نخست، برنامه مهم‌‌ترین متغیرهای مؤثر بر خروجی را جست‌وجو می‌کند. در‌ عین‌ حال، دورافتاده‌ها و خوشه‌های داده‌‌های تشخیص داده می‌شوند. تعداد درخت‌‌ها برابر با نصف کل تعداد مشاهدات فرض می‌‌شود.

برنامه متلب این مثال به صورت زیر است.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Random Forests-Regression --- Prediction - First Stage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
%%((TRAINING STAGE))%%
fileName = PV Modeling Book Source.xls';
sheetName = Source 3' ;
DN= xlsread(fileName, sheetName, 'B3:B1884'); %Day Number
H= xlsread(fileName, sheetName, 'C3:C1884'); %Hour
T= xlsread(fileName, sheetName, ’D3:D1884’); %Ambient
Temp (°C)
S= xlsread(fileName, sheetName, 'E3:E1884'); %Solar
Radiation
La= xlsread(fileName, sheetName, 'F3:F1884'); %Latitude
Lo= xlsread(fileName, sheetName, 'G3:G1884'); %Longitude
NPV= xlsread(fileName, sheetName, 'H3:H1884'); %Number
of PV Modules
I= xlsread(fileName, sheetName, 'J3:J1884'); %PV DC
Current (A)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%RF_Training Code
ticID=tic;
Y=[I]; %Split data into response array
X=[DN,H,T,S,La,Lo,NPV]; %Split data into predictor array
t=125; %Trees Number
B=TreeBagger(t,X,Y,'method','regression','oobpred','on');
%Estimating Variable Importance
B=TreeBagger(t,X,Y,'method','regression','oobvarimp','on');
figure(1);
plot(oobError(B));
xlabel('Number of Grown Trees');
ylabel('Out-of-Bag Mean Squared Error');
%%Most Important Variables
figure(2);
bar(B.OOBPermutedVarDeltaError);
title('Variable Importance');
xlabel('Variable Number');
ylabel('Out-of-Bag Variable Importance');
legend({'1: Day Number, 2: Hour, 3: Ambient Temp, 4:
Solar Radiation, 5: Latitude, 6: Longitude, 7: # of PV
Modules'},'Location','NorthEast');
nidx = find(B.OOBPermutedVarDeltaError<0.65); %Imposing
an arbitrary cutoff at 0.65 - Not Important Variables
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
%%Fraction of in-Bag Observation "Which observations are
out of bag for which trees"
finbag = zeros(1,B.NTrees);
for t=1:B.NTrees
finbag(t)=sum(all(~B.OOBIndices(:,1:t),2));
end
finbag = finbag/size(X,1);
figure(3);
plot(finbag);
xlabel('Number of Grown Trees');
ylabel('Fraction of in-Bag Observations');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
%%Finding The Outliers
BI=fillProximities(B); %Proximity Matrix that used
figure(4);
hist(BI.OutlierMeasure);
title('The Outliers');
xlabel('Outlier Measure');
ylabel('Number of Observations');
%%Discovering Clusters in the Data
figure(5);
[~,e] = mdsProx(BI,'colors','k');
title('Cluster Analysis');
xlabel('1st Scaled Coordinate');
ylabel('2nd Scaled Coordinate')
%%Assess the Relative Importance of the scaled axes by
plotting the first 20 eigenvalues
figure(6);
bar(e(1:20));
xlabel('Scaled Coordinate Index');
ylabel('Eigen Value');
%Saving The compact version of the Ensemble
compact(B);
% ((TESTING STAGE))%%
filename = 'Data.xlsx';
sheet = 1;
%Testing Data - Excel File
DN_t= xlsread(filename, sheet, 'B1885:B2690');
H_t= xlsread(filename, sheet, 'C1885:C2690'); %Hour
T_t= xlsread(filename, sheet, 'D1885:D12690');
S_t= xlsread(filename, sheet, 'E1885:E2690');
La_t= xlsread(filename, sheet, 'F1885:F2690');
Lo_t= xlsread(filename, sheet, 'G1885:G2690') ;
NPV_t= xlsread(filename, sheet, 'H1885:H2690');
I_t= xlsread(filename, sheet, 'J1885:J2690');
%RF_Testing Code
Xdata=[DN_t,H_t,T_t,S_t,La_t,Lo_t,NPV_t];
[Yfit,node]= predict(B,Xdata);
figure(7);
plot (Yfit)
hold on
plot (I_t, 'red')
xlabel('Time (H)');
ylabel('Current (A)');
legend({'I Predicted','I Actual'},'Location','NorthEast');
title('I Predicted Vs I Actual');
figure(8);
E = I_t-Yfit;
plot(E)
xlabel('Time (H)');
ylabel('Magnitude (A)');
title('Error');
toc(ticID);
%RF-Performance
%Mean Bias Error (MBE) or Mean Forecasting Error (MFE) in
Amp. // Average Deviation Indicator
MBE=(sum(I_t(:)-Yfit(:)))./numel(I_t);
if MBE<0
F='Over forecasted';
elseif MBE>0
F='Under Forecasted';
elseif MBE==o
F='Ideal Forecasted';
end
%Mean Absolute Percentage Error (MAPE) // Accuracy
Indicator
MAPE = ( a b s ( ( s u m ( ( I _ t ( : ) - Y f i t ( : ) ) . / I _ t ( : ) ) ) . /
numel(I_t))).*100;
%Root Mean Square Error (RMSE) in Amp. // Efficiency
Indicator
RMSE=sum((I_t(:)-Yfit(:)).^2)/numel(I_t);
%Outputs
n1=['M ean Bias Error (MBE): ',num2str(MBE),'(A)','
{Average Deviation Indicator}'];
n2=['Forecasting Status: ',F];
n3=['M ean Absolute Percentage Error (MAPE):
',num2str(MAPE),'%',' {Accuracy Indicator}'];
n4=['Root Mean Square Error (RMSE): ',num2str(RMSE),'(A)','
{Efficiency Indicator}'];
disp(n1)
disp(n2)
disp(n3)
disp(n4)

در مرحله دوم، پس از آنکه متغیرهای مهم به‌ دست آمدند، به‌ عنوان ورودی‌‌ها مرتب می‌‌شوند. در اینجا، یک بهینه‌‌سازی برای تعداد درخت‌‌ها و تعداد برگ‌‌های هر درخت با استفاده از یک روش تکراری و به‌ ترتیب مبنی بر حداقل ‎RMSE‎، زمان سپری‌‌ شده، ‎MAPE‎ و ‎MBE‎ انجام می‌‌شود.

%%Random Forests‐Regression ‐‐‐ Prediction – Second Stage
%%((TRAINING STAGE))%%
filename = 'Data.xlsx';
sheet = 1;
%Training Data - Excel File
DN= xlsread(filename, sheet, 'B3:B1884');
H= xlsread(filename, sheet, 'C3:C1884');
T= xlsread(filename, sheet, 'D3:D1884');
S= xlsread(filename, sheet, 'E3:E1884');
I= xlsread(filename, sheet, 'J3:J1884');
%Testing Data - Excel File
DN_t= xlsread(filename, sheet, 'B1885:B2690');
H_t= xlsread(filename, sheet, 'C1885:C2690');
T_t= xl sread(filename, sheet, 'D1885:D12690'); S_t=
xlsread(filename, sheet, 'E1885:E2690');
I_t= xl sread(filename, sheet, 'J1885:J2690'); %PV
DC Current (A)
%%RF_Training Code
Y=[I]; %Split data into response array
X=[DN,H,T,S]; %Split data into predictor array
Xdata=[DN_t,H_t,T_t,S_t];
MBE=[];
MAPE=[];
RMSE=[];
v=[];
for t=1:1:500
for l=1:1:100
tic;
B=TreeB agger(t,X,Y,'method','regression','oobpred','on',
'oobvarimp','on','minleaf',l);
%%Saving The compact version of the Ensemble
compact(B);
%((TESTING STAGE))%%
%RF_Testing Code
[Yfit,node]= predict(B,Xdata);
v(t,l)=toc;
E = I_t-Yfit;
%RF-Performance
%Mean B ias Error (MBE) or Mean Forecasting Error (MFE) in
Amp. // Average Deviation Indicator
MBE(t,l)=(sum(I_t(:)-Yfit(:)))./numel(I_t);
if MBE<0
F='Over forecasted';
elseif MBE>0
F='Under Forecasted';
elseif MBE==0
F='Ideal Forecasted';
end
%Mean Absolute Percentage Error (MAPE) // Accuracy
Indicator
MAPE = (abs((sum((I_t(:)-Yfit(:))./I_t(:)))./
numel(I_t))).*100;
MAPE(t,l)=(sum(abs(E(:))./(sum(I_t(:))))).*100;
RMSE(t,l)=sum((I_t(:)-Yfit(:)).^2)/numel(I_t);
end
end
%Best number of Trees and leaves
filename = 'RF - NTrees - 5.xlsx';
sheet = 1;
%RF Results Data - Excel File
NT = xlsread(filename, sheet, 'B2:B22'); %Trees
Number
ET = xlsread(filename, sheet, 'D2:D22'); %Elapsed
time (Sec.)
MBE = xlsread(filename, sheet, 'E2:E22'); %Mean
Bias Error (MBE) (A)
MAPE = xlsread(filename, sheet, 'G2:G22'); %Mean
Absolute Percentage Error (MAPE) (%)
RMSE= xlsread(filename, sheet, 'I2:I22'); %Root
Mean Square Error (RMSE) (A)
OOB= xlsread(filename, sheet, 'J2:J22'); %Out of Bag
(OOB)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%y=[0.03:0.015:0.08];
for i=1:length(NT)
figure(1);
plot (NT,RMSE,'*-')
xlabel('Number of Trees');
ylabel('Root Mean Squared Error (A)');
figure(2);
plot (NT,ET,'*-')
xlabel('Number of Trees');
ylabel('Elapsed time (Sec.)');
figure(3);
plot (NT,MBE,'*-')
xlabel('Number of Trees');
ylabel('Mean Bias Error (MBE) (A)');
figure(4);
plot (NT,MAPE,'*-')
xlabel('Number of Trees');
ylabel('Mean Absolute Percentage Error (MAPE) (%)');
figure(5);
plot (NT,OOB,'*-')
xlabel('Number of Trees');
ylabel('Out of Bag (OOB))');
end
[M1,I1]=min(RMSE(:));
[M2,I2]=min(ET(:));
[M3,I3]=min(MAPE(:));
[M4,I4]=min(MBE(:));
[M5,I5]=min(OOB(:));
n1=['M in. Root Mean Squared Error : ',num2str(M1),'(A)',' @
index :', num2str(I1)];
n2=['Min. Elapsed time : ',num2str(M2),'(Sec.)',' @ index:
', num2str(I2)];
n3=['Min. Mean Absolute Percentage Error (MAPE) :
',num2str(M3),'(%)',' @ index :', num2str(I3)];
n4=['Min. Mean Bias Error (MBE) : ',num2str(M4),'(A)',' @
index :', num2str(I4)];
n5=['Min. Out of Bag (OOB) data : ',num2str(M5),'(A)',' @
index :', num2str(I5)];
disp(n1)
disp(n2)
disp(n3)
disp(n4)
disp(n5)

در مرحله سوم، مهم‌‌ترین متغیرها و بهترین تعداد درخت‌‌ها و برگ‌‌ها در هر درخت مرتب می‌‌شوند. اکنون، برنامه برای آموزش و پیش‌‌بینی جریان خروجی فتوولتاییک آماده است.

%%Random Forests‐Regression –— Prediction – Third Stage
%%((TRAINING STAGE))%%
filename = 'Data.xlsx';
sheet = 1;
%Training Data - Excel File
DN= xlsread(filename, sheet, 'B3:B1884');
H= xlsread(filename, sheet, 'C3:C1884');
T= xlsread(filename, sheet, 'D3:D1884');
S= xlsread(filename, sheet, 'E3:E1884');
I= xlsread(filename, sheet, 'J3:J1884');
%RF_Training Code
Y=[I]; %Split data into response array
X=[DN,H,T,S]; %Split data into predictor array
t=65; %Trees Number
i=1;
B=TreeBagger(t,X,Y,'method','regression','oobvarimp','on
','oobpred','on','minleaf',i);
%Saving The compact version of the Ensemble
compact(B);
%((TESTING STAGE))%%
filename = 'Data.xlsx';
sheet = 1;
%Testing Data - Excel File
DN_t= xlsread(filename, sheet, 'B1885:B2690');
H_t= xlsread(filename, sheet, 'C1885:C2690');
T_t= xlsread(filename, sheet, 'D1885:D12690');
S_t= xlsread(filename, sheet, 'E1885:E2690');
I_t= xlsread(filename, sheet, 'J1885:J2690');
%%RF_Testing Code
Xdata=[DN_t,H_t,T_t,S_t];
[Yfit,node]= predict(B,Xdata);
figure(7);
plot (Yfit)
hold on
plot (I_t, 'red')
xlabel('Time (H)');
ylabel('Current (A)');
legend({'I Predicted','I Actual'},'Location','NorthE
ast');
title('I Predicted Vs I Actual');
figure(8);
E = I_t-Yfit;
plot(E)
xlabel('Time (H)');
ylabel('Magnitude (A)');
title('Error');
%%RF-Performance
%Mean Bias Error (MBE) or Mean Forecasting Error (MFE) in
Amp. // Average Deviation Indicator
MBE=(sum(I_t(:)-Yfit(:)))./numel(I_t);
if MBE<0
F='Over forecasted';
elseif MBE>0
F='Under Forecasted';
elseif MBE==o
F='Ideal Forecasted';
end
%Mean Absolute Percentage Error (MAPE) // Accuracy
Indicator
MAPE=(abs((sum((I_t(:)-Yfit(:))./I_t(:)))./
numel(I_t))).*100;
%MAPE=abs((sum((I_t(:)-Yfit(:))./I_t(:)))./numel(I_t));
MAPE=(sum(abs(E(:))./(sum(I_t(:))))).*100;
%Root Mean Square Error (RMSE) in Amp. // Efficiency
Indicator
RMSE=sum((I_t(:)-Yfit(:)).^2)/numel(I_t);
%%Outputs
n1=['Mean Bias Error(MBE): ',num2str(MBE),'(A)','
{Average Deviation Indicator}'];
n2=['Forecasting Status: ',F];
n3=['Mean Absolute Percentage Error (MAPE): ',num2str(MAPE),
'%',' {Accuracy Indicator}'];
n4=['Root Mean Square Error (RMSE): ',num2str(RMSE),'(A)','
{Efficiency Indicator}'];
disp(n1)
disp(n2)
disp(n3)
disp(n4)
%%ANN Vs RF
filename = 'Data.xlsx';
sheet = 1;
%Training Data - Excel File
I= xls read(filename, sheet, 'L3:L808'); Iann=
xlsread(filename, sheet, 'N3:N808');
Irf= xlsread(filename, sheet, 'O3:O808');
plot (I)
hold on
grid on
plot (Iann, ':ks')
hold on
plot (Irf, '--ro')
xlabel('Time (H)');
ylabel('Current (A)');
legend({'I Actual','I ANNs Model','I Random Forests
Model'},'Location','NorthEast');
جریان خروجی PV با مدل شبکه عصبی و مدل جنگل تصادفی در ۷۲ ساعت
شکل ۷: جریان خروجی PV با مدل شبکه عصبی و مدل جنگل تصادفی در ۷۲ ساعت

جدول زیر مقادیر آماری و زمان صرف شده روش‌های شبکه عصبی و جنگل تصادفی را نشان می‌دهد.

جدول نتایج

مدل سازی آرایه فتوولتاییک با تکنیک‌‌های جست‌وجوی اکتشافی

معادله خروجی سلول خورشیدی‎ را می‌‌توان با روش‌‌های بسیاری از قبیل روش «نیوتون-رافسون» (Newton–Raphson) یا NR، الگوریتم «لونبرگ-مارکوارت» (Levenberg–Marquard) یا LM، روش‌‌های مبتنی بر شبکه عصبی و روش‌های عددی دیگر حل کرد. اخیراً روش‌های اکتشافی از قبیل «الگوریتم ژنتیک» (Genetic Algorithm) یا GA‎، «بهینه‌‌سازی ازدحام ذرات» (Particle Swarm Optimization) یا PSO،  «بهینه‌‌سازی جفت‌گیری پرنده» (Simplified Bird Mating Optimizer) یا SBMO، «تکامل تفاضلی» (Differential Evolution)، «الگوریتم بهینه‌‌سازی جست‌وجوی ممنوعه» (Tabu Search Optimization Algorithm)، «بهینه‌‌سازی آشوب موازی جهشی» (Mutative-scale Parallel Chaos Optimization Algorithm) یا MPCOA و الگوریتم‌‌های تبرید شبیه‌‌سازی‌‌شده (Simulated Annealing) یا SA به‌ علت بازده و قابلیت اطمینان بالا برای حل چنین مسائلی مورد استفاده قرار گرفته‌‌اند.

از رابطه ۱‎ واضح است پارامترهایی که بر عملکرد ماژول فتوولتاییک تسلط دارند، $$I_\mathrm{Ph}$$‎، ‎$$I_\mathrm{o}$$‎، ‎$$R_\mathrm{s}$$‎، ‎$$R_\mathrm{p}$$‎ و ‎$$a$$‎ هستند. این پارامترها مجهول و به تابش خورشید و دمای سلول بستگی دارند. بنابراین، می‌توان از یک الگوریتم بهینه‌‌سازی برای به‌ دست آوردن مقادیر بهینه این پارامترها استفاده کرد. در اینجا، یک تابع هدف برای یافتن پارامترهای محاسبه‌‌ شده مدل ماژول به‌ صورت بهینه فرمول‌‌بندی می‌‌کنیم. تابع هدف به‌ صورت ‎RMSE‎ است که تفاوت بین جریان محاسبه‌‌ شده و تجربی را نشان می‌‌دهد. این تابع به‌صورت زیر است:

$$ \large ‎ f ( \theta ) = \sqrt { \dfrac { 1 } { n } \sum \limits _ { i = 1 } ^ { n } { P ( v _ \mathrm { e } ‎ , ‎ I _ \mathrm { e } ‎, ‎\theta ) ^ 2 } } ‎$$

که در آن:

$$ \large { { } ^ { }‎
‎ P ( v _ \mathrm { e } ‎ , ‎ I _ \mathrm { e } ‎ , ‎\theta ) = I _ \mathrm { e } – I _ \mathrm { p h } + I _ \mathrm { o } \left [ \mathrm { e x p } \left ( \dfrac { V _ \mathrm { e } + I _ \mathrm { p } R _ \mathrm { s } } { V _ \mathrm { t } } \right ) – 1 \right ] + \dfrac { V _ \mathrm { e } + I _ \mathrm { p } R _ \mathrm { s } } { R _ \mathrm { p } } } $$

و $$V _ \mathrm { e }$$ و $$I _ \mathrm { e }$$، به ترتیب، مقادیر تجربی ولتاژ و جریان صفحه فتوولتاییک هستند. همچنین، $$ \theta $$ برداری از پنج پارامتر ($$ I _ \mathrm { p h }$$، $$I _ \mathrm { o }$$، $$R _ \mathrm { s }$$، $$R _ \mathrm { p }$$ و $$ a $$) و $$ n $$ طول مجموعه داده است.

همان‌طور که بسیاری از پژوهشگران توصیه کرده‌اند که الگوریتم‌های DE بیشترین کارایی را در حل چنین مسئله‌ای دارند، در اینجا نیز بر الگوریتم DE تمرکز می‌کنیم.

در الگوریتم DE رایج، الگوریتم جستجوی مستقیم مبتنی بر جمعیت که از مجموعه جمعیت اولیه $$ S $$ استفاده می‌کند، از بردارهای تکی NDبُعدی تشکیل می‌شود که به صورت تصادفی انتخاب شده‌اند. این بردارهای منفرد توسط یک فرایند ادغام به منظور یافتن مقادیر بهینه که یک کمینه‌سازی سراسری را برآورده می‌کند، هدایت می‌شوند. ساز و کار اصلی فرایند جذب جایگزینی بردارهای تکی بد در جمعیت $$S$$ با بردارهای تکی بهتر در هر تکرار است.

الگوریتم DE شامل چهار مرحله ساده و پشت سر هم است که عبارت‌اند از مقداردهی اولیه، جهش، گذر و انتخاب. این الگوریتم مانند سایر الگوریتم‌های جست‌وجوی مستقیم مبتنی بر جمعیت که از یک مجموعه جمعیت اولیه ($$S$$) استفاده می‌کند که به طور تصادفی به عنوان یک جواب انتخاب می‌شود. این شامل الگوریتم شامل $$N$$ بردار مجزا است و هر بردار شامل $$D$$ پارامتر است که برای بهینه‌سازی مورد نیاز است. سه مرحله آخر (جهش، گذر و انتخاب) در هر گام تکرار می‌شوند تا جواب اولیه برای رسیدن به حداکثر تعداد نسل $$ G _ \max$$ یا به دست آوردن مقدار برازندگی مورد نیاز، بهبود یابد. DEAM از بردارهای NDبعدی به عنوان یک مجموعه جمعیت ($$S$$) برای جست‌وجوی پارامترهای بهینه در فضای جست‌وجو استفاده می‌کند. مجموعه جمعیت به این صورت تعریف شده است:

$$ \large ‎\begin {align}
‎ S ^ G = \left [ X _ 1 ^ G ‎, ‎ X _ 2 ^ G , . . . ‎ , ‎ X _ N ^ G \right ] = \left [ X _ i ^ G \right ] ‎
‎\end {align} $$

که در آن:

$$ \large ‎\begin {align}
‎ X _ i = \left [ X _ { 1 , i } ‎, ‎ X _ { 2 , i } , . . . ‎ , ‎ X _ { D , i } \right ] = \left [ X _ { j , i } \right ]‎
‎\end {align}‎ $$

که $$ X _ i $$ بردار هدف نامیده می‌شود و $$ i $$ تعداد جواب‌های کاندید جمعیت ($$i = 1 , 2 , …, N$$)، $$ j $$ بعد بردار تکی ($$j= 1 , 2 , … , D$$) و $$ G $$ اندیس نسل ($$ G = 1 , 2 , … , G _\max$$) است.

شکل ۶ الگوریتم پیشنهادی را نشان می‌دهد. مراحل این الگوریتم در ادامه توضیح داده شده‌اند.

مقداردهی اولیه: فرایند بهینه‌سازی با ایجاد یک جمعیت اولیه آغاز می‌شود: $$ S ^ G = [X _ i ^ G ] $$ و $$ G = 0$$. مقادیر اولیه $$D$$ پارامتر به طور تصادفی انتخاب و به صورت یکنواخت در ناحیه جست‌وجو توزیع می‌شوند. ناحیه جست‌وجو به ترتیب با کران‌های پایین و بالای $$ X _{j,L}$$ و $$X_{j,H}$$ محدود می‌شود. بردار تکی مقدار اولیه به صورت زیر انتخاب شده است:

$$ \large ‎ X _ { j , i } ^ 0 = X _ { j , L , i } + \mathrm {rand}( X _ { j , H , i } – X _ { j , L , i } ) $$‎

که rand یک عدد تصادفی در بازه $$[0,1] $$ است.

جهش: DEAM مقدار $$ M_d $$ یا $$ M_e $$ را در یک تکرار فراخوانی می‌کند. معیاری که برای جابه‌جایی بین هر دو نوع جهش استفاده می‌شود، این است:

فرمول

که $$||\sigma ^ G ||$$ و $$ ||\sigma ^ 0 || $$ نرم بردارهای انحراف معیار بردارهای سطری جمعیت $$ S $$ برای $$ G $$ و نسل اولیه هستند و $$ \epsilon _ 2 $$ یک پارامتر سوئیچینگ است که برای سوئیچ بین عملیات $$ M_ d $$ و $$ M _ e $$ به کار می‌رود و $$ \epsilon \in [0,1] $$. برای هر بردار هدف $$ X _ i ^ G $$، یک بردار جهش $$ \hat {X}_ i ^ G $$ بر اساس عملیات $$ M _ d $$ به صورت زیر تولید می‌شود:

$$ \large ‎\hat { X } _ i ^ G = X _ \alpha ^ G + F \left ( X _ \beta ^ G ‎ – ‎ X _ \gamma ^ G \right ) $$‎

که بردارهای $$ X _ \alpha ^ G $$، $$ X _ \beta ^ G $$ و $$ X _ \gamma ^ G $$ بردارهایی هستند که به صورت تصادفی از جمعیت انتخاب می‌شوند و $$ \alpha $$، $$\beta$$ و $$ \gamma$$ شاخص‌های مجزایی هستند که به بازه $$ [1,N] $$ تعلق دارند. بردار $$ X _ \alpha ^ G $$ بردار پایه نامیده می‌شود و $$F $$ پارامتر کنترل مقیاس جهش است که معمولاً در بازه $$[0.5, 1 ] $$ انتخاب می‌شود.

در همین حال، عملیات جهش $$M_e$$ نیز بر اساس سه بردار مجزا است که به طور تصادفی از بین جمعیت انتخاب می‌شوند، اما بر خلاف $$M_d$$، شاخص یکی از این بردارها ممکن است همان شاخص بردار فعلی باشد. عملیات $$M_e$$ از کل نیروی وارده بر یک بردار منفرد $$X_\alpha ^ G $$ توسط دو بردار دیگر $$X_ \beta ^ G $$ و $$ X _ \gamma ^ G $$ استفاده می‌کند. مانند الگوریتم EM، نیروی اعمال شده بر $$X_\alpha ^ G $$ توسط $$X_ \beta ^ G $$ و $$ X _ \gamma ^ G $$ بر اساس بارهای بین بردارهای زیر محاسبه می‌شود:

$$ \large ‎ q _ { \alpha \beta } ^ G = \dfrac { f \left ( X _ \alpha ^ G \right ) – f \left ( X _ \beta ^ G \right ) } { f \left ( X _ \mathrm { w } ^ G \right ) – f \left ( X _ \mathrm { b } ^ G \right ) } $$‎

‎$$ \large q _ { \alpha \gamma } ^ G = \dfrac { f \left ( X _ \alpha ^ G \right ) – f \left ( X _ \gamma ^ G \right ) }{ f \left ( X _ \mathrm { w } ^ G \right ) – f \left ( X _ \mathrm { b } ^ G \right ) } $$‎

که $$ f ( X ) $$ مقدار تابع هدف برای بردار تکی $$ x $$ است و $$ X _ b ^ G $$ و $$ X _ w ^ G $$، به ترتیب، بهترین و بدترین بردارهای تکی هستند که مقادیر بهترین و بدترین تابع هدف را برای نسل $$G$$اُم رقم می‌زنند. $$ G $$ نیز شاخصی است که به تعداد نسل بر می‌گردد ($$G = 1 , 2 , … , G _ \max $$). نیروی اعمال شده بر $$ X _ \alpha ^ G $$ توسط $$ X _ \beta ^ G $$ و $$ X _ \gamma ^ G $$ به صورت زیر محاسبه می‌شود:

$$ \large ‎ F _ { \alpha \beta } ^ G = \left ( X _ \beta ^ G -X _ \alpha ^ G \right ) q _ { \alpha \beta } ^ G $$‎

$$ \large ‎ F _ { \alpha \gamma } ^ G = \left ( X _ \gamma ^ G -X _ \alpha ^ G \right ) q _ { \alpha \gamma } ^ G $$‎

در نتیجه، نیروی اعمالی بر $$ X _ \alpha ^ G $$ توسط $$ X _ \beta ^ G $$ و $$ X _ \gamma ^ G $$ به شکل زیر محاسبه می‌شود:

$$ \large ‎ F _ { \alpha } ^ G = F _ { \alpha \beta } ^ G + F _ { \alpha \gamma } ^ G $$‎

سپس، بردار جهش عملیات $$ M _ e $$ به صورت زیر محاسبه می‌شود:

$$ \large ‎\hat { X } _ i ^ G = X _ \alpha ^ G + F _ \alpha ^ G $$‎

گذر: مرحله گذر DEAM مشابه همانی است که در الگوریتم DE وجود دارد. در این مرحله، هر دو بردار هدف $$ X _ i ^ G $$ و بردار جهش $$ \hat { X} _ i ^ G $$ برای تولید بردار آزمایش $$ y _ { j , i } ^ G $$ به کار می‌روند که به صورت زیر بیان می‌شود:

فرمول

که $$\text{rand}$$ یک عدد تصادفی در بازه $$(0,1)$$ است. همچنین، $$ I_ i $$ یک شاخص تصادفی در بازه $$[1,D]$$ و $$ \text{CR}\in [0.5 , 1 ] $$ پارامتر کنترل گذر است. بردار آزمایش برابر با بردار جهش $$\text{CR}=1$$ است.

پارامترهای بردار آزمایشی را در صورتی که خارج از فضای مجاز جست‌وجو باشد، بررسی کرد تا اطمینان حاصل شود که مقادیر پارامتر مقادیر فیزیکی هستند. اگر هر پارامتر خارج از حد مجاز فضای جست‌وجو باشد، با مقدار جدید به شرح زیر جایگزین می‌شود:

$$ \large ‎ y _ { j , i } ^ G = X _ { j , L , i } + \mathrm {rand} ( X _ { j , H , i } – X _ { j , L , i } )‎ $$

انتخاب: مرحله انتخاب پس از تولید بردارهای آزمایشی N اعمال می‌شود. روند انتخاب بین بردارهای هدف فعلی و آزمایشی براساس مقادیر تابع هدف برای هر دو بردار است. برداری که تابع هدف کوچکی دارد، به عنوان عضوی از جمعیت برای نسل بعدی $$ G + 1 $$ انتخاب می‌شود. روند انتخاب را می‌توان به این صورت توصیف کرد:

فرمول

سرانجام، بازتولید بردارهای آزمایش (جهش و گذر) و مراحل انتخاب تا رسیدن به شرایط توقف از پیش تعیین شده ادامه دارد.

مثال مدل سازی آرایه فتوولتاییک با تکنیک‌‌های جست‌وجوی اکتشافی

برنامه‌ای بنویسید که با استفاده از الگوریتم DE ماژول جدول زیر را به صورت بهینه مشخص کند.

حل: برای حل این مسئله،‌ چهار ام فایل متلب مورد نیاز است. اولین مورد برای به دست آوردن مقدار پنج پارامتر استفاده می‌شود. در این برنامه، مقادیر تابش خورشید و دمای سلول به دست می‌آید. علاوه بر این، جریان و ولتاژ آزمایشی (برای منحنی I-V) نیز به دست می‌آیند. پس از آن، برنامه دوم به عنوان یک تابع MATLAB برای پیاده‌سازی الگوریتم DE فراخوانی می‌شود و مقادیر بهینه پنج پارامتر را در شرایط خاص آب‌وهوایی برمی‌گرداند. سپس مشخصات I-V و P-V برای شرایط خاص آب‌و‌هوایی با استفاده از روش NR به دست می‌آید. پس از آن، عملکرد برازندگی الگوریتم‌های DE در هر نسل اعمال می‌شود.

برنامه‌های مذکور در ادامه آورده شده‌اند:

%%%% algorithm for optimizing the 3-parameters of PV
module (a, Rs, Rp, Iph, Io),
%%%% Plotting I-V & P-V characteristics and comparing the
calculation and
%%%% experimental characteristics
clc;
clear all;
close all;
t=cputime;
radiation=[978];
%///&&&Array of solar radiation in (w/m^2)///&&&%
cell_temperature=[328.56]; %///&&&Array
of ambient temperature in (K)///&&&%
sheet=7;
%%%%%%%% Reading the experimental voltage and current
data %%%%%%%%
Ve=xlsread('PV modeling book data source.xls',Source 4,'
G3:G104'); %///&&&Reading
the experimental voltage///&&&%
Ie=xlsread('PV modeling book data source.xls', Source 4,'
H3:H104'); %///&&&Reading
the experimental current///&&&%
save ('var_fitness_function', 'Vp','Ie');
solar_radiation=radiation./1000; %Array of solar
radiation in (kw/m^2)
%a_best=zeros(size(radiation)); %Array for the best
diode ideality factor
%Rs_best=zeros(size(radiation)); %Array for the best PV
series resistance
%Rp_best=zeros(size(radiation)); %Array for the best PV
parallel resistance
%f_best=zeros(size(radiation)); %Array for the best
overall fitness function
G=solar_radiation; %Reading the solar
radiation values one by one
Tc=cell_temperature; %Reading the ambient
temperature values one by one
[f_bestt,a_bestt,Rs_bestt,Rp_bestt, Iph_bestt,
Io_bestt]=. . .
PV_MODELING_BASED_DE_ALGORITHM (G,Tc); %Call 5
parameter DE-optimization function
%f_bestt
%a_bestt
%Rs_bestt
%Rp_bestt
a_best=a_bestt; %Array for the best
diode ideality factor
Rs_best=Rs_bestt; %Array for the best
PV series resistance
Rp_best=Rp_bestt; %Array for the best
PV parallel resistance
Iph_best=Iph_bestt; %Array for the best
photo current
Io_best=Io_bestt; %Array for the best
diode saturation current
f_best=f_bestt; %Array for the best
overall fitness function
%f_best
%a_best
%Rs_best
%Rp_best
%%%%%%%%%//// Computing I-V c/c of PV module////%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%% Declaration the constants
%%%%%%%%%%%%%%%%%%%%%%%%%%
Nsc=36; %Number of cells are
connected in series per module
k=1.3806503*10^-23; %Boltzmann constant (J/K)
q=1.60217646*10^-19; %Electron charge in
(Coulomb)
VT=(Nsc*k*Tc)/q; %Diode thermal voltage (v)
%%%%%%%%//// Computing the theoretical current using NR
method ////%%%%%%%%
Ip=zeros(size(Vp));
for h=1:5
Ip=Ip ‐ ((Iph_best‐Ip‐Io_best.*(exp((Vp+Ip.*Rs_best)./
(a_best.*VT))‐1)‐…
((Vp+Ip.*Rs_best)./Rp_best))./(‐1‐Io_best.*(Rs_
best./(a_best.*VT)).* …
exp((Vp+Ip.*Rs_best)./(a_best.*VT))-(Rs_best./
Rp_best)));
end
%%%%%%%%%%%%%%%%%%%%%//// PLOTTING I-V CHARACTERISTIC
////%%%%%%%%%%%%%%%%%
%load IV_characteristic_data_experimental
figure
hold on
plot(Vp,Ip,Ve,Ie,'o')
hold off
title('I-V characteristics of PV module with solar radiation
and ambient temperature variations')
xlabel('Module voltage (v)')
ylabel('Module current(A)')
%for z=1:length(G)
gtext('978 W/m^2, 328.56 K') %///&&&solar
radiation in (w/m^2) and cell temperature in (K)///&&&%
%end
%%%%%%%%%%%%%%%%%%%//// COMPUTING THE PV MODULE POWER
////%%%%%%%%%%%%%%%%%
Pp=Vp.*Ip; %Computing the theoretical
PV module power
Pe=Vp.*Ie; %Computing the experimental
PV module power
%%%%%%%%%%%%%%%%%%%%%//// PLOTTING P-V CHARACTERISTIC
////%%%%%%%%%%%%%%%%%
figure
hold on
plot(Vp,Pp,Vp,Pe,'o')
hold off
title('P-V characteristics of PV module')
xlabel('Module voltage (v)')
ylabel('Module power(w)')
%for z=1:length(G)
gtext('978 W/m^2, 328.56 K') %///&&&solar
radiation in (w/m^2) and cell temperature in (K)///&&&%
%end
%%%%%%%%%%%%%%%%%//// COMPUTING THE ERROR////%%%%%%%%%%%
Iee=(1/length(Vp))*(sum(Ie));
RMSE=sqrt((1/length(Vp))*sum((Ip-Ie).^2))
MBE=(1/length(Vp))*sum((Ip-Ie).^2)
RR=1-((sum((Ie-Ip).^2))/(sum((Ie-Iee).^2)))
%%%% MATLAB Script function of Differential Evolution
(DE)algorithm
%%%% for optimizing the 5-PV-parameters (a, Rs, Rp, Iph &
Io)
%%%% Date 16/3/2015 - Monday
function [f_bestt,a_bestt,Rs_bestt,Rp_bestt,Iph_bestt,
Io_bestt]=. . .
PV_MODELING_BASED_DE_ALGORITHM (G,Tc) %Define a
function to optimize the 3-PV-parameters
%%%%%%%%%%%%%%%%%//// Control parameter declaration
////%%%%%%%%%%%%%%%%%%%
EP=0.054;
D=5; %Dimension
of problem (5-parameters of PV module)
Np=10*D; %///&&&Size
of population (number of individuals)///&&&
%%%%%%%%%%%%%%%%%%%%%%%%%%Mutation factor
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
F=0.85; %///&&&Mutation
factor///&&&
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Crossover
rate%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CR=0.6; %///&&&Crossover
rate factor///&&&
%%%%%%%%%%%%%%%%%%%%Maximum number of generation
(iteration)%%%%%%%%%%%%%%%
GEN_max=500; %///&&&Maximum
generation number///&&&
%%%%%%%%%%%%%%%%%%%%//// SAVING RESULTS IN MAT FILE
////%%%%%%%%%%%%%%%%%%%
sheet=7; %///&&&No.
of sheet to save results///&&&%
file_name='Results_of_Radiation_7_temperature_7.mat';
%///&&&Name of file to save results in MAT file///&&&%
save (file_name,'Np','GEN_max','F','CR');
%%%%%%%%%%%%%%%%%%%%//// SAVING RESULTS IN EXCEL FILE
////%%%%%%%%%%%%%%%%%%%
xlswrite ('PVM4_Try_3.xlsx',Np,sheet,'P5');
xlswrite ('PVM4_Try_3.xlsx',GEN_max,sheet,'Q5');
xlswrite ('PVM4_Try_3.xlsx',F,sheet,'R5');
xlswrite ('PVM4_Try_3.xlsx',CR,sheet,'S5');
xlswrite ('PVM4_Try_3.xlsx',EP,sheet,'U5');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%
Rs_l=0.1; %Lower limit of series
resistance (Rs)
Rs_h=2; %Upper limit of series
resistance (Rs)
Rp_l=100; %Lower limit of parallel
resistance (Rp)
Rp_h=5000; %Upper limit of parallel
resistance (Rp)
a_l=1; %Lower limit of diode
ideality factor (a)
a_h=2; %Upper limit of diode
ideality factor (a)
Iph_l=1; %Lower limit of photo
current (Iph)
Iph_h=8; %Upper limit of photo
current (Iph)
Io_l=1e-12; %Lower limit of diode
saturation current (Io)
Io_h=1e-5; %Upper limit of diode
saturation current (Io)
L=[a_l Rs_l Rp_l Iph_l Io_l]; %Define lower limit
vector of 5-PV-parameters
H=[a_h Rs_h Rp_h Iph_h Io_h]; %Define upper limit
vector of 5-PV-parameters
%%%%%%%%%%%%%%%Number of times the algorithm is
repeated%%%%%%%%%%%%%%%%%%%
rr=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%
a_average=zeros(1,rr); %Array for saving the
best (a) values for rr times
Rs_average=zeros(1,rr); %Array for saving the best
(Rs) values for rr times
Rp_average=zeros(1,rr); %Array for saving the
best (Rp) values for rr times
Iph_average=zeros(1,rr); %Array for saving
the best (Iph) values for rr times
Io_average=zeros(1,rr); %Array for saving the best
(Io) values for rr times
f_average=zeros(1,rr); %Array for saving the
best (f) values for rr times
for b=1:rr %Repeat the algorithm 10
times
%%%%%%%%//// Algorithm's variables and matrices
declaration
////%%%%%%%
x=zeros(D,1); %Trial vector
pop=zeros(D,Np); %Population matrix (target
matrix)
Fit=zeros(1,Np); %Overall fitness function
matrix of the population
r=zeros(3,1); %Randomly selected indices
for mutation stage
%%%%%%%%%%%%%%%%%//// Initializing the population
////%%%%%%%%%%%%%%%%%
for j=1:Np %For all individuals
vector
for i=1:D %For all variables of
individual vector
pop(i,j)=L(i)+(H(i)-L(i))*rand(1,1);
%Initializing the individuals vector
end
a=pop(1,j); %Specified the diode
ideality factor value from population
Rs=pop(2,j); %Specified the PV series
resistance value from population
Rp=pop(3,j); %Specified the PV parallel
resistance value from population
Iph=pop(4,j); %Specified the photo
current value from population
Io=pop(5,j); %Specified the diode
saturation current value from population
[ f]=fitness_function(a,Rs,Rp, Iph,Io,G,Tc); %Call
the function of computing the fitness functions
Fit(1,j)=f; %To save the overall fitness
function for initial population
end
%%%%%%%%%%%%%%%%%%%%%%%%//// Optimization
////%%%%%%%%%%%%%%%%%%%%%%%%%
Aa=zeros(1,GEN_max); %Initialize array for
(a) values
ARs=zeros(1,GEN_max); %Initialize array
for (Rs) values
ARp=zeros(1,GEN_max); %Initialize array for
(Rp) values
AIph=zeros(1,GEN_max); %Initialize array
for (Iph) values
AIo=zeros(1,GEN_max); %Initialize array for
(Io) values
Af=zeros(1,GEN_max); %Initialize array for (f)
values
for g=1:GEN_max %For each generation
(iteration)
for j=1:Np %For each individual
vector
%%%%//// Selection three randomly indices for
mutation ////%%%%
%%%%%%%//// step to generate donor (mutation)
vector ////%%%%%%
r(1)=floor(rand*Np)+1; %First random
index
while r(1)==j %To ensure . . .
r(1)=floor(rand*Np)+1; %r(1)not equal j
end
r(2)=floor(rand*Np)+1; %Second random
index
while (r(2)==j)||(r(2)==r(1)) %To ensure . . .
r(2)=floor(rand*Np)+1; %r(2)not equal
j and r(1)
end
r(3)=floor(rand*Np)+1; %Third random
index
while (r(3)==j)||(r(3)==r(1))||(r(3)==r(2))
%To ensure . . .
r(3)=floor(rand*Np)+1; %r(1)not equal
j and r(1)and r(2)
end
%%%%%%%%%%%%%%%%%%%//// Mutation steps
////%%%%%%%%%%%%%%%%%%%%
w=pop(:,r(3))+F.*(pop(:,r(1))-pop(:,r(2)));
%To create the mutation (donor) vector
%%%%%%%%%%%%%%%%%%//// Crossover steps
////%%%%%%%%%%%%%%%%%%%%
Rnd=floor(rand*D)+1;
for i=1:D
if (rand<CR)||(Rnd==i)
x(i)=w(i);
else
x(i)=pop(i,j);
end
end
%%%%%//// Checking the 5-PV-parameters of trial
vector ////%%%%
%%%%%%%%%%%%//// with the boundary constraints
////%%%%%%%%%%%%
for i=1:D
if (x(i)<L(i))||(x(i)>H(i))
x(i)=L(i)+(H(i)-L(i))*rand;
end
end
%%%%%%//// Selection the best individual
(either the ////%%%%%%
%%%%%%%%%%%//// trial or current individual
vector)////%%%%%%%%
a=x(1); %Specified the diode ideality
factor value trial vector
Rs=x(2); %Specified the PV series
resistance value trial vector
Rp=x(3); %Specified the PV parallel
resistance value trial vector
Iph=x(4); %Specified the photo current
value trial vector
Io=x(5); %Specified the diode saturation
current value trial vector
[f]=fitness_function(a,Rs,Rp,Iph,Io,G,Tc);
%Calculate the fitness functions for trial vector
if (f<=Fit(1,j)) %Comparison between fitness
functions for trial and target vectors
pop(:,j)=x; %Replace the target individual
by trial individual vector
Fit(1,j)=f; %Replace the overall fitness
function (f.f) of target individual vector with the
fitness
function of trial one
end
end %End the loop for each
individual vectors
[n iBest]=min(abs(Fit));
Aa(g)= pop(1,iBest); %To save the best value of
(a) for each generation
ARs(g)=pop(2,iBest); %To save the best value
of (Rs) for each generation
ARp(g)=pop(3,iBest); %To save the best value of
(Rp) for each generation
AIph(g)=pop(4,iBest); %To save the best value
of (Iph) for each generation
AIo(g)=pop(5,iBest); %To save the best value of
(Io) for each generation
Af(g)=Fit(iBest); %To save the value of f
if Fit(iBest)<=EP
FEV=g;
end
end %End the loop for each generation
(iteration)
[nn Ibest]=min(abs(Af));
a_average(b)=Aa(1,Ibest);
Rs_average(b)=ARs(1,Ibest);
Rp_average(b)=ARp(1,Ibest);
Iph_average(b)=AIph(1,Ibest);
Io_average(b)=AIo(1,Ibest);
f_average(b)=Af(1,Ibest);
AF=Af';
xlswrite ('PVM4_Try_3.xlsx',AF,sheet,'Z5');
end
%%%%%%//// Results of optimization of 3-parameters of PV
module ////%%%%%%%
f_bestt=sum(f_average)/rr; %The overall fitness
function of the best individual
a_bestt=sum(a_average)/rr; %The best value of (a) for
each solar radiation and ambient temperature
Rs_bestt=sum(Rs_average)/rr; %The best value of (Rs)
for each solar radiation and ambient temperature
Rp_bestt=sum(Rp_average)/rr; %The best value of (Rp)
for each solar radiation and ambient temperature
Iph_bestt=sum(Iph_average)/rr; %The best value of (Iph)
for each solar radiation and ambient temperature
Io_bestt=sum(Io_average)/rr; %The best value of (Io)
for each solar radiation and ambient temperature
save(file_name,'f_average'); %To save the fitness
function in MAT file for rr run
xlswrite ('PVM4_Try_3.xlsx',f_average,sheet,'A108');
%To save the fitness function in excel sheet for rr run
%%%% MATLAB Script function for computing the fitness
functions of %%%% Differential Evolution (DE)algorithm
%%%% for optimizing the 5-PV-parameters (a, Rs, Rp, Iph & Io)
%%%% Date 16/5/2015 - Monday
function [f]=fitness_function(a,Rs,Rp,Iph,Io,G,Tc)
%%Define a function to compute the fitness functions
%%%%%%%%%%%%%%%%%//// Declaration the constants
////%%%%%%%%%%%%%%%%%%%%%%%
Nsc=36; %Number of cells are connected in
series per module
k=1.3806503*10^-23; %Boltzmann constant (J/K)
q=1.60217646*10^-19; %Electron charge in (Coulomb)
VT=(Nsc*k*Tc)/q; %Diode thermal voltage (v)
%%%%%%%%//// Reading the experimental voltage and current
data ////%%%%%%%%
%Vp=xlsread('Datamodified.xlsx',1,'AA3:AA104');
%Ie=xlsread('Datamodified.xlsx',1,'AB3:AB104');
load ('var_fitness_function', 'Vp','Ie');
%%%%%%%%%%%%%%%%//// Computing the theoretical current
////%%%%%%%%%%%%%%%%
Ip=zeros(size(Vp));
for h=1:5
Ip=Ip ‐ ((Iph‐Ip‐Io.*(exp((Vp+Ip.*Rs)./(a.*VT))‐1)‐…
((Vp+Ip.*Rs)./Rp))./(‐1‐Io.*(Rs./(a.*VT)).* …
exp((Vp+Ip.*Rs)./(a.*VT))-(Rs./Rp)));
end
%%%%%%%%%%%%%%%%%//// Computing the fitness function
////%%%%%%%%%%%%%%%%%%
N=length(Vp);
f=sqrt((1/N)*sum((Ie-Ip).^2));
%MATLAB script to plot the and experimental I-V and P-V
characteristics

نتایج اجرای برنامه نوشته شده، شکل‌های زیر خواهد بود.

تعیین منحنی مشخصه I-V‎ ماژول فتوولتائیک با الگوریتم ‎DE‎
شکل ۸: تعیین منحنی مشخصه I-V‎ ماژول فتوولتاییک با الگوریتم ‎DE‎
تعیین منحنی مشخصه ‎P-V‎ ماژول فتوولتائیک با الگوریتم ‎DE‎
شکل ۹: تعیین منحنی مشخصه ‎P-V‎ ماژول فتوولتاییک با الگوریتم ‎DE‎
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

اگر این مطلب برای شما مفید بوده است، آموزش‌ها و مطالب زیر نیز به شما پیشنهاد می‌شوند:

سید سراج حمیدی دانش‌آموخته مهندسی برق است و به ریاضیات و زبان و ادبیات فارسی علاقه دارد. او آموزش‌های مهندسی برق، ریاضیات و ادبیات مجله فرادرس را می‌نویسد.

بر اساس رای 4 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *