فهرست بستن

دانلود برچسب: بهینه سازی

فایل پایتون مثال پیشرفته استفاده از کتابخانه PuLP برای برنامه‌ریزی خطی

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

An Integer Linear Programming and Game Theory Based Optimization for Demand-side Management in Smart Grid

خدمت شما ارائه می‌شود. برای حل این مسئله از کتابخانه PuLP و حل کننده مسائل برنامه‌ریزی خطی GLPK استفاده شده است. دقت نمایید برای استفاده از این فایل باید کتابخانه PuLP و همچنین بسته نرم افزاری GLPK را نصب نموده باشید. خروجی توان مصرفی در افق برنامه‌ریزی به شکل زیر می‌باشد:

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

  • فایل مقاله
  • فایل پایتون مدل برنامه‌ریزی خطی با استفاده از PuLP
  • تصاویر خروجی (بیشترین مصرف برق در طی افق برنامه‌ریزی مطابق با مقاله برابر ۱٫۲۲)

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

contact [at] projelecom.ir

کتابخانه حل کننده الگوریتم بهینه سازی ازدحام ذرات 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 برای کامپایل

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

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

کتابخانه حل کننده الگوریتم بهینه سازی گرگ خاکستری (GWO)

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

عملیات شکار در گرگهای خاکستری در سه فاز انجام می گیرد:

  • تعقیب، دنبال کردن و رسیدن به شکار
  • محاصره، آزار و اذیت شکار تا زمانی که متوقف گردد
  • حمله مستقیم به شکار

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

  1. پارامتر a که در طول تکرارها از دو شروع و رفته رفته با کاهش به یک می رسد را محاسبه می نماییم.
  2. برای هر یک از سه گرگ آلفا، بتا و دلتا بردارهای تصادفی r1 و r2  را در ابعاد بردار پاسخ بدست می آوریم (در بازه بین صفر و یک)
  3. بطور متناظر برای هر یک دو بردار ضرایب A و C را محاسبه می کنیم: A = 2a.r1-a و C = 2r2
  4. سپس برای هر یک بردار D = |C.Xw-X| را محاسبه می نماییم که Xw موقعیت هر یک از گرگهای آلفا، بتا و امگا می باشد و X موقعیت گرگی که می خواهیم بروز رسانی کنیم است.
  5. متناظر با هر بردار X’ = Xw-A محاسبه می گردد.
  6. درنهایت موقعیت جدید گرگی که بدنبال بروز رسانی اش بودیم به شکل میانگین گیری از سه بردار X’ بدست آمده از هر یک از گرگهای آلفا، بتا و دلتا خواهد بود.

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

کد زیر را که برای یافتن مینیمم تابع مجموع سینوس تعدادی متغیر نوشته شده است، نحوه استفاده از کتابخانه را بطور ساده بیان می نماید:

from numpy import random, sin
from PyGWO import GWOSolver


def f(x):
    o = 0
    for a in x:
        o += sin(a) ** 2
    return o

def solution_generator():
    return 10 * (random.rand(10) - 0.5)

myGWO = GWOSolver(f, 200, solution_generator)
myGWO.solve(2000)
print(myGWO)

همانطور که مشاهده می شود از کتابخانه PyGWO که ارائه شده توسط ماست، کلاس حل کننده یعنی GWOSolver فراخوانی شده است. شی myGWO از نوع این کلاس ساخته شده است که پارامترهای ورودی سازنده آن به ترتیب تابع هدف مسئله بهینه سازی (که بصورت یک تابع با یک ورودی است و آن ورودی بردار پاسخ می باشد.) جمعیت گله گرگها در الگوریتم بهینه سازی گرگ خاکستری و تابع ایجاد کننده پاسخ های تصافی می باشد. تابع تولید کننده پاسخ های تصادفی برای ایجاد جمعیت اولیه بکار می رود. بدون ورودی است و کاربر باید متناسب با مسئله خود آن را طراحی نماید چرا که ایجاد جمعیت اولیه تاثیر بسزایی در پاسخهای الگوریتم بهینه سازی دارد. تابعی که از کلاس GWOSolver عملیات بهینه سازی را آغاز می کند solve نام دارد که تعداد تکرار را به عنوان ورودی می گیرد. خروجی کد بالا به شکل زیر خواهد بود:

Best solution vector:
-۰٫۰۰۵۱۴۷۸۶۱۷۶۹۴۶۸۰۸۴
-۰٫۰۰۴۱۷۹۲۸۱۶۲۴۹۷۵۹۲۵
۳٫۱۴۲۲۴۰۹۲۳۳۳۸۰۵۳
۰٫۰۰۲۴۲۱۲۱۹۳۴۳۳۴۱۶۲۲۶
۰٫۰۰۱۹۶۶۷۹۸۴۱۲۶۰۱۵۹۱۴
-۰٫۰۰۰۳۴۶۳۱۸۰۳۶۰۹۷۵۴۳۷۶
۶٫۲۸۲۵۶۸۷۸۶۲۹۲۰۸۹
-۶٫۴۵۲۲۱۴۳۷۰۱۰۷۳۷۸e-05
۰٫۰۰۳۵۹۵۴۶۱۵۸۵۹۰۱۶۰۱۴
۰٫۰۰۰۵۴۶۷۳۰۸۰۸۵۶۳۸۶۱۳
Fitness: 6.784777628314261e-05

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

  • فایل پایتون کلاس حل کننده (Solver) الگوریتم بهینه‌سازی گرگ خاکستری
  • فایل پایتون مثال استفاده از الگوریتم برای حل یک مسئله بهینه‌سازی نمونه

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

 

کتابخانه حل کننده الگوریتم کرم شب تاب (FFA) در پایتون

یکی از الگوریتم‌های فرا ابتکاری شناخته شده در زمینه بهینه‌سازی الگوریتم کرم شب‌تاب (Firefly algorithm) می‌باشد. در این بسته کلاس حل کننده برای این الگوریتم به همراه یک مثال ارائه شده است. توضیحات این الگوریتم و نحوه استفاده از کلاس در این آدرس موجود می‌باشد لذا حتما مطالعه فرمایید.

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

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

  • فایل پایتون کلاس حل کننده (Solver) الگوریتم بهینه‌سازی کرم شب تاب
  • فایل پایتون مثال استفاده از الگوریتم برای حل یک مسئله بهینه‌سازی نمونه

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

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

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

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

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

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

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

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

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