این صفحه تغییرات 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
. - پشتیبانی پاندا را بهبود بخشید
- چند رفع اشکال.
آگوست 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 برای ایجاد متغیرها مجاز است.
- تکلیف را ببینید
- bin_packing را ببینید
- اطلاعات کامل تایپ
PDLP
- به روز رسانی مختلف
CP-SAT
- بهبود عملکرد (قابلیت_پرش، lin_max)
- بهبود مدیریت برش
- کارگر جدید object_shaving_search اختصاص داده شده به بهبود مرز پایین هدف (هنگام کمینه سازی)
- تایپ حاشیه نویسی برای python cp_model.py
- پشتیبانی نسبی آزمایشی از پانداها در cp_model.py
- تکلیف را ببینید
- bin_packing را ببینید
- کارگران مبتنی بر نقض جستجوی محلی تجربی:
- با پارامترهای: 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)
مارس 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 به روز شد
جاوا
- OR-Tools اکنون در Maven Central در دسترس است (به com.google.ortools:ortools-java مراجعه کنید).
رفع اشکال
- هنگام استفاده از حل کننده CP-SAT، چند رشته ای را بهبود بخشید (به #1588 مراجعه کنید).
- پشتیبانی از wrapper پایتون از
std::vector<std::string>
را برطرف کنید (به #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<int, bool>
که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 ).
به روز رسانی وابستگی
رفع اشکال
مشکلات زیر در 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 برای ایجاد متغیرها
- استفاده از Domain در بیان خطی
- استفاده از کمک کننده های بیان خطی
استفاده از 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 دارای وابستگی های جدید و به روز شده زیر است:
- جدید: Abseil-cpp
- gflags 2.2.1 به 2.2.2 به روز شد
بخشهای زیر ویژگیها و پیشرفتهای جدید OR-Tools 7.0 را شرح میدهند.
- مدیر فهرست جدید برای برنامه های مسیریابی
- پشتیبانی از VRP با پیکاپ و تحویل
- پشتیبانی از توابع لامبدا در جاوا و سی شارپ
مدیر فهرست جدید برای برنامه های مسیریابی
در OR-Tools v7.0، برنامه های مسیریابی خودرو باید از RoutingIndexManager
جدید استفاده کنند. این تضمین میکند که شاخصهای استاندارد مکانها با شاخصهای داخلی استفادهشده توسط حلکننده سازگار هستند و به جلوگیری از خطا در کد شما کمک میکند.
RoutingIndexManager
جدید به برخی تغییرات جزئی در برنامه های مسیریابی نیاز دارد که در بخش های زیر توضیح داده شده است:
-
RoutingIndexManager
در C++ و Java وارد یا وارد کنید . -
RoutingIndexManager
را اعلام کنید -
RoutingIndexManager
به callbacks ابعاد اضافه کنید. - از
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 callback 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 IDentifierwin-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 اضافه کنید.
شنبه/پایتون
- معرفی API SAT در پایتون.
- کد در
ortools/sat/python/cp_model.py
. - مثالها را در مثال/ پایتون اضافه کنید/ :
- Assignment_sat.py
- Assignment_With_Constraints_sat.py
- code_samples_sat.py
- cp_is_fun_sat.py
- gate_scheduling_sat.py
- hidato_sat.py
- JobShop_ft06_Sat.py
- nqueens_sat.py
- Nurse_sat.py
- rcpsp_sat.py
- Steel_mill_slab_sat.py
- Worker_schedule_sat.py
- پشتیبانی از نوت بوک IPython را اضافه کنید.
- نمونه های پایتون به نوت بوک ها صادر می شوند و در مثال/نوت بوک در دسترس هستند.
مثال ها
- 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 همراه هستند ، آسانتر شود.
نشست
- پشتیبانی اضافه شده برای برنامه نویسی محدودیت.
- محدودیت های مختلف ، تجمعی ، مدار و زیرشاخه را پیاده سازی کرد.
- بر اساس الگوریتم فیلتر انرژی حداکثر برای محدودیت تجمعی گسسته ، چکر اضافه بار را اجرا کرد.
- تمام مبلغ متناسب با محدودیت محدود را اجرا کرد که انتشار بهتری برای محدودیت آلدفنراطوفه انجام می دهد.
مسطح
- برای مشکلات Flatzinc یک حل کننده SAT را اجرا کرد.
حل کننده محدودیت
- محدودیت های زیر را اجرا کرد:
- 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 مراجعه کنید.
وابستگی های به روز شده
- به جای پرچم ها در کتابخانه های محدودیت و مسیریابی از ProTobufs به جای پرچم استفاده کنید. برای جزئیات بیشتر به http://or-tools.blogspot.fr/2016/02/heads-up-upwround-incompatity-in.html مراجعه کنید.
دسامبر 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
بهبود بخشید. - پشتیبانی پاندا را بهبود بخشید
- چند رفع اشکال
آگوست 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 استفاده کنید.
- به تکالیف مراجعه کنید
- به bin_packing مراجعه کنید
- اطلاعات تایپ کامل
PDLP
- بروزرسانی مختلف
CP-SAT
- بهبود عملکرد (Peacility_jump ، lin_max)
- مدیریت برش را بهبود بخشید
- New Objective_Shaving_search کارگر اختصاص داده شده برای بهبود مرز پایین هدف (در هنگام به حداقل رساندن)
- تایپ حاشیه نویسی برای پایتون cp_model.py
- پشتیبانی جزئی تجربی برای پاندا در cp_model.py
- به تکالیف مراجعه کنید
- به bin_packing مراجعه کنید
- کارگران مبتنی بر نقض جستجوی محلی آزمایشی:
- با پارامترها فعال شده: 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)
مارس 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(<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
ما 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
جاوا
- OR-TOOLS اکنون در Maven Central در دسترس است (به com.google.ortools: ortools-java مراجعه کنید).
رفع اشکال
- هنگام استفاده از حل کننده CP-SAT ، چند رشته را بهبود بخشید (به شماره 1588 مراجعه کنید).
- پشتیبانی از بسته بندی پایتون از
std::vector<std::string>
(به شماره 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<int, bool>
که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 ofFeasible
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()
andGetEndIndex()
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()
andLinearExpr.ScalProd()
APIs in Python. - Deprecated
IntVar[].Sum()
andIntVar[].ScalProd()
APIs in C#. - C++: Removed
SolveWithModel()
as it was a duplicate ofSolveCpModel()
. - Added
CpModel.addGreaterThan()
andCpModel.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.
- Using Domain in linear expression.
- Using linear expression helpers.
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:
- New: Abseil-cpp
- gflags 2.2.1 updated to 2.2.2
The following sections describe the new features and improvements in OR-Tools 7.0.
- New index manager for routing programs
- Support for VRPs with pickups and deliveries
- Support for lambda functions in Java and C#
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 or import
RoutingIndexManager
in C++ and Java. - Declare
RoutingIndexManager
- Add the
RoutingIndexManager
to dimensions callbacks . - Use the
RoutingIndexManager
to print solutions.
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 callback 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.ccwhere
<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.ccSee 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
(egortools/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
toSolveWithSolutionCallback
in Python. Rename
NewSolution
toOnSolutionCallback
in classCpSolverSolutionCallback
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
andCpSolverResponseStats
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
overpython2
when detecting python.
.خالص
- Complete rewrite of the .NET layer.
- Provide a
Google.OrTools
NetStandard 2.0 Nuget package compatible with Runtime IDentifierwin-x64
,linux-x64
andosx-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
- Introduction of the SAT API in Python.
- Code in
ortools/sat/python/cp_model.py
. - Add examples in examples/python/ :
- assignment_sat.py
- assignment_with_constraints_sat.py
- code_samples_sat.py
- cp_is_fun_sat.py
- gate_scheduling_sat.py
- hidato_sat.py
- jobshop_ft06_sat.py
- nqueens_sat.py
- nurses_sat.py
- rcpsp_sat.py
- steel_mill_slab_sat.py
- worker_schedule_sat.py
- Add support for IPython notebook .
- Python examples are exported to notebooks and available in examples/notebook .
مثال ها
- 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 renamedortools/
. - 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 .
ویژگی های جدید
در حال نصب
- Introduced simpler procedures for installing OR-Tools, either from binary distributions or from source code. See Installing OR-Tools from binary or Installing OR-Tools from source for more information.
مسیریابی
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.
- Added a new method to the vehicle routing library,
RoutingModel::SetBreakIntervalsOfVehicle
, which lets you add break intervals — time periods when a vehicle cannot perform any tasks (such as traveling or visiting a node). For an example that uses this option, see cvrptw_with_breaks.cc
برنامه ریزی
- Added support for more data formats in the parser for the Project Scheduling Library .
Sat solver
- The SAT solver's cumulative constraint now accepts optional intervals, created with the
NewOptionalInterval
method. For an example, see https://github.com/google/or-tools/blob/master/examples/cpp/rcpsp_sat.cc . - You can now solve a Max-SAT (maximum satisfiability_ problem by specifying the objective as a weighted sum of literals. It is no longer necessary to create an intermediate integer variable.
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.
نشست
- Added support for constraint programming.
- Implemented the diffn , cumulative , circuit and subcircuit constraints.
- Implemented the overload checker on the basis of Max Energy Filtering Algorithm for Discrete Cumulative Constraint .
- Implemented the all different bound consistent propagator which implements better propagation for the AllDifferent constraint.
FlatZinc
- Implemented a SAT solver for FlatZinc problems.
Constraint Solver
- Implemented the following constraints :
- atMost : Sets an upper bound for the count of variables that are equal to a given value.
- MakePathPrecedenceConstraint and MakePathTransitPrecedenceConstraint : Implement the precedence constraint for a set of pairs.
مسیریابی
- 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.
نشست
- Implemented SolveWithPresolve method to simplify the usage of the SAT presolver.
- Regrouped search utils in src/sat/util.h|cc.
- Implemented SMT (Lazy Clause Generation) scheduling constraints: see jobshop_sat.cc and weighted_tardiness_sat.cc .
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.
مستندات
- Please check the new documentation.
آوریل 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 .
وابستگی های به روز شده
- Use protobufs instead of flags in the Constraint Programming and routing libraries. See http://or-tools.blogspot.fr/2016/02/heads-up-upcoming-incompatibility-in.html for details.
دسامبر 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
, andexamples/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.