OR-Tools Release Notes

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

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

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

مارس 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 .
  • استفاده از خدمات تراویس CI و Appveyor یکپارچه سازی مداوم (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 builder موجود است.
  • پشتیبانی استاندارد دات نت (EXPERIMENTAL) را اضافه کنید. با تشکر از 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 مراجعه کنید).
  • حاوی چند رفع نسخه مورد استفاده در چالش است.