بازگشت به یادداشت‌ها
به‌روزرسانی: علیرضا سرودی

سه روش عملی استفاده از Solverها در Pyomo

سه روش عملی نصب و استفاده از سالورهای Pyomo؛ راهنمای انتخاب میان HiGHS، CBC، IPOPT و Gurobi برای مسائل خطی، صحیح و غیرخطی مختلف.

سه روش عملی استفاده از Solverها در Pyomo

وقتی می‌خوای با Pyomo مدل‌سازی کنی، اول باید یک سالور داشته باشی. سالورهای تجاری خوب، مثل Gurobi و CPLEX، همیشه رایگان نیستند. اما چند گزینه رایگان و قابل‌اعتماد هم وجود دارد. در ادامه سه روش عملی برای نصب و استفاده از این سالورها را می‌بینیم. سپس یک راهنمای انتخاب هم می‌آید: کدام سالور، برای کدام نوع مسئله مناسب‌تر است. (اگر هنوز با مفهوم مدل‌سازی ریاضی پیش از انتخاب سالور آشنا نیستید، یادداشت مدل‌سازی ریاضی و اهمیت آن را ببینید.)


چهار سالور اصلی که باید بشناسید

پیش از ورود به نصب، بهتر است این چهار سالور را به‌اختصار بشناسیم. هر کدام نقطه قوت متفاوتی دارند.

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

CBC یک سالور متن‌باز برای برنامه‌ریزی صحیح مختلط (MILP) است. پروژه COIN-OR آن را توسعه می‌دهد و سال‌ها گزینه پیش‌فرض بسیاری از پروژه‌های آموزشی بوده است.

HiGHS جدیدترین و سریع‌ترین سالور متن‌باز این فهرست است. تیم دانشگاه ادینبرا آن را توسعه داده و امروز در بسیاری از پروژه‌ها، حتی جایگزین CBC و GLPK شده است. HiGHS هم LP و هم MILP را، معمولاً سریع‌تر از CBC، حل می‌کند.

IPOPT برای مسائل غیرخطی (NLP) ساخته شده است. اگر تابع هدف یا قیدهای مدل شما غیرخطی باشند، مثلاً شامل توان دوم یا لگاریتم، IPOPT گزینه اول شماست.

Gurobi قدرتمندترین سالور تجاری این فهرست است. برای مسائل MILP بسیار بزرگ، از نظر سرعت، معمولاً از همه گزینه‌های رایگان جلوتر است. Gurobi رایگان نیست، اما یک لایسنس رایگان کامل برای دانشگاهیان ارائه می‌دهد.


۱) نصب روی کامپیوتر شما (بهترین گزینه برای کار طولانی‌مدت)

اگر می‌خوای این سالورها رو مستقیم روی سیستم خودت داشته باشی، چند مسیر نصب جداگانه وجود دارد.

نصب GLPK، CBC و IPOPT با Conda

لازم است: Anaconda یا Miniconda نصب داشته باشی. دانلود کن از: anaconda.com

سپس کافیه این کامند رو اجرا کنی:

conda install -c conda-forge pyomo.solvers

این دستور خودکار این سه تا سالور معروف و رایگان رو نصب می‌کنه:

  • GLPK — خطی و صحیح (Linear & Integer Programming)
  • CBC — صحیح (Integer Programming) — سریع‌تر از GLPK
  • IPOPT — غیرخطی (Nonlinear Programming)

⚠️ نکته مهم: ورژن Python و Anaconda مهمه. اگر از یک نسخه‌ی خیلی جدید استفاده کنی و بعدش مشکل پیش بیاد، دوباره نصب هم سخت‌تر خواهد بود. بهتره از ورژن Python ۳.۱۰ یا ۳.۱۱ شروع کنی.

نصب HiGHS

برخلاف سالورهای بالا، HiGHS را معمولاً از طریق pip نصب می‌کنیم، نه conda:

pip install highspy

بعد از نصب، Pyomo می‌تونه از HiGHS از طریق رابط appsi استفاده کنه:

from pyomo.environ import *
from pyomo.contrib.appsi.solvers.highs import Highs

m = ConcreteModel()
m.x = Var(within=NonNegativeIntegers)
m.obj = Objective(expr=m.x, sense=maximize)
m.c1 = Constraint(expr=m.x <= 10)

opt = Highs()
result = opt.solve(m)
print(value(m.x))

چون HiGHS کاملاً متن‌باز و بدون لایسنس است، نصب آن ساده‌تر از Gurobi و معمولاً سریع‌تر از CBC است.

نصب Gurobi و فعال‌سازی لایسنس دانشگاهی

