فهرست بستن

دانلود برچسب: PSO

کتابخانه حل کننده الگوریتم بهینه سازی ازدحام ذرات PSO در سی++

الگوریتم بهینه سازی ازدحام ذرات یک روش محاسباتی مبتنی بر تکرار برای حل مسائل بهینه سازی می باشد. بطور کلی در روشهای الهام گرفته شده از طبیعت تعدادی پاسخ اولیه موجود می باشد که هدف الگوریتم بهبود این پاسخ ها بعد از چند بار بروز رسانی پاسخ ها می باشد. در این روش بهینه سازی هر ذره دارای دو مشخصه موقعیت و سرعت می باشد که با یک رابطه ریاضی ساده در هر تکرار سرعت هر لحظه بروز شده و بر اساس این سرعت موقعیت ذره بروز رسانی می گردد. سرعت هر لحظه هنگام بروز رسانی وابسته به چندین پارامتر می باشد که به دو دسته تقسیم می گردند. دسته اول ضرایبی هستند که اجرا کننده الگوریتم مشخص می نماید و دسته دوم مقادیری هستند که ذاتی خود الگوریتم بوده و بسته به روند اجرای الگوریتم تغییر می نمایند. پارامترهای دسته دوم عبارت اند از موقعیت ذره نسبت به بهترین موقعیتی که تا بحال تجربه کرده و موقعیت ذره نسبت به بهترین موقعیتی که کل جمعیت تا بحال تجربه کرده است. پارامترهای دسته اول ضرایبی برای تعیین میزان تاثیر پارامترهای دسته دیگر است.

رابطه زیر نحوه بروز رسانی موقعیت یک ذره را نشان می دهد:

v_{i,j} = \omega v_{i,j} + \phi_{p} r_{p} (P^{b}_{i,j}-P_{i,j}) + \phi_{g} r_{g} (P^{b}_{j} - P_{i,j})

P_{i,j} = P_{i,j} + v_{i,j}

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

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

  1. تابع هدف مسئله بهینه سازی
  2. تابع ایجاد جمعیت اولیه
  3. تابع ایجاد سرعت اولیه

علاوه بر این باید محدوده تعریف متغیرها نیز به عنوان ورودی سازنده کلاس PSO_Solver داده شود. مثال زیر برای یک مسئله بهینه سازی نمونه نوشته شده است:

#include <iostream>
#include <vector>
#include <tuple>
#include <cmath>
#include <ctime>
#include "PSO.h"

using namespace std;

#define PI 3.14159265359
#define N 10

vector<double> sol_gen()
{
  vector<double> solution;
  for(int i = 0; i < N; i++)
  {
    solution.push_back(PI * double(rand())/RAND_MAX - PI/2);
  }
  return solution;
}

vector<double> vel_gen()
{
  vector<double> velocity;
  for(int i = 0; i < N; i++)
  {
    velocity.push_back(PI * double(rand())/RAND_MAX - PI/2);
  }
  return velocity;
}

double cost(Particle p)
{
  double c = 0;
  for(vector<double>::iterator it = p.solution.begin(); it != p.solution.end(); ++it)
  {
    c += abs(sin(*it));
  }
  return c;
}

int main()
{
  srand(static_cast<unsigned>(time(0)));
  vector<tuple<double, double>> limits;
  for(int i = 0; i < N; i++)
  {
    limits.push_back(tuple<double, double> (-PI, PI));
  }
  PSO_Solver mySolver(N, 100, limits, &cost, &sol_gen, &vel_gen);
  for(int i = 0; i < 100; i++)
  {
    mySolver.iterate(0.3, 0.3, 2.1);
    cout<<"Iter. "<< i + 1 <<"\n";
    cout<<"Cost: " << mySolver.best_cost<<"\n";
  }
  cout<<"Solution: \n";
  for(int i = 0; i < N; i++)
  {
    cout<<mySolver.best_solution[i]<<" ";
  }
  cout<<"\n";
  return 0;
}

ورودی‌های کلاس حل کننده به ترتیب طول بردار پاسخ، جمعیت ذرات، محدوده متغیرها، تابع هزینه بهینه‌سازی، تابع ایجاد کننده موقعیت اولیه و تابع ایجاد کننده سرعت اولیه می باشد. تابع iterate از کلاس PSO_Solver نیز هر تکرار از الگوریتم را با سه پارامتر ω، φ_p و φ_g بعنوان ورودی انجام می دهد. طبیعتا آشنایی ابتدایی با زبان برنامه نویسی سی++ لازمه استفاده از این کتابخانه می باشد. خروجی کد بالا به شکل زیر خواهد بود:

Iter. 1
Cost: 2.34854
Iter. 2
Cost: 1.31756
Iter. 3
Cost: 1.07334

...

