OR-Tools Release Notes

این صفحه تغییرات OR-Tools را فهرست می‌کند، از جمله ویژگی‌های جدید، رفع اشکال‌ها، و بهبود کدها و مراحل نصب.

اگر در نصب OR-Tools با مشکل مواجه شدید، بخش Troubleshooting را در دستورالعمل های نصب OR-Tools بررسی کنید. اگر مشکل شما در آنجا فهرست نشده است، مشکلات را در GitHub بررسی کنید، یا در باز کردن یک مورد جدید تردید نکنید، و ما خوشحال خواهیم شد که به شما کمک کنیم.

در زیر یادداشت‌های انتشار OR-Tools آمده است که با آخرین نسخه شروع می‌شود.

می 2024

اعلام انتشار OR-Tools v9.10

ما OR-Tools نسخه 9.10 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

می توانید یادداشت انتشار را در github پیدا کنید

مارس 2024

اعلام انتشار OR-Tools v9.9

ما نسخه 9.9 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

می توانید یادداشت انتشار را در github پیدا کنید

نوامبر 2023

اعلام انتشار OR-Tools v9.8

ما OR-Tools v9.8 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • Python 3.12 را اضافه کنید.
  • پشتیبانی از اوبونتو 23.10 را اضافه کنید

حل کننده خطی

  • Port ModelBuilder به Net.
  • برای جلوگیری از برخورد با SAT LogCallback نام LogCallback را به MbLogCallback تغییر دهید.
  • گسترش API ModelBuilder:
    • محدودیت های نشانگر را اضافه کنید.
    • پشتیبانی اشاره اضافه کنید.
    • شبیه سازی مدل را اضافه کنید.

گزینه ریاضی

  • دوباره کاری عمیق

مسیریابی

  • اضافه کردن وضعیت ROUTING_OPTIMAL .
  • RoutingModel غیر قابل کپی و یا متحرک کنید.
  • برخی از حلقه های نامحدود را در اپراتورهای جستجوی محلی رفع کنید.
  • یک ساختار داخلی PickupDeliveryPosition اضافه کنید.
  • متدهای IsPickup() و IsDelivery() را اضافه کنید.

SAT

  • کاهش ردپای حافظه برای مدل های بزرگ
  • جستجوی زمان بندی بهبود یافته
  • packing_precedences_lns را اضافه کنید.
  • بهینه سازی و رفع جهش امکان سنجی
  • بهینه سازی پیش حل خطی و پیش حل بهتر ورود به سیستم.
  • بهبود presolve برای int_abs ، int_mod ، int_prod و lin_max .
  • پشتیبانی پاندا را بهبود بخشید
  • چند رفع اشکال.

تغییرات GitHub

آگوست 2023

اعلام انتشار OR-Tools v9.7

ما OR-Tools v9.7 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • Centos-8 (EOL) را رها کنید.
  • Debian 10 را رها کنید.
  • فدورا را رها کنید [33, 36] (EOL).
  • Ubuntu 18.04 LTS (EOL) را رها کنید.
  • پایتون 3.7 (EOL) را رها کنید.
  • پشتیبانی netcore3.1 را در CMake (EOL) غیرفعال کنید.

پایتون مدل بیلدر

  • استفاده از دیتافریم و سری Pandas برای ایجاد متغیرها مجاز است.
  • اطلاعات کامل تایپ

PDLP

  • به روز رسانی مختلف

CP-SAT

  • بهبود عملکرد (قابلیت_پرش، lin_max)
  • بهبود مدیریت برش
  • کارگر جدید object_shaving_search اختصاص داده شده به بهبود مرز پایین هدف (هنگام کمینه سازی)
  • تایپ حاشیه نویسی برای python cp_model.py
  • پشتیبانی نسبی آزمایشی از پانداها در cp_model.py
  • کارگران مبتنی بر نقض جستجوی محلی تجربی:
    • با پارامترهای: num_violation_ls:xxx فعال شده است
    • بهینه سازی شده برای مدل خطی ( linear ، bool_or ، bool_and ، at_most_one ، exactly_one )
    • با lin_max، product، division به درستی کار می کند
    • no_overlap، تجمعی، مدار، مسیرها را پشتیبانی می کند
    • با no_overlap_2d غیرفعال شد
    • تعداد توصیه شده کارگران ls: num_workers -> num_violation_ls : (8, 1), (16, 2) (24, 3), (32, 4)

تغییرات GitHub

مارس 2023

اعلام انتشار OR-Tools v9.6

ما OR-Tools نسخه 9.6 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • پشتیبانی فدورا 37، 38 را اضافه کنید.
  • پایتون 3.6 را رها کنید (توسط protobuf پشتیبانی نمی شود).
  • پایتون 3.7 را در macOS رها کنید (توسط scipy پشتیبانی نمی‌شود).
  • پشتیبانی net7.0 را در CMake اضافه کنید (از -DUSE_DOTNET_7=ON استفاده کنید)
  • netcore3.1 را در بسته های nuget .org رها کنید

وابستگی ها

  • SCIP v801 -> v803 (توجه: اکنون SCIP از مجوز سازگار با OSI استفاده می کند)
  • abseil 20220623.1 -> 20230105.0
  • Protobuf v21.5 -> v21.12
  • SWIG 4.1.1
  • Java JNA 5.11.0 -> 5.12.1

بازل

  • پشتیبانی pybind11 را اضافه کنید.
  • پشتیبانی java wrapper را اضافه کنید.

حل کننده ها

  • PDLP: dd python wrapper.
  • CP-SAT: بهبود عملکرد.
  • GLOP: پیش حل را بهینه سازی کنید.
  • ModelBuilder: Python: بهبود پشتیبانی numpy.
  • مسیریابی: بهبود عملکرد (جستجوی محلی)