Gurobi به یک لایسنس نیاز دارد، اما دریافت نسخه رایگان آن برای دانشجویان و پژوهشگران دانشگاهی ساده است:

  1. در سایت gurobi.com با ایمیل دانشگاهی ثبت‌نام کن.
  2. از بخش Academic Program، لایسنس رایگان را درخواست بده.
  3. با دستور pip install gurobipy کتابخانه پایتون را نصب کن.
  4. با دستور grbgetkey که سایت گوروبی در اختیارت می‌گذارد، لایسنس را روی سیستم خودت فعال کن.

بعد از فعال‌سازی، استفاده از آن در Pyomo تفاوت چندانی با بقیه سالورها ندارد:

opt = SolverFactory('gurobi')
opt.solve(m)

نکته مهم: لایسنس رایگان دانشگاهی، فقط روی شبکه دانشگاه یا با اتصال VPN دانشگاهی فعال می‌شود. خارج از آن محیط، Gurobi به لایسنس تجاری نیاز دارد.

بعد از نصب هر سالور، این کد ساده رو برای تست اجرا کن:

from pyomo.environ import *

m = ConcreteModel()
m.x = Var(within=NonNegativeReals)
m.obj = Objective(expr=m.x**2)

opt = SolverFactory('ipopt')
opt.solve(m)
print(value(m.x))

اگر بدون خطا اجرا شد، سالور شما آماده‌ست.


۲) Google Colab (بدون نصب، درست در مرورگر)

اگر نمی‌خوای چیزی نصب کنی یا سیستمت ضعیفه، Google Colab بهترین گزینه است. برای بررسی کامل مزایا و معایب Colab، یادداشت Google Colab: مزایا و معایب را ببینید.

کل کاری که باید کنی:

  1. این لینک رو باز کن: LINK

  2. حساب Google خودت رو لاگین کن (رایگان).

  3. سلول‌های کد (cell) رو یکی بعد از دیگری اجرا کن (دکمه‌ی ▶ یا Shift+Enter).

Colab خودش GLPK، CBC، HiGHS و IPOPT رو با یک دستور pip install نصب می‌کنه. دیگر نیاز به نصب محلی نیست. Gurobi هم در Colab قابل‌استفاده است، اما باز هم به لایسنس جداگانه نیاز دارد.

مزیت: سریع، رایگان، هیچ سخت‌افزار اختصاصی نمی‌خواد. نقص: بعد از بسته‌شدن نشست (Session)، باید دوباره سالور را نصب کنی؛ اما کد خودت ذخیره می‌شه.


۳) سرور NEOS (بدون نصب، حل آنلاین)

برای مسائل کوچک‌تر و یکی‌دفعه، می‌تونی از NEOS Server استفاده کنی — یک سرور رایگان دانشگاهی که سالور رو آنلاین اجرا می‌کنه.

شرط: اتصال به اینترنت لازمه؛ مدل ترجیحاً کوچک باشه، چون اندازه مدل و زمان اجرا در NEOS محدود است.

نحوه‌ی استفاده:

from pyomo.environ import *

m = ConcreteModel()
m.x = Var(within=NonNegativeReals)
m.obj = Objective(expr=m.x**2 - 4*m.x)

# استفاده از NEOS
mgr = SolverManagerFactory('neos')
res = mgr.solve(m, opt='ipopt')

print(value(m.obj))

نکته جالب NEOS این است که چند سالور تجاری، مثل CPLEX، را هم به‌صورت محدود و رایگان برای کارهای دانشگاهی در اختیار می‌گذارد. این یعنی می‌توانید بدون خرید لایسنس، نتیجه یک سالور تجاری را روی یک مسئله کوچک آزمایش کنید.


کدام سالور را انتخاب کنیم؟

این پرسش بیشتر از نصب اهمیت دارد. انتخاب اشتباه سالور می‌تواند زمان حل یک مسئله را از چند ثانیه به چند ساعت برساند. انتخاب درست، اول از همه به نوع مسئله بستگی دارد.

اگر مسئله شما خطی یا صحیح مختلط (LP/MILP) است: برای یادگیری و پروژه‌های کوچک، CBC کافی است. اما اگر مدل شما بزرگ‌تر می‌شود، HiGHS را امتحان کنید. در اکثر محک‌ها (Benchmark) سریع‌تر از CBC است و همچنان کاملاً رایگان می‌ماند.

اگر مسئله شما غیرخطی (NLP) است: IPOPT تقریباً تنها گزینه رایگان و قابل‌اعتماد در این فهرست است. HiGHS و CBC اصلاً برای مسائل غیرخطی طراحی نشده‌اند و روی آن‌ها جواب نادرست یا خطا می‌دهند.

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

اگر بودجه محدود است اما مدل بزرگ: قبل از خرید لایسنس تجاری، حتماً HiGHS را روی مدل واقعی خودتان امتحان کنید. فاصله عملکرد آن با سالورهای تجاری، در چند سال اخیر به‌شدت کم شده است.

