بررسی آلگوریتم ژنتیک در زبان برنامه نویسی C++ - پایان نامه بررسی آلگوریتم ژنتیک در زبان برنامه نویسی C در 140 صفحه ورد قابل ویرایش
پایان نامه بررسی آلگوریتم ژنتیک در زبان برنامه نویسی C++ در 140 صفحه ورد قابل ویرایش
فهرست مطالب
عنوانصفحه
چکیده1
مقدمه2
الگوریتم ژنتیک5
تعریف خروجی(نمایش)8
عملگرهای مجموعه ژن10
شئ جمعیت13
توابع شئ و مقیاس گذاری مناسب14
نمایش الگوریتم ژنتیک درc++15
توانایی عملگرها17
چگونگی تعریف عملگرها18
چگونگی تعریف کلاس مجموعه ژن22
سلسله مراتب کلاس ها23
1. سلسله مراتب کلاس GALib – گرافیکی23
2. سلسله مراتب کلاس GALib – مراتب24
رابط برنامه نویسی25
نام پارامترها و گزینه های خط فرمان26
رفع خطا 28
توابع اعداد تصادفی29
GAGeneticAlgorithm31
GADemeGA42
GAIncrementalGA44
GASimpleGA47
GASteadyStateGA50
Terminators52
Replacement Schemes54
GAGenome55
GA1DArrayGenome62
GA1DArrayAlleleGenome65
GA2DArrayGenome67
GA2DArrayAlleleGenome70
GA3DArrayGenome72
GA3DArrayAlleleGenome76
GA1DBinaryStringGenome78
GA2DBinaryStringGenome81
GA3DBinaryStringGenome85
GABin2DecGenome88
GAListGenome91
GARealGenome92
GAStringGenome94
GATreeGenome96
GAEvalData97
GABin2DecPhenotype98
GAAlleleSet100
GAAlleleSetArray103
GAParameter and GAParameterList104
GAStatistics108
GAPopulation113
GAScalingScheme123
GASelectionScheme127
GAArray130
GABinaryString132
نتیجه گیری135
مراجع136
چکیده
علم ژنتیک، علمی است که به تازگی وارد علوم کامپیوتر شده و با استفاده از اجزا مورد نیاز ژنتیک و شبیه سازی آن در کامپیوتر، انسان را قادر می سازد تا بعضی از مسائل مختلف و پیچیده ای که در اوایل حل نشدنی بودند، را حل کند.
این مستند، یک کتابخانه از اشیا الگوریتم ژنتیک به زبان c++ می باشد. این کتابخانه شامل ابزاریست که برای بهبود هر برنامه ای به زبان c++ و هر خروجی و هر عملگر ژنتیکی، استفاده می شوند. در اینجا، با پیاده سازی الگوریتم ژنتیک، رابط برنامه نویسی آن و اشکالی برای راهنمایی، آشنا خواهید شد.
مقدمه
این مستند محتویات کتابخانه الگوریتم ژنتیک را رمز بندی می کند و بعضی از فلسفه های طراحی را که در پشت پیاده سازی هستند، نمایش می دهد. بعضی از مثال های کد منبع در آخر صفحه مشخص شده تا ساختار اصلی برنامه، توانایی های عملگرها، تطابق عملگرها با نیاز کاربر و مشتقاتی از کلاس های جدید مجموعه ژن را نمایش بدهند. وقتی که شما از یک کتابخانه استفاده می کنید به صورت ابتدایی با دو نوع کلاس کار می کنید الگوریتم مجموعه ژن و الگوریتم ژنتیک. هر نمونه ای از مجموعه ژن یک راه حل برای مسئله شما نشان می دهد. شی الگوریتم ژنتیک توضیح می دهد که چگونه سیر تکامل باید طی شود. الگوریتم ژنتیک از یک تابع عضو شی ای که توسط شما تعریف شده است استفاده می کند تا معین کند چگونه هر مجموعه ژن برای زنده ماندن مناسب است؟
الگوریتم ژنتیک از عملگر های مجموعه ژن ( که در داخل مجموعه هستند) و استراتژی های انتخاب/ جایگزینی ( که در داخل الگوریتم ساخته می شود ) برای تولید یک مجموعه ژن جدید مجزا ، استفاده می کند.
سه چیز برای حل مسئله با استفاده از الگوریتم ژنتیک وجود دارد :
1. تعریف خروجی های که نشان داده میشوند
2. تعریف عملگر های ژنتیکی
3. تعریف تابع عضو شی را
GALIB (کتابخانه الگوریتمهای ژنتیک ) به شما در دومورد اول به وسیله مهیا کردن مثال های زیاد وتکه برنامه هایی که شما می توانید ، خروجی ها و عملگر های خود را بسازید کمک می کند . در خیلی از موارد شما می توانید از ساختار خروجی ها و عملگر ها با کمی یا هیچ اصلاحی استفاده کنید . تابع عضو شی کاملا به شما مربوط می شود .
در صورتی که شما خروجی ها ، عملگرها و موارد شی را داشته باشید ، می توانید هر کدام از الگوریتم های ژنتیک را برای پیدا کردن راه حل بهتر و مناسبتر برای مسئله تان به کار بگیرید. موقعی که شما از الگوریتم ژنتیک برای حل یک مشکل بهینه استفاده می کنید، باید قادر باشید که یک راه حل برای مسئله در یک ساختمان داده ارائه بدهید . الگوریتم ژنتیک یک جمعیت از راه حل هایی که بر طبق نمونة ساختمان دادهایی که به وجود آورده اید، ایجاد می کند . بعد الگوریتم ژنتیک بر روی این جمعیت عمل می کند تا بهترین راه حل را ازآن استخراج کند.در GALIB کتابخانه الگوریتم ژنتیک به نمونة ساختمان داده GAGENOME گفته می شود (بعضی ها به آن کروموزوم نیز می گویند ). این کتابخانه شامل چهار نوع از این مجموعه هاست GALISTGENOME ( لیست پیوندی مجموعه ژن)GATREEGAGENOME (درخت مجموعه ژن) GAARRYGENOME( آرایه مجموعه ژن) GABINARYSTRINGGENOME(رشته دودویی مجموعه ژن). این کلاس ها از کروموزوم یا کلاس GAGENOME اصلی و یک کلاس ساختمان داده ای که بوسیله نامشان مشخص شده اند، مشتق شده اند.
برای مثال لیست پیوندی مجموعه ژن از کلاس GALIST و همچنین کلاس مجموعه ژن GAGENOME مشتق شده است. از ساختمان داد ه ای که با تعریفات مسئله شما همخوانی دارد، استفاده کنید. برای مثال ، اگر شما سعی می کنید که یک تابعی را بهینه سازی کنید که به پنج عدد حقیقی وابسته است ، پس به عنوان مجموعه ژن خود از یک آرایه یک بعدی با پنج عنصر اعشاری استفاده کنید.
الگوریتم های ژنتیک مختلف زیادی وجود دارند. GALIB (کتابخانه الگوریتم ژنتیک) شامل سه نوع اصلی می باشد:
1. حالت ساده
2. حالت ساکن یا ثابت یا یکنواخت
3. حالت افزایش
این الگوریتم ها در طریق های که مجموعه های جدید مجاز را ایجاد می کند ومجموعه های قدیمی را درزمان سیرتکامل جایگزین می کنند ، با یکدیگر تفاوت دارند.
GALIB دو مکانیسم اولیه برای گسترش قابلیت های ساخت شی را مهیا می کند اول از همه (و مهمتر از همه از نظر برنامه نویسی C++ ) شما می توانید کلاس های خودتان را درست کنید و تابع های عضو جدیدی را تعریف کنید . اگر شما احتیاج دارید که فقط تنظیمات کمی را بر روی رفتار کلاس GALIB اعمال کنید ، در بیشتر موارد می توانید یک تابع تعریف کنید و به کلاس GALIB بگویید که از آن به عنوان پیش فرض استفاده کند .
الگوریتم های ژنتیک اگر به درستی پیاده سازی شوند، قابلیت هر دو مورد پویش( پیدا کردن وسیع)و کاوش (پیداکردن محلی )در فضای SEARCH را، دارند. نوع رفتار یا عملکردی را که شما می بینید، بستگی به این دارد که چگونه عملگرها کار می کنند و همچنین بستگی به شکل یا فرم فضای SEARCH شما دارد.
الگوریتم ژنتیک
شی الگوریتم ژنتیک معین می کند که کدام سلول مجرد باید زنده بماند، کدام یک باید دوباره تولید شود و کدام یک باید بمیرد. شیءالگوریتم ژنتیک میتواند آمارها را ضبط کرده و تصمیم بگیرد که چه مدت تکامل ادامه پیدا کند. معمولا یک الگوریتم ژنتیک هیچ نقطه پایان دقیقی ندارد وشما باید الگوریتم فرمان بدهید که چه موقع تمام شود. از تعداد نسلها برای پایان الگوریتم استفاده میشود. ولی شما میتوانید از خوبی بهترین راه حل یا جمعیتها یا هر استاندارد مخصوصی برای مشکل خودکه مایل هستید، برای پایان الگوریتم استفاده کنید.
این کتابخانه شامل چهار نوع از الگوریتم ژنتیک میباشد. اولین آنها استاندارد الگوریتم ژنتیک ساده است که توسط Goldberg در کتابش توضیح داده شده است. این الگوریتم از جمعیتهای بدون اشتراک و بهترینهای قابل انتخاب، استفاده میکند. هر نسلی که الگوریتم ژنتیک ایجاد می کند یک مجموعه اجزاء جدید جمعیت، بوجود میآید. دومین نوع الگوریتم ژنتیک، الگوریتم حالت ساکن یا یکنواخت میباشد که از جمعیت اشتراکی استفاده میکند. دراین گونه شما می توانید مشخص کنید که چه مقدار از جمعیت باید در هر نسلی جایگزین شوند. سومین نوع، الگوریتم ژنتیک افزایش است که درآن هر نسلی شامل یک یا دو فرزند میباشد. الگوریتم به متدهای جایگزینی دلخواه اجازه میدهد چگونگی یکپارچگی جمعیت از یک نسل جدید دخیل تعریف کنند. به عنوان مثال یک فرزند جدید تولید شده میتواند جای والدین خود را بگیرد یا به جای افراد مختلف در جمعیت جایگزین شود و یا جایگزین فردی که بیشترین شباهت را به او دارد شود. نوع چهارم، الگوریتم ژنتیک مرتبط می باشد این نوع الگوریتم چندین جمعیت را به صورت موازی با استفاده از الگوریتم حالت یکنواخت نمو میدهد. هر نسل الگوریتم بعضی از افراد را از یک جمعیت به جمعیت دیگری انتقال میدهد.
به علاوه این نوع های اصلی ، Galib یک ترکیب از کلاسهای الگوریتم ژنتیکی که شما نیاز دارید تا کلاسهای دلخواه خودتان را داشته باشید، تعریف میکند. مثالها شامل بعضی از مشتقات دارای (1) یک الگوریتم ژنتیک که از چندین جمعیت وانتقال بین جمعیت بر روی cpu های مختلف استفاده کند. (2) یک الگوریتم ژنتیک که انبوه سازی وابسته به ورودی را انجام میدهد، تا گونههای مختلف افراد را در حین سیر تکامل حفظ کند.
کلاس پایهای الگوریتم ژنتیک شامل عملگرها و دادههای معمول برای بیشترین نوع الگوریتم ژنتیک است. وقتی شما الگوریتم ژنتیک دلخواه خود را میخواهید درست کنید میتوانید از این اعضا داده و تابعها برای داشتن آمارها و نظارت بر اجرا، استفاده کنید.
الگوریتم ژنتیک شامل آمارها، استراتژی جایگزینی و پارامترها، برای راه اندازی و اجرا الگوریتم میباشد. شی جمعیت ظرفی برای مجموعه ژن، همچنین بعضی از آمارها و عملگرهای انتخاب و اندازهگیری را نیز داراست. یک الگوریتم ژنتیک معمولی برای همیشه اجرا می شود. کتابخانه تابعی را برای مشخص کردن این که در چه زمانی الگوریتم باید پایان یابد، ایجاد کرده است که شامل پایان بر روی نسل، که در آن شما یک شماره از نسل ها را تعیین می کنیدکه الگوریتم باید تا آنجا اجرا شود و پایان برروی همگرایی، که در آن ارزشی را مشخص میکنید که بهترین امتیاز از نسلها باید همگرا شوند. شما میتوانید توابع پایانی را به طور دلخواه تنظیم کنید و از ملاک خود برای پایان استفاده کنید.
تعداد ارزشیابی توابع، راه خوبی برای مقایسه الگوریتمهای ژنتیک با متدهای مختلف جستجوی دیگر میباشد. الگوریتمهای ژنتیک Galib هر دو سنجشهای جمعیت و تعداد مجموعه ژنها را میتواند داشته باشد.
توضیحات توابع عضو:
همگرایی Convergence:
مقدار همگرایی جاری را برگشت میدهد. همگرایی به این صورت تعریف میشود که بهترین امتیاز نسل قبل (n امین نسل) چقدر بیشتر از امتیاز نسل جاری میباشد.
crossover:
متد نزدیکی را برای استفاده در تکامل مشخص میکند. این تابع میتواند در طی تکامل تغییر کند. این الگوریتم ژنتیک فقط از crossover ها جنسی استفاده میکند.
done(انجام):
تابع، gatrue را برگشت میدهد اگر ملاک پایان را شناسایی کرده باشد در غیراین صورت gafalse رابر میگرداند این تابع معمولا تابع پایان که در موقع استفاده از تابع عضو پایانی مشخص شده است را فراخوانی میکند.
نمو (evolve):
الگوریتم ژنتیک را مقدار دهی اولیه میکند بعد آن را نمو می دهد تا موقعی که مشخصه پایان خود را نشان دهد. این تابع اول تابع مقداردهی اولیه را فراخوانی و بعد تابع عضو پرش فراخوانی میکند تا موقعی که تابع عضو انجام شده مقدار gatrue را برگشت دهد. تابع عضو امتیازات برابر را در موقعی که تکامل تمام شده فراخوانی میکند. شما ممکن است اگر میخواهید که دانه دلخواه تصادفی خود را تولید کنید، یک دانه را برای رشد بفرستید.
توالی خالی کردن FlushFrequency :
از این تابع عضو، برای مشخص کردن اینکه چه موقعی امتیازات باید بر روی دیسک نوشته شوند، استفاده میشود. ارزش صفر به معنی این است که بر دیسک چیزی نوشته نشود و ارزش 100 به این معنی است که امتیازات هر 100 نسل یکبار برروی دیسک نوشته شود.
امتیازات خالی کردن FlushScores :
برای اینکه الگوریتم ژنتیک را مجبور کنیم تا دادههای نسلی خودش را به روی دیسک بنویسد، از این تابع استفاده میشود. اگر شما یک توالی خالی کردن صفر یا امتیاز نام فایل صفر را مشخص کردید، در این صورت صدا کردن این تابع اثری نخواهد داشت.
نسلgeneration:
نسل جاری را برگشت میدهد.
اولیه سازیinitialize:
یک الگوریتم ژنتیک را اولیه سازی میکند. اگر شما یک هسته را مشخص کنید این تابع تابع GARandomseed را با آن مقدار فراخوانی میکند و اگر شما هستهای را مشخص نکنید Galib یک هسته را برای شما انتخاب میکند. (به طوری که در قسمت توابع تصادفی توضیح داده شد. ) بعد جمعیت را مقدار دهی اولیه میکند اولین ارزیابی جمعیت را انجام میدهد.
بهترین مجموعه ژنهاnBestGenomes:
مشخص میکند که چه تعداد کروموزومهای خوب برای ثبت وجود دارد. برای مثال، اگر شماره10 را مشخص کنید، الگوریتم ژنتیک 10 تا از بهترین کرومزومها که در تمام مواقع بهترین بودهاند،درخود نگه میدارد. مواظب باشید که اگر شما عدد بزرگی را برای الگوریتم تعیین کنید. الگوریتم سرعتش کاهش مییابد زیرا الگوریتم باید هر نسل را با لیست جاری بهترین نسلها، مقایسه کند. پیش فرض این تابع یک است.
nConvergence:
قراردادن و یا گرفتن تعداد نسلهایی که برای آزمایش همگرایی از آن استفاده میشود.
nGenerations:
قراردادن و یا دریافت تعداد نسلها.
objectivedata:
قرار دادن اعضای دادهای شی برای همه اجزائی که بوسیله الگوریتم ژنتیک استفاده میشود. این تابع میتواند درحین عمل تکامل تغییر کند.
objective function:
تناسب تابع شیای بر روی تمام اجزاء که توسط الگوریتم ژنتیک استفاده میشود. این تابع می تواند درحین عمل تکامل تغییر کند.
پارامترهاParameters:
یک مرجع به لیست پارامترها که شامل مقادیر جاری از پارامترهای الگوریتم ژنتیک است را برگشت میدهد.
parameters(GAParameterList&) :
پارامتری مناسب را برای الگوریتم ژنتیک ایجاد میکند برای استفاده از تابع عضو باید یک لیست پارامتر (یک آرایهای از جفت نام و مقدار) ایجاد کنیم وبعد آن لیست را به الگوریتم ژنتیک بفرستیم.
(int& argc, char** argv, GABoolean flag = gaFalse) parameters:
قرار دادن پارامترها برای الگوریتم ژنتیک. از این تابع عضو برای اجازه دادن به الگوریتم ژنتیک تا خط فرمان شما را برای ورودیهایی که Galib میشناسد، تقسیم بندی کند استفاده کنید.
این متد از argc یک واحد کم میکند واشاره گر را بدرستی در متغیر argv میریزد تا بتواند ورودیهای در لیستی را که خود میفهمد، حذف کند. اگر شما ورودی یا آرگومان gatrue را به عنوان آرگومان سوم به این تابع بفرستید، در اینصورت این متد در مورد هر آرگومان که نمیتواند آن را توسط الگوریتم ژنتیک شناسایی کند، معترض خواهد شد.
parameters(char* filename, GABoolean flag = gaFalse)
: parameters(istream&, GABoolean flag = gaFalse)
پارامترها را برای الگوریتم ژنتیک مرتب و ایجاد میکند. این نخسه از تابع عضو پارامتری یک فایل یا جریان خاصی را که الگوریتم ژنتیک آن رامیفهمد برای پارامترها معین میکند. اگر شما gatrue را به عنوان دومین آرگومان میفرستید در این صورت این متد در مورد هر پارامتری که توسط الگوریتم ژنتیک قابل شناسایی نیست، اعتراض میکند.
pConvergence :
قراردادن و یا گرفتن در صدد همگرایی. همگرایی به عنوان بزرگی n امین امتیاز بهترین نسل قبلی به امتیاز بهترین نسل جاری تعریف میشود. که n توسط تابع عضو Convergence تعریف شده است.
pcrossover:
قرار دادن ویا گرفتن احتمالات متقاطع crossover.
pmutation:
قرار دادن و یادگرفتن احتمالات جهش.
population:
قرار دادن ویادگرفتن جمعیت. مرجعی به جمعیت جاری را برگشت میدهد.
populationsize:
قرار دادن یا گرفتن سایز واندازه جمعیت. این مقدار میتواند در حین تکامل تغییر کند.
توضیحات توابع عضو:
add:
فرد مورد نظر را به جمعیت اضافه می کند. اگر شما این روش را با یک مراجعه به مجموعه ژن ها فراخوانی کنید، جمعیت مجموعه ژن را کپی میکند. و اگر شما این روش را با یک اشارهگر به مجموعه ژن فراخوانی کنید، جمعیت از مجموعه ژن اشاره شده استفاده میکند. از آن به بعد جمعیت، مسئول حذف آن مجموعه ژن میباشد.
Ave:
میانگین امتیازات شیگرایی را برمیگرداند.
Best:
یک مرجع به بهترین فرد در جمعیت را برمیگرداند. از پرچم مرتب سازی اصلی برای تعیین اینکه آیا بهترین موردهای امتیاز شیء گرایی خام را می خواهید یا امتیاز سنجش شده را.
Destroy:
حذف فرد مورد نظر از جمعیت و آزادسازی حافظه استفاده شده توسط آن فرد. از پرچم مرتب سازی اصلی برای تعیین اینکه آیا بهترین موردهای امتیاز شیء گرایی خام یا امتیاز سنجش شده در موقع تعیین اینکه کدام مجموعه ژن میخواهد حذف شود، استفاده کنید.
Dev:
برگشت استاندارد از امتیازات شی گرایی.
Div:
تغییر مسیر جمعیت را برمیگرداند. تغییر مسیر عددیست بین صفر و یک، که صفر مشخص کننده این است که هر فرد کاملا از دیگر افراد تفاوت دارد. اگرشما دومین مقدار را تعیین کنید این تابع عضو تغییر مسیر افراد مشخص شده، را برمیگرداند. ( این مقدار تابع مقایسه کننده را برای افراد موردنظر تحریک میکند)
Evaldata:
جمعیت را با استفاده از روش قرار دادن توسط یک تابع سنجش گر، اندازهگیری میکند. سنجش گر پیش فرض به سادگی، عضو سنجش، هر مجمموعه ژن در جمعیت را فراخوانی میکند. اگر شما این تابع را با gatrue فراخوانی کنید در این صورت جمعیت، سنجش را حتی اگر نتایج سنجش تفکیک شده باشند، اعمال میکند.
Evaluator:
مشخص میکند از کدام تابع سنجش جمعیت باید استفاده شود. تابع تعیین شده باید امضاء دقیقی داشته باشد.
Fitave:
میانگین امتیازات متناسب را برمیگرداند.
Fitdev:
برگشت استاندارد را از امتیازات متناسب.
Fitmax:
ماکسیمم امتیاز متناسب را برمیگرداند.
Fitmin:
مینیمم امتیاز متناسب را برمیگرداند.
Fitsum:
مینیمم امتیاز مناسب را برمیگرداند.
Fitvar:
واریانس امتیاز مناسب را برمیگرداند.
Genetic Algorithm :
قرار دادن ودریافت الگوریتم ژنتیکی که این جمعیت دارد. اگر مقدار برگشتی صفر باشد یعنی این جمعیت توسط هیچ الگوریتم ژنتیکی اختیار نشده است.
Individual:
یک مرجع به فرد مورد نظر، را برمیگرداند. شماره گذاری افراد در جمعیت از صفر شروع شده و به اندازه (کل–1 )ختم میشود. صفرمین فرد بهترین فرد است که در موقع مرتب سازی جابهجا شده است. از پرچم مرتب سازی اصلی برای تعیین اینکه آیا میخواهید i امین فرد را بر پایه امتیاز شیء گرایی خام یا امتیاز سنجش شده تعیین شود یا خیر، استفاده کنید.
Initialize:
اولیه سازی جمعیت با استفاده از متد مجموعه توسط اولیه ساز. متد اولیه ساز پیش فرض، مقدار اولیه ساز را برای هر مجموعه ژن در جمعیت فراخوانی میکند.
Initalizer:
تابعی که برای اولیه سازی باید استفاده شود،را معین میکند. تابع تعیین شده باید امضاء درستی داشت باشد.
Max:
ماکسیمم امتیاز شیء گرایی درجمعیت را برمیگرداند.
Min:
مینیمم امتیاز شیگرایی درجمعیت را برمیگرداند.
Order:
قرار دادن و دریافت ترتیب مرتب سازی. یک جمعیت به دو طریق مرتب سازی میشود: بیشترین امتیاز یا کمترین امتیاز.
Prepselect:
این تابع روش بروز رسانی انتخاب گر را فراخوانی میکند. این تابع معمولا توسط جمعیت قبل از عمل انتخاب، فراخوانی میشود.
Psum:
مجموع قسمتی ازi امین امتیاز مناسب در آرایة امتیازات مناسب مرتب شده، را برمیگرداند.
Remove:
فرد مورد نظر را از جمعیت حذف کند. مجموعه ژن قابل جایگزینی توسط یک شماره یا اشارهگر تعیین میشود. این تابع یک اشارهگر به مجموعه ژنی که از جمعیت حذف شده است را بر میگرداند. فراخوان کننده مسئول حافظه استفاده شده توسط مجموعه ژن برگشت داده شده میباشد. از پرچم مرتب سازی اصلی برای تعیین اینکه آیا امتیاز شیء گرایی خام باید استفاده شود یا امتیاز سنجش شده، در موقع تعیین اینکه کدام مجموعه ژن باید حذف شود استفاده کنید.
Replace:
جایگزینی فرد تعیین شده با اولین آرگومان ورودی مجموعه ژن قابل جایگزینی که میتواند توسط یک شماره یا اشارهگر مشخص شود. این تابع اشاره گر به مجموعه ژن جایگزین شده را برمیگرداند.
اگر هیچ مجموعه ژنی جایگزین نشده بود و یا شماره مورد و یا اشارهگر خاصی وغیر واقعی بودند، مقدار برگشتی تابع صفر میباشد. از پرچم مرتب سازی اصلی در موقع تعیین اینکه کدام مجموعه ژن باید جایگزین شود، برای تعیین اینکه از امتیاز شیای خام یا سنجش شده از کدامیک باید استفاده کرد، استفاده کنید.
مشخصات فروشنده
نام و نام خانوادگی : مجتبی خادم پیر
شماره تماس : 09151803449 - 05137530742
ایمیل :info@payfile.org
سایت :payfile.org