Iter. 93
Cost: 3.29238e-09
Iter. 94
Cost: 3.21902e-09
Iter. 95
Cost: 1.54199e-09
Iter. 96
Cost: 1.43792e-09
Iter. 97
Cost: 9.81981e-10
Iter. 98
Cost: 9.57258e-10
Iter. 99
Cost: 7.40219e-10
Iter. 100
Cost: 6.60842e-10
Solution: 
۳٫۸۶۰۰۸e-12 1.58105e-11 7.9602e-11 -2.63935e-10 -2.03055e-11 5.2477e-11 -7.09283e-11 3.14159 1.06551e-10 4.71655e-11

محتویات بسته:

  • فایلهای حل کننده الگوریتم بهینه سازی ازدحام ذرات (PSO.h و PSO.cxx)
  • فایل مثال استفاده از حل کننده (E1.cxx)
  • فایل اسکریپت bash برای کامپایل

امیدوارم از خرید این محصول نهایت رضایت را داشته باشید.

با ما در تماس باشید.

برنامه ریزی بهینه تولید همزمان برق و حرارت با الگوریتم بهینه سازی ازدحام ذرات PSO در پایتون

یکی از تکنولوژی‌های شناخته شده و متداول در صنعت انرژی، تولید همزمان برق و حرارت می‌باشد. بالا بودن بازده کاری و همچنین آلایندگی کمتر نسبت به روش‌های هم‌رده دیگر باعث مقبولیت این تکنولوژی در کشورهای توسعه یافته شده است. همچنین در کشورهای در حال توسعه نیز میل به این تکنولوژی افزایش یافته است. بطور خلاصه می‌توان ویژگی‌های تولید همزمان برق و حرارت را در موارد زیر بیان نمود:
• افزایش بازده انرژی
• کاهش انتشار گازهای آلاینده
• کاهش هزینه‌های انرژی نواحی صنعتی
• بهبود قابلیت اطمینان نواحی صنعتی از دید انرژی
• کاهش وقفه در تأمین زیر ساختهای جدید توزیع و انتقال
• طیف وسیع سوخت‌های قابل استفاده با آلایندگی کمتر
حرارت تولیدی در این نوع نیروگاه‌ها در بیشتر اوقات مورد استفاده بخش صنعتی می‌باشد. بطوری که در کشوری مثل ایالات متحده آمریکا در حدود ۸۶% از ظرفیت توان تولیدی واحدهای تولید همزمان برق و حرارت به طور عمده مورد استفاده در صنایعی مانند:
• صنایع غذایی
• صنایع نساجی
• صنایع چوب و مبلمان
• صنعت کاغذ
• صنعت چاپ و نشر
• صنایع شیمیایی
• صنایع پالایش فراورده‌های نفتی
• صنایع پلاستیک
• صنایع سنگ، خاک و شیشه
• صنایع فراوری فلزات اولیه و آلیاژها
می‌باشد.
در کاربردهای واقعی تولید، تأمین توان الکتریکی و حرارتی تقاضا شده صرفا توسط واحدهای تولید همزمان انجام نمی‌گیرد بلکه تعدادی نیروگاه برای تولید توان الکتریکی و تعدادی برای تولید توان حرارتی موجود خواهد بود. در مسئله برنامه‌ریزی بهینه تولید همزمان برق و حرارت، تقاضای توان الکتریکی و همچنین حرارتی بایستی بین واحدهای تولید توان به گونه‌ای تقسیم گردد که علاوه بر تأمین توان مورد نیاز با کمترین هزینه ممکن، پارامترهای کاری نیروگاه‌ها به شکلی قابل قبول تعیین گردند. به عبارتی نقطه کار نیروگاه‌ها بایستی قیدهای موجود برای فعالیت هر یک از آن‌ها را ارضاء نماید. این قیود می‌توانند تساوی، ناتساوی یا قرار گرفتن نقطه کار در یک ناحیه در فضای کاری باشند که در ادامه به طور کامل به آن پرداخته خواهد شد.

توضیحات کلی پیرامون مسئله CHPED یا برنامه ریزی بهینه تولید همزمان برق و حرارت در فایل زیر موجود می باشد.

فایل توضیحات کامل‌تر

برای دریافت کد پایتون مورد اشاره در فایل توضیحات می توانید این محصول را خریداری نمایید. در این کد اقدام به حل مسئله برنامه ریزی بهینه تولید همزمان برق و حرارت با استفاده از الگوریتم بهینه سازی ازدحام ذرات شده است. سیستم تست مورد استفاده از پیاده سازی سیستم ۲۴ واحدی می باشد که درای ۱۳ واحد تولید توان الکتریکی، ۶ واحد تولید همزمان توان الکتریکی و حرارتی و ۵ واحد که صرفا توان حرارتی تولید می‌نمایند، هست.

نمودار همگرایی خروجی الگوریتم در این برنامه بصورت زیر می باشد:

امیدواریم که از خرید این بسته نهایت رضایت را داشته باشید.

محتویات بسته:

  • فایل توضیحات کلی در مورد مسئله برنامه ریزی بهینه تولید همزمان برق و حرارت
  • فایل پایتون حل مسئله CHPED با استفاده از الگوریتم بهینه سازی ازدحام ذرات (PSO)