یک قاعده عملی ساده: همیشه ابتدا با یک سالور رایگان شروع کنید. فقط وقتی به یک محدودیت واقعی سرعت یا مقیاس رسیدید، به سمت Gurobi یا سالورهای تجاری مشابه بروید.


مقایسه سریع

سالورنوع مسئلهلایسنسسرعت نسبیمناسب برای
GLPKLP, MILP کوچکرایگانکندیادگیری و مدل‌های خیلی کوچک
CBCLP, MILPرایگانمتوسطپروژه‌های آموزشی و صنعتی متوسط
HiGHSLP, MILPرایگانسریعاکثر پروژه‌های واقعی، جایگزین CBC
IPOPTNLPرایگانمتوسطمسائل غیرخطی
GurobiLP, MILP, QPتجاری (لایسنس دانشگاهی رایگان)بسیار سریعMILP بسیار بزرگ، صنعتی
روش اجرانصبسرعتمناسب برای
کامپیوتر شخصییک‌بار⚡⚡⚡ سریعپروژه‌های طولانی و بزرگ
Google Colab❌ ندارد⚡⚡ متوسطیادگیری و تست کوتاه‌مدت
NEOS Server❌ ندارد⚡ کندمسائل کوچک و آشنایی اولیه

سوالات متداول

آیا برای مدل‌های کوچک هم باید سراغ HiGHS یا Gurobi بروم؟

نه لزوماً. برای مدل‌های آموزشی و کوچک، CBC یا GLPK کاملاً کافی هستند. HiGHS و Gurobi زمانی اهمیت پیدا می‌کنند که تعداد متغیرها و قیدها به چند هزار یا بیشتر برسد.

آیا لایسنس رایگان دانشگاهی Gurobi محدودیت زمانی دارد؟

بله، معمولاً این لایسنس سالانه است و باید هر سال تمدید شود. همچنین تا زمانی که ایمیل و شبکه دانشگاهی معتبر دارید، تمدید آن رایگان و ساده است.

برای انتخاب و پیاده‌سازی سالور مناسب در یک پروژه صنعتی واقعی، از کجا کمک بگیرم؟

دوره مدل‌سازی ریاضی و بهینه‌سازی با پایتون مبانی انتخاب و استفاده از این سالورها را آموزش می‌دهد. برای مدل‌های بزرگ‌تر و صنعتی هم می‌توانید از طریق صفحه مشاوره با ما در ارتباط باشید.

آیا می‌توان در یک پروژه، چند سالور مختلف را برای مقایسه امتحان کرد؟

بله، و این کار توصیه می‌شود. چون Pyomo مستقل از سالور است، تغییر نام سالور در `SolverFactory` کافی است. با همین تغییر می‌توانید همان مدل را با سالور دیگری اجرا کنید و زمان حل را مقایسه کنید.

جمع‌بندی

انتخاب سالور مناسب، یکی از تصمیم‌های کم‌توجه اما پراثر در هر پروژه بهینه‌سازی است. در این یادداشت دیدیم چهار سالور اصلی، GLPK، CBC، HiGHS، IPOPT و Gurobi، هر کدام برای چه نوع مسئله‌ای ساخته شده‌اند. دیدیم چطور هر کدام را روی کامپیوتر شخصی نصب کنیم. همچنین دیدیم چرا Google Colab و NEOS Server، بدون نیاز به نصب، گزینه‌های خوبی برای شروع سریع هستند.

قاعده کلی ساده است: برای شروع و یادگیری، از سالورهای رایگان مثل CBC یا HiGHS استفاده کنید. فقط وقتی مدل واقعی شما به یک محدودیت واقعی سرعت رسید، به سمت گزینه‌های تجاری مثل Gurobi بروید.

اگر می‌خواهید پیش از انتخاب سالور، مبانی مدل‌سازی را هم مرور کنید، یادداشت مدل‌سازی ریاضی و اهمیت آن نقطه شروع خوبی است. برای دیدن یک مثال کامل‌تر از ساخت مدل تا تحلیل جواب در Pyomo هم، یادداشت بهینه‌سازی با Pyomo را ببینید. اگر می‌خواهید این مهارت‌ها را از پایه و به‌صورت ساخت‌یافته یاد بگیرید، همین مسیر طبیعی شماست. دوره مدل‌سازی ریاضی و بهینه‌سازی با پایتون دقیقاً برای همین هدف طراحی شده است.


مشاوره و ارتباط با ما

برای مشاوره و ثبت‌نام در دوره‌ها و دریافت پروژه‌ها با آیدی @pypyid در تلگرام در تماس باشید.

ارتباط در تلگرام

دوره‌های آموزشی مرتبط

مقالات و یادداشت‌های مرتبط

پروژه‌های مرتبط