صفر تا صد مدل سازی گروبی gurobi در پایتون python (بخش اول)

 

با کامنت‌هایی که از دوستان عزیز گرفتم متوجه شدم که بسیاری در مراحل اجرای کدهای گروبی gurobi تحت زبان برنامه‌نویسی پایتون python به مشکل بر می‌خورند. در این پست و پست بعدی صفر تا صد اجرای یک مساله زنجیره تامین ساده تک سطحی و در هر مرحله احتمال بروز برخی مشکلات را بررسی می‌کنیم.

 

جهت خرید فایل تصویری کل مراحل (با کیفیت بالا) به انتهای پست مراجعه نمایید.

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

گام دوم – نصب نرم‌افزار آناکوندا Anaconda
نرم‌افزار آناکوندا با فاصله، یک پکیج کامل از آنچه یک محقق در زمینه داده نیاز دارد را فراهم می‌کند (البته نه همه آنها). گزینه اول برای دوستانی که قصد دارند مدل‌سازی ریاضی یا بهینه‌سازی انجام دهند، قطعا آناکوندا است. از لینک زیر کافی است با توجه به معماری رایانه شخصی (۳۲ بیت یا ۶۴ بیت) آن را دانلود نمایید. ترجیحا نسخه سازگار با نسخه ۳٫۷ پایتون را دانلود نمایید.

https://www.anaconda.com/distribution/

لطفا و لطفا در حین نصب هیچ گزینه‌ای را تغییر نکنید و آن را با تنضیمات پیش‌فرض نصب نمایید.

گام سوم – تست سازگاری آناکوندا
ابتدا دستور زیر را در command prompt یا cmd اجرا نمایید. (برای باز کردن cmd کافی است که دکمه ویندوز + R را بفشارید و عبارت cmd را تایپ کنید).

conda info

در صورتی که با خطای زیر روبرو شدید، بدین معنی است که اسکریپت‌های آناکوندا در مسیر اجرای دستورات سیستمی ویندوز نیست.

“conda” is not recognized as an internal or external command, operable program or batch file

کافی است به Environment Variables رفته و مسیر نصب اسکریپت‌های آناکوندا (دو مسیر زیر) را به systempath اضافه نمایید. از این و این آموزش می‌توانید کمک بگیرید.

C:\Users\YOUR_PC_NAME\Anaconda3
C:\Users\YOUR_PC_NAME\Anaconda3\Scripts

به جای عبارت YOUR_PC_NAME نام کاربری رایانه خود را قرار دهید. پس از اینکه این مسیرها را در systempath قرار دادید، همه پنجره‌ها را بسته و مجددا cmd را باز نموده و دستور conda info را اجرا نمایید. در صورت اجرای موفق این دستور، اطلاعاتی شامل محل نصب و نسخه آناکوندا نمایش داده خواهد شد.

گام چهارم – نصب موتور بهینه‌سازی گروبی gurobi
لطفا نکاتی که در این مرحله از نصب عنوان می‌شود را به دقت اجرا نمایید. ابتدا دستورات زیر را جهت نصب آخرین نسخه گروبی در cmd اجرا نمایید.

conda config --add channels http://conda.anaconda.org/gurobi
conda install gurobi

در حین اجرای کد، با تایید نصب (انتخاب گزینه Y)، نصب پکیج گروبی بر روی آناکوندا به اتمام می‌رسد.

گام پنجم – دریافت لایسنس آکادمیک
گروبی لایسنس تک کاربره و یک‌ساله و بدون محدودیت ابعاد مساله در اختیار اعضای دانشگاهی قرار می‌دهد. برای این منظور ابتدا به وبسایت گروبی مراجعه نموده و ثبت نام می‌کنید. برای دوستانی که از داخل کشور ایران اقدام به دریافت لایسنس می‌کنند قضیه قدری متفاوت است. بالتبع برای ورود به سایت، ابزارهای گذر از فیلتر سودمند خواهد بود. در حین فرایند ثبت نام از یک ایمیل دلخواه (مانند جیمیل یا یاهو) استفاده کنید. ترجیحا از نام‌های مستعار جهت ثبت‌نام استفاده نمایید. پس از تایید ایمیل ثبت نام و لوگین در سایت به آدرس زیر مراجعه نمایید:

https://www.gurobi.com/downloads/end-user-license-agreement-academic/

و با تایید مفاد استفاده از لایسنس کدی مشابه کد زیر را ملاحظه خواهید نمود:

grbgetkey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

حال ابزار گذر از فیلتر را خاموش نموده و کد بالا را در cmd اجرا می‌کنیم. در صورتی که خطای معروف ۳۰۳ زیر نمایان شد به این معنی است که دستور را از دامنه‌ی دانشگاهی خود اجرا نکرده‌اید:

info : grbgetkey version 8.1.1, build v8.1.1rc0
info : Contacting Gurobi key server...
error : ERROR 303: hostname x.x.x.x not recognized as belonging to an academic domain
info : Is your computer connected to the university network?
info : Your computer must be connected to the university network for the grbgetkey
info : command to work. You can connect your computer either directly or via a VPN
info : that tunnels all traffic through the university network. Once the license is
info : installed, your computer does not need to be connected to the university
info : network. You can repeat this process to get licenses for additional computers.
info : If you are unable to install this license, please contact key@gurobi.com for
info : further assistance.

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

info : grbgetkey version 8.1.1, build v8.1.1rc0
info : Contacting Gurobi key server...
info : Key for license ID xxxxxx was successfully retrieved
info : License expires at the end of the day on 20xx-xx-xx
info : Saving license key...

In which directory would you like to store the Gurobi license key file?
[hit Enter to store it in C:\Users\YOUR_PC_NAME]:

در ادامه پیغام بالا، مسیری که قصد دارید به طور موقت فایل لایسنس را ذخیره کنید را وارد نمایید. فایلی تحت عنوان gurobi.lic خروجی این فرایند خواهد بود.
این فایل را در مسیر زیر (مسیر نصب آناکوندا) کپی نمایید (در صورتی که این پوشه را نداشتید، آن را ایجاد نمایید):

C:\gurobi

اگر قدری تخصصی صحبت کنیم بایستی ip فعلی خود را در بستر ipv4 به ip دانشگاه route نمایید. توجه نمایید که لایسنس گرفته شده تنها در رایانه ای که دستور grbgetkey در آن اجرا شده قابل استفاده است.

گام ششم – تست سازگاری گروبی
با اجرای دستور زیر در cmd به ابزارهای کدنویسی پکیج آناکوندا دسترسی پیدا خواهید کرد:

anaconda-navigator

 

ترجیحا JupyterLab را Launch نمایید. در زیر تب Notebook گزینه Python3 را انتخاب و کد برنامه‌ریزی عدد صحیح زیر را در محیط ایجاد شده کپی و اجرا نمایید:

# This example formulates and solves the following simple MIP model:
# maximize
# x + y + 2 z
# subject to
# x + 2 y + 3 z <= 4
# x + y >= 1
# x, y, z binary

from gurobipy import *

# Create a new model
m = Model("mip1")

# Create variables
x = m.addVar(vtype=GRB.BINARY, name="x")
y = m.addVar(vtype=GRB.BINARY, name="y")
z = m.addVar(vtype=GRB.BINARY, name="z")

# Set objective
m.setObjective(x + y + 2 * z, GRB.MAXIMIZE)

# Add constraint: x + 2 y + 3 z <= 4
m.addConstr(x + 2 * y + 3 * z <= 4, "c0")

# Add constraint: x + y >= 1
m.addConstr(x + y >= 1, "c1")

# Optimize model
m.optimize()

 

در صورتی که پیغام زیر یعنی حل مساله را در خروجی خود ملاحظه نمودید، با موفقیت مراحل نصب و یکپارچگی گروبی در آناکوندا را پشت سر گذاشته‌اید! تبریک میگم!

Academic license - for non-commercial use only
Optimize a model with 2 rows, 3 columns and 5 nonzeros
Variable types: 0 continuous, 3 integer (3 binary)
Coefficient statistics:
Matrix range [1e+00, 3e+00]
Objective range [1e+00, 2e+00]
Bounds range [1e+00, 1e+00]
RHS range [1e+00, 4e+00]
Found heuristic solution: objective 2.0000000
Presolve removed 2 rows and 3 columns
Presolve time: 0.00s
Presolve: All rows and columns removed

Explored 0 nodes (0 simplex iterations) in 0.01 seconds
Thread count was 1 (of 4 available processors)

Solution count 2: 3 2

Optimal solution found (tolerance 1.00e-04)
Best objective 3.000000000000e+00, best bound 3.000000000000e+00, gap 0.0000%

 

جهت حمایت از توسعه سایت،‌ فایل تصویری کل مراحل در این پست و پست بعدی (به مدت حدود ۵۰ دقیقه در فرمت اچ دی mp4) به همراه کد پایتون را خریداری نمایید.

2 Comments
Inline Feedbacks
View all comments
bahramnahry21@gmail.com
ژوئن 3, 2020 5:08 ب.ظ

سلام، من تمام مراحل رو رفتم، نرم افزار anaconda و gurobi رو هم نصب کردم و لایسنس هم گرفتم ولی موقع ران کردن کد و فراخوانی گروبی پیامی میده مبنی براینکه چنین چیزی وجود نداره ImportError: No module named ‘gurobipy’