مشکلات شناخته شده:

  • CP-SAT: نادیده گرفتن subsolver pseudo_costs پارامترهای نامعتبر را برمی گرداند (به #3706 مراجعه کنید).

نوامبر 2022

اعلام انتشار OR-Tools v9.5

ما نسخه 9.5 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • پشتیبانی Debian Sid را اضافه کنید.
  • پشتیبانی فدورا 35، 36 را اضافه کنید.
  • پشتیبانی از اوبونتو 22.10 را اضافه کنید.
  • پایتون 3.6 را روی macOS رها کنید.
  • پشتیبانی از Python 3.11 را اضافه کنید.

به روز رسانی وابستگی ها

  • Protobuf v19.4 -> v21.5 .
  • SCIP Solver v800 -> v801 .

CP-SAT

  • پیش‌حل پیشرفت‌ها: حداکثر (آرایه)، محدودیت‌های بولی، محدودیت‌های خطی.
  • جست و جوی میان لایه باید به طور موازی قطعی باشد.
  • برش های خطی: برش های مربع پاکسازی و برش های int_prod. خط لوله برش را بازنویسی کنید
  • مدل و راه حل ورودی اثر انگشت (در گزارش قابل مشاهده است).
  • بهبود برنامه ریزی
  • دسته‌ای از رفع اشکال‌های معمول (خراش در حین پیش‌حل، خرابی در برش‌ها، راه‌حل‌های غیرممکن، مدل غیرقابل اجرا در LNS).

GLOP

  • با بازنویسی جبر خطی و همچنین قانون انتخاب محوری، سرعت را افزایش دهید.

حل کننده خطی

  • knapsack_interface.cc را اضافه کنید.
  • API model_builder را در پوشه linear_solver (هدرها و نمونه ها) منتقل کنید.
  • پشتیبانی از Gurobi 10 را اضافه کنید.

مسیریابی

  • چند تجزیه کننده را برای چالش های مسیریابی مختلف آزاد کنید.

آگوست 2022

اعلام انتشار OR-Tools v9.4

ما نسخه 9.4 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

بستر، زمینه

  • پشتیبانی Debian-10 را اضافه کنید (به #3029 مراجعه کنید).
  • پشتیبانی Ubuntu 22.04 LTS را اضافه کنید (به #3276 مراجعه کنید). توجه: پشتیبانی از Net 3.1 را نخواهد داشت (نگاه کنید به dotnet/core#7038 ).
  • پشتیبانی از اوبونتو 21.10 را حذف کنید.

متفرقه

  • آرشیو را بر اساس زبان ها تقسیم کنید و پیکربندی CMake را به C++ (#3200) اضافه کنید.

نمودار

تقسیم ortools.graph.pywrapgraph به:

  • ortools.graph.python.linear_sum_assignment .
  • ortools.graph.python.max_flow .
  • ortools.graph.python.min_cost_flow .

این اجازه می دهد تا از numpy برای سرعت بخشیدن به راه اندازی مشکلات استفاده کنید.

CP-SAT

مقداری بهبود در:

  • برنامه ریزی (تکثیر، برش، مرزهای پایین).
  • MaxSAT (پیش حل، اکتشافی مبتنی بر هسته).
  • عملکرد MIP (پیش حل، برش).

مارس 2022

اعلام انتشار OR-Tools v9.3

ما نسخه 9.3 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • پشتیبانی از Debian-10 را رها کنید.
  • پشتیبانی از Ubuntu-16.04 را کنار بگذارید.
  • NET Framework 4.5.2 را رها کنید.

به روز رسانی وابستگی ها

  • Eigen 3.4.0 را اضافه کنید.
  • Google re2 2021-11-01 را اضافه کنید.
  • Protobuf 3.19.1 -> 3.19.4 .
  • SCIP 7.0.1 -> v800 .

پایتون

  • pybind11 را اضافه کنید.

امکانات

  • PDLP را به عنوان آزمایشی اضافه کنید.
  • MathOpt را به عنوان آزمایشی اضافه کنید.

CP-SAT

  • تغییر نام چند API برای سازگاری به عنوان مثال LinearExpr.ScalProd. -> LinearExpr.WeightedSum. .
  • متدهای AddAtLeastOne / AddAtMostOne / AddExactlyOne را اضافه کنید.
  • AddMultiplicationConstraint(z, x, y) را در همه زبان ها اضافه کنید.
  • افزودن AddMultipleCircuit() به همه زبان ها.

C++

  • ctor صریح IntVar(BoolVar) .
  • LinearExpr::Add* حذف شد و با عملگر به عنوان مثال LinearExpr += جایگزین شد.
  • عملگرهای حسابی را روی عبارت خطی اضافه کنید.
  • LinearExpr::BooleanSum/BooleanScalProd حذف شد، از Sum/WeightedSum استفاده کنید.
  • CpModelBuilder::FixVariable() را اضافه کنید که دامنه متغیر را روی یک مقدار بازنویسی می کند.

جاوا

  • LinearExpr را بازنویسی کنید، یک کلاس سازنده افزایشی اضافه کنید: LinearExpr.newBuilder().add(x).addSum(<array of variables>).build() .
  • C++ API را دنبال کنید: Circuit , MultipleCircuit , Cumulative , Reservoir , AllowedAssignment و ForbiddenAssignment اکنون یک کلاس تخصصی با API افزایشی برای اضافه کردن متغیرها، اصطلاحات، خواسته های جدید برمی گرداند.

سی

  • تمام روش ها را مستند کنید.
  • C++ API را دنبال کنید: Circuit , MultipleCircuit , Cumulative , Reservoir , AllowedAssignment و ForbiddenAssignment اکنون یک کلاس تخصصی با API افزایشی برای اضافه کردن متغیرها، اصطلاحات، خواسته های جدید برمی گرداند.
  • کلاس LinearExprBuilder را برای ساختن عبارات به صورت تدریجی اضافه کنید.

ساخت سیستم

CMake

  • حداقل به CMake >= 3.18 نیاز دارید.

بسازید

  • اکنون از بیلد مبتنی بر CMake به صورت داخلی استفاده کنید.

دسامبر 2021

اعلام انتشار OR-Tools v9.2

ما OR-Tools v9.2 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • پشتیبانی از اوبونتو 21:10 (آخرین نسخه رول) را اضافه کنید.

به روز رسانی وابستگی ها

  • به روز رسانی Net TFM net5.0 -> net6.0 (نیاز به .Net SDK 6.0 LTS و Net SDK 3.1 LTS است).
  • abseil-cpp 20210324.2 -> 20211102.0.
  • Protobuf 3.18.0 -> 3.19.1.
  • Googletest 1.10.0 -> 1.11.0.
  • Python: numpy را اضافه کنید >= 1.13.3.
  • در MacOS، Coin-OR را در -O1 کامپایل کنید تا از خرابی در دوندگان جلوگیری شود.

مسیریابی

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

CP-SAT

شکستن تغییرات

  • بافر پروتکل زیربنایی با نسخه های قبلی ناسازگار است. هر بافر پروتکل ذخیره شده باید با APIهای سازنده به روز شده (در C++، Python، Java و .NET) دوباره تولید شود.
  • به طور خاص، با حذف فیلدهای قدیمی (شروع، اندازه و پایان) و تغییر نام فیلدهای جدید (با استفاده از _view ) از نام فیلدهای حذف شده، پروتوباف فاصله زمانی پاک بود.

ویژگی های جدید

  • قیود all_different ، reservoir ، modulo ، multiplication و division عبارات همبسته ( a * var + b ) را در هر جایی که به متغیرهای عدد صحیح نیاز دارد، می پذیرد.
  • هدف ضرایب ممیز شناور را می پذیرد (کلاس DoubleLinearExpr را در C++/Java/.NET ببینید. مثال knapsack_2d_sat.py را در پایتون ببینید).
  • محدودیت no_overlap_2d از فواصل اختیاری پشتیبانی می کند.
  • C++ API عملگرهای + و * را برای ساخت عبارات پیاده سازی می کند.

بهبودها

  • کد presolve بهبود یافته
  • چک کننده مدل محکم تر.
  • محدودیت مخزن دوباره کاری.
  • برش های پرانرژی را برای محدودیت no_overlap_2d اضافه کنید.
  • آرامش خطی بهبود محدودیت های رمزگذاری ( literal implies var == value ).

روش های منسوخ و حذف شده

  • C++ BooleanSum و BooleanScalProd منسوخ شده است. فقط از Sum و ScalProd استفاده کنید.
  • C++ AddLinMinEquality و AddLinMaxEquality حذف شد. فقط از AddMinEquality و AddMaxEquality استفاده کنید.

ناسازگاری های آینده

  • در آینده، لایه مدلسازی جاوا را بازنویسی خواهیم کرد تا به لایه ++C نزدیکتر شود.
  • در لایه مدل‌سازی C++، IntVar(BoolVar var) را واضح می‌سازیم.
  • ما در حال فکر کردن به سازگاری API python PEP 8 هستیم (با استفاده از نام‌های snake_case). اگر این اتفاق بیفتد، یک فایل sed برای انتقال کد ارائه می کنیم.

ساخت سیستم

بازل

  • تعمیر ویندوز بیلد

CMake

  • گزینه FETCH_PYTHON_DEPS (پیش‌فرض ON ) را اضافه کنید.
  • پشتیبانی اختیاری برای حل کننده GPLK (پیش فرض -DUSE_GLPK=OFF ) اضافه کنید.

پایتون

  • از اعداد صحیح numpy در بیشتر CP-SAT API پشتیبانی کنید.
  • __version__ از دست رفته را رفع کنید.

سپتامبر 2021

اعلام انتشار OR-Tools v9.1

ما OR-Tools v9.1 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • پایتون: از تصویر manylinux2014 استفاده کنید (به PEP 599 مراجعه کنید).
  • پایتون: با استفاده از تصویر manylinux2014_aarch64 ، پشتیبانی از لینوکس aarch64 را اضافه کنید.
  • Net: اضافه کردن پشتیبانی .Net 5.0.

به روز رسانی وابستگی ها

  • abseil-cpp 20210324.1 -> 20210324.2.
  • Protobuf 3.15.8 -> 3.18.0.
  • SCIP 7.0.1 -> Master.
  • Googletest 1.8.0 -> 1.10.0.
  • python: استفاده از warning در cp_model.py (به #2530 مراجعه کنید).
  • python: absl-py 0.11 -> 0.13.

CMake

  • حداقل نسخه مورد نیاز 3.14 -> 3.15 (به #2528 مراجعه کنید).
  • پایتون: حداقل نسخه مورد نیاز 3.14 -> 3.18 را مشاهده کنید (به #2774 مراجعه کنید).

بسازید

ساخت مبتنی بر ساخت منسوخ شده است، لطفاً برای ساخت از منبع به CMake یا Bazel مهاجرت کنید.

جاوا

  • استحکام بارکننده کتابخانه بومی را بهبود بخشید (به #2742 مراجعه کنید).
  • خرابی JVM Garbage Collector را هنگام از بین بردن مدل مسیریابی یا حل کننده محدودیت برطرف کنید (به #2091 مراجعه کنید) (به #2466 مراجعه کنید).
  • هنگام استفاده از چندین کارگر، خرابی CP-SAT ورود به سیستم را برطرف کنید (به #2775 مراجعه کنید).

CP-SAT

  • استحکام کد LNS را بهبود بخشید (به #2525 مراجعه کنید).
  • بهبود کد زمان‌بندی: روش‌های کارخانه‌ای جدید برای ایجاد فواصل اندازه ثابت، اکتشافات جستجوی جدید، پیش‌حل بهبود یافته و برش‌های خطی جدید.
  • بهبود کد مسیریابی: LNS اختصاصی جدید.
  • بررسی مدل را بهبود بخشید. در حال حاضر، به خصوص سرریزهای بالقوه wrt بیشتر متین است.
  • بهبود کد MIP: پیش‌حل بهتر و بهبودهای متعدد در آرامش خطی مدل‌های MIP و CP.
  • تنوع جستجو را بهبود بخشید. هنگام استفاده از بیش از 12 کارگر، کارگرانی را اضافه کنید که برای بهبود حد پایین هدف اختصاص داده شده اند.
  • تغییر به کد موازی: به طور پیش فرض، حل کننده اکنون از تمام هسته های موجود استفاده می کند. از num_search_parameters برای تعیین سطح موازی استفاده کنید.
  • SearchAllSolutions و SolveWithSolutionCallback را منسوخ کنید.
  • Python API: هنگام استفاده از var == ... یا var != ... خارج از یک model.Add() را بررسی می کند.

آوریل 2021

اعلام انتشار OR-Tools v9.0

ما OR-Tools v9.0 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

به روز رسانی وابستگی

  • Abseil-cpp 20200923.3 به 20210324.1 LTS به روز شد.
  • Protobuf 3.15.3 به 3.15.8 به روز شد.
  • جاوا: jna-platform 5.5.0 به 5.8.0 به روز شد

جاوا

رفع اشکال

  • هنگام استفاده از حل کننده CP-SAT، چند رشته ای را بهبود بخشید (به #1588 مراجعه کنید).
  • پشتیبانی از wrapper پایتون از std::vector&ltstd::string&gt را برطرف کنید (به #2453 مراجعه کنید).
  • پشتیبانی از CPLEX را دوباره کار کنید (به #2470 مراجعه کنید).

تغییر شکستن شناخته شده

  • دسترسی لاگر را در پایتون، جاوا و نت اضافه کنید (به #2245 مراجعه کنید).
  • جایگزینی تمام انواع سفارشی Google با موارد ارائه شده در cstdint .

CP-SAT

  • متدها SearchForAllSolutions() ، SearchAllSolutions() و SolveWithSolutionCallback() منسوخ شده اند. لطفا به جای آن از Solve() استفاده کنید.
  • بهبود پشتیبانی از اپراتورهای استاندارد پایتون این می تواند کدهای نادرست موجود را بشکند.

مارس 2021

اعلام انتشار OR-Tools v8.2

ما OR-Tools v8.2 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

به روز رسانی وابستگی

  • Abseil-cpp 20200923.2 به 20200923.3 LTS به روز شد.
  • Protobuf 3.14.0 به 3.15.3 به روز شد.

مسیریابی

  • RoutingModel.RegisterTransitMatrix() و RoutingModel.RegisterUnaryTransitVector() اضافه شد.
  • برگرداندن RoutingModel.AddVectorDimension() و RoutingModel.AddMatrixDimension() را به std::pair&ltint, bool&gt که int آن شناسه ارزیاب انتقال است تغییر دهید.

دسامبر 2020

اعلام انتشار OR-Tools v8.1

ما OR-Tools v8.1 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

به روز رسانی وابستگی

  • Abseil-cpp 20200923 به 20200923.2 LTS به روز شد.
  • Protobuf 3.13.0 به 3.14 به روز شد.
  • پشتیبانی از Gurobi 9.1.0 را اضافه کنید
  • رها کردن وابستگی GLog (با یک پیاده سازی سفارشی بسته به پرچم های abseil-cpp جایگزین می شود)
  • رها کردن وابستگی GFlag (جایگزین آن جزء abseil-cpp flags)

رفع اشکال

  • شمارش مضاعف مجوز شناور Gurobi را برطرف کنید (نگاه کنید به #2227 ).
  • تعمیر ویندوز بیلد (نگاه کنید به #2200 ).

اکتبر 2020

اعلام انتشار OR-Tools v8.0

ما OR-Tools v8.0 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • پشتیبانی اضافه شده برای Python 3.9 ( #2187 )
  • پشتیبانی قطع شده برای Python 3.5 ( #2186 ) <!-- در انتظار پشتیبانی از مایکروسافت dotnet-sdk، ممکن است پس از پایان انتشار ایجاد شود...
    • پشتیبانی اضافه شده برای اوبونتو 20.10 ( #2188 ) -->
  • پشتیبانی از اوبونتو 16.04 LTS قطع شد ( #2188 )
  • پشتیبانی از اوبونتو 19.10 قطع شد ( #2188 )

به روز رسانی وابستگی

  • Abseil-cpp 20200225.2 به 20200923 LTS به روز شد.
  • Protobuf 3.12.2 به 3.13.0 به روز شد.

تغییر شکستن شناخته شده

  • اکنون، Routing و کد منبع CP-SAT از برخی ویژگی های C++17 استفاده می کنند. اخطار: اگر نسخه خود را از abseil-cpp ارائه می‌دهید، لطفاً بررسی کنید که با C++17 نیز ساخته شده است.
  • امضای MPSolver::CreateSolver تغییر کرده است. آرگومان نام مدل حذف شده است.

CMake

  • رفع غیرفعال کردن پشتیبانی SCIP هنگام استفاده از -DUSE_SCIP=OFF (به #2129 مراجعه کنید).
  • نمونه ها و نمونه ها را با سیستم ساخت CMake ادغام کنید. توجه: می توان با استفاده از -DBUILD_SAMPLES=OFF و -DBUILD_EXAMPLES=OFF غیرفعال کرد. توجه: می توان برای یک زبان خاص با استفاده از -DBUILD_<LANG>_SAMPLES=OFF یا -DBUILD_<LANG>_EXAMPLES=OFF غیرفعال کرد.
    • با <LANG> در میان:
    • CXX ،
    • PYTHON ،
    • JAVA و
    • DOTNET .

بسازید

  • Require Make >= 4.3 (استفاده از تابع Make eval ).
  • Require CMake >= 3.14 (استفاده از گزینه CMake --verbose ).
  • افزودن گزینه برای غیرفعال کردن پشتیبانی SCIP با استفاده از -DUSE_SCIP=OFF (به #2134 مراجعه کنید).
  • گزینه ای را برای غیرفعال کردن پشتیبانی CLP و CBC با استفاده از -DUSE_COINOR=OFF اضافه کنید.

جاوا

  • OR-Tools اکنون بسته‌های maven را تولید می‌کند (به #202 مراجعه کنید).

رفع اشکال

  • ساخت C++ و Python بر روی FreeBSD را اصلاح کنید (به #2126 مراجعه کنید).
  • Build in Debug را در ویندوز برطرف کنید (به #2077 مراجعه کنید).
  • خرابی طولانی مدت به صورت موازی در CP-SAT در ویندوز را برطرف کنید (به #2001 ، #2019 مراجعه کنید).

جولای 2020

اعلام انتشار OR-Tools v7.8

ما نسخه 7.8 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

به روز رسانی وابستگی

  • Gurobi 9.0.2 اکنون در باینری های از پیش ساخته شده از قبل ادغام شده است. کتابخانه مشترک gurobi 90 را در مسیر نصب پیش‌فرض نصب‌کننده‌های Gurobi در MAC OS X و Windows یا در فهرست GUROBI_HOME جستجو می‌کند.
  • SCIP 7.0.1 اکنون در باینری های از پیش ساخته شده یکپارچه شده است. لطفاً قبل از استفاده از مجوز SCIP از انطباق آن اطمینان حاصل کنید.
  • پشتیبانی از Xpress Solver 8.9.0 اختیاری اضافه شده است.

حل کننده خطی

  • یک متد LinearSolver::CreateSolver() استاتیک اضافه کرد تا بررسی پشتیبانی از backendهای حل خطی یکپارچه را ساده کند. به همه زبان ها کار می کند.

رفع اشکال

  • ساخت بر اساس CMake بر روی FreeBSD ثابت شد.
  • مرتب سازی CP-SAT در تولید برش تجمعی ثابت شد.
  • رفع نشت حافظه حل کننده خطی در .Net wrapper.

ژوئن 2020

اعلام انتشار OR-Tools v7.7

ما نسخه 7.7 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

به روز رسانی وابستگی

  • Abseil-cpp b832dce به c51510d (LTS 20200225.2) به روز شد.
  • Protobuf 3.11.4 به 3.12.2 به روز شد.

ویژگی ها و پیشرفت های جدید

  • حل‌کننده CP-SAT اکنون در مدل رضایت‌پذیری (یعنی بدون هدف) به جای Feasible ، Optimal برمی‌گرداند.
  • اکتشافی پمپ امکان سنجی از جامعه MIP اضافه شد.

رفع اشکال

رفع خرابی چند رشته ای CP-SAT (نگاه کنید به #2005 ).

آوریل 2020

اعلام انتشار OR-Tools v7.6

ما نسخه 7.6 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

ویژگی های جدید CP-SAT

ما ویژگی های جدید زیر را به حل کننده CP-SAT اضافه کرده ایم:

  • بهبود مدیریت هواپیماهای برش برای LP.
  • ابزارهای اشکال زدایی

به روز رسانی وابستگی

Abseil-cpp 8ba96a8 به b832dce (LTS 20200225) به روز شد.

رفع اشکال

  • رفع اشکال CP-SAT UNSAT در presolve (به #1908 مراجعه کنید).
  • آدرس swigwin.exe ثابت شد.
  • مدیریت نقشه نوع SWIG برای جاوا و دات نت ثابت شد.

ژانویه 2020

اعلام انتشار OR-Tools v7.5

ما نسخه 7.5 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • پشتیبانی اضافه شده برای Python 3.8 ( #1719 )
  • جمع‌آوری پشتیبانی از منابع در Visual Studio 2017 ( #1852 ) حذف شد.
  • پشتیبانی به روز شده از Centos 7 به Centos 8 ( #1827 ).

به روز رسانی وابستگی

  • protobuf نسخه 3.10.0 به نسخه 3.11.2 ( #1829 ) به روز شد.

رفع اشکال

مشکلات زیر در OR-Tools نسخه 7.5 برطرف شده است (برای فهرست کامل به Milestone v7.5 مراجعه کنید).

به خصوص:

  • بارگذاری مونتاژ ثابت شماره 1421 را ببینید.
  • متدهای GetStartIndex() و GetEndIndex() RouteIndexManager ( #1843 ) را نشان داد.
  • SWIG را برای حذف روش های شکسته ثابت کرد ( #1838 ، #1276 ).

اکتبر 2019

اعلام انتشار OR-Tools v7.4

ما نسخه 7.4 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

ویژگی ها و پیشرفت های جدید

  • حل کننده CP-SAT اکنون محدودیت هایی را بررسی می کند که از لفظ های اجرایی پشتیبانی نمی کنند. اگر چنین محدودیتی دارای لفظ اجرایی باشد، بررسیگر مدل قبل از حل، خطا را برمی‌گرداند.
  • جستجوی محلی بهتر و سریعتر برای کتابخانه مسیریابی.
  • حل کننده خطی اکنون از نرم افزار شخص ثالث Xpress-MP پشتیبانی می کند. برای استفاده از آن باید OR-Tools را از منبع بازسازی کنید .
  • معماری بسته NuGet به طور کامل بازنویسی شده است. به طور خاص، اکنون از چارچوب .NET >= 4.5.2 در سیستم عامل های ویندوز پشتیبانی می کند.

پلت فرم منسوخ شده

همانطور که در یادداشت های انتشار جولای 2019 اعلام شد، OR-Tools دیگر از Python 2.7 پشتیبانی نمی کند.

به روز رسانی وابستگی

Protobuf 3.9.0 به 3.10.0 به روز شده است.

آگوست 2019

اعلام انتشار OR-Tools v7.3

ما نسخه 7.3 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

پلت فرم منسوخ شده

ما پشتیبانی از Python 2.7 را لغو می کنیم تا با حرکت Google به Python 3 هماهنگ شود. این آخرین نسخه OR-Tools خواهد بود که از Python 2.7 پشتیبانی می کند.

به روز رسانی وابستگی

Protobuf 3.8.0 به 3.9.0 به روز شده است.

رفع اشکال

مشکلات زیر در OR-Tools نسخه 7.3 رفع شده است. (برای فهرست کامل به Kanban v7.3 مراجعه کنید).

به خصوص:

  • رفع مشکل init/int64 Cast در جاوا ( #1448
  • هنگام پردازش محدودیت‌های تجمعی خالی، بررسی presolve ثابت شد.

جولای 2019

اعلام انتشار OR-Tools v7.2

ما OR-Tools v7.2 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات پلت فرم

  • ما پشتیبانی از Python 2.7 را منسوخ می کنیم تا با حرکت Google به Python 3 هماهنگ شود. حداکثر یک نسخه دیگر از OR-Tools وجود خواهد داشت که از Python 2.7 پشتیبانی می کند.
  • اوبونتو 18.10 به اوبونتو 19.04 به روز شد.
  • اضافه شدن پشتیبانی برای کامپایل از منابع در ویژوال استودیو 2019.
  • پایتون 3.5 دیگر در ویندوز پشتیبانی نمی شود. لطفا از پایتون 3.6 یا بالاتر استفاده کنید.

به روز رسانی به وابستگی ها

  • ما اکنون CBC 2.10.3 را هدف قرار می دهیم.
  • اکنون Protobuf 3.8.0 را هدف قرار می دهیم.

CP-SAT

  • ما پیشرفت های متعددی در جستجو، موازی سازی و آرامش خطی ایجاد کرده ایم.
  • API های LinearExpr.Sum() و LinearExpr.ScalProd() در پایتون اضافه شد.
  • APIهای IntVar[].Sum() و IntVar[].ScalProd() در سی شارپ منسوخ شده است.
  • C++: SolveWithModel() حذف شد زیرا یک کپی از SolveCpModel() بود.
  • متدهای CpModel.addGreaterThan() و CpModel.addLessThan() را به API جاوا اضافه کرد.

حل کننده خطی

  • MPSolver.SetHint() برای پایتون، جاوا و سی شارپ اضافه شد (پشتیبانی شده توسط SCIP و Gurobi).
  • MPSolver.SetNumThreads() برای پایتون، جاوا و سی شارپ (پشتیبانی شده توسط CBC، Gurobi و SCIP) اضافه شد.
  • بازنویسی پشتیبانی از SCIP 6.0.1.

مستندات مرجع

  • ما کتابچه راهنمای مرجع مبتنی بر doxygen و pdoc3 را برای همه زبان‌ها و همه ابزارها (الگوریتم‌ها، مسیریابی، نمودار، حل‌کننده_خطی، و CP-SAT) اضافه کرده‌ایم. به راهنمای مرجع OR-Tools مراجعه کنید.
  • مستندات مرجع برای C++ (همه محصولات) و CP-SAT (C++، Python، Java) کامل است.
  • ما در حال صدور تمام اسناد ++C به پایتون و جاوا هستیم.
  • مستندات دات نت وجود ندارد و ما هیچ راه حلی در آینده قابل پیش بینی برای بهبود این موضوع نداریم. ما آن را حفظ کرده‌ایم زیرا هنوز API موجود را نشان می‌دهد.

می 2019

اعلام انتشار OR-Tools v7.1

ما OR-Tools v7.1 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات در وابستگی های مورد نیاز

OR-Tools v7.1 دارای وابستگی های جدید و به روز شده زیر است:

  • glog نسخه 0.3.5 به نسخه 0.4.0 به روز شد
  • protobuf نسخه 3.6.1 به نسخه 3.7.1 به روز شد
  • Cbc 2.9.9 به 2.10.1 به روز شد
  • Cgl 0.59.10 به 0.60.1 به روز شد
  • Clp 1.16.11 به 1.77.1 به روز شد
  • Osi 0.107.9 به 0.108.1 به روز شد
  • CoinUtils 2.10.14 به 2.11.1 به روز شد

تغییرات API CP-SAT

بخش‌های زیر تغییرات CP-SAT API را در OR-Tools 7.1 توضیح می‌دهند.

استفاده از Domain برای ایجاد متغیرها

مثال های زیر نحوه ایجاد یک متغیر عدد صحیح با دامنه های غیر پیوسته را نشان می دهد. این جایگزین روش حذف شده NewEnumeratedIntVar() شود. در اینجا، متغیر x می تواند هر یک از 1، 3، 4 یا 6 باشد:

پایتون

model.NewIntVarFromDomain(cp_model.Domain.FromValues([1, 3, 4, 6]), 'x')

C++

model.NewIntVar(Domain::FromValues({1, 3, 4, 6}));

جاوا

model.newIntVarFromDomain(Domain.fromValues(new long[] {1, 3, 4, 6}), "x");

سی شارپ

model.NewIntVarFromDomain(Domain.FromValues(new long[] {1, 3, 4, 6}), "x");

متغیرها را نیز می توان با استفاده از لیستی از فواصل ایجاد کرد. در زیر، متغیر x به 1، 2، 4، 5 یا 6 محدود شده است:

پایتون

model.NewIntVarFromDomain(cp_model.Domain.FromIntervals([[1, 2], [4, 6]]), 'x')

C++

model.NewIntVar(Domain::FromIntervals({ {1, 2}, {4, 6} }));

جاوا

model.newIntVarFromDomain(Domain.fromIntervals(new long[][] { {1, 2}, {4, 6} }), "x");

سی شارپ

model.NewIntVarFromDomain(Domain.FromIntervals(new long[][] { new long[] {1, 2}, new long[] {4, 6} }), "x");

استفاده از Domain در بیان خطی

مثال‌های زیر نشان می‌دهند که چگونه یک عبارت خطی را در یک دامنه غیر پیوسته محدود کنیم. در اینجا، عبارت خطی linear_expr در 5، 6، 8، 9 و 10 تعریف شده است:

پایتون

model.AddLinearExpressionInDomain(linear_expr, cp_model.Domain.FromIntervals([(5, 6), (8, 10)]))

C++

model.AddLinearConstraint(linear_expr, Domain::FromIntervals({ {5, 6}, {8, 10} }))

جاوا

model.addLinearExpressionInDomain(linear_expr, Domain.fromIntervals(new long[][] { {5, 6}, {8, 10} }))

.خالص

model.AddLinearExpressionInDomain(linear_expr, Domain.FromIntervals(new long[][] {new long[] {5, 6}, new long[] {8, 10} }));

استفاده از کمک کننده های بیان خطی

مثال‌های زیر نحوه استفاده از روش‌های کمکی برای ایجاد مجموع و محصولات اسکالر را نشان می‌دهند. در اینجا یک مثال می خواهیم که x + y == 20 و 4 * x + 2 * y = 56 :\

پایتون

model.Add(x + y == 20)
model.Add(4 * x + 2 * y == 56)

C++

cp_model.AddEquality(LinearExpr::Sum({x, y}), 20);
cp_model.AddEquality(LinearExpr::ScalProd({x, y}, {4, 2}), 56);

جاوا

model.addEquality(LinearExpr.sum(new IntVar[] {x, y}), 20);
model.addEquality(LinearExpr.scalProd(new IntVar[] {x, y}, new long[] {4, 2}), 56);

.خالص

model.Add(x + y == 20);
model.Add(4 * x + 2 * y == 56);

مارس 2019

اعلام انتشار OR-Tools v7.0

ما OR-Tools v7.0 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

تغییرات در پلتفرم های پشتیبانی شده

OR-Tools v7.0 دیگر از پلتفرم های زیر پشتیبانی نمی کند:

  • Visual C++ 2015
  • اوبونتو 14.04
  • پایتون 3.4 در لینوکس

اگر از یکی از این پلتفرم ها استفاده می کنید، همچنان می توانید OR-Tools v6.10 را نصب کنید.

تغییرات در وابستگی های مورد نیاز

OR-Tools v7.0 دارای وابستگی های جدید و به روز شده زیر است:

بخش‌های زیر ویژگی‌ها و پیشرفت‌های جدید OR-Tools 7.0 را شرح می‌دهند.

مدیر فهرست جدید برای برنامه های مسیریابی

در OR-Tools v7.0، برنامه های مسیریابی خودرو باید از RoutingIndexManager جدید استفاده کنند. این تضمین می‌کند که شاخص‌های استاندارد مکان‌ها با شاخص‌های داخلی استفاده‌شده توسط حل‌کننده سازگار هستند و به جلوگیری از خطا در کد شما کمک می‌کند.

RoutingIndexManager جدید به برخی تغییرات جزئی در برنامه های مسیریابی نیاز دارد که در بخش های زیر توضیح داده شده است:

شامل/وارد کردن RoutingIndexManager

در OR-Tools 7.0، برنامه های مسیریابی در C++ و جاوا باید RoutingIndexManager را مطابق با مثال های زیر وارد یا وارد کنند:

C++

#include "ortools/constraint_solver/routing_index_manager.h"

جاوا

import com.google.ortools.constraintsolver.RoutingIndexManager;

واردات پایتون و سی شارپ بدون تغییر است.

RoutingIndexManager را اعلام کنید

در OR-Tools v7.0، برنامه های مسیریابی باید RoutingIndexManager را اعلام کرده و مدل مسیریابی را ایجاد کنند، همانطور که در مثال های زیر نشان داده شده است:

پایتون

manager = pywrapcp.RoutingIndexManager(num_locations, num_vehicles, depot)
routing = pywrapcp.RoutingModel(manager)

C++

RoutingIndexManager manager(num_locations, num_vehicles, depot);
RoutingModel routing(manager);

جاوا

RoutingIndexManager manager = new RoutingIndexManager(numLocations, numVehicles, depot);
RoutingModel routing = new RoutingModel(manager);

.خالص

RoutingIndexManager manager = new RoutingIndexManager(numLocations, numVehicles, depot);
RoutingModel routing = new RoutingModel(manager);

آرگومان های RoutingIndexManager عبارتند از:

  • تعداد مکان ها
  • تعداد وسایل نقلیه
  • شاخص دپو (محل شروع و پایان برای همه وسایل نقلیه)

تماس های تلفنی

در OR-Tools v7.0، باید از RoutingIndexManager برای ایجاد تماس‌های برگشتی، مانند فاصله تماس، استفاده کنید، که سپس آن را به حل‌کننده ارسال می‌کنید. مثال‌های زیر نحوه ایجاد یک تماس از راه دور را نشان می‌دهند.

پایتون

    def distance_callback(from_index, to_index):
        """Returns the distance between the two nodes."""
        # Convert from routing variable Index to distance matrix NodeIndex.
        from_node = manager.IndexToNode(from_index)
        to_node = manager.IndexToNode(to_index)
        return data["distance_matrix"][from_node][to_node]

    transit_callback_index = routing.RegisterTransitCallback(distance_callback)
    routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)

C++

  const int transit_callback_index = routing.RegisterTransitCallback(
      [&data, &manager](const int64_t from_index,
                        const int64_t to_index) -> int64_t {
        // Convert from routing variable Index to distance matrix NodeIndex.
        const int from_node = manager.IndexToNode(from_index).value();
        const int to_node = manager.IndexToNode(to_index).value();
        return data.distance_matrix[from_node][to_node];
      });
  routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index);

جاوا

    final int transitCallbackIndex =
        routing.registerTransitCallback((long fromIndex, long toIndex) -> {
          // Convert from routing variable Index to user NodeIndex.
          int fromNode = manager.indexToNode(fromIndex);
          int toNode = manager.indexToNode(toIndex);
          return data.distanceMatrix[fromNode][toNode];
        });
    routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);

.خالص

        int transitCallbackIndex = routing.RegisterTransitCallback((long fromIndex, long toIndex) =>
                                                                   {
                                                                       // Convert from routing variable Index to
                                                                       // distance matrix NodeIndex.
                                                                       var fromNode = manager.IndexToNode(fromIndex);
                                                                       var toNode = manager.IndexToNode(toIndex);
                                                                       return data.DistanceMatrix[fromNode, toNode];
                                                                   });
        routing.SetArcCostEvaluatorOfAllVehicles(transitCallbackIndex);

روش IndexToNode شاخص های مکان داخلی مورد استفاده توسط حل کننده را به شاخص های استاندارد برای ماتریس فاصله تبدیل می کند.

به جای ارسال پاسخ تماس مستقیم به حل کننده، مانند نسخه های قبلی، در نسخه 7.0، ابتدا transit&nbsp;callback&nbsp;index یک مرجع به پاسخ تماس است ایجاد می کنید و آن را به حل کننده ارسال می کنید (در این مورد توسط SetArcCostEvaluatorOfAllVehicles ).

ابعاد

مثال های زیر نحوه ایجاد ابعادی برای تقاضاها و ظرفیت ها را نشان می دهد که برای حل مشکل مسیریابی خودروی ظرفیت دار استفاده می شود.

پایتون

    def demand_callback(from_index):
        """Returns the demand of the node."""
        # Convert from routing variable Index to demands NodeIndex.
        from_node = manager.IndexToNode(from_index)
        return data["demands"][from_node]

    demand_callback_index = routing.RegisterUnaryTransitCallback(demand_callback)
    routing.AddDimensionWithVehicleCapacity(
        demand_callback_index,
        0,  # null capacity slack
        data["vehicle_capacities"],  # vehicle maximum capacities
        True,  # start cumul to zero
        "Capacity",
    )

C++

  const int demand_callback_index = routing.RegisterUnaryTransitCallback(
      [&data, &manager](const int64_t from_index) -> int64_t {
        // Convert from routing variable Index to demand NodeIndex.
        const int from_node = manager.IndexToNode(from_index).value();
        return data.demands[from_node];
      });
  routing.AddDimensionWithVehicleCapacity(
      demand_callback_index,    // transit callback index
      int64_t{0},               // null capacity slack
      data.vehicle_capacities,  // vehicle maximum capacities
      true,                     // start cumul to zero
      "Capacity");

جاوا

    final int demandCallbackIndex = routing.registerUnaryTransitCallback((long fromIndex) -> {
      // Convert from routing variable Index to user NodeIndex.
      int fromNode = manager.indexToNode(fromIndex);
      return data.demands[fromNode];
    });
    routing.addDimensionWithVehicleCapacity(demandCallbackIndex, 0, // null capacity slack
        data.vehicleCapacities, // vehicle maximum capacities
        true, // start cumul to zero
        "Capacity");

.خالص

        int demandCallbackIndex = routing.RegisterUnaryTransitCallback((long fromIndex) =>
                                                                       {
                                                                           // Convert from routing variable Index to
                                                                           // demand NodeIndex.
                                                                           var fromNode =
                                                                               manager.IndexToNode(fromIndex);
                                                                           return data.Demands[fromNode];
                                                                       });
        routing.AddDimensionWithVehicleCapacity(demandCallbackIndex, 0, // null capacity slack
                                                data.VehicleCapacities, // vehicle maximum capacities
                                                true,                   // start cumul to zero
                                                "Capacity");

راه حل های چاپ

در OR-Tools v7.0، باید از RoutingIndexManager برای نمایش مسیرهای خودرو در یک راه حل استفاده کنید. مثال‌های زیر نحوه چاپ راه‌حل‌ها را در همه زبان‌های پشتیبانی شده نشان می‌دهند.

پایتون

def print_solution(manager, routing, solution):
    """Prints solution on console."""
    print(f"Objective: {solution.ObjectiveValue()}")
    index = routing.Start(0)
    plan_output = "Route for vehicle 0:\n"
    route_distance = 0
    while not routing.IsEnd(index):
        plan_output += f" {manager.IndexToNode(index)} ->"
        previous_index = index
        index = solution.Value(routing.NextVar(index))
        route_distance += routing.GetArcCostForVehicle(previous_index, index, 0)
    plan_output += f" {manager.IndexToNode(index)}\n"
    plan_output += f"Distance of the route: {route_distance}m\n"
    print(plan_output)

C++

//! @brief Print the solution
//! @param[in] manager Index manager used.
//! @param[in] routing Routing solver used.
//! @param[in] solution Solution found by the solver.
void PrintSolution(const RoutingIndexManager& manager,
                   const RoutingModel& routing, const Assignment& solution) {
  LOG(INFO) << "Objective: " << solution.ObjectiveValue();
  // Inspect solution.
  int64_t index = routing.Start(0);
  LOG(INFO) << "Route for Vehicle 0:";
  int64_t distance{0};
  std::stringstream route;
  while (!routing.IsEnd(index)) {
    route << manager.IndexToNode(index).value() << " -> ";
    const int64_t previous_index = index;
    index = solution.Value(routing.NextVar(index));
    distance += routing.GetArcCostForVehicle(previous_index, index, int64_t{0});
  }
  LOG(INFO) << route.str() << manager.IndexToNode(index).value();
  LOG(INFO) << "Distance of the route: " << distance << "m";
  LOG(INFO) << "";
  LOG(INFO) << "Advanced usage:";
  LOG(INFO) << "Problem solved in " << routing.solver()->wall_time() << "ms";
}

جاوا

  /// @brief Print the solution.
  static void printSolution(
      DataModel data, RoutingModel routing, RoutingIndexManager manager, Assignment solution) {
    // Solution cost.
    logger.info("Objective : " + solution.objectiveValue());
    // Inspect solution.
    logger.info("Route for Vehicle 0:");
    long routeDistance = 0;
    String route = "";
    long index = routing.start(0);
    while (!routing.isEnd(index)) {
      route += manager.indexToNode(index) + " -> ";
      long previousIndex = index;
      index = solution.value(routing.nextVar(index));
      routeDistance += routing.getArcCostForVehicle(previousIndex, index, 0);
    }
    route += manager.indexToNode(routing.end(0));
    logger.info(route);
    logger.info("Distance of the route: " + routeDistance + "m");
  }

.خالص

    /// <summary>
    ///   Print the solution.
    /// </summary>
    static void PrintSolution(in RoutingModel routing, in RoutingIndexManager manager, in Assignment solution)
    {
        Console.WriteLine("Objective: {0}", solution.ObjectiveValue());
        // Inspect solution.
        Console.WriteLine("Route for Vehicle 0:");
        long routeDistance = 0;
        var index = routing.Start(0);
        while (routing.IsEnd(index) == false)
        {
            Console.Write("{0} -> ", manager.IndexToNode((int)index));
            var previousIndex = index;
            index = solution.Value(routing.NextVar(index));
            routeDistance += routing.GetArcCostForVehicle(previousIndex, index, 0);
        }
        Console.WriteLine("{0}", manager.IndexToNode((int)index));
        Console.WriteLine("Distance of the route: {0}m", routeDistance);
    }

پشتیبانی از VRP با پیکاپ و تحویل

OR-Tools v7.0 برای حل مشکلات مسیریابی خودرو (VRPs) با پیکاپ ها و تحویل ها پشتیبانی می کند، که در آن هدف یافتن کوتاه ترین مسیرها برای ناوگان وسایل نقلیه ای است که اقلام را در مکان های مختلف جمع آوری و تحویل می دهند. شما مشکل را به طور مشابه با یک VRP استاندارد تنظیم می‌کنید، اما علاوه بر این، یک جفت (i, j) از مکان‌ها را برای هر آیتم مشخص می‌کنید، جایی که i مکان تحویل و j مکان تخلیه است. حل کننده مسیریابی مسیرهای وسیله نقلیه را به گونه ای برمی گرداند که برای هر جفت (i, j) ، i و j در یک مسیر هستند، و وسیله نقلیه قبل از j از i بازدید می کند.

برای مثالی که این نوع مشکلات را حل می کند، به مسیریابی خودرو با تحویل و تحویل مراجعه کنید.

پشتیبانی از توابع لامبدا

OR-Tools v7.0 اکنون از توابع لامبدا در سی شارپ و جاوا پشتیبانی می کند (علاوه بر C++ و Python که قبلاً پشتیبانی می شدند). توابع لامبدا روشی مناسب برای تعریف تماس‌های برگشتی در برنامه‌های مسیریابی فراهم می‌کنند. با این حال، اگر احساس می‌کنید که کد شما خواناتر می‌شود، می‌توانید با استفاده از توابع استاندارد، تماس‌های برگشتی را تعریف کنید.

مثال‌های C# و Java Callback در بالا نحوه تعریف تماس‌های برگشتی با استفاده از توابع لامبدا را نشان می‌دهند.

نوامبر 2018

اعلام انتشار نسخه v6.10

ما نسخه 6.10 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

بخش‌های زیر ویژگی‌ها و بهبودهای جدید نسخه 6.10 را شرح می‌دهند.

دستورات ساده برای ساخت و اجرای برنامه ها

در نسخه 6.10، می توانید برنامه ها را با وارد کردن دستوراتی مانند زیر بسازید و اجرا کنید:

make run SOURCE=relative/path/to/program.cc
که در آن <var>relative/path/to</var> مسیر دایرکتوری حاوی برنامه است.

برای ساختن یک برنامه بدون اجرای آن، وارد کنید:

make build SOURCE=relative/path/to/program.cc
برای دستورالعمل های خاص برای اجرای برنامه ها بر اساس زبان، به Get Started with OR-Tools مراجعه کنید.

پشتیبانی از SCIP 6.0.0

OR-Tools اکنون از SCIP 6.0.0 پشتیبانی می کند.

باینری ها

توزیع های باینری با استفاده از جاوا JDK 8 (JDK 7 برای اوبونتو 14.04) ساخته شده اند.

حل کننده CP-SAT

API را به روز کنید

  • C++ CP-SAT CpModelBuilder API را اضافه کنید.

مثال ها

برخی از نمونه ها منتقل شده است.

  • نمونه‌های انجمن را به examples/contrib منتقل کنید.
  • چند مثال را به ortools/<var>component</var>/samples منتقل کنید (به عنوان مثال ortools/linear_solver/samples/simple_program.java )

سپتامبر 2018

اعلام انتشار نسخه v6.9

ما نسخه 6.9 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

وابستگی های به روز شده

  • Protobuf 3.5.1 -> 3.6.1.
  • SCIP 4.0 -> 6.0.

حل کننده CP-SAT

  • شکستن تغییرات در API - جزئیات کامل در اینجا :
  • تغییر نام SolveWithSolutionObserver به SolveWithSolutionCallback در پایتون.
  • تغییر نام NewSolution به OnSolutionCallback در کلاس CpSolverSolutionCallback در پایتون. مثال زیر روش جدید ایجاد یک پاسخ تماس راه حل در پایتون را نشان می دهد.

    class MySolutionCallback(cp_model.CpSolverSolutionCallback):
    def init(self):
    cpmodel.CpSolverSolutionCallback.init(self)
    self._solution_count = 0

    def OnSolutionCallback(self): print('Solution {}, time = {}s, objective = {}, makespan = {}'.format( self.solution_count, self.WallTime(), self.ObjectiveValue(), self.Value(makespan))) self.solution_count += 1

  • StopSearch در پاسخ به تماس راه حل در پایتون، جاوا و سی شارپ قرار دهید. مستندات اینجا

  • ModelStats و CpSolverResponseStats را در پایتون، جاوا و سی شارپ نمایش دهید.

  • بهبود اسناد رشته پایتون مستندات اینجا

  • به روز رسانی اجرای جاوا رابط حل و کتاب آشپزی.

  • پیاده سازی مدول

  • تغییر اجرای مخزن: API را با بولی اضافه کنید تا رویدادهای تخلیه/پر کردن اختیاری را مشخص کنید.

حل کننده خطی

  • نمایش InterruptSolve در جاوا و سی شارپ.

حل کننده CP

  • مدیر SolutionCollector را در سی شارپ معرفی کنید.

پایتون

  • پشتیبانی از Python 3.7 را اضافه کنید.
  • هنگام کامپایل کردن از منبع: هنگام شناسایی پایتون python3 به python2 ترجیح دهید.

.خالص

  • بازنویسی کامل لایه دات نت.
  • یک بسته Google.OrTools NetStandard 2.0 Nuget سازگار با Runtime IDentifier win-x64 ، linux-x64 و osx-x64 ارائه دهید.
  • یک بسته Google.OrTools.FSharp Nuget ارائه دهید.
  • فایل پروژه را برای همه نمونه های دات نت اضافه کنید.
  • تمام نمونه های اسکریپت F# (fsx.) را به پروژه معمولی F# (fs.) به روز کنید.
  • اسناد مربوط به تولید بسته دات نت را در اینجا اضافه کنید.

فلاتزینک

  • پشتیبانی از ست ها را در flatzinc اضافه کنید (با استفاده از nosets.mzn).

مشارکت ها

  • پشتیبانی از Binder را اضافه کنید. با تشکر از کوین میدر .
  • DecisionVisitor را در bindings جاوا یک نوع کارگردان قرار دهید. با تشکر از جرمی آپتورپ

جولای 2018

اعلام انتشار نسخه v6.8

ما نسخه 6.8 OR-Tools را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

اعلام حل کننده CP-SAT

حل کننده CP-SAT یک حل کننده جدید برای برنامه نویسی محدودیت است. حل کننده CP-SAT سریعتر از حل کننده CP اصلی است و باید برای مشکلات CP ترجیح داده شود.

برای مثال‌هایی که از حل‌کننده CP-SAT استفاده می‌کنند، در فهرست نمونه‌ها در GitHub به دنبال فایل‌هایی باشید که دارای _sat هستند.

حل‌کننده CP اصلی برای مدتی برای پشتیبانی از کد موجود حفظ می‌شود، اما منسوخ شده است.

گزینه های جدید برای حل کننده CP-SAT

گزینه های زیر برای حل کننده CP-SAT در این نسخه جدید هستند:

  • جستجوی محله محلی (LNS): از گزینه SatParameters.use_lns برای فعال کردن LNS استفاده کنید.
  • جستجوی موازی: از گزینه SatParameters.num_search_workers برای فعال کردن چندین رشته در طول جستجو استفاده کنید. هر رشته می تواند پارامترهای مختلف و دانه های تصادفی متفاوتی داشته باشد. این تنوع را به حداکثر می‌رساند و این احتمال را می‌دهد که حداقل یک رشته راه‌حل‌هایی پیدا کند.

بهبود عملکرد برای حل کننده ها

ما در حل کننده های CP-SAT و Glop بهبودهایی در عملکرد ایجاد کرده ایم.

مارس 2018

اعلام انتشار نسخه v6.7

ما OR-Tools نسخه 6.7 را منتشر کرده ایم. برای به روز رسانی نسخه خود، به بخش مربوطه OR-Tools Installation مراجعه کنید.

به روز رسانی به وابستگی های مورد نیاز

  • Protobuf 3.5.0 -> 3.5.1.

متفرقه

  • پایه Refactor برای آماده سازی ادغام abseil-cpp .
  • استفاده از خدمات Travis CI و Appveyor Continuation Integration (CI).

SAT

  • ارتقای کارایی.
  • API پایتون را بهبود می بخشد.
  • C# API با نام مستعار CpSolver.cs (EXPERIMENTAL) را اضافه کنید.

گلوپ

  • بازسازی کد.
  • ارتقای کارایی.

پشتیبانی CMake (تجربی)

  • C++ OR-Tools پشتیبانی CMake را اضافه کنید.
  • قادر به ساخت OR-Tools به عنوان یک پروژه مستقل CMake باشید.
  • قادر به ترکیب OR-Tools در یک پروژه CMake موجود باشید.
  • بیلد مبتنی بر Python OR-Tools CMake را اضافه کنید.
  • بسته پایتون (چرخ) را با استفاده از CMake ایجاد کنید.

مشارکت ها

  • تعریف مجدد winsock2.h در ویندوز را برطرف کنید. با تشکر از فلورنت تولین دی ریوارول .
  • پشتیبانی F# (تجربی) را اضافه کنید. با تشکر از متیو مور توجه: فقط با سازنده MakeFile در دسترس است.
  • پشتیبانی استاندارد .NET (آزمایش) را اضافه کنید. با تشکر از Ziad El Malki . توجه: فقط با سازنده MakeFile در دسترس است.

نوامبر 2017

اعلام انتشار نسخه v6.6

ما نسخه 6.6 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

به روزرسانی به وابستگی های مورد نیاز

  • protobuf به 3.3.0 -> 3.5.0.
  • gflags به 2.2.0 -> 2.2.1.
  • CBC 2.9.8 -> 2.9.9.
  • ماژول پایتون شش (1.10) را به عنوان وابستگی لازم برای پایتون اضافه کنید.

رفع اشکال

  • درخواست #494 نامگذاری مجدد نام را بکشید. اضافه کردن نظرات برای IntelliSense در برخی از ویراستاران. با تشکر از متیو مور .
  • درخواست شماره 516 دستورالعمل برای F # باینری مستقل. با تشکر از متیو مور .
  • دقت را در GLOP بهبود بخشید.

حل کننده

  • حل کننده SAT داخلی را بهبود بخشید ، اشکالات مختلف را برطرف کنید.
  • محدودیت VRP را به حل کننده SAT اضافه کنید ، که به حل کننده LP مرتبط است.
  • ناظر محلول را در حل کننده SAT تغییر دهید تا یک CpSolverResponse به عنوان یک پارامتر در نظر بگیرید.
  • استفاده از GLOP را در SAT Solver بهبود بخشید.
  • اتصال SAT-LP SPEEDUP.
  • محدودیت مخزن را به فرمت sat cp_model protobuf اضافه کنید.

شنبه/پایتون

مثال ها

  • RCPSP_Parser را برای استفاده از فرمت protobuf برای ذخیره مشکل بازنویسی کنید.
  • RCPSP را بهبود بخشید.

اکتبر 2017

اعلام انتشار نسخه v6.5

ما نسخه 6.5 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییر در سیستم عامل ها

  • ماژول pypi py3-ortools در ماژول ortools ادغام شده است. اکنون فقط یک ماژول وجود دارد: "ortools".
  • قالب اصلی این ماژول های پایتون اکنون پرونده های چرخ است. برای نصب یا ابزار برای پایتون از PYPI ، فقط pip install ortools . شما به نسخه اخیر PIP نصب شده نیاز دارید (> = 9.0.1). این باید آخرین نسخه (V6.5) را بکشد.

مشکل برطرف شد

پرونده JAR ProtoBuf اکنون به درستی با کلاس های کامپایل شده ساخته شده است.

نمونه های جدید

  • نمونه های بیشتر# به عنوان مثال/دایرکتوری FSHARP کمک کرده است (دوباره به متیو مور متشکرم).
  • نمونه های Java MIP نیز کمک شده است (با تشکر از Darian).

سپتامبر 2017

اعلام انتشار نسخه v6.4

ما نسخه 6.4 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییر در سیستم عامل ها

  • ماژول های PYPI در سیستم عامل های لینوکس اکنون به عنوان پرونده های چرخ با استفاده از برچسب ManyLinux1 تحویل داده می شوند. با تشکر از فدریکو فیکارلی . با این تغییر ، ما از ماژول های هر لینوکس معرفی شده در نسخه ژوئیه 2017 استفاده کرده ایم.

ویژگی های جدید

  • روش مقیاس گذاری بهبود یافته در داخل GLOP استفاده می شود.
  • بسته بندی ارزیاب ها را در کتابخانه مسیریابی C# رفع کنید. با تشکر از devnamedzed .
  • عملکرد پیش بینی Flatzinc را برای مدل های بزرگ بهبود بخشید.
  • به طور پیش فرض از Sat Backed برای Flatzinc استفاده کنید.
  • عملکرد رویکرد مبتنی بر هسته را برای حل کننده SAT بهبود بخشید.
  • رفع اشکال در الگوریتم تکلیف خطی که به طور نادرست شکست خورده است.
  • نمونه های F# اضافه شده در ortools/مثال/fsharp.
  • بررسی مجازات های مثبت در کتابخانه مسیریابی را حذف کنید.

آگوست 2017

اعلام انتشار نسخه v6.3

ما نسخه 6.3 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

پرونده های جدید بارگیری

پرونده های چرخ پایتون برای لینوکس هم اکنون برای بارگیری در صفحه انتشار OR-TOOLS به همراه آخرین نسخه های همه بارگیری ها در دسترس هستند.

حل کننده

این نسخه حاوی کد نهایی SAT و FLATZINC است که برای چالش Minizinc 2017 ارسال شده است.

جولای 2017

اعلام انتشار نسخه v6.2

ما نسخه 6.2 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییر در سیستم عامل ها

  • ما اکنون از چندین توزیع باینری لینوکس پشتیبانی می کنیم (اوبونتو 14.04 ، 16.04 ، 17.04 ، Centos 7 ، Debian 9).
  • ماژول های PYPI در سیستم عامل های لینوکس اکنون شامل برچسب هایی هستند که توزیع را توصیف می کند (اوبونتو -4.04 ، اوبونتو -16.04 ، اوبونتو-17.04 ، Centos-7 ، دبیان-9).

ویژگی های جدید

ما از Docker برای ساخت آثار باستانی لینوکس پشتیبانی کرده ایم. برای دیدن اهداف احتمالی به or-tools/tools/docker بروید و به Makefile نگاه کنید ( make archive ، make pypi و make pypi3 ).

این دستورات یک زیرمجموعه export ایجاد می کنند و آثار باینری را در آن اضافه می کنند.

ژوئن 2017

اعلام انتشار نسخه v6.1

ما نسخه 6.1 OR-TOOLS را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییر در سیستم عامل ها

  • Visual Studio 2017 پشتیبانی می شود. Visual Studio 2013 دیگر پشتیبانی نمی شود.
  • نسخه های MACOS 10.9 و بالاتر پشتیبانی می شوند.

ویژگی های جدید

ما برای حل کننده CP-SAT یک فرمت جدید ProtoBUF اضافه کرده ایم. برای تعریف مدل خود ortools/sat/cp_model.proto را ببینید ، و برای حل مشکل خود ortools/sat/cp_model_solver.h .

رفع اشکال

شماره شماره 420: ما ویژگی گمشده __version__ را در ماژول های Pyton PYPI بر روی همه سیستم عامل ها ثابت کرده ایم.

می 2017

اعلام انتشار نسخه v6.0

ما نسخه 6.0 OR-TOOLS را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

ساختار دایرکتوری جدید در C ++

ما منبع را تغییر داده ایم/شامل ساختار یا ابزار در هنگام استفاده از C ++ است. هدف این است که محصور کردن بهتر از پرونده های C ++ شامل پرونده ها باشد. همچنین از این مزیت برخوردار است که ساختارهای دایرکتوری C ++ و پایتون را تراز کنید.

  • src/ تغییر نام به ortools/ .
  • تمام دستورات #includ در پرونده های C ++ اکنون پیشوند ortools اضافه کرده اند. #include "constraint/constraint_solver.h" اکنون #include "ortools/constraint/constraint_solver.h" است.

ویژگی های جدید

  • پشتیبانی BAZEL. اکنون می توانید با Bazel ، ابزار ساخت Google یا ابزار ایجاد کنید. این کار در Linux و Mac OS X انجام می شود. پس از بارگیری نسخه Bazel 0.4.5 یا بالاتر ، فهرست را به OR-Tools تغییر دهید و نمونه ها را بسازید: bazel build examples/cpp/...

مسیریابی

ما در کتابخانه مسیریابی پشتیبانی از استراحت (به عنوان مثال ، خرابی وسیله نقلیه به دلیل رانندگان ناهار) را اجرا کرده ایم. این ویژگی در مثال cvrptw_with_breaks.cc نشان داده شده است.

پشتیبانی SCIP

بسته بندی حل کننده خطی اکنون از SCIP 4.0 پشتیبانی می کند. اکنون ابتدا باید SCIP را بسازید ، و سپس به آنها بگویید که از آن استفاده خواهید کرد. دستورالعمل ها در اینجا موجود است.

پشتیبانی GLPK

ما همچنین با ساخت با GLPK راه را تغییر داده ایم. اینجا را ببین .

پاکسازی

  • ما تمام استفاده از HASH_MAP و HASH_SET را در پایگاه C ++ حذف کرده ایم زیرا آنها کاهش می یابد. آنها توسط unordered_map و Unordered_set از STL جایگزین شدند.
  • پاکسازی C# Makefiles ، با حسن نیت ارائه دهنده مایکل پاول.

ژانویه 2017

اعلام انتشار نسخه v5.1

ما نسخه 5.1 OR-TOOLS را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

ویژگی های جدید

در حال نصب

مسیریابی

الگوریتمی را برای محاسبه محدودیت پایین نگهدارنده برای مشکلات فروش متقارن مسافرتی اجرا کرد. این به شما امکان می دهد تا یک محدوده بالایی به شکاف بین هزینه یک راه حل بالقوه غیر بهینه و هزینه راه حل بهینه محاسبه کنید.

  • یک روش جدید به کتابخانه مسیریابی وسیله نقلیه ، RoutingModel::SetBreakIntervalsOfVehicle اضافه شده است ، که به شما امکان می دهد فواصل زمانی را اضافه کنید - دوره زمانی که یک وسیله نقلیه نمی تواند هیچ کاری را انجام دهد (مانند مسافرت یا بازدید از یک گره). برای نمونه ای که از این گزینه استفاده می کند ، به CVRPTW_WOWT_BREAKS.CC مراجعه کنید

برنامه ریزی

حل کننده

  • محدودیت تجمعی SAT Solver اکنون فواصل اختیاری را می پذیرد ، که با روش NewOptionalInterval ایجاد شده است. برای مثال ، به https://github.com/google/or-tools/blob/master/examples/cpp/rcpsp_sat.cc مراجعه کنید.
  • اکنون می توانید با مشخص کردن هدف به عنوان مبلغ وزنی از لفظات ، حداکثر-سات (حداکثر رضایت پذیری_ را حل کنید. دیگر لازم نیست متغیر عدد صحیح متوسط ​​ایجاد شود.

بهبود عملکرد

  • SAT SOLVER - عملکرد بهبود یافته حل کننده SAT ، به ویژه برای محدودیت تجمعی.
  • GLOP SOLVER - استحکام عددی بهبود یافته از حل کننده GLOP ، که اکنون راه حل های دقیق تری را برای مشکلات عددی سخت باز می گرداند.
  • حل کننده
  • عملکرد بسیار خوبی از پس زمینه SAT برای مترجم Flatzinc.
  • رابط c# flatzinc را ساده کرد. برای نمونه ای از رابط جدید ، به https://github.com/google/or-tools/blob/master/examples/csharp/csfz.cs مراجعه کنید.

رفع اشکال

  • استفاده از هوریسم PathCheapestArc در مدل های مسیریابی با یک وسیله نقلیه و محدودیت های جانبی گاهی اوقات باعث می شود که حل کننده برای مدت زمان بیش از حد کار کند. این امر با در نظر گرفتن درست محدودیت های جانبی برطرف شد.
  • در جاوا ، حل کننده مسیریابی گاهی اوقات هنگام حل مشکلات مسیریابی وسیله نقلیه خراب می شود. این در آخرین نسخه ثابت شده است.

نوامبر 2016

اعلام انتشار نسخه v5.0

ما نسخه 5.0 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

نمونه های در حال اجرا

  • اهداف خاص زبان را معرفی کرده است که باعث می شود تا برنامه های شما و اجرای برنامه های شما و همچنین نمونه هایی که با OR یا Tools همراه هستند ، آسانتر شود.

نشست

مسطح

حل کننده محدودیت

  • محدودیت های زیر را اجرا کرد:
  • ATTOUM : برای تعداد متغیرهایی که برابر با یک مقدار معین هستند ، حد بالایی را تعیین می کند.
  • MakePathPrecedEnceconstraint و makePathTransitPrecedEnceCeconstraint : محدودیت تقدم را برای مجموعه ای از جفت ها اجرا کنید.

مسیریابی

  • AddatsolutionCallback پیاده سازی شده ، که هر بار که یک راه حل در طول جستجو پیدا می شود ، یک تماس تلفنی است.
  • سازندگان Depot Model Depot را حذف کردند. مشخص کردن حداقل یک انبار در مدل مسیریابی اکنون اجباری است.

سپتامبر 2016

اعلام انتشار نسخه v4.4

ما نسخه 4.4 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

نشست

  • برنامه ریزی گسترده API و نمونه های اصلاح شده (وزنه برداری_ tardiness_sat ، و JobShop_Sat) برای استفاده از آن.

نمودار

  • صفات تکرار شونده به کلاسهای نمودار اضافه شده است.

یا توزیع ابزار

  • بسته Nuget دوباره پشتیبانی می شود.

آگوست 2016

اعلام انتشار نسخه v4.3

ما نسخه 4.3 OR-TOOLS را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

حل کننده محدودیت

  • روش NotBetween روش برای محدود کردن یک متغیر برای خارج از یک بازه معین اجرا شده است.

مسیریابی

  • برای بررسی محدودیت های موجود NotMember همانطور که در این مثال نشان داده شده است ، یک تجزیه و تحلیل از مدل اضافه شده و از آنها در فیلترهای جستجوی محلی استفاده می کند.
  • پروفایل جستجوی محلی اضافه شده است.
  • برای حرکات محلی رفع کنید.

حل کننده خطی

  • گزارش وضعیت SCIP ثابت.

نشست

  • روش SolveWithPresolve برای ساده سازی استفاده از پیش بینی SAT اجرا شده است.
  • استفاده مجدد از برنامه های جستجو در SRC/SAT/UTIL.H | CC.
  • محدودیت های برنامه ریزی SMT (تولید بند تنبل) برنامه ریزی: به JobShop_sat.cc و وزنه بردی_TARDININES_SAT.CC مراجعه کنید.

گله

  • عملکرد بهبود یافته با بهره برداری از کمبود در مراحل بیشتر محاسبات.

مسطح

  • اشکالات ثابت که توسط Minizinc Challenge یافت می شود.

lp_data

  • ادامه ساده سازی الگوهای موجود در تکرار.

یا توزیع ابزار

  • C# مجامع اکنون به طور پیش فرض به شدت نامگذاری شده اند.
  • ارتقاء یافته به protobuf3.0.0.
  • یک اسکریپت پایتون برای بررسی وابستگی های بایگانی یا ابزار اضافه کرد.

جولای 2016

اعلام انتشار نسخه v4.2

ما نسخه 4.2 OR-TOOLS را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

حل کننده محدودیت (مسیریابی)

  • اکنون می توان با یک کاردینال بودن ، که حداکثر تعداد گره هایی است که می توانند در این اختلال فعال باشند ، یک اختلال تعریف شود. به عنوان مثال ، اگر با گره های N و یک کاردینالیت K یک اختلال اضافه کنید ، گره های K در بین گره های N مجاز به فعال شدن هستند. برای انجام این کار می توانید از تعریف جدید AddDiSjunction استفاده کنید.
  • پشتیبانی اضافه شده برای چندین اختلال در هر گره. به عنوان مثال ، اکنون می توانید یک گره ، N1 را به بسیاری از اختلالات (D1..DM) اضافه کنید. این احتمال فعال بودن در هر یک از آنها را افزایش می دهد. الگوریتم جستجوی مسیریابی سریعتر را برای مشکلات مربوط به ویندوزهای زمان جدا شده معرفی کرد.
  • پارامترهای حل کننده محدودیت به پارامترهای مدل مسیریابی و log_search به مسیریابی پارامترهای جستجو اضافه شده است.
  • الگوریتم جستجوی محلی با حل مشکلات با ویندوزهای زمان جداگانه سریعتر است. برای جزئیات بیشتر به عنوان مثال CVRP_DISJOINT_TW.CC را بررسی کنید.

GLOP (بهینه سازی خطی)

  • یک الگوریتم Simplex سریعتر را معرفی کرد.

یا توزیع ابزار

  • یک بایگانی در هر سکوی ، به جای بایگانی فردی برای هر یک از C ++ ، Java و .NET. بایگانی پایتون هنوز هم در PYPI میزبان است.
  • در PYPI ، ما به ماژول های چرخ (.WHL) در Mac OS X و Windows تغییر داده ایم. یک طرح اصلی شماره گذاری Major.Minor را معرفی کرد. این شماره ها از نام های بایگانی ، نسخه ذخیره شده در کتابخانه های مشترک Mac OS X ، ماژول های پایتون ، مجامع دات نت استفاده می شوند. اولین نسخه ای که ما منتشر می کنیم با این طرح v4.2 است

ژوئن 2016

اعلام انتشار نسخه V2016-06

ما نسخه OR-TOOLS V2016-06 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

حل کننده محدودیت

  • بسیاری از موارد برگشتی (SRC/Base/Callback.h) را از کتابخانه CP حذف کرد.
  • Notmemberct اضافه شده (متغیر نمی تواند متعلق به مجموعه ای از فواصل ها باشد).

کتابخانه مسیریابی

  • تغییر ناسازگار: برای مشخص کردن ظرفیت وسایل نقلیه در AddDimensionWithVehicleCapacity ، اکنون باید به جای پاسخ به تماس ، یک آرایه (یک بردار در C ++) را منتقل کنید.

GLOP

  • بازنمایی داخلی ماتریس پراکنده را تغییر دهید.
  • بهبود عملکرد

نمودار

  • الگوریتم های Dijkstra و Bellman-Ford را برای جایگزینی پاسخ های تماس توسط std::function (C ++) بازنویسی کنید.
  • هنگام تکرار بیش از قوس ها و گره ها ، API اجرای گراف های مختلف را تغییر دهید.

نشست

  • روش هسته استفاده نشده (گره های وضوح) را حذف کنید.
  • نویسنده DRAT را برای بررسی اثبات در مورد رضایت بخش اضافه کرد.
  • پیش پردازنده را اضافه کنید.

باپ

  • محله های جدید را اضافه کنید.

مثال ها

  • C ++: خلاص شدن از شر FilleineReader در مثال.
  • داده ها: مشکلات برنامه ریزی تک ماشین را اضافه کنید.

مستندات

آوریل 2016

اعلام انتشار نسخه V2016-04

ما نسخه OR-TOOLS V2016-04 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

وابستگی های به روز شده

دسامبر 2015

اعلام انتشار نسخه v2015-12

ما نسخه OR-TOOLS V2015-12 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

حل کننده محدودیت

  • سازگاری را در جستجوی بزرگ محله در حل کننده CP شکست (به examples/cpp/ls_api.cc ، examples/python/pyls_api.py ، examples/csharp/csls_api.cs ، و examples/com/google/ortools/sample/LsApi.java برای دیدن API جدید).
  • بسته بندی پایتون را تمیز کرد. از تصمیم سفارشی در حل کننده CP پشتیبانی کنید (برای دیدن API در عمل ، به examples/test/test_cp_api.py مراجعه کنید).
  • بهبودهای مختلف و رفع اشکال.

سپتامبر 2015

اعلام اولین نسخه در GitHub.

از این پس پرونده ها در آنجا ذخیره می شوند.

مسطح

  • بایگانی باینری اضافه شده برای مترجم Flatzinc (به www.minizinc.org مراجعه کنید).
  • حاوی چند رفع نسخه مورد استفاده در چالش است.
،

در این صفحه تغییرات در OR ، از جمله ویژگی های جدید ، رفع اشکال و پیشرفت در روش های کد و نصب ذکر شده است.

اگر در نصب OR یا TOOLS مشکل دارید ، بخش عیب یابی را در دستورالعمل های نصب OR-TOOLS بررسی کنید. اگر مشکل شما در آنجا ذکر نشده است ، مسائل مربوط به GitHub را بررسی کنید ، یا از باز کردن یک مورد جدید دریغ نکنید ، و ما خوشحال خواهیم شد که به شما کمک کنیم.

در زیر یادداشت های انتشار برای OR-TOOLS ، با آخرین نسخه منتشر شده است.

می 2024

اعلام انتشار OR-TOOLS V9.10

ما V9.10 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

می توانید یادداشت نسخه را در GitHub پیدا کنید

مارس 2024

اعلام انتشار OR-TOOLS V9.9

ما V9.9 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

می توانید یادداشت نسخه را در GitHub پیدا کنید

نوامبر 2023

اعلام انتشار OR-TOOLS V9.8

ما V9.8 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • Python 3.12 را اضافه کنید.
  • پشتیبانی از اوبونتو 23.10 را اضافه کنید

حل کننده خطی

  • Port ModelBuilder به .NET.
  • برای جلوگیری از برخورد با LogCallback SAT LogCallback را به MbLogCallback تغییر دهید.
  • گسترش ModelBuilder API:
    • محدودیت های شاخص را اضافه کنید.
    • پشتیبانی اشاره ای را اضافه کنید.
    • کلونینگ مدل را اضافه کنید.

ریاضی

  • کار مجدد عمیق

مسیریابی

  • ROUTING_OPTIMAL را اضافه کنید.
  • RoutingModel را غیر کپی کنید و نه متحرک.
  • برخی از حلقه های نامحدود را در اپراتورهای جستجوی محلی برطرف کنید.
  • یک ساختار داخلی PickupDeliveryPosition اضافه کنید.
  • روشهای IsPickup() و IsDelivery() را اضافه کنید.

SAT

  • ردپای حافظه را برای مدل بزرگ کاهش دهید.
  • جستجوی برنامه ریزی بهبود یافته.
  • Packing_Precedences_lns را اضافه کنید.
  • پرش امکان سنجی را بهینه و رفع کنید.
  • ورود به سیستم خطی و ورود به سیستم بهتر را بهینه کنید.
  • Presolve را برای int_abs ، int_mod ، int_prod و lin_max بهبود بخشید.
  • پشتیبانی پاندا را بهبود بخشید
  • چند رفع اشکال

changelog

آگوست 2023

اعلام انتشار OR-TOOLS V9.7

ما V9.7 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • Drop Centos-8 (EOL).
  • Drop Debian 10.
  • Drop Fedora [33, 36] (EOL).
  • Ubuntu 18.04 LTS (EOL) را رها کنید.
  • Drop Python 3.7 (EOL).
  • پشتیبانی netcore3.1 را در CMake (EOL) غیرفعال کنید.

سازنده مدل پایتون

  • برای ایجاد متغیرها از DataFrames و سری Pandas استفاده کنید.
  • اطلاعات تایپ کامل

PDLP

  • بروزرسانی مختلف

CP-SAT

  • بهبود عملکرد (Peacility_jump ، lin_max)
  • مدیریت برش را بهبود بخشید
  • New Objective_Shaving_search کارگر اختصاص داده شده برای بهبود مرز پایین هدف (در هنگام به حداقل رساندن)
  • تایپ حاشیه نویسی برای پایتون cp_model.py
  • پشتیبانی جزئی تجربی برای پاندا در cp_model.py
  • کارگران مبتنی بر نقض جستجوی محلی آزمایشی:
    • با پارامترها فعال شده: num_violation_ls: xxx
    • بهینه شده برای مدل خطی ( linear ، bool_or ، bool_and ، at_most_one ، exactly_one )
    • به درستی با lin_max ، محصول ، تقسیم کار می کند
    • پشتیبانی از NO_OVERLAP ، تجمعی ، مدار ، مسیرها
    • غیرفعال با NO_OVERLAP_2D
    • تعداد توصیه شده کارگران LS: num_workers -> num_violation_ls : (8, 1), (16, 2) (24, 3), (32, 4)

changelog

مارس 2023

اعلام انتشار OR-TOOLS V9.6

ما V9.6 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • پشتیبانی فدورا 37 ، 38 را اضافه کنید.
  • Drop Python 3.6 (توسط protobuf پشتیبانی نمی شود).
  • Python 3.7 را روی MACOS (که توسط scipy پشتیبانی نمی شود) رها کنید.
  • پشتیبانی net7.0 را در Cmake اضافه کنید ( -DUSE_DOTNET_7=ON استفاده کنید)
  • netcore3.1 را در بسته های Nuget .org رها کنید

وابستگی ها

  • SCIP v801 -> v803 (توجه: اکنون SCIP از مجوز سازگار با OSI استفاده کنید)
  • ABSEIL 20220623.1 -> 20230105.0
  • Protobuf v21.5 -> v21.12
  • Swig 4.1.1
  • جاوا JNA 5.11.0 -> 5.12.1

بازل

  • پشتیبانی Pybind11 را اضافه کنید.
  • پشتیبانی از بسته بندی جاوا را اضافه کنید.

حل کننده ها

  • PDLP: DD Python Wrapper.
  • CP-SAT: بهبود عملکرد.
  • GLOP: Tweak Presolve.
  • ModelBuilder: Python: بهبود پشتیبانی numpy.
  • مسیریابی: بهبود عملکرد (جستجوی محلی)

مشکلات شناخته شده:

  • CP-SAT: نادیده گرفتن subsolver pseudo_costs پارامترهای نامعتبر را برمی گرداند (به شماره 3706 مراجعه کنید).

نوامبر 2022

اعلام انتشار OR-TOOLS V9.5

ما OR-TOOLS V9.5 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • پشتیبانی Debian Sid را اضافه کنید.
  • پشتیبانی فدورا 35 ، 36 را اضافه کنید.
  • پشتیبانی اوبونتو 22.10 را اضافه کنید.
  • Python 3.6 را روی MACOS رها کنید.
  • پشتیبانی Python 3.11 را اضافه کنید.

به روزرسانی وابستگی ها

  • Protobuf v19.4 -> v21.5 .
  • SCIP SOLVER v800 -> v801 .

CP-SAT

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

GLOP

  • سرعت با بازنویسی جبر خطی و همچنین قانون انتخاب محوری.

حل کننده خطی

  • knapsack_interface.cc را اضافه کنید.
  • MODEL_BUILDER API را در زیر دایرکتوری Linear_Solver (هدرها و نمونه ها) حرکت دهید.
  • پشتیبانی از Gurobi 10 را اضافه کنید.

مسیریابی

  • برای چالش های مختلف مسیریابی چند پارسر را آزاد کنید.

آگوست 2022

اعلام انتشار OR-TOOLS V9.4

ما V9.4 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

بستر، زمینه

  • پشتیبانی Debian-10 را اضافه کنید (به شماره 3029 مراجعه کنید).
  • پشتیبانی Ubuntu 22.04 LTS را اضافه کنید (به شماره 3276 مراجعه کنید). توجه: پشتیبانی .NET 3.1 را ندارید (به Dotnet/Core#7038 مراجعه کنید).
  • پشتیبانی اوبونتو 21.10 را حذف کنید.

متفرقه

  • بایگانی را به زبانها تقسیم کرده و پیکربندی CMAKE را به C ++ One (#3200) اضافه کنید.

نمودار

تقسیم ortools.graph.pywrapgraph به:

  • ortools.graph.python.linear_sum_assignment .
  • ortools.graph.python.max_flow .
  • ortools.graph.python.min_cost_flow .

این اجازه می دهد تا با استفاده از NUMPY سرعت بخشیدن به مشکلات.

CP-SAT

برخی از پیشرفت ها در:

  • برنامه ریزی (انتشار ، برش ، مرزهای پایین).
  • MaxSat (Presolve ، اکتشافی مبتنی بر هسته).
  • عملکرد MIP (پیش بینی ، برش).

مارس 2022

اعلام انتشار OR-TOOLS V9.3

ما V9.3 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • پشتیبانی Debian-10 را رها کنید.
  • پشتیبانی Ubuntu-16.04 را رها کنید.
  • Drop .NET Framework 4.5.2.

به روزرسانی وابستگی ها

  • Eigen 3.4.0 را اضافه کنید.
  • Google Re2 2021-11-01 را اضافه کنید.
  • Protobuf 3.19.1 -> 3.19.4 .
  • SCIP 7.0.1 -> v800 .

پایتون

  • Pybind11 را اضافه کنید.

امکانات

  • PDLP را به عنوان آزمایشی اضافه کنید.
  • Mathopt را به عنوان تجربی اضافه کنید.

CP-SAT

  • چند API برای ثبات به عنوان مثال LinearExpr.ScalProd. -> LinearExpr.WeightedSum. .
  • روشهای AddAtLeastOne / AddAtMostOne / AddExactlyOne را اضافه کنید.
  • AddMultiplicationConstraint(z, x, y) را به همه زبان اضافه کنید.
  • AddMultipleCircuit() را به همه زبانها اضافه کنید.

C++

  • صریح CTOR IntVar(BoolVar) .
  • حذف LinearExpr::Add* و آنها را توسط اپراتور به عنوان مثال LinearExpr += جایگزین کرد.
  • اپراتورهای حسابی را در بیان خطی اضافه کنید.
  • حذف LinearExpr::BooleanSum/BooleanScalProd ، از Sum/WeightedSum استفاده کنید.
  • CpModelBuilder::FixVariable() را اضافه کنید که دامنه متغیر را به یک مقدار واحد بازنویسی می کند.

جاوا

  • بازنویسی LinearExpr ، یک کلاس سازنده افزایشی اضافه کنید: LinearExpr.newBuilder().add(x).addSum(&lt;array of variables&gt;).build()
  • C ++ API را دنبال کنید: Circuit ، MultipleCircuit ، Cumulative ، Reservoir ، AllowedAssignment و ForbiddenAssignment اکنون یک کلاس تخصصی را با API افزایشی برگردانید تا متغیرها ، اصطلاحات ، خواسته ها را اضافه کنید ...

سی

  • تمام روش ها را مستند کنید.
  • C ++ API را دنبال کنید: Circuit ، MultipleCircuit ، Cumulative ، Reservoir ، AllowedAssignment و ForbiddenAssignment اکنون یک کلاس تخصصی را با API افزایشی برگردانید تا متغیرها ، اصطلاحات ، خواسته ها را اضافه کنید ...
  • برای ساختن عبارات به صورت تدریجی ، کلاس LinearExprBuilder را اضافه کنید.

سیستم ساخت

CMake

  • حداقل به cmake> = 3.18 نیاز دارید.

بسازید

  • اکنون از ساخت داخلی Cmake در داخل استفاده کنید.

دسامبر 2021

اعلام انتشار OR-TOOLS V9.2

ما V9.2 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • پشتیبانی از اوبونتو 21:10 (آخرین نسخه نورد) را اضافه کنید.

به روزرسانی وابستگی ها

  • .NET TFM به روزرسانی NET5.0 -> net6.0 (نیاز به .NET SDK 6.0 LTS و .NET SDK 3.1 LTS).
  • ABSEIL -CPP 20210324.2 -> 20211102.0.
  • Protobuf 3.18.0 -> 3.19.1.
  • Googletest 1.10.0 -> 1.11.0.
  • پایتون: اضافه کردن numpy> = 1.13.3.
  • برای جلوگیری از سقوط در دوندگان ، در MACOS Compile Coin -or in -O1 .

مسیریابی

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

CP-SAT

شکستن تغییرات

  • بافر پروتکل اساسی با نسخه های قبلی ناسازگار است. هر بافر پروتکل ذخیره شده باید با API های سازنده به روز شده (در C ++ ، پایتون ، جاوا و .NET) دوباره تولید شود
  • به طور خاص ، Protobuf فاصله زمانی تمیز بود زیرا ما زمینه های قدیمی (شروع ، اندازه و پایان) را حذف کردیم و به موارد جدید (با استفاده از _view ) تغییر نام دادیم تا از نام فیلدهای حذف شده استفاده کنیم.

ویژگی های جدید

  • محدودیت های all_different ، reservoir ، modulo ، multiplication و division ، عبارات وابسته را می پذیرند ( a * var + b ) در هر کجا که به متغیرهای عدد صحیح نیاز داشته باشد.
  • هدف ضرایب نقطه شناور را می پذیرد (به کلاس DoubleLinearExpr در C ++/Java/.net مراجعه کنید. به عنوان مثال knapsack_2d_sat.py در پایتون مشاهده کنید).
  • محدودیت no_overlap_2d از فواصل اختیاری پشتیبانی می کند.
  • اپراتور C ++ API + و * برای ساختن عبارات پیاده سازی می کند.

بهبودها

  • کد پیش بینی شده بهبود یافته.
  • Checker مدل محکم تر.
  • محدودیت مخزن REWORK.
  • برش های پرانرژی را برای محدودیت NO_OVERLAP_2D اضافه کنید.
  • بهبودی خطی بهبود یافته محدودیت های رمزگذاری ( literal implies var == value ).

روشهای کاهش یافته و حذف شده

  • BooleanSum و BooleanScalProd کاهش یافته C ++. فقط از Sum و ScalProd استفاده کنید.
  • حذف C ++ AddLinMinEquality و AddLinMaxEquality . فقط از AddMinEquality و AddMaxEquality استفاده کنید.

ناسازگاری های آینده

  • در مقطعی از آینده ، ما لایه مدل سازی جاوا را بازنویسی خواهیم کرد تا به لایه C ++ نزدیکتر شویم.
  • در لایه مدل سازی C ++ ، ما CTOR INTVAR (BOOLVAR VAR) را صریح خواهیم داد.
  • ما در نظر داریم که سازگار با Python API PEP 8 (با استفاده از نام های Snake_case). اگر این اتفاق بیفتد ، ما یک پرونده SED را برای انتقال کد ارائه می دهیم.

سیستم ساخت

بازل

  • ساخت ویندوز.

CMake

  • گزینه FETCH_PYTHON_DEPS (پیش فرض ON ) را اضافه کنید.
  • پشتیبانی اختیاری را برای Solver GPLK اضافه کنید (پیش فرض -DUSE_GLPK=OFF ).

پایتون

  • از اعداد صحیح numpy در بیشتر API CP-SAT پشتیبانی کنید.
  • رفع __version__ را برطرف کنید.

سپتامبر 2021

اعلام انتشار OR-TOOLS V9.1

ما OR-TOOLS V9.1 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • پایتون: از تصویر manylinux2014 استفاده کنید (به پپ 599 مراجعه کنید).
  • Python: با استفاده از Image manylinux2014_aarch64 پشتیبانی از Linux AARCH64 را اضافه کنید.
  • .NET: پشتیبانی .NET 5.0 را اضافه کنید.

به روزرسانی وابستگی ها

  • ABSEIL -CPP 20210324.1 -> 20210324.2.
  • Protobuf 3.15.8 -> 3.18.0.
  • SCIP 7.0.1 -> استاد.
  • Googletest 1.8.0 -> 1.10.0.
  • پایتون: استفاده از warning در cp_model.py (به شماره 2530 مراجعه کنید).
  • پایتون: ABSL -PY 0.11 -> 0.13.

CMake

  • حداقل نسخه دست انداز مورد نیاز 3.14 -> 3.15 (به شماره 2528 مراجعه کنید).
  • پایتون: حداقل دست انداز نسخه مورد نیاز 3.14 -> 3.18 (به شماره 2774 مراجعه کنید).

بسازید

ساخت مبتنی بر ساخت و ساز ، لطفاً برای ساخت از منبع به Cmake یا Bazel مهاجرت کنید.

جاوا

  • استحکام لودر کتابخانه بومی را بهبود بخشید (به شماره 2742 مراجعه کنید).
  • هنگام مسیریابی مدل مسیریابی یا حل کننده محدودیت ، تصادف جمع کننده زباله JVM را برطرف کنید (به شماره 2091 مراجعه کنید) (به شماره 2466 مراجعه کنید).
  • هنگام استفاده از چندین کارگر ، تصادف برگشتی ورود به سیستم CP-SAT را برطرف کنید (به شماره 2775 مراجعه کنید).

CP-SAT

  • استحکام کد LNS را بهبود بخشید (به شماره 2525 مراجعه کنید).
  • کد برنامه ریزی را بهبود بخشید: روشهای جدید کارخانه برای ایجاد فواصل اندازه ثابت ، اکتشافی جستجوی جدید ، بهبود پیش بینی شده و کاهش خطی جدید.
  • بهبود کد مسیریابی: LN های اختصاصی جدید.
  • بررسی مدل را بهبود بخشید. اینک اکنون پرکار بیشتر است ، به خصوص سرریزهای بالقوه WRT.
  • بهبود کد MIP: پیشرفت بهتر و پیشرفت های متعدد در آرامش خطی مدل های MIP و CP.
  • تنوع جستجو را بهبود بخشید. هنگام استفاده از بیش از 12 کارگر ، کارگرانی را که به بهبود مرز پایین هدف اختصاص داده شده ، اضافه کنید.
  • تغییر به کد موازی: به طور پیش فرض ، حل کننده اکنون از تمام هسته های موجود استفاده می کند. برای مشخص کردن سطح موازی سازی از num_search_parameters استفاده کنید.
  • SearchAllSolutions و SolveWithSolutionCallback را کاهش دهید.
  • Python API: بررسی های بیشتر در هنگام استفاده از var == ... یا var != ... خارج از یک model.Add() تماس بگیرید.

آوریل 2021

اعلام انتشار OR-TOOLS V9.0

ما OR-TOOLS V9.0 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

به روزرسانی های وابستگی

  • ABSEIL-CPP 20200923.3 به روز شده در 20210324.1 LTS.
  • Protobuf 3.15.3 به روز شده به 3.15.8.
  • جاوا: JNA-Platform 5.5.0 به روز شده در 5.8.0

جاوا

رفع اشکال

  • هنگام استفاده از حل کننده CP-SAT ، چند رشته را بهبود بخشید (به شماره 1588 مراجعه کنید).
  • پشتیبانی از بسته بندی پایتون از std::vector&ltstd::string&gt (به شماره 2453 مراجعه کنید).
  • پشتیبانی از CPLEX Rework (به شماره 2470 مراجعه کنید).

تغییر شکستن شناخته شده

  • دسترسی Logger را در Python ، Java و .NET اضافه کنید (به شماره 2245 مراجعه کنید).
  • جایگزینی همه نوع Google سفارشی بر اساس موارد ارائه شده در cstdint .

CP-SAT

  • روشها SearchForAllSolutions() ، SearchAllSolutions() و SolveWithSolutionCallback() کاهش می یابد. لطفاً به جای آن از Solve() استفاده کنید.
  • پشتیبانی از اپراتورهای استاندارد پایتون را بهبود بخشید. این می تواند کد موجود نادرست را بشکند.

مارس 2021

اعلام انتشار OR-TOOLS V8.2

ما V8.2 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

به روزرسانی های وابستگی

  • ABSEIL-CPP 20200923.2 به روز شده در 20200923.3 LTS.
  • Protobuf 3.14.0 به روز شده به 3.15.3.

مسیریابی

  • اضافه شده RoutingModel.RegisterTransitMatrix() و RoutingModel.RegisterUnaryTransitVector() .
  • بازگشت RoutingModel.AddVectorDimension() و RoutingModel.AddMatrixDimension() را به std::pair&ltint, bool&gt که int آن شناسه ارزیابی کننده ترانزیت است تغییر دهید.

دسامبر 2020

اعلام انتشار OR-TOOLS V8.1

ما V8.1 OR را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

به روزرسانی های وابستگی

  • ABSEIL-CPP 20200923 به روز شده در 20200923.2 LTS.
  • Protobuf 3.13.0 به روز شده به 3.14.
  • پشتیبانی از Gurobi 9.1.0 را اضافه کنید
  • وابستگی Drop Glog (بسته به پرچم های ABSEIL-CPP با اجرای سفارشی جایگزین شده است)
  • وابستگی GFLAG Drop (جایگزین مؤلفه پرچم های ABSEIL-CPP)

رفع اشکال

  • شمارش مضاعف مجوز شناور Gurobi را برطرف کنید (به شماره 2227 مراجعه کنید).
  • ساخت ویندوز را برطرف کنید (به شماره 2200 مراجعه کنید).

اکتبر 2020

اعلام انتشار OR-TOOLS V8.0

ما V8.0 OR را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

تغییرات سکو

  • پشتیبانی اضافه شده از Python 3.9 ( #2187 )
  • پشتیبانی از Python 3.5 ( #2186 ) <!-منتظر پشتیبانی مایکروسافت Dotnet-SDK ، پس از اتمام انتشار می تواند تولید شود ...
    • پشتیبانی اضافه شده برای اوبونتو 20.10 ( #2188 ) ->
  • پشتیبانی از اوبونتو 16.04 LTS ( #2188 )
  • پشتیبانی از اوبونتو 19.10 ( #2188 )

به روزرسانی های وابستگی

  • ABSEIL-CPP 20200225.2 به روز شده در 20200923 LTS.
  • Protobuf 3.12.2 به روز شده به 3.13.0.

تغییر شکستن شناخته شده

  • اکنون ، مسیریابی و کد منبع CP-SAT از برخی از ویژگی های C++17 استفاده می کنند. هشدار: اگر نسخه خود را از abseil-cpp ارائه می دهید ، لطفاً تأیید کنید که در برابر C++17 نیز ساخته شده است.
  • MPSolver::CreateSolver تغییر کرده است. استدلال نام مدل کاهش یافته است.

CMake

  • هنگام استفاده از -DUSE_SCIP=OFF ، پشتیبانی از SCIP را برطرف کنید (به شماره 2129 مراجعه کنید).
  • نمونه ها و نمونه ها را در سیستم ساخت Cmake ادغام کنید. توجه: با استفاده از -DBUILD_SAMPLES=OFF و -DBUILD_EXAMPLES=OFF قابل غیرفعال است. توجه: با استفاده از -DBUILD_<LANG>_SAMPLES=OFF یا -DBUILD_<LANG>_EXAMPLES=OFF می تواند برای یک زبان خاص غیرفعال شود.
    • با <LANG> در میان:
    • CXX ،
    • PYTHON ،
    • JAVA و
    • DOTNET

بسازید

  • نیاز به Make >= 4.3 (استفاده از عملکرد ارزیابی ).
  • نیاز به CMake >= 3.14 (استفاده از گزینه cmake -verbose ).
  • گزینه را برای غیرفعال کردن پشتیبانی SCIP با استفاده از -DUSE_SCIP=OFF اضافه کنید (به شماره 2134 مراجعه کنید).
  • گزینه ای را برای غیرفعال کردن پشتیبانی CLP و CBC با استفاده از -DUSE_COINOR=OFF اضافه کنید.

جاوا

  • OR TOOLS اکنون بسته های maven را تولید می کند (به شماره 202 مراجعه کنید).

رفع اشکال

  • ساخت C ++ و Python را در FreeBSD اصلاح کنید (به شماره 2126 مراجعه کنید).
  • ساخت اشکال زدایی در ویندوز را برطرف کنید (به شماره 2077 مراجعه کنید).
  • تصادف طولانی مدت را به طور موازی در CP-SAT در ویندوز برطرف کنید (به #2001 ، #2019 مراجعه کنید).

جولای 2020

اعلام انتشار OR-TOOLS V7.8

ما V7.8 OR را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

به روزرسانی های وابستگی

  • Gurobi 9.0.2 اکنون در باینری های از پیش ساخته از قبل یکپارچه شده است. این کتابخانه به اشتراک گذاشته شده Gurobi 90 را در مسیر نصب پیش فرض نصب کننده های Gurobi در Mac OS X و Windows یا در فهرست Gurobi_Home جستجو می کند.
  • SCIP 7.0.1 اکنون در باینری های از پیش ساخته ادغام شده است. لطفاً قبل از استفاده از مجوز SCIP اطمینان حاصل کنید.
  • پشتیبانی اضافه شده برای Solver XPress 8.9.0.

حل کننده خطی

  • یک روش LinearSolver::CreateSolver() برای ساده کردن پشتیبانی از پشتیبانی از باکترهای حل کننده خطی یکپارچه اضافه شده است. این به همه زبانها کار می کند.

رفع اشکال

  • ساخته شده مبتنی بر Cmake بر روی FreeBSD.
  • مرتب سازی CP-SAT ثابت در تولید برش تجمعی.
  • نشت حافظه حل کننده خطی ثابت در بسته بندی .NET.

ژوئن 2020

اعلام انتشار OR-TOOLS V7.7

ما V7.7 را منتشر کرده ایم. برای به روزرسانی نسخه خود ، به بخش مناسب نصب OR-TOOLS مراجعه کنید.

به روزرسانی های وابستگی

  • Abseil-cpp b832dce updated to c51510d (LTS 20200225.2).
  • Protobuf 3.11.4 updated to 3.12.2.

New features and improvements

  • The CP-SAT solver now returns Optimal instead of Feasible in a satisfiability model (ie without objective).
  • Added the feasibility pump heuristic from the MIP community.

رفع اشکال

Fixed CP-SAT Multi-threading crash (see #2005 ).

آوریل 2020

Announcing the release of OR-Tools v7.6

We have released OR-Tools v7.6. To update your version, see the appropriate section of OR-Tools Installation .

CP-SAT new features

We have added the following new features to the CP-SAT solver:

  • Improved management of cutting planes for LPs.
  • Debugging tools.

Dependency updates

Abseil-cpp 8ba96a8 updated to b832dce (LTS 20200225).

رفع اشکال

  • Fixed CP-SAT UNSAT bug in presolve (see #1908 ).
  • Fixed swigwin.exe url.
  • Fixed SWIG typemap management for Java and .Net.

ژانویه 2020

Announcing the release of OR-Tools v7.5

We have released OR-Tools v7.5. To update your version, see the appropriate section of OR-Tools Installation .

Platform changes

  • Added support for Python 3.8 ( #1719 )
  • Dropped support compilation from sources on Visual Studio 2017 ( #1852 ).
  • Updated support from Centos 7 to Centos 8 ( #1827 ).

به روز رسانی وابستگی

رفع اشکال

The following issues have been fixed in OR-Tools v7.5 (For a complete list see Milestone v7.5 ).

به خصوص:

  • Fixed Assembly loading. See #1421 .
  • Exposed the GetStartIndex() and GetEndIndex() methods of RouteIndexManager ( #1843 ).
  • Fixed SWIG to remove broken methods ( #1838 , #1276 ).

اکتبر 2019

Announcing the release of OR-Tools v7.4

We have released OR-Tools v7.4. To update your version, see the appropriate section of OR-Tools Installation .

New features and improvements

  • The CP-SAT solver now checks for constraints that do not support enforcement literals. The model checker will return an error before solving if such a constraint has an enforcement literal.
  • Better and faster local search for the routing library.
  • The linear solver now supports the third-party software Xpress-MP. You will need to rebuild OR-Tools from source to use it.
  • The architecture of the NuGet package has been completely rewritten. In particular, it now supports the .NET framework >= 4.5.2 on Windows platforms.

Deprecated platform

As announced in the July 2019 release notes, OR-Tools no longer supports Python 2.7.

به روز رسانی وابستگی

Protobuf 3.9.0 has been updated to 3.10.0.

آگوست 2019

Announcing the release of OR-Tools v7.3

We have released OR-Tools v7.3. To update your version, see the appropriate section of OR-Tools Installation .

Deprecated platform

We're deprecating support for Python 2.7 to align with Google's move to Python 3. This will be the last release of OR-Tools supporting Python 2.7.

به روز رسانی وابستگی

Protobuf 3.8.0 has been updated to 3.9.0.

رفع اشکال

The following issues have been fixed in OR-Tools v7.3. (For a complete list see Kanban v7.3 ).

به خصوص:

  • Fixed init/int64 cast issue on Java ( #1448 ),
  • Fixed presolve check when processing empty cumulative constraints.

جولای 2019

Announcing the release of OR-Tools v7.2

We have released OR-Tools v7.2. To update your version, see the appropriate section of OR-Tools Installation .

Platform changes

  • We're deprecating support for Python 2.7 to align with Google's move to Python 3. There will be at most one more release of OR-Tools supporting Python 2.7.
  • Ubuntu 18.10 updated to Ubuntu 19.04.
  • Added support for compilation from sources on Visual Studio 2019.
  • Python 3.5 is no longer supported on Windows; please use Python 3.6 or higher.

Updates to dependencies

  • We now target CBC 2.10.3.
  • We now target Protobuf 3.8.0.

CP-SAT

  • We have made multiple improvements to search, parallelism, and the linear relaxation.
  • Added LinearExpr.Sum() and LinearExpr.ScalProd() APIs in Python.
  • Deprecated IntVar[].Sum() and IntVar[].ScalProd() APIs in C#.
  • C++: Removed SolveWithModel() as it was a duplicate of SolveCpModel() .
  • Added CpModel.addGreaterThan() and CpModel.addLessThan() methods to the Java API.

Linear solver

  • Added MPSolver.SetHint() for Python, Java, and C# (supported by SCIP and Gurobi).
  • Added MPSolver.SetNumThreads() for Python, Java, and C# (supported by CBC, Gurobi, and SCIP).
  • Rewrote support for SCIP 6.0.1.

مستندات مرجع

  • We have added doxygen and pdoc3 based reference manuals for all languages and all tools (algorithms, routing, graph, linear_solver, and CP-SAT). See OR-Tools Reference Manuals .
  • Reference documentation is complete for C++ (all products) and CP-SAT (C++, Python, Java).
  • We are in the process of exporting all C++ documentation to Python and Java.
  • .NET documentation is lacking, and we have no solution in the foreseeable future to improve this. We have kept it as it still shows the available API.

می 2019

Announcing the release of OR-Tools v7.1

We have released OR-Tools v7.1. To update your version, see the appropriate section of OR-Tools Installation .

Changes to required dependencies

OR-Tools v7.1 has the following new and updated dependencies:

  • glog v0.3.5 updated to v0.4.0
  • protobuf v3.6.1 updated to v3.7.1
  • Cbc 2.9.9 updated to 2.10.1
  • Cgl 0.59.10 updated to 0.60.1
  • Clp 1.16.11 updated to 1.77.1
  • Osi 0.107.9 updated to 0.108.1
  • CoinUtils 2.10.14 updated to 2.11.1

CP-SAT API changes

The following sections describe changes to the CP-SAT API in OR-Tools 7.1.

Using Domain to create variables

The following examples show how to create an integer variable with non-contiguous domains. This replace the removed method NewEnumeratedIntVar() . Here, the variable x can be any of 1, 3, 4, or 6:

پایتون

model.NewIntVarFromDomain(cp_model.Domain.FromValues([1, 3, 4, 6]), 'x')

C++

model.NewIntVar(Domain::FromValues({1, 3, 4, 6}));

جاوا

model.newIntVarFromDomain(Domain.fromValues(new long[] {1, 3, 4, 6}), "x");

سی شارپ

model.NewIntVarFromDomain(Domain.FromValues(new long[] {1, 3, 4, 6}), "x");

Variables can also be created using a list of intervals. Below, the variable x is constrained to be 1, 2, 4, 5, or 6:

پایتون

model.NewIntVarFromDomain(cp_model.Domain.FromIntervals([[1, 2], [4, 6]]), 'x')

C++

model.NewIntVar(Domain::FromIntervals({ {1, 2}, {4, 6} }));

جاوا

model.newIntVarFromDomain(Domain.fromIntervals(new long[][] { {1, 2}, {4, 6} }), "x");

سی شارپ

model.NewIntVarFromDomain(Domain.FromIntervals(new long[][] { new long[] {1, 2}, new long[] {4, 6} }), "x");

Using Domain in linear expression

The following examples show how to limit a linear expression on a non-contiguous domain. Here, the linear expression linear_expr is defined on 5, 6, 8, 9 and 10:

پایتون

model.AddLinearExpressionInDomain(linear_expr, cp_model.Domain.FromIntervals([(5, 6), (8, 10)]))

C++

model.AddLinearConstraint(linear_expr, Domain::FromIntervals({ {5, 6}, {8, 10} }))

جاوا

model.addLinearExpressionInDomain(linear_expr, Domain.fromIntervals(new long[][] { {5, 6}, {8, 10} }))

.خالص

model.AddLinearExpressionInDomain(linear_expr, Domain.FromIntervals(new long[][] {new long[] {5, 6}, new long[] {8, 10} }));

Using linear expression helpers

The following examples show how to use helper methods to create sums and scalar products. Here, an examples where we want x + y == 20 and 4 * x + 2 * y = 56 :\

پایتون

model.Add(x + y == 20)
model.Add(4 * x + 2 * y == 56)

C++

cp_model.AddEquality(LinearExpr::Sum({x, y}), 20);
cp_model.AddEquality(LinearExpr::ScalProd({x, y}, {4, 2}), 56);

جاوا

model.addEquality(LinearExpr.sum(new IntVar[] {x, y}), 20);
model.addEquality(LinearExpr.scalProd(new IntVar[] {x, y}, new long[] {4, 2}), 56);

.خالص

model.Add(x + y == 20);
model.Add(4 * x + 2 * y == 56);

مارس 2019

Announcing the release of OR-Tools v7.0

We have released OR-Tools v7.0. To update your version, see the appropriate section of OR-Tools Installation .

Changes to supported platforms

OR-Tools v7.0 no longer supports the following platforms:

  • Visual C++ 2015
  • Ubuntu 14.04
  • Python 3.4 on Linux

If you are using one of these platforms, you can still install OR-Tools v6.10 .

Changes to required dependencies

OR-Tools v7.0 has the following new and updated dependencies:

The following sections describe the new features and improvements in OR-Tools 7.0.

New index manager for routing programs

In OR-Tools v7.0, vehicle routing programs must use the new RoutingIndexManager . This ensures that the standard indices for locations are consistent with the internal indices used by the solver, and helps prevent errors in your code.

The new RoutingIndexManager requires some minor changes to routing programs, which are described in the following sections:

Include/import RoutingIndexManager

In OR-Tools 7.0, routing programs in C++ and Java must include or import the RoutingIndexManager as shown in the examples below:

C++

#include "ortools/constraint_solver/routing_index_manager.h"

جاوا

import com.google.ortools.constraintsolver.RoutingIndexManager;

Python and C# imports are unchanged.

Declare RoutingIndexManager

In OR-Tools v7.0, routing programs must declare the RoutingIndexManager and create the routing model, as shown in the following examples:

پایتون

manager = pywrapcp.RoutingIndexManager(num_locations, num_vehicles, depot)
routing = pywrapcp.RoutingModel(manager)

C++

RoutingIndexManager manager(num_locations, num_vehicles, depot);
RoutingModel routing(manager);

جاوا

RoutingIndexManager manager = new RoutingIndexManager(numLocations, numVehicles, depot);
RoutingModel routing = new RoutingModel(manager);

.خالص

RoutingIndexManager manager = new RoutingIndexManager(numLocations, numVehicles, depot);
RoutingModel routing = new RoutingModel(manager);

The arguments for RoutingIndexManager are:

  • The number of locations
  • The number of vehicles
  • The index of the depot (start and end location for all vehicles)

تماس های تلفنی

In OR-Tools v7.0, you need to use the RoutingIndexManager to create callbacks, such as the distance callback, which you then pass to the solver. The following examples show how to create a distance callback.

پایتون

    def distance_callback(from_index, to_index):
        """Returns the distance between the two nodes."""
        # Convert from routing variable Index to distance matrix NodeIndex.
        from_node = manager.IndexToNode(from_index)
        to_node = manager.IndexToNode(to_index)
        return data["distance_matrix"][from_node][to_node]

    transit_callback_index = routing.RegisterTransitCallback(distance_callback)
    routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)

C++

  const int transit_callback_index = routing.RegisterTransitCallback(
      [&data, &manager](const int64_t from_index,
                        const int64_t to_index) -> int64_t {
        // Convert from routing variable Index to distance matrix NodeIndex.
        const int from_node = manager.IndexToNode(from_index).value();
        const int to_node = manager.IndexToNode(to_index).value();
        return data.distance_matrix[from_node][to_node];
      });
  routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index);

جاوا

    final int transitCallbackIndex =
        routing.registerTransitCallback((long fromIndex, long toIndex) -> {
          // Convert from routing variable Index to user NodeIndex.
          int fromNode = manager.indexToNode(fromIndex);
          int toNode = manager.indexToNode(toIndex);
          return data.distanceMatrix[fromNode][toNode];
        });
    routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);

.خالص

        int transitCallbackIndex = routing.RegisterTransitCallback((long fromIndex, long toIndex) =>
                                                                   {
                                                                       // Convert from routing variable Index to
                                                                       // distance matrix NodeIndex.
                                                                       var fromNode = manager.IndexToNode(fromIndex);
                                                                       var toNode = manager.IndexToNode(toIndex);
                                                                       return data.DistanceMatrix[fromNode, toNode];
                                                                   });
        routing.SetArcCostEvaluatorOfAllVehicles(transitCallbackIndex);

The method IndexToNode converts the internal location indices used by the solver to the standard indices for the distance matrix.

Instead of passing the callback directly to to solver, as in previous versions, in v7.0 you first create transit&nbsp;callback&nbsp;index , a reference to the callback, and pass that to the solver (in this case by SetArcCostEvaluatorOfAllVehicles ).

ابعاد

The following examples show how to create a dimension for demands and capacities , which is used to solve the capacitated vehicle routing problem .

پایتون

    def demand_callback(from_index):
        """Returns the demand of the node."""
        # Convert from routing variable Index to demands NodeIndex.
        from_node = manager.IndexToNode(from_index)
        return data["demands"][from_node]

    demand_callback_index = routing.RegisterUnaryTransitCallback(demand_callback)
    routing.AddDimensionWithVehicleCapacity(
        demand_callback_index,
        0,  # null capacity slack
        data["vehicle_capacities"],  # vehicle maximum capacities
        True,  # start cumul to zero
        "Capacity",
    )

C++

  const int demand_callback_index = routing.RegisterUnaryTransitCallback(
      [&data, &manager](const int64_t from_index) -> int64_t {
        // Convert from routing variable Index to demand NodeIndex.
        const int from_node = manager.IndexToNode(from_index).value();
        return data.demands[from_node];
      });
  routing.AddDimensionWithVehicleCapacity(
      demand_callback_index,    // transit callback index
      int64_t{0},               // null capacity slack
      data.vehicle_capacities,  // vehicle maximum capacities
      true,                     // start cumul to zero
      "Capacity");

جاوا

    final int demandCallbackIndex = routing.registerUnaryTransitCallback((long fromIndex) -> {
      // Convert from routing variable Index to user NodeIndex.
      int fromNode = manager.indexToNode(fromIndex);
      return data.demands[fromNode];
    });
    routing.addDimensionWithVehicleCapacity(demandCallbackIndex, 0, // null capacity slack
        data.vehicleCapacities, // vehicle maximum capacities
        true, // start cumul to zero
        "Capacity");

.خالص

        int demandCallbackIndex = routing.RegisterUnaryTransitCallback((long fromIndex) =>
                                                                       {
                                                                           // Convert from routing variable Index to
                                                                           // demand NodeIndex.
                                                                           var fromNode =
                                                                               manager.IndexToNode(fromIndex);
                                                                           return data.Demands[fromNode];
                                                                       });
        routing.AddDimensionWithVehicleCapacity(demandCallbackIndex, 0, // null capacity slack
                                                data.VehicleCapacities, // vehicle maximum capacities
                                                true,                   // start cumul to zero
                                                "Capacity");

راه حل های چاپ

In OR-Tools v7.0, you must use the RoutingIndexManager to display the vehicle routes in a solution. The following examples show how to print solutions in all of the supported languages.

پایتون

def print_solution(manager, routing, solution):
    """Prints solution on console."""
    print(f"Objective: {solution.ObjectiveValue()}")
    index = routing.Start(0)
    plan_output = "Route for vehicle 0:\n"
    route_distance = 0
    while not routing.IsEnd(index):
        plan_output += f" {manager.IndexToNode(index)} ->"
        previous_index = index
        index = solution.Value(routing.NextVar(index))
        route_distance += routing.GetArcCostForVehicle(previous_index, index, 0)
    plan_output += f" {manager.IndexToNode(index)}\n"
    plan_output += f"Distance of the route: {route_distance}m\n"
    print(plan_output)

C++

//! @brief Print the solution
//! @param[in] manager Index manager used.
//! @param[in] routing Routing solver used.
//! @param[in] solution Solution found by the solver.
void PrintSolution(const RoutingIndexManager& manager,
                   const RoutingModel& routing, const Assignment& solution) {
  LOG(INFO) << "Objective: " << solution.ObjectiveValue();
  // Inspect solution.
  int64_t index = routing.Start(0);
  LOG(INFO) << "Route for Vehicle 0:";
  int64_t distance{0};
  std::stringstream route;
  while (!routing.IsEnd(index)) {
    route << manager.IndexToNode(index).value() << " -> ";
    const int64_t previous_index = index;
    index = solution.Value(routing.NextVar(index));
    distance += routing.GetArcCostForVehicle(previous_index, index, int64_t{0});
  }
  LOG(INFO) << route.str() << manager.IndexToNode(index).value();
  LOG(INFO) << "Distance of the route: " << distance << "m";
  LOG(INFO) << "";
  LOG(INFO) << "Advanced usage:";
  LOG(INFO) << "Problem solved in " << routing.solver()->wall_time() << "ms";
}

جاوا

  /// @brief Print the solution.
  static void printSolution(
      DataModel data, RoutingModel routing, RoutingIndexManager manager, Assignment solution) {
    // Solution cost.
    logger.info("Objective : " + solution.objectiveValue());
    // Inspect solution.
    logger.info("Route for Vehicle 0:");
    long routeDistance = 0;
    String route = "";
    long index = routing.start(0);
    while (!routing.isEnd(index)) {
      route += manager.indexToNode(index) + " -> ";
      long previousIndex = index;
      index = solution.value(routing.nextVar(index));
      routeDistance += routing.getArcCostForVehicle(previousIndex, index, 0);
    }
    route += manager.indexToNode(routing.end(0));
    logger.info(route);
    logger.info("Distance of the route: " + routeDistance + "m");
  }

.خالص

    /// <summary>
    ///   Print the solution.
    /// </summary>
    static void PrintSolution(in RoutingModel routing, in RoutingIndexManager manager, in Assignment solution)
    {
        Console.WriteLine("Objective: {0}", solution.ObjectiveValue());
        // Inspect solution.
        Console.WriteLine("Route for Vehicle 0:");
        long routeDistance = 0;
        var index = routing.Start(0);
        while (routing.IsEnd(index) == false)
        {
            Console.Write("{0} -> ", manager.IndexToNode((int)index));
            var previousIndex = index;
            index = solution.Value(routing.NextVar(index));
            routeDistance += routing.GetArcCostForVehicle(previousIndex, index, 0);
        }
        Console.WriteLine("{0}", manager.IndexToNode((int)index));
        Console.WriteLine("Distance of the route: {0}m", routeDistance);
    }

Support for VRPs with pickups and deliveries

OR-Tools v7.0 provides support for solving vehicle routing problems (VRPs) with pickups and deliveries, in which the goal is to find the shortest routes for a fleet of vehicles picking up and delivering items at various locations. You set up the problem similarly to a standard VRP, but in addition you specify a pair (i, j) of locations for each item, where i is the pickup location and j is the drop off location. The routing solver returns vehicle routes such that for each pair (i, j) , i and j are on the same route, and the vehicle visits i before j .

For an example that solves this type of problem, see Vehicle Routing with Pickups and Deliveries .

Support for lambda functions

OR-Tools v7.0 now includes support for lambda functions in C# and Java (in addition to C++ and Python, which were already supported). Lambda functions provide a convenient way to define callbacks in routing programs. However, you can define callbacks using standard functions if you feel that makes your code more readable.

The C# and Java callback examples above illustrate how to define callbacks using lambda functions.

نوامبر 2018

Announcing the release of version v6.10

We have released OR-Tools version 6.10. To update your version, see the appropriate section of OR-Tools Installation .

The following sections describe the new features and improvements in version 6.10.

Simplified commands for building and running programs

In version 6.10, you can build and run programs by entering commands like the following:

make run SOURCE=relative/path/to/program.cc
where <var>relative/path/to</var> is the path to the directory containing the program.

To build a program without running it, enter:

make build SOURCE=relative/path/to/program.cc
See Get Started with OR-Tools for specific instructions for running programs by language.

Support for SCIP 6.0.0

OR-Tools now provides support for SCIP 6.0.0.

باینری ها

Binary distributions have been built using Java JDK 8 (JDK 7 for Ubuntu 14.04).

CP-SAT Solver

Update the API

  • Add C++ CP-SAT CpModelBuilder API.

مثال ها

Some examples have been moved.

  • Move community examples to examples/contrib .
  • Move some examples to ortools/<var>component</var>/samples (eg ortools/linear_solver/samples/simple_program.java )

سپتامبر 2018

Announcing release of version v6.9

We have released OR-Tools version 6.9. To update your version, see the appropriate section of OR-Tools Installation .

وابستگی های به روز شده

  • Protobuf 3.5.1 -> 3.6.1.
  • SCIP 4.0 -> 6.0.

CP-SAT Solver

  • Breaking changes to the API - full details here :
  • Rename SolveWithSolutionObserver to SolveWithSolutionCallback in Python.
  • Rename NewSolution to OnSolutionCallback in class CpSolverSolutionCallback in Python. The following example shows the new way to create a solution callback in Python.

    class MySolutionCallback(cp_model.CpSolverSolutionCallback):
    def init(self):
    cpmodel.CpSolverSolutionCallback.init(self)
    self._solution_count = 0

    def OnSolutionCallback(self): print('Solution {}, time = {}s, objective = {}, makespan = {}'.format( self.solution_count, self.WallTime(), self.ObjectiveValue(), self.Value(makespan))) self.solution_count += 1

  • Expose StopSearch on solution callback in Python, Java and C#. Documentation here .

  • Expose ModelStats and CpSolverResponseStats in Python, Java and C#.

  • Improve Python docstring documentation. Documentation here .

  • Updates to Java implementation of the solver interface and cookbook.

  • Implement modulo.

  • Change implementation of reservoir: add API with boolean to specify optional draining/filling events.

Linear Solver

  • Expose InterruptSolve in Java and C#.

CP Solver

  • Expose SolutionCollector director in C#.

پایتون

  • Add support for Python 3.7 .
  • When compiling from source: prefer python3 over python2 when detecting python.

.خالص

  • Complete rewrite of the .NET layer.
  • Provide a Google.OrTools NetStandard 2.0 Nuget package compatible with Runtime IDentifier win-x64 , linux-x64 and osx-x64 .
  • Provide a Google.OrTools.FSharp Nuget package.
  • Add project file for all .NET examples.
  • Update all F# script examples (.fsx) to regular F# project (.fs).
  • Add documentation on .NET package build generation here .

Flatzinc

  • Add support for sets in flatzinc (using nosets.mzn).

مشارکت ها

  • Add support for Binder. Thanks to Kevin Mader .
  • Make DecisionVisitor a director type in Java bindings. Thanks to Jeremy Apthorp .

جولای 2018

Announcing release of version v6.8

We have released OR-Tools version 6.8. To update your version, see the appropriate section of OR-Tools Installation .

Announcing the CP-SAT solver

The CP-SAT solver is a new solver for constraint programming. The CP-SAT solver is faster than the original CP solver, and should be preferred for CP problems.

For examples that use the CP-SAT solver, look in the examples directory on GitHub for files that have _sat in their names.

The original CP solver will continue to be maintained for a period of time to support existing code, but it is deprecated.

New options for the CP-SAT solver

The following options for the CP-SAT solver are new in this release:

  • Local neighborhood search (LNS): Use the SatParameters.use_lns option to enable LNS.
  • Parallel search: Use the SatParameters.num_search_workers option to enable multiple threads during a search. Each thread can have different parameters, and different random seeds. This maximizes diversity, and the probability that at least one thread will find solutions.

Performance improvements to solvers

We have made performance improvements to the CP-SAT and Glop solvers.

مارس 2018

Announcing release of version v6.7

We have released OR-Tools version 6.7. To update your version, see the appropriate section of OR-Tools Installation .

Update to required dependencies

  • Protobuf 3.5.0 -> 3.5.1.

متفرقه

  • Refactor base to prepare abseil-cpp integration.
  • Use of Travis CI and Appveyor continuous integration (CI) services.

SAT

  • ارتقای کارایی.
  • Improves Python API.
  • Add C# API aka CpSolver.cs (EXPERIMENTAL).

Glop

  • بازسازی کد.
  • ارتقای کارایی.

CMake Support (EXPERIMENTAL)

  • Add C++ OR-Tools CMake support.
  • Be able to build OR-Tools as a standalone CMake project.
  • Be able to incorporate OR-Tools into an Existing CMake project.
  • Add Python OR-Tools CMake-based build.
  • Generate Python package (wheel) using CMake.

مشارکت ها

  • Fix winsock2.h redefinition on windows. Thanks to Florent Tollin de Rivarol .
  • Add F# Support (EXPERIMENTAL). Thanks to Matthew Moore . Note: only available with Makefile builder.
  • Add .NET Standard Support (EXPERIMENTAL). Thanks to Ziad El Malki . Note: only available with Makefile builder.

نوامبر 2017

Announcing release of version v6.6

We have released OR-Tools version 6.6. To update your version, see the appropriate section of OR-Tools Installation .

Updates to required dependencies

  • Protobuf to 3.3.0 -> 3.5.0.
  • gflags to 2.2.0 -> 2.2.1.
  • CBC 2.9.8 -> 2.9.9.
  • Add Python module six (1.10) as required dependency for Python.

رفع اشکال

  • Pull request #494 Name refactoring. Adding comments for IntelliSense in some editors. Thanks to Matthew Moore .
  • Pull request #516 Instruction for F# standalone binary. Thanks to Matthew Moore .
  • Improve precision in Glop.

SAT Solver

  • Improve internal SAT solver, Fix various bugs.
  • Add a VRP constraint to the SAT solver, linked to the LP solver.
  • Change the solution observer in the SAT solver to take a CpSolverResponse as a parameter.
  • Improve the use of Glop in SAT Solver.
  • Speedup SAT-LP connection.
  • Add Reservoir constraint to the SAT cp_model protobuf format.

SAT/Python

مثال ها

  • Rewrite rcpsp_parser to use ProtoBuf format to store the problem.
  • Improve RCPSP parser.

اکتبر 2017

Announcing release of version v6.5

We have released OR-Tools version 6.5. To update your version, see the appropriate section of OR-Tools Installation .

Change in platforms

  • The pypi module py3-ortools has been merged into the ortools module. There is now only one module: 'ortools'.
  • The main format for these Python modules is now wheel files. To install OR-Tools for python from pypi, just run pip install ortools . You need a recent version of pip installed (>= 9.0.1). This should pull the latest release (v6.5).

مشکل برطرف شد

The protobuf jar file now correctly builds with compiled classes.

New Examples

  • More F# examples have been contributed to the examples/fsharp directory (Thanks again to Matthew Moore).
  • Java MIP examples have also been contributed (Thanks Darian).

سپتامبر 2017

Announcing release of version v6.4

We have released OR-Tools version 6.4. To update your version, see the appropriate section of OR-Tools Installation .

Change in platforms

  • Pypi modules on Linux platforms are now delivered as wheel files using the manylinux1 tag. Thanks to Federico Ficarelli . With this change, we have backtracked the per-linux modules introduced in the July 2017 release.

ویژگی های جدید

  • Improved scaling method used inside GLOP.
  • Fix wrapping of evaluators in the C# routing library. Thanks to DevNamedZed .
  • Improve the performance of the flatzinc presolve for large models.
  • Use the SAT backed for flatzinc by default.
  • Improve performance of the Core based approach for the sat solver.
  • Fix bug in the linear assignment algorithm that was failing incorrectly.
  • Added F# examples in ortools/examples/fsharp.
  • Remove check for positive penalties in the routing library.

آگوست 2017

Announcing release of version v6.3

We have released OR-Tools version 6.3. To update your version, see the appropriate section of OR-Tools Installation .

New download files

Python wheel files for Linux are now available to download in the OR-Tools release page , along with the latest versions of all downloads.

Minizinc solver

This version contains the final sat and flatzinc code sent for the Minizinc 2017 challenge .

جولای 2017

Announcing release of version v6.2

We have released OR-Tools version 6.2. To update your version, see the appropriate section of OR-Tools Installation .

Change in platforms

  • We now support multiple Linux binary distributions (Ubuntu 14.04, 16.04, 17.04, CentOS 7, Debian 9).
  • Pypi modules on Linux platforms now include a tag that describes the distribution (ubuntu-14.04, ubuntu-16.04, ubuntu-17.04, centos-7, debian-9).

ویژگی های جدید

We have added support for Docker to build linux artifacts. Go to or-tools/tools/docker and look at the Makefile to see possible targets ( make archive , make pypi , and make pypi3 ).

These commands will create an export subdirectory and add binary artifacts in it.

ژوئن 2017

Announcing release of version v6.1

We have released OR-Tools version 6.1. To update your version, see the appropriate section of OR-Tools Installation .

Change in platforms

  • Visual Studio 2017 is supported; Visual Studio 2013 is no longer supported.
  • macOS versions 10.9 and higher are supported.

ویژگی های جدید

We've added a new protobuf format for our CP-SAT solver. See ortools/sat/cp_model.proto to define your model, and ortools/sat/cp_model_solver.h to solve your problem.

رفع اشکال

Issue #420: We have fixed the missing __version__ attribute on Python pypi modules on all platforms.

می 2017

Announcing release of version v6.0

We have released OR-Tools version 6.0. To update your version, see the appropriate section of OR-Tools Installation .

New directory structure in C++

We have changed the source/include structure of OR-Tools when using C++. The goal is to provide better encapsulation of the C++ include files. It also has the benefit of aligning the C++ and the Python directory structures.

  • src/ has been renamed ortools/ .
  • All #include commands in C++ files now have the prefix ortools added. #include "constraint/constraint_solver.h" is now #include "ortools/constraint/constraint_solver.h" .

ویژگی های جدید

  • Bazel support. You can now build OR-Tools with bazel , Google's build tool. It works on Linux and Mac OS X. After downloading Bazel version 0.4.5 or later, change directory to or-tools and build the examples: bazel build examples/cpp/... .

مسیریابی

We have implemented support for breaks (eg, vehicle downtime due to drivers eating lunch) in the routing library. This feature is shown in the cvrptw_with_breaks.cc example.

SCIP support

The linear solver wrapper now supports SCIP 4.0. You now need to build SCIP first, and then tell or-tools that you will use it. دستورالعمل ها در اینجا موجود است.

GLPK support

We have also changed the way with build with GLPK. اینجا را ببین .

Cleanups

  • We have removed all usage of hash_map and hash_set in the C++ codebase as they are deprecated. They were replaced by unordered_map and unordered_set from the STL.
  • Cleanup of the C# makefiles, courtesy of Michael Powell.

ژانویه 2017

Announcing release of version v5.1

We have released OR-Tools version 5.1. To update your version, see the appropriate section of OR-Tools Installation .

ویژگی های جدید

در حال نصب

مسیریابی

Implemented an algorithm to compute the Held-Karp lower bound for symmetric Traveling Salesperson Problems. This enables you to compute an upper bound to the gap between the cost of a potentially non-optimal solution and the cost of the optimal solution.

برنامه ریزی

Sat solver

Performance improvements

  • SAT solver — Improved performance of the Sat solver, particularly for the cumulative constraint.
  • Glop solver — Improved numerical robustness of the Glop solver, which now returns even more accurate solutions to hard numerical problems.
  • Flatzinc solver
  • Greatly improved performance of the Sat backend for the flatzinc interpreter.
  • Simplified the C# flatzinc interface. For an example of the new interface, see https://github.com/google/or-tools/blob/master/examples/csharp/csfz.cs .

رفع اشکال

  • Using the PathCheapestArc heuristic on routing models with a single vehicle and side constraints would sometimes cause the solver to run for an excessively long time. This was fixed by properly taking into account side-constraints.
  • In Java, the routing solver would sometimes crash when solving vehicle routing problems. This has been fixed in the latest release.

نوامبر 2016

Announcing release of version v5.0

We have released OR-Tools version 5.0. To update your version, see the appropriate section of OR-Tools Installation .

Running examples

  • Introduced language-specific targets that make it easier to compile and run your programs, as well as the examples that come with OR-Tools.

نشست

FlatZinc

Constraint Solver

مسیریابی

  • Implemented AddAtSolutionCallback , which is a callback called each time a solution is found during the search.
  • Removed the RoutingModel depot-less constructors. Specifying at least one depot in the routing model is now mandatory.

سپتامبر 2016

Announcing release of version v4.4

We have released OR-Tools version 4.4. To update your version, see the appropriate section of OR-Tools Installation .

نشست

  • Extended scheduling API and modified examples (weighted_tardiness_sat, and jobshop_sat) to use it.

نمودار

  • Added iterator traits to Graph classes.

OR-Tools distribution

  • Nuget package is supported again.

آگوست 2016

Announcing release of version v4.3

We have released OR-Tools version 4.3. To update your version, see the appropriate section of OR-Tools Installation .

Constraint solver

  • Implemented NotBetween method to constrain a variable to be outside a given interval.

مسیریابی

  • Added a parse of the model to check existing NotMember constraints as shown in this example , and use them in local search filters.
  • Added local search profiling.
  • Fix for local moves.

Linear solver

  • Fixed SCIP status reporting.

نشست

Glop

  • Improved performance by exploiting sparsity in more stages of computation.

Flatzinc

  • Fixed bugs found by minizinc challenge.

Lp_data

  • Continued simplification of templates in iterators.

OR-Tools distribution

  • C# assemblies are now strongly named by default.
  • Upgraded to Protobuf3.0.0.
  • Added a Python script to check OR-Tools archive dependencies.

جولای 2016

Announcing release of version v4.2

We have released OR-Tools version 4.2. To update your version, see the appropriate section of OR-Tools Installation .

Constraint solver (routing)

  • A disjunction can now be defined with a cardinality, which is the maximum number of nodes that can be active within this disjunction. For example, if you add a disjunction with n nodes and a cardinality of k, then k nodes among the n nodes are allowed to be active. You can use the new definition of AddDisjunction to do this.
  • Added support for multiple disjunctions per node. For example, you can now add a node, N1, to many disjunctions (D1..Dm). This increases its chance of being active within any one of them. Introduced a faster routing search algorithm for problems related to disjunct time windows.
  • Added constraint solver parameters to routing model parameters and log_search to routing search parameters.
  • Local search algorithm is faster with resolving problems with disjoint time windows. Check cvrp_disjoint_tw.cc example for more details.

Glop (linear optimization)

  • Introduced a faster Simplex Algorithm.

OR-Tools distribution

  • One archive per platform, rather than individual archives for each of C++, Java, and .Net. Python archives are still hosted on pypi.
  • On pypi, we have switched to wheel (.whl) modules on Mac OS X and Windows. Introduced a MAJOR.MINOR numbering schema. These numbers are used the archive names, the version stored in Mac OS X shared libraries, Python modules, .NET assemblies. The first version we are releasing is with this schema is v4.2

ژوئن 2016

Announcing release of version v2016-06

We have released OR-Tools version v2016-06. To update your version, see the appropriate section of OR-Tools Installation .

Constraint Solver

  • Removed most of the instances of the callbacks (src/base/callback.h) from the CP library.
  • Added NotMemberCt (the variable cannot belong to a set of intervals).

Routing library

  • INCOMPATIBLE CHANGE: To specify the capacity of vehicles in AddDimensionWithVehicleCapacity , you now need to pass an array (a vector in c++) instead of a callback.

GLOP

  • Change internal representation of sparse matrix.
  • بهبود عملکرد

نمودار

  • Rewrite Dijkstra and Bellman-Ford algorithms to replace callbacks by std::function (C++).
  • Change API of different graph implementation when iterating over arcs and nodes.

نشست

  • Remove unused core method (Resolution nodes).
  • Added drat writer to check proofs on unsatisfiability.
  • Add preprocessor.

باپ

  • Add new neighborhoods.

مثال ها

  • c++: getting rid of filelinereader in examples.
  • data: Add single-machine scheduling problems.

مستندات

آوریل 2016

Announcing release of version v2016-04

We have released OR-Tools version v2016-04. To update your version, see the appropriate section of OR-Tools Installation .

وابستگی های به روز شده

دسامبر 2015

Announcing release of version v2015-12

We have released OR-Tools version v2015-12. To update your version, see the appropriate section of OR-Tools Installation .

Constraint Solver

  • Broke compatibility on the Large Neighborhood Search in the CP solver (see examples/cpp/ls_api.cc , examples/python/pyls_api.py , examples/csharp/csls_api.cs , and examples/com/google/ortools/sample/LsApi.java to see the new API).
  • Cleaned up the Python wrapping. Support custom decision in the CP solver (see examples/test/test_cp_api.py to see the API in action).
  • بهبودهای مختلف و رفع اشکال.

سپتامبر 2015

Announcing first release on github.

Files will be stored there from now on.

Flatzinc

  • Added binary archives for the flatzinc interpreter (see www.minizinc.org ).
  • Contains a few fixes to the version used in the challenge.