پیاده سازی حل مسئله جمع دوازده عدد به کمک کودا در ویژوال استودیو با چهار سناریو حل
بیان مسئله:
در این مسئله هدف محاسبه حاصل جمع 12 عدد (صفر تا یازده) به کمک پردازش موازی در کودا در محیط ویژوال استودیو است. بدین منظور ابتدا کد سریال آن در محیط ویژوال استودیو سی پلاس پلاس نوشته شده است. پس از آن با چهار سناریو مختلف به شکل موازی مسئله حل شده است. در پایان زمان محاسبه این حاصل جمع برای روش های مختلف مورد مقایسه قرار گرفته است.
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
شکل 1: محاسبه مجموع 12 عدد صفر تا یازده
پیاده سازی مسئله به روش سریال به کمک فایل sum12numberserial:
در این روش به صورت ترتیبی مجموع 12 عدد محاسبه شده است که کد آن در ذیل آورده شده است.
مراحل کار در شکل 2 آورده شده است. در آن در هر تکرار یک عدد با مقدار فعلی x جمع می شود.
شکل 2: مجموع دوازده عدد به صورت سریال
پیاده سازی حل مسئله تساوی ساده ریاضی به کمک الگوریتم ژنتیک در Visual studio C++
بیان مسئله:
فرض کنید تساوی a+2b+3c+4d=30 برقرار باشد با استفاده از الگوریتم ژنتیک مقادیر a,b,c,d به گونه ای باید تعیین شود که تساوی برقرار باشد. در ابتدا باید تابع هدف فرمول بندی شود. که در این مثال هدف مینیم کردن تابع f(x)=a+2b+3c+4d-30 می باشد. چون چهار متغیر در معادله وجود دارد می توان کروموزوم ها را به صورت شکل 1 ایجاد کرد. در ادامه هر کدام از مراحل الگوریتم ژنتیک همراه با کد آورده شده است.
d |
c |
b |
a |
شکل 1: تشکیل کروموزوم برای معادله ریاضی f(x) با چهار متغیر
پیاده سازی تابع هدف به کمک فایل Fchromosomemath1.h :
همان طور که در کد ذیل آورده شده است کروموزوم ها یا همان راه حل ها را از تابع اصلی به عنوان ورودی دریافت می کند. و سپس تابع هدف به کمک ژن ها در این مثال متغیرهای a,b,c,d به تعداد 6 کروموزوم بدست می آید. و در انتها یک آرایه یک بعدی سطری با 6 عنصر به عنوان جواب هر کرموزوم به تابع اصلی به عنوان خروجی برگردانده می شود.
////////////////////Fchromosomemath1.h\\\\\\\\\\\\\\\\\\\\\\\\
structmystruct400
{
int F400[6];
};
usingnamespace std;
structmystruct400 Fchromosomemath400(intnewchromosome3[6][4])
{
structmystruct400 items4;
for (int i = 0; i < 6; i++)
for (int j = 0; j < 4; j++)
cout <<"\nchr000000["<<i<<"]["<<j<<"]="<<newchromosome3[i][j];
int F400[6] = { 0 };
for (int i = 0; i < 6; i++)
{
int a = newchromosome3[i][0];
int b = newchromosome3[i][1];
int c = newchromosome3[i][2];
int d = newchromosome3[i][3];
F400[i] = abs(a + 2 * b + 3 * c + 4 * d - 30);
cout <<"\nF["<<i<<"]="<< F400[i];
items4.F400[i] = F400[i];
cout <<"\nitems4.F["<< i <<"]="<< items4.F400[i];
}
return items4;
}
//////////////////// End-Fchromosomemath1.h\\\\\\\\\\\\\\\\\\\\\\\\
ادامه مطلب ...