آموزش OR-Tools در پایتون

این صفحه نقطهٔ شروع یادگیری OR-Tools به زبان فارسی است: اینکه OR-Tools چیست، از چه بخش‌هایی تشکیل شده، کِی باید سراغ آن رفت و به چه ترتیبی یاد گرفت. همهٔ آموزش‌های سایت که با OR-Tools و CP-SAT نوشته شده‌اند، این‌جا بر اساس نوع مسئله دسته‌بندی شده‌اند؛ با تمرکز بر زنجیرهٔ تأمین، مهندسی صنایع و لجستیک.

OR-Tools چیست؟

OR-Tools مجموعه‌ای متن‌باز از گوگل برای حل مسائل بهینه‌سازی ترکیبیاتی است؛ مسائلی که در آن‌ها باید از میان تعداد بسیار زیادی انتخاب گسسته بهترین را پیدا کرد. پرسش‌هایی مثل «کدام کار اول انجام شود؟»، «هر خودرو به کدام مشتری‌ها سر بزند؟» یا «انبار جدید کجا ساخته شود؟» دقیقاً از این نوع هستند.

هستهٔ OR-Tools با C++ نوشته شده و از پایتون، جاوا و #C قابل استفاده است. در این سایت همهٔ آموزش‌ها با پایتون هستند، چون برای یادگیری و نمونه‌سازی سریع‌ترین مسیر است و همان کد را می‌توان مستقیم در پروژهٔ واقعی به کار برد.

اجزای OR-Tools

OR-Tools یک سالور واحد نیست، بلکه چند ابزار تخصصی کنار هم است. دانستن اینکه هر مسئله را باید به کدام بخش سپرد، نیمی از کار است:

بخشبرای چه مسائلی
CP-SATزمان‌بندی، تخصیص، برنامه‌ریزی نیروی انسانی، پازل‌ها و بیشتر مسائل گسسته با قیود منطقی
Routing Libraryمسئلهٔ فروشندهٔ دوره‌گرد (TSP) و مسیریابی وسایل نقلیه (VRP) با ظرفیت، پنجرهٔ زمانی و چند انبار
Linear Solverبرنامه‌ریزی خطی و عدد صحیح (LP و MILP) از طریق یک رابط واحد برای سالورهای مختلف
الگوریتم‌های گرافکوتاه‌ترین مسیر، بیشینه‌جریان، جریان با کمترین هزینه و مسئلهٔ تخصیص

در عمل، CP-SAT پرکاربردترین بخش است و بیشتر آموزش‌های این سایت هم بر آن تکیه دارند. CP-SAT بارها در مسابقهٔ بین‌المللی سالورهای برنامه‌ریزی محدودیت (MiniZinc Challenge) رتبهٔ اول را کسب کرده است.

OR-Tools یا Pyomo؟

این دو رقیب هم نیستند، بلکه مکمل‌اند. OR-Tools در مسائل گسسته و ترکیبیاتی می‌درخشد: زمان‌بندی، مسیریابی و تخصیص. Pyomo یک زبان مدل‌سازی جبری است که مدل را جدا از سالور تعریف می‌کند و برای مسائل پیوسته و غیرخطی، مثل پخش بار بهینهٔ AC در شبکهٔ برق، انتخاب طبیعی‌تری است.

به همین دلیل در این سایت، بیشتر آموزش‌های زنجیرهٔ تأمین و زمان‌بندی با OR-Tools نوشته شده‌اند و آموزش‌های سیستم قدرت با Pyomo (برای نمونه چه مسائلی به AC-OPF نیاز دارند؟). اگر می‌خواهید با طرف دیگر هم آشنا شوید، سه روش عملی استفاده از Solverها در Pyomo شروع خوبی است. در برخی یادداشت‌ها مثل تخصیص اسکله بندر: کدام کشتی، کجا و کِی پهلو بگیرد؟ همان مسئله با هر دو رویکرد حل شده تا تفاوتشان را ببینید.

نصب و شروع کار

نصب OR-Tools تنها با یک دستور انجام می‌شود: pip install ortools. سالور CP-SAT داخل همین بسته است و برخلاف بسیاری از ابزارهای بهینه‌سازی، نیازی به نصب جداگانهٔ سالور یا تهیهٔ لایسنس ندارید. اگر نمی‌خواهید چیزی روی سیستم خود نصب کنید، می‌توانید همهٔ آموزش‌ها را در Google Colab اجرا کنید.

مسیر یادگیری OR-Tools

چهار مرحله، از مدل‌سازی تا پروژهٔ واقعی. هر مرحله روی مرحلهٔ قبل ساخته می‌شود.

  1. مدل‌سازی ریاضی را یاد بگیرید

    قبل از هر ابزاری باید بتوانید یک مسئلهٔ واقعی را به متغیر تصمیم، تابع هدف و قید تبدیل کنید. این مهارت بین همهٔ سالورها مشترک است.

  2. CP-SAT را با پازل‌ها تمرین کنید

    پازل‌ها کوچک‌ترین مسائل گسسته‌ای هستند که همهٔ مفاهیم CP-SAT را دارند: متغیر بولی، قیود منطقی، AllDifferent و پیدا کردن همهٔ جواب‌ها.

  3. زمان‌بندی و تخصیص صنعتی

    متغیرهای بازه‌ای (Interval)، قید NoOverlap و منابع تجمعی قلب مسائل زمان‌بندی تولید و خدمات هستند؛ جایی که CP-SAT از بیشتر سالورهای MILP قوی‌تر عمل می‌کند.

  4. مسیریابی و پروژه‌های واقعی

    کتابخانهٔ Routing برای TSP و VRP با پنجرهٔ زمانی، ظرفیت و چند انبار طراحی شده است. در این مرحله مدل را به داده و سناریوی واقعی وصل می‌کنید.

آموزش‌های OR-Tools بر اساس نوع مسئله

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

زمان‌بندی تولید و خدمات

چه کاری، روی کدام ماشین یا توسط چه کسی، و در چه زمانی انجام شود. از خط تولید تا اسکلهٔ بندر و کادر پرواز.

مسیریابی و لجستیک

طراحی مسیر ناوگان توزیع با محدودیت ظرفیت، زمان و ترافیک؛ هستهٔ عملیات لجستیک در زنجیرهٔ تأمین.

مکان‌یابی و تخصیص

تصمیم‌های راهبردی زنجیرهٔ تأمین: انبار، مرکز توزیع یا ایستگاه خدمت کجا ساخته شود و هر مشتری به کدام تخصیص یابد.

برنامه‌ریزی محدودیت با پازل

راه سریع و سرگرم‌کننده برای درک منطق CP-SAT؛ همان تکنیک‌هایی که بعداً در زمان‌بندی و تخصیص به کار می‌روند.

  • حل همه جواب‌ها با OR-Tools

    آموزش پیدا کردن همه جواب‌های یک مدل با Constraint Programming در OR-Tools؛ همراه با یک مثال ساده و قابل اجرا در Python برای درک enumerate کردن جواب‌ها.

  • حل پازل تقویم با OR-Tools

    فرمولاسیون و کدنویسی پازل تقویم با Constraint Programming و OR-Tools؛ نمونه‌ای آموزشی برای تبدیل یک مسئله منطقی به مدل ریاضی قابل حل.

  • حل پازل Domino Fit با OR-Tools

    حل پازل Domino Fit با فرمولاسیون ریاضی، Constraint Programming و کدنویسی Python در OR-Tools؛ نمونه‌ای کاربردی برای یادگیری مدل‌سازی CP.

  • حل پازل Tiling با OR-Tools

    فرمولاسیون ریاضی و پیاده‌سازی پازل کاشی‌کاری روی شبکه با Python و CP-SAT در OR-Tools؛ از تعریف ترکیب‌ها تا قیود پوشش و حل مدل.

  • حل پازل Patches لینکدین با پایتون

    چگونه پازل محبوب Patches در لینکدین (نسخه‌ای از Shikaku ژاپنی) را با Constraint Programming و OR-Tools به‌صورت خودکار حل کنیم.

عیب‌یابی مدل

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

آموزش‌های دیگر OR-Tools

دوره‌های OR-Tools

برای یادگیری ساختاریافته و پروژه‌محور، این دوره‌ها کل مسیر را با تمرین و پشتیبانی پوشش می‌دهند.

پرسش‌های رایج دربارهٔ OR-Tools

آیا OR-Tools رایگان است؟

بله. OR-Tools متن‌باز و با مجوز Apache 2.0 منتشر می‌شود، بنابراین استفاده از آن در پروژه‌های دانشگاهی و تجاری رایگان است و نیازی به خرید لایسنس سالور ندارد.

برای یادگیری OR-Tools چه پیش‌نیازی لازم است؟

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

CP-SAT با سالورهای MILP مثل Gurobi چه فرقی دارد؟

CP-SAT فقط با متغیرهای صحیح و بولی کار می‌کند و ترکیبی از برنامه‌ریزی محدودیت، SAT و برنامه‌ریزی خطی است. در مسائل زمان‌بندی و ترکیبیاتی معمولاً بسیار قوی است، اما برای مدل‌های پیوسته یا غیرخطی مناسب نیست.

آیا OR-Tools برای مسائل واقعی صنعتی کافی است؟

بله. OR-Tools در سیستم‌های عملیاتی واقعی مسیریابی و زمان‌بندی استفاده می‌شود. نکتهٔ اصلی در مسائل بزرگ، مدل‌سازی درست و تنظیم زمان و پارامترهای جست‌وجوی سالور است.

تازه شروع کرده‌اید؟ از مدل‌سازی ریاضی و اهمیت آن برای برنامه‌نویسی شروع کنید.

پروژهٔ OR-Tools دارید؟

برای مشاوره در مدل‌سازی و پیاده‌سازی مسائل زمان‌بندی، مسیریابی و زنجیرهٔ تأمین با @pypyid در تلگرام در تماس باشید.

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