الگوریتم ژنتیک در هوش مصنوعی: بررسی کاربردها و پیادهسازی با پایتون
در حوزه هوش مصنوعی (AI)، الگوریتمهای مختلف به حل مسائل پیچیده کمک میکنند. یکی از این الگوریتمها که توجه زیادی را به خود جلب کرده است، الگوریتم ژنتیک (Genetic Algorithm) است. با ریشه در زیستشناسی تکاملی، GA ثابت کرده که ابزاری قدرتمند برای بهینهسازی و مشکلات جستجو در هوش مصنوعی است. در این مطلب از مکتوب قرار بر این خواهد بود که در مورد الگوریتم ژنتیک در هوش مصنوعی، کاربردها و ابعاد مختلف آن صحبت کرده و در آخرسر پیادهسازی الگوریتم ژنتیک در هوش مصنوعی با پایتون را انجام دهیم. پس با ما همراه باشید.
الگوریتم ژنتیک چیست؟
الگوریتمهای ژنتیک دستهای از الگوریتمهای جستجو و بهینهسازی هستند که از اصول انتخاب طبیعی و ژنتیک الهام گرفته شدهاند. آنها از روند تکامل طبیعی تقلید میکنند تا راهحلهای بهینه برای مسائل پیچیده پیدا کنند. این الگوریتم تکاملی بر روی جمعیتی از راهحلهای بالقوه عمل میکند که به صورت کروموزوم یا افراد نمایش داده میشوند.
این کروموزومها تحت عملیات ژنتیکی مانند جهش (Mutation) و تقاطع (Crossover) قرار میگیرند که منجر به تکامل جمعیت در طول نسلهای متوالی میشود.
اجزای یک الگوریتم ژنتیک
برای پیادهسازی الگوریتم ژنتیک در هوش مصنوعی ابتدا بهتر است که با اجزای آن آشنا شویم، اجزای الگوریتم ژنتیک به صورت فهرست موارد زیر هستند:
- نمونهسازی اولیه (Initialization): فرآیند با ایجاد یک جمعیت اولیه از افراد تصادفی آغاز میشود.
- ارزیابی سازگاری (Fitness Evaluation): سازگاری هر فرد توسط تابعی ارزیابی میشود که عملکرد آنها را در حل مشکل اندازهگیری میکند.
- انتخاب (Selection): افراد با آمادگی بالاتر احتمال بیشتری برای انتخاب شدن بهعنوان والدین برای نسل بعدی دارند.
- تقاطع (Crossover): افراد انتخاب شده تحت crossover قرار میگیرند، جایی که مواد ژنتیکی آنها برای ایجاد فرزندان ترکیب میشود.
- جهش (Mutation): گاهی اوقات، تغییرات تصادفی در ماده ژنتیکی فرزندان برای حفظ تنوع اثرگذار خواهد بود.
- تکرار (Repeat): فرآیند انتخاب، تقاطع و جهش تا زمانی که یک شرط خاتمه برآورده شود (بهعنوانمثال، حداکثر تعداد نسل یا دقت راهحل مورد نظر) ادامه مییابد.
مقاله پیشنهادی: پیش بینی churn یا تحلیل ریزش مشتریان در پایتون
ایده الگوریتم ژنتیک چیست؟
در دهه 1970، جان هالند، دانشمندی از دانشگاه میشیگان، مفهوم استفاده از الگوریتمهای ژنتیک را برای بهینهسازی مهندسی معرفی کرد. ایده اساسی پشت این الگوریتم شبیهسازی انتقال ویژگیهای ارثی از طریق ژنها است، دقیقاً شبیه نحوه انتقال صفات انسانی از طریق کروموزومها. هر ژن در این کروموزومها نشان دهنده یک ویژگی خاص است. به عنوان مثال، ژن 1 میتواند رنگ چشم، ژن 2 قد، ژن 3 رنگ مو و غیره را نشان دهد.
اما در عمل، انتقال کامل کروموزوم ها به نسل بعدی اتفاق نمیافتد. دو رویداد اولیه به طور همزمان اتفاق میافتد. اولین رویداد به عنوان «جهش | mutation» شناخته میشود، که در آن ژنهای خاصی دستخوش تغییرات تصادفی میشوند. اگرچه تعداد ژنهای جهشیافته معمولاً کم است، اما این تغییرات تصادفی نقش مهمی دارند. به عنوان مثال، ژن مسئول رنگ چشم میتواند به طور تصادفی منجر به این شود که فردی در نسل بعدی چشمان سبز داشته باشد، درحالیکه نسل قبلی عمدتاً دارای چشمان قهوهای بود. جهش تنوع و امکان ظهور صفات جدید را معرفی میکند.
رویداد دوم، که بیشتر از جهش رخ میدهد، «تقاطع | crossover» نامیده میشود. در طول تقاطع، دو کروموزوم با یکدیگر ترکیب میشوند و قسمتهایی را با یکدیگر مبادله میکنند. این فرآیند باعث میشود که فرزندان ترکیبات متفاوتی از ژنها را در مقایسه با والدین خود به ارث ببرند. تقاطع ترکیب مجدد اطلاعات ژنتیکی را ترویج میکند و منجر به فرزندانی با ویژگیهای منحصربهفرد میشود.
جهش و تقاطع با هم توانایی الگوریتم ژنتیک را برای کاوش و بهرهبرداری از فضای راهحل هدایت میکنند. جهش با تغییر تصادفی ژنها، تازگی ایجاد میکند و امکان کشف بالقوه صفات جدید و مفید را فراهم خواهد کرد. تقاطع تبادل و بازترکیب مواد ژنتیکی را تسهیل میکند، تنوع و انتشار ویژگیهای مطلوب را در طول نسلها ارتقا میدهد.
با ترکیب این مکانیسمهای الهام گرفته از تکامل طبیعی، الگوریتمهای ژنتیک میتوانند به طور مؤثر فضاهای حل پیچیده را جستجو و بهینه کرده و امکان کشف راهحلهای بهینه یا نزدیک به بهینه را برای طیف وسیعی از مسائل فراهم کنند. امروزه الگوریتم ژنتیک در هوش مصنوعی ترکیب شده است و تواناییهای بسیار حیرت انگیزی دارد.
پیشنهاد مطالعه: کاربردهای هوش مصنوعی در آموزش
کاربردهای الگوریتم ژنتیک در هوش مصنوعی چیست؟
از انواع کاربرد الگوریتم ژنتیک در هوش مصنوعی میتوان موارد زیر را نام برد:
- مشکلات بهینهسازی: الگوریتمهای ژنتیک بهطور گسترده برای حل مسائل بهینهسازی در حوزههای مختلف مانند زمانبندی، مسیریابی، تخصیص منابع و تنظیم پارامتر در مدلهای یادگیری ماشین استفاده میشوند.
- انتخاب ویژگی: الگوریتمهای ژنتیک به انتخاب ویژگیهای مرتبط از مجموعه دادههای بزرگ، بهینهسازی عملکرد مدلهای هوش مصنوعی و کاهش پیچیدگی محاسباتی کمک میکنند.
- آموزش شبکههای عصبی: الگوریتمهای ژنتیک را میتوان برای تکامل معماری شبکههای عصبی و بهینهسازی وزنها و فراپارامترهای آنها به کار برد.
- بازی کردن: الگوریتمهای ژنتیک برای تکامل استراتژیهای بازی به کار گرفته شدهاند و عوامل هوش مصنوعی را قادر میسازد تا گیمپلی خود را در طول زمان تطبیق داده و بهبود بخشند.
- رباتیک: الگوریتمهای ژنتیک به بهینهسازی رفتار ربات و برنامهریزی حرکت کمک میکنند و به رباتها اجازه میدهند تا به طور مؤثر در محیطهای پیچیده حرکت کنند.
الگوریتم ژنتیک قابلیت ترکیب با بیشتر الگوریتم های هوش مصنوعی را دارد و برای اهداف مختلفی از آن میتوان استفاده کرد.
پیشنهاد مطالعه: معرفی انواع محیط در هوش مصنوعی و نحوه کارکرد آنها
پیاده سازی الگوریتم ژنتیک در هوش مصنوعی با پایتون
اکنون و در این مرحله پیادهسازی الگوریتم ژنتیک در هوش مصنوعی با پایتون برای حل یک مسئله بهینهسازی اساسی را بررسی خواهیم کرد. در این مثال، هدف ما یافتن حداکثر مقدار یک تابع ریاضی است. قطعه کد انجام این کار به صورت زیر خواهد بود:
import random
# Define the fitness function
def fitness_function(x):
return x ** 2 - 3 * x + 4
# Genetic Algorithm implementation
def genetic_algorithm():
population_size = 50
chromosome_length = 8
generations = 100
# Generate initial population
population = []
for _ in range(population_size):
chromosome = ''.join(random.choice('01') for _ in range(chromosome_length))
population.append(chromosome)
for _ in range(generations):
# Evaluate fitness for each individual
fitness_scores = [fitness_function(int(chromosome, 2)) for chromosome in population]
# Select parents based on fitness scores
parents = random.choices(population, weights=fitness_scores, k=2)
# Apply crossover and mutation to create offspring
offspring = crossover(parents[0], parents[1])
offspring = mutation(offspring)
# Replace least fit individuals in the population
population = replace_least_fit(population, fitness_scores, offspring)
# Return the best individual
best_individual = max(population, key=lambda chromosome: fitness_function(int(chromosome, 2)))
return best_individual
# Crossover operation
def crossover(parent1, parent2):
crossover_point = random.randint(1, len(parent1) - 1)
offspring = parent1[:crossover_point] + parent2[crossover_point:]
return offspring
# Mutation operation
def mutation(chromosome):
mutation_point = random.randint(0, len(chromosome) - 1)
mutated_chromosome = list(chromosome)
mutated_chromosome[mutation_point] = '1' if mutated_chromosome[mutation_point] == '0' else '0'
return ''.join(mutated_chromosome)
# Replace least fit individuals in the population with offspring
def replace_least_fit(population, fitness_scores, offspring):
min_fitness_index = fitness_scores.index(min(fitness_scores))
population[min_fitness_index] = offspring
return population
# Main driver code
if __name__ == '__main__':
best_solution = genetic_algorithm()
best_value = fitness_function(int(best_solution, 2))
print("Best solution:", best_solution)
print("Best value:", best_value)
شرح قطعه کد پیاده سازی الگوریتم ژنتیک با پایتون در هوش مصنوعی به صورت زیر است:
مقداردهی اولیه: Initialization
- population_size = 50: تعداد افراد جامعه را مشخص میکند.
- chromosome_length = 8 طول هر کروموزوم در جمعیت را مشخص میکند.
- generations = 100: تعداد نسلهایی را که الگوریتم تکرار میکند را تعیین میکند.
ایجاد جمعیت اولیه: Generate Initial Population
- یک جمعیت لیست خالی (population) برای ذخیره افراد ایجاد میشود.
- یک حلقه به دفعات population_size را اجرا میکند و رشتههای دوتایی تصادفی (chromosome) با chromosome_length تولید میکند.
- هر کروموزوم تولید شده به طور تصادفی به لیست جمعیت اضافه میشود.
تکرار الگوریتم ژنتیک: Genetic Algorithm Iteration
یک حلقه چندین بار اجرا میشود تا مراحل الگوریتم ژنتیک را برای هر نسل انجام دهد.
در هر تکرار، مراحل زیر انجام میشود:
- ارزیابی سازگاری: سازگاری هر فرد در جامعه با استفاده از fitness_function ارزیابی میشود.
- نمرات سازگاری با انتقال مقدار صحیح هر کروموزوم (تبدیل شده از باینری) به تابع fitness_function محاسبه میشود.
- نمرات سازگاری در لیست fitness_scores ذخیره میشود.
انتخاب: Selection
- دو والدین بر اساس نمرات سازگاری از جامعه انتخاب میشوند.
- تابع choices برای انتخاب دو والدین با احتمالی متناسب با نمرات سازگاری آنها استفاده میشود.
Crossover: تقاطع
- یک نقطه تقاطع تصادفی برای انجام عملیات تقاطع انتخاب میشود.
- فرزندان از ترکیب بخشی از کروموزوم والد اول با قسمت باقیمانده از کروموزوم والد دوم ایجاد میشوند.
Mutation: جهش
- یک نقطه جهش تصادفی در کروموزوم فرزندان انتخاب میشود.
- اگر بیت انتخاب شده ‘0’ باشد، به ‘1’ جهش داده میشود و بالعکس.
- فرزندان جهش یافته برگردانده میشوند.
جایگزینی افراد با کمترین سازگاری:
- افراد کم تناسب در جمعیت با فرزندان جایگزین میشوند.
- شاخص کمترین تناسب با استفاده از index(min(fitness_scores)) تعیین میشود.
- فرزندان با شاخص تعیین شده در فهرست جمعیت جایگزین فرد میشوند.
بازگردانی بهترین راهحل:
- پس از تمام تکرارها، الگوریتم ژنتیک تکمیل شده است.
- بهترین فرد (کروموزوم) در جمعیت با یافتن حداکثر مقدار تناسب با استفاده از max(population, key=lambda chromosome: fitness_function(int(chromosome, 2))) تعیین میشود.
- بهترین فرد (کروموزوم) با استفاده از int (best_individual, 2) به نمایش عدد صحیح خود تبدیل میشود.
- بهترین کروموزوم و ارزش سازگاری متناظر آن چاپ خواهد شد.
تا به اینجا پیادهسازی الگوریتم ژنتیک در هوش مصنوعی تمام شد. بخش الگوریتم ژنتیک بالا مراحل اصلی یک الگوریتم ژنتیک پایه را پیادهسازی میکند، ازجمله نمونهسازی اولیه، ارزیابی، تقاطع، انتخاب، جهش و جایگزینی. این فرآیند تکراری به جمعیت اجازه میدهد تا در طول نسلها تکامل یافته و به تدریج سازگاری افراد را بهبود بخشد. خروجی الگوریتم بالا به صورت زیر است:
پیاده سازی الگوریتم ژنتیک را میتوان در بیشتر زبانهای برنامه نویسی انجام داد ولی پیاده سازی الگوریتم ژنتیک در متلب و پایتون بسیار رایج است.
پیشنهاد مطالعه: مدل زبانی شگف انگیز GPT 4 چیست؟
کد پایتون الگوریتم ژنتیک
الگوریتم ژنتیک یک الگوریتم تکاملی است که از فرآیند انتخاب طبیعی الهام می گیرد. در حوزه مسائل بهینهسازی، این الگوریتم به دنبال یافتن راهحلهایی برای چالشهای پیچیده با تقلید از روش تکامل و سازگاری طبیعت در طول زمان است. درست همانطور که صفات بیولوژیکی از طریق نسل ها منتقل می شوند، الگوریتم ژنتیک با جمعیتی از راه حل های بالقوه کار می کند و به تدریج آنها را برای دستیابی به بهترین نتیجه ممکن اصلاح می کند.
در قلب این الگوریتم مفهوم «کروموزوم» نهفته است. کروموزوم را به عنوان ظرفی در نظر بگیرید که راه حل بالقوه ای برای مشکل در دست دارد. هر کروموزوم متشکل از ژن هایی است که جنبه های مختلف محلول را نشان می دهند. این ژن ها مشابه صفات موجود در DNA هستند. در زمینه بهینه سازی، یک ژن ممکن است یک پارامتر یا مقداری را نشان دهد که به حل نهایی کمک می کند. به عنوان مثال، اگر توزیع نقش های وزیر را در بین هشت فرد بهینه کنیم، هر ژن می تواند نقشی را که به وزیر خاصی اختصاص داده شده است، نشان دهد.
الگوریتم ژنتیک پایتون python از طریق یک سری مراحل پیش می رود. با جمعیت اولیه کروموزوم ها شروع می شود که اغلب به طور تصادفی تولید می شوند. سپس این کروموزومها تحت یک فرآیند تکامل قرار میگیرند که شامل انتخاب مناسبترین افراد (بر اساس یک تابع تناسب مشخص)، ترکیب ژنهای آنها از طریق متقاطع، و معرفی تغییرات جزئی از طریق جهش است. این فرآیند طبیعی انتخاب، تولید مثل و جهش را تقلید می کند.
برای پیادهسازی الگوریتم ژنتیک در پایتون، توابعی ایجاد میکنید که جمعیتهای اولیه را تولید میکنند، تناسب افراد را ارزیابی میکنند، متقاطعها و جهشها را انجام میدهند و فرآیند کلی تکامل را مدیریت میکنند. الگوریتم از طریق این مراحل در چندین نسل تکرار می شود و به تدریج راه حل ها را اصلاح می کند. پایتون به دلیل نحو همه کاره و مجموعه گسترده ای از کتابخانه ها، بستری مناسب و گویا برای پیاده سازی الگوریتم ژنتیک فراهم می کند.
در نتیجه، الگوریتم ژنتیک ابزار قدرتمندی برای حل مسائل بهینه سازی است. این یک رویکرد تکراری و تکاملی است که می تواند راه حل هایی را در فضاهای راه حل پیچیده پیدا کند. این الگوریتم با استعاره ژنتیکی و اصول انتخاب، متقاطع و جهش، راهی موثر برای مقابله با چالشهای پیچیده ارائه میکند. با استفاده از قابلیتهای پایتون، میتوانید یک پیادهسازی کارآمد و مؤثر از الگوریتم ژنتیک ایجاد کنید و آن را برای طیف متنوعی از مشکلات اعمال کنید. از منابعی مانند گیت هاب میتوانید به دانلود انواع کد پایتون الگوریتم ژنتیک بپردازید و آن ها را تجزیه و تحلیک کنید. همچنین، الگوریتم ژنتیک باینری، الگوریتم pso و الگوریتم هشت وزیر نیز نوعی تمرین برنامه نویسی پایتون مناسب هستند.
کاربرد هوش مصنوعی در ژنتیک چیست؟
هوش مصنوعی (AI) و الگوریتمهای ژنتیک (GAs) هر دو تکنیکهای محاسباتی قدرتمندی هستند و ترکیب آنها میتواند به راهحلهای خلاقانه در زمینههای مختلف منجر شود. در ادامه چند کاربرد هوش مصنوعی در الگوریتمهای ژنتیک آورده شده است.
مسائل بهینهسازی
الگوریتمهای ژنتیک اغلب برای حل مسائل بهینهسازی استفاده میشوند، مانند یافتن بهترین پارامترها برای مدلهای یادگیری ماشین، بهینهسازی تخصیص منابع در لجستیک و تنظیم سیستمهای پیچیده. هوش مصنوعی میتواند GA را با ارائه راههای هوشمندتر و کارآمدتر برای انتخاب، جهش و ترکیب مجدد افراد در جمعیت تقویت کند.
انتخاب ویژگی
در یادگیری ماشین و تجزیهوتحلیل دادهها، انتخاب مرتبطترین ویژگیها یا متغیرها میتواند عملکرد مدل را بهطور قابل توجهی بهبود بخشد. تکنیکهای هوش مصنوعی مانند یادگیری عمیق و یادگیری تقویتی میتوانند به GA در تعیین خودکار ویژگیهایی که باید در یک مدل بگنجانند، کمک کنند و منجر به پیشبینیهای دقیقتر شوند.
تنظیم Hyperparameter
هوش مصنوعی میتواند برای بهینهسازی فرا پارامترهای الگوریتمهای یادگیری ماشین یا شبکههای عصبی استفاده شود. بهجای تکیه بر تنظیم دستی یا جستجوی شبکه، GA های تقویت شده با هوش مصنوعی میتوانند فضای فراپارامتر را بهطور موثقتری کاوش کنند و در نتیجه مدلهایی با عملکرد بهتر به وجود بیایند و این یکی از مهمترین کاربردهای هوش مصنوعی در الگوریتم ژنتیک است.
کشف دارو
GAهای مجهز به هوش مصنوعی میتوانند با بهینهسازی ساختارهای مولکولی و پیشبینی میل اتصال مولکولها به پروتئینهای هدف، فرآیند کشف دارو را تسریع کنند. این میتواند به شناسایی سریعتر و مقرونبهصرفه تر نامزدهای دارویی بالقوه کمک کند. این قابلیت الگوریتم ژنتیک در هوش مصنوعی بسیار قابل توجه است.
پیشنهاد مطالعه: کاربرد هوش مصنوعی در پزشکی و آینده آن
رباتیک تکاملی
GAهای مبتنی بر هوش مصنوعی در زمینه رباتیک برای تکامل استراتژیهای کنترل و طراحیهای فیزیکی برای روباتها استفاده میشوند. آنها میتوانند رفتار و مورفولوژی رباتها را برای وظایف یا محیطهای خاص بهینه کنند و امکان ایجاد سیستمهای رباتیک کارآمدتر و سازگارتر را فراهم کنند.
بازی سازی
GA های تقویت شده با فناوری هوش مصنوعی در بازی، مانند استراتژیهای تکامل یافته برای بازیهای رومیزی یا بازیهای ویدیویی به کار گرفتهشدهاند. ترکیبی از الگوریتمهای ژنتیک و یادگیری تقویتی میتواند منجر به توسعه عوامل بازیسازی بسیار رقابتی شود.
پردازش تصویر و سیگنال
الگوریتمهای ژنتیک را میتوان همراه با تکنیکهای هوش مصنوعی مانند یادگیری عمیق برای کارهایی مانند حذف نویز تصویر، بهبود تصویر و پردازش سیگنال استفاده کرد. هوش مصنوعی میتواند به GA کمک کند تا فیلترهای پردازش تصویر یا الگوریتمهای پردازش سیگنال را برای نتایج بهتر تطبیق داده و تکامل دهند.
مدلسازی مالی
یکی دیگر از انواع کاربرد هوش مصنوعی در الگوریتم ژنتیک مدلسازی مالی و کاربرد در بخش حسابداری است. GAهای مبتنی بر هوش مصنوعی در مدلسازی مالی و معاملات الگوریتمی استفاده میشوند. آنها میتوانند استراتژیهای معاملاتی، تخصیص پورتفولیو و مدیریت ریسک را با توسعه استراتژیهایی که با شرایط متغیر بازار سازگار میشوند، بهینه کنند.
زمانبندی منابع
هوش مصنوعی برای ژنتیک در مسائل زمانبندی و تخصیص منابع در حوزههای مختلف از جمله تولید، حملونقل و مدیریت پروژه استفاده میشوند. هوش مصنوعی میتواند به مدلسازی و بهینهسازی این مشکلات زمانبندی پیچیده کمک کند و منجر به استفاده کارآمدتر از منابع شود.
وسایل نقلیه خودران
هوش مصنوعی در مهندسی ژنتیک در توسعه وسایل نقلیه خودران برای بهینهسازی برنامهریزی مسیر، کنترل وسیله نقلیه و همجوشی حسگرها استفاده میشوند. الگوریتمهای تکاملی را میتوان برای تکامل رفتارهای رانندگی و انطباق با شرایط مختلف رانندگی به کار گرفت. در این کاربردهای هوش مصنوعی در ژنتیک، تکنیکهای هوش مصنوعی مانند شبکههای عصبی، یادگیری تقویتی، یادگیری عمیق و پردازش زبان طبیعی میتوانند قابلیتهای الگوریتمهای ژنتیک را افزایش داده و آنها را در حل مسائل پیچیده کارآمدتر و مؤثرتر کنند. همافزایی بین هوش مصنوعی و ژنتیک به پیشرفت در حوزههای مختلف ادامه میدهد و فرآیندهای بهینهسازی و تصمیمگیری را بهبود میبخشد.
پیشنهاد مطالعه: کاربردهای هوش مصنوعی در صنعت خودروسازی
سخن پایانی
الگوریتمهای ژنتیک نوعی رویکرد قدرتمند برای حل مسائل بهینهسازی پیچیده در هوش مصنوعی ارائه میدهند. این الگوریتمها با شبیهسازی تکامل طبیعی، قادر به یافتن راهحلهای بهینه و سازگاری با محیطهای متغیر هستند. در این مقاله، اصول اساسی الگوریتم ژنتیک در هوش مصنوعی را بررسی کردیم، کاربردهای آنها را در هوش مصنوعی مورد بحث قرار دادیم و یک مثال پیادهسازی پایتون برای حل یک مسئله بهینهسازی ارائه کردیم.
به یاد داشته باشید، الگوریتمهای ژنتیک همهکاره هستند و میتوان آنها را متناسب با حوزههای مختلف مشکل سفارشی کرد. با کاوش و آزمایش بیشتر، میتوانید از پتانسیل کامل الگوریتم ژنتیک و هوش مصنوعی استفاده کنید. به امید اینکه این آموزش الگوریتم ژنتیک در هوش مصنوعی مورد توجه شما قرار گرفته باشد. برای یادگیری هوش مصنوعی به صورت کاملا حرفهای میتوانید از صفحه آموزش هوش مصنوعی مکتب خونه دیدن کنید.
سلام وقتتون بخیر
شما کدهای پایتون الگوریتم ژنتیک برای مینیم سازی یک تابع هدف که چند تا محدودیت داشته باشه رو دارین؟؟ هر چی سرچ میکنم فقط حالت ماکزیمم سازیش وجود داره