ملاحظات إصدار أدوات OR

تسرد هذه الصفحة التغييرات التي تم إجراؤها على أدوات OR، بما في ذلك الميزات الجديدة وإصلاحات الأخطاء والتحسينات على التعليمات البرمجية وإجراءات التثبيت.

إذا واجهت مشكلات في تثبيت أدوات OR، فراجع قسم تحديد المشاكل وحلّها في تعليمات تثبيت OR-الأدوات. إذا لم تكن مشكلتك مدرجة هناك، يُرجى التحقق من المشاكل على GitHub، أو عدم التردد في فتح مشكلة جديدة، وسيسرّنا تقديم المساعدة لك.

في ما يلي ملاحظات إصدار OR-الأدوات، بدءًا من أحدث إصدار.

آذار (مارس) 2024

الإعلان عن طرح الإصدار 9.9 من "أدوات OR"

أطلقنا الإصدار 9.9 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

يمكنك العثور على ملاحظة الإصدار على github

تشرين الثاني (نوفمبر) 2023

الإعلان عن طرح الإصدار 9.8 من "أدوات OR"

أصدرنا الإصدار 9.8 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • أضف Python 3.12.
  • إضافة دعم لنظام التشغيل Ubuntu 23.10

Linear Solver

  • منفذ ModelBuilder إلى .Net
  • عليك إعادة تسمية "LogCallback" إلى "MbLogCallback" لتجنُّب الاصطدام بمعاودة الاتصال بسجلّ SAT.
  • Extend ModelBuilder API:
    • أضف قيود المؤشر.
    • إضافة دعم التلميح.
    • إضافة استنساخ نموذج.

اختيار الرياضيات

  • إعادة صياغة كبيرة:

يتم الآن تخطيط المسار

  • إضافة حالة ROUTING_OPTIMAL.
  • جعل RoutingModel غير قابل للنسخ أو قابل للنقل
  • إصلاح بعض التكرارات اللانهائية في عوامل تشغيل البحث المحلي
  • إضافة بنية PickupDeliveryPosition داخلية
  • أضِف طريقتَي IsPickup() وIsDelivery().

SAT

  • يمكنك تقليل بصمة الذاكرة بالنسبة إلى الطراز الكبير.
  • تحسين جدولة البحث.
  • أضف packing_precedences_lns.
  • تحسين وتحديد قفزة الاحتمالية.
  • وتحسين تسجيل presolve الخطي وتسجيل حلول presolve أفضل.
  • تحسين حلّ int_abs وint_mod وint_prod وlin_max
  • تحسين دعم Panda
  • إصلاح أخطاء قليلة.

سجلّ تغييرات GitHub

آب (أغسطس) 2023

الإعلان عن طرح الإصدار 9.7 من "أدوات OR"

أصدرنا الإصدار 9.7 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • Drop Centos-8 (EOL)
  • إفلات Debian 10
  • أسقِط Fedora [33, 36] (EOL).
  • إفلات Ubuntu 18.04 LTS (EOL).
  • إفلات Python 3.7 (EOL).
  • إيقاف إتاحة netcore3.1 في CMake (EOL)

أداة إنشاء النماذج باستخدام لغة بايثون

  • السماح باستخدام إطارات وسلاسل بيانات Pandas لإنشاء المتغيرات.
  • إكمال معلومات الكتابة

ميزة "منع فقدان البيانات"

  • تحديث مختلف.

CP-SAT

  • تحسينات في الأداء. (feasibility_jump، lin_max)
  • تحسين طريقة إدارة الاقتصاص والدمج
  • عامل جديد intent_shaving_search مكرس لتحسين الحد الأدنى للهدف (عند تقليصه)
  • كتابة التعليقات التوضيحية للغة بايثون cp_model.py
  • الدعم الجزئي التجريبي للبانداس في cp_model.py
  • العاملون الذين يستندون إلى طلبات البحث المحلي التجريبية:
    • تم التفعيل بالمَعلمات: num_violation_ls:xxx
    • محسَّن للنموذج الخطي (linear، bool_or، bool_and، at_most_one، exactly_one)
    • يعمل بشكل صحيح مع lin_max والمنتج والقسم
    • يدعم no_overlap، تراكمي، دائرة، مسارات
    • تم الإيقاف مع no_overlap_2d
    • العدد المقترَح لمعامِلات ls: num_workers -> num_violation_ls: (8, 1), (16, 2) (24, 3), (32, 4)

سجلّ تغييرات GitHub

آذار (مارس) 2023

الإعلان عن طرح الإصدار 9.6 من "أدوات OR"

أطلقنا الإصدار 9.6 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • إضافة دعم Fedora 37 و38.
  • إفلات 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)
  • النص 20220623.1 -> 20230105.0
  • النموذج الأوّلي v21.5 -> v21.12
  • SWIG 4.1.1
  • Java JNA 5.11.0 -> 5.12.1

Bazel

  • إضافة دعم pybind11.
  • إضافة دعم برنامج تضمين جافا.

أدوات الحلّ

  • PDLP: برنامج تضمين dd python.
  • CP-SAT: تحسينات في الأداء
  • GLOP: تعديل presolve
  • مصمم النماذج: بايثون: تحسين دعم مكتبة نامبي
  • التوجيه: تحسينات في الأداء (بحث محلي)

المشاكل المعروفة:

  • CP-SAT: يؤدي تجاهل الأداة الفرعية pseudo_costs إلى عرض المعلَمات غير الصالحة (راجِع #3706).

تشرين الثاني (نوفمبر) 2022

الإعلان عن طرح الإصدار 9.5 من "أدوات OR"

أصدرنا الإصدار 9.5 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • إضافة دعم Debian Sid.
  • إضافة دعم Fedora 35 و36.
  • إضافة دعم Ubuntu 22.10.
  • إفلات Python 3.6 على نظام التشغيل macOS
  • إضافة دعم Python 3.11.

تحديث التبعيات

  • النموذج الأوّلي v19.4 -> v21.5.
  • أداة حلّ SCIP v800 -> v801.

CP-SAT

  • تم إدخال تحسينات على طريقة الحل: max(صفيف) والقيود المنطقية والقيود الخطيّة.
  • يجب أن يكون البحث المتداخل حتميًا بالتوازي.
  • القطع الخطية: تنظيف المربع وقطع int_prods؛ إعادة كتابة مسار القطع.
  • نموذج إدخال بصمة الإصبع وحله (يظهران في السجلّ).
  • تحسينات على الجدولة.
  • مجموعة إصلاحات الأخطاء المعتادة (أعطال أثناء حل المشكلة، أو تعطُّل في اللقطات، أو حلول غير قابلة للتطبيق، أو نموذج غير قابل للتطبيق في LNS).

GOP

  • قم بتسريع العملية من خلال إعادة كتابة الجبر الخطي، وكذلك قاعدة التحديد المحوري.

Linear Solver

  • أضِف knapsack_interface.cc.
  • انقِل model_builder API ضمن الدليل inline_solver (الرؤوس والنماذج).
  • توفير الدعم لـ Gurobi 10.

يتم الآن تخطيط المسار

  • تحرير محلل لغوي قليل لتحديات التوجيه المختلفة

آب (أغسطس) 2022

الإعلان عن طرح الإصدار 9.4 من "أدوات OR"

أطلقنا الإصدار 9.4 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

الأنظمة الأساسية

  • إضافة دعم Debian-10 (راجِع #3029).
  • إضافة دعم Ubuntu 22.04 LTS (راجع #3276). ملاحظة: لن يتوفر لديك دعم .Net 3.1 (راجع dotnet/core#7038).
  • إزالة دعم Ubuntu 21.10.

ميزات متنوّعة

  • يمكنك تقسيم الأرشيف حسب اللغات وإضافة CMake config إلى لغة 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 (presolve, cuts)

آذار (مارس) 2022

الإعلان عن طرح الإصدار 9.3 من "أدوات OR"

أطلقنا الإصدار 9.3 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • يُرجى إيقاف دعم Debian-10.
  • إسقاط دعم Ubuntu-16.04.
  • إفلات الإصدار 4.5.2 من إطار NET.

تحديث التبعيات

  • أضِف Eigen 3.4.0.
  • إضافة Google re2 2021-11-01.
  • النموذج الأوّلي 3.19.1 -> 3.19.4.
  • SCIP 7.0.1 -> v800.

Python

  • أضف pybind11.

الميزات

  • أضِف ميزة PDLP كميزة تجريبية.
  • أضف MathOpt على أنّه تجريبي.

CP-SAT

  • تمت إعادة تسمية بعض واجهات برمجة التطبيقات للحفاظ على الاتّساق، مثل LinearExpr.ScalProd. -> LinearExpr.WeightedSum..
  • إضافة AddAtLeastOne/AddAtMostOne/AddExactlyOne طريقة
  • أضِف AddMultiplicationConstraint(z, x, y) بكل اللغات.
  • أضِف AddMultipleCircuit() بكل اللغات.

C++

  • IntVar(BoolVar) فاضح.
  • تمت إزالة LinearExpr::Add* واستبدالها بعامل التشغيل، مثل LinearExpr +=.
  • إضافة عوامل حسابية إلى التعبير الخطي
  • تمت إزالة LinearExpr::BooleanSum/BooleanScalProd. يمكنك استخدام Sum/WeightedSum.
  • أضِف CpModelBuilder::FixVariable() التي تستبدل نطاق المتغيّر بقيمة واحدة.

Java

  • أعِد كتابة LinearExpr، وأضِف فئة إنشاء تزايدي: LinearExpr.newBuilder().add(x).addSum(<array of variables>).build().
  • تابِع استخدام C++ API: Circuit وMultipleCircuit وCumulative وReservoir وAllowedAssignment وForbiddenAssignment يعرض الآن صفًا متخصّصًا مع واجهة برمجة تطبيقات تزايدية لإضافة متغيّرات وعبارات وطلبات جديدة...

C

  • توثيق جميع الطرق.
  • تابِع استخدام C++ API: Circuit وMultipleCircuit وCumulative وReservoir وAllowedAssignment وForbiddenAssignment يعرض الآن صفًا متخصّصًا مع واجهة برمجة تطبيقات تزايدية لإضافة متغيّرات وعبارات وطلبات جديدة...
  • أضِف فئة LinearExprBuilder لإنشاء التعبيرات بشكل تزايدي.

نظام التصميم

CMake

  • تتطلب على الأقل CMake >= 3.18.

الماركة

  • استخدِم الآن الإصدار المستنِد إلى CMake داخليًا

كانون الأول (ديسمبر) 2021

الإعلان عن طرح الإصدار 9.2 من "أدوات OR"

أطلقنا الإصدار 9.2 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • إضافة دعم لنظام التشغيل Ubuntu 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، يتم تجميع Coin-OR في -O1 لتجنُّب تعطُّلها.

يتم الآن تخطيط المسار

  • تحسين الفلاتر
  • قم بتحسين الإرشادات الإرشادية للحل الأول.
  • تحسين مواضع الفواصل الزمنية

CP-SAT

التغييرات التي قد تؤدي إلى عطل

  • المخزن المؤقت للبروتوكولات الأساسي غير متوافق مع الإصدارات السابقة. يجب إعادة إنشاء أي مخزن بروتوكولات مؤقت مخزن باستخدام واجهات برمجة التطبيقات لأداة الإنشاء المحدثة (في 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++ عاملَي التشغيل + و* لإنشاء التعبيرات.

التحسينات

  • تم تحسين رمز presolve.
  • أداة فحص النموذج الأكثر تحديدًا.
  • إعادة صياغة قيد الخزان
  • أضِف خطوطًا حماسية للقيد no_overlap_2d.
  • تحسين الاسترخاء الخطي لقيود الترميز (literal implies var == value).

الطرق التي تم إيقافها نهائيًا والتي تمت إزالتها

  • تم إيقاف BooleanSum وBooleanScalProd في لغة C++. ما عليك سوى استخدام Sum وScalProd.
  • تمت إزالة C++ AddLinMinEquality وAddLinMaxEquality. ما عليك سوى استخدام AddMinEquality وAddMaxEquality.

حالات عدم التوافق المستقبلية

  • في مرحلة ما في المستقبل، سنعيد كتابة طبقة نمذجة Java لتكون أقرب إلى طبقة C++.
  • في طبقة نمذجة C++، سنجعل عامل IntVar(BoolVar var) صريحًا.
  • نسعى إلى جعل واجهة برمجة التطبيقات python API PEP 8 متوافقة (باستخدام أسماء snake_case). وفي حال حدوث ذلك، سنوفّر ملف sed لنقل الرمز.

نظام التصميم

Bazel

  • إصلاح إصدار Windows.

CMake

  • إضافة خيار "FETCH_PYTHON_DEPS" (القيمة التلقائية: ON).
  • يمكنك إضافة دعم اختياري لأداة حل GPCK (القيمة التلقائية هي -DUSE_GLPK=OFF).

Python

  • إمكانية دعم الأعداد الصحيحة من numpy في معظم واجهة برمجة التطبيقات CP-SAT API
  • حلّ مشكلة __version__ غير المتوفّرة.

أيلول (سبتمبر) 2021

الإعلان عن طرح الإصدار 9.1 من "أدوات OR"

أطلقنا الإصدار 9.1 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • Python: استخدِم صورة manylinux2014 (راجِع PEP 599).
  • بايثون: إضافة الدعم لنظام التشغيل arc64 linux باستخدام صورة manylinux2014_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.
  • python: استخدام warning في cp_model.py (راجِع #2530).
  • python: absl-py 0.11 -> 0.13.

CMake

  • مطلوب إرسال الحدّ الأدنى للإصدار من الإصدار 3.14 -> 3.15 (راجِع #2528).
  • Python: bump الحدّ الأدنى المطلوب للإصدار 3.14 -> 3.18 (راجِع #2774).

الماركة

تم إيقاف الإصدار المستند إلى الإنشاء. يُرجى الانتقال إلى CMake أو Bazel للإنشاء من المصدر.

Java

  • تحسين قوة برنامج تحميل المكتبة الأصلية (راجِع #2742).
  • إصلاح تعطُّل أداة JVM Garbage Collector عند التخلص من نموذج التوجيه أو أداة حلّ القيود (راجِع #2091) (راجِع #2466).
  • إصلاح أعطال معاودة الاتصال في تسجيل CP-SAT عند استخدام عدة عاملين (راجِع #2775)

CP-SAT

  • يمكنك تحسين مدى قوة رمز LNS (راجِع #2525).
  • تحسين رمز الجدولة: طرق جديدة في المصنع لإنشاء فواصل زمنية ثابتة الحجم، وأساليب بحث جديدة، وحلّ محسَّن، وأساليب خطية جديدة
  • تحسين رمز التوجيه: نظام LNS جديد ومخصّص
  • تحسين أداة التحقق من النموذج. لقد أصبح الآن أكثر تحركًا، لا سيما التجاوز المحتمل.
  • تحسين رمز MIP: حلّ أفضل وتحسينات متعدّدة على الاسترخاء الخطي لنماذج MIP وCP
  • تحسين تنوع عمليات البحث: عند استخدام أكثر من 12 موظفًا، أضف العاملين المخصصين لتحسين الحد الأدنى للهدف.
  • التغيير إلى رمز التوازي: ستستخدم أداة الحلّ الآن تلقائيًا جميع النوى المتاحة. استخدِم السمة num_search_parameters لتحديد مستوى الشمولية.
  • إيقاف SearchAllSolutions وSolveWithSolutionCallback
  • Python API: يمكن اتّخاذ المزيد من عمليات التحقّق المفصّلة عند استخدام var == ... أو var != ... خارج مكالمة model.Add().

نيسان (أبريل) 2021

الإعلان عن طرح الإصدار 9.0 من "أدوات OR"

أطلقنا الإصدار 9.0 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

التعديلات المتعلقة بالاعتمادية

  • تم تحديث Abseil-cpp 20200923.3 إلى 20210324.1 LTS.
  • Protobuf 3.15.3 تم تحديثه إلى 3.15.8.
  • Java: jna-platform تم تحديث الإصدار 5.5.0 إلى 5.8.0

Java

إصلاح الأخطاء

  • تحسين سلاسل المحادثات المتعددة عند استخدام أداة حلّ CP-SAT (راجِع #1588).
  • إصلاح دعم برامج تضمين Python في std::vector&ltstd::string&gt (راجِع #2453).
  • أعِد صياغة دعم CPLEX (راجِع #2470).

تغيير قد يؤدي إلى عطل معروف

  • أضِف إذن الوصول إلى السجلّ في Python وJava وNet. (راجِع #2245).
  • استبدال جميع أنواع Google المخصّصة بأنواع Google الواردة في cstdint.

CP-SAT

  • تم إيقاف الطرق SearchForAllSolutions() وSearchAllSolutions() وSolveWithSolutionCallback() نهائيًا. يُرجى استخدام Solve() بدلاً منها.
  • تحسين دعم عوامل التشغيل القياسية في بايثون. ويمكن أن يؤدي ذلك إلى تعطُّل الرمز الحالي غير الصحيح.

آذار (مارس) 2021

الإعلان عن طرح الإصدار 8.2 من "أدوات OR"

أصدرنا الإصدار 8.2 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

التعديلات المتعلقة بالاعتمادية

  • تم تحديث Abseil-cpp 20200923.2 إلى 20200923.3 LTS.
  • Protobuf 3.14.0 تم تحديثه إلى 3.15.3.

يتم الآن تخطيط المسار

  • تمت إضافة "RoutingModel.RegisterTransitMatrix()" و"RoutingModel.RegisterUnaryTransitVector()".
  • غيِّر إرجاع RoutingModel.AddVectorDimension() وRoutingModel.AddMatrixDimension() إلى std::pair&ltint, bool&gt الذي يكون int هو رقم تعريف مقيّم النقل العام.

ديسمبر 2020

الإعلان عن طرح الإصدار 8.1 من "أدوات OR"

أصدرنا الإصدار 8.1 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

التعديلات المتعلقة بالاعتمادية

  • تم تحديث Abseil-cpp 20200923 إلى 20200923.2 LTS.
  • Protobuf 3.13.0 تم تحديثه إلى 3.14.
  • توفير الإصدار 9.1.0 من Gurobi
  • إفلات تبعية GLog (يتم استبدالها بتطبيق مخصّص اعتمادًا على علامات abseil-cpp)
  • إفلات تبعية GFlag (تم استبدالها بمكوِّن علامات abseil-cpp)

إصلاح الأخطاء

  • إصلاح الاحتساب المزدوج لترخيص Gurobi العائم (راجِع #2227)
  • إصلاح إصدار Windows (راجِع #2200).

تشرين الأول (أكتوبر) 2020

الإعلان عن طرح الإصدار 8.0 من "أدوات OR"

أصدرنا الإصدار 8.0 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • دعم إضافي للغة Python 3.9 (#2187)
  • تم إيقاف الدعم للغة Python 3.5 (#2186) <!-- في انتظار الدعم Microsoft dotnet-sdk، يمكن إصداره بعد طرحه...
    • تمت إضافة الدعم لنظام التشغيل Ubuntu 20.10 (#2188) -->
  • تم إيقاف الدعم لنظام التشغيل Ubuntu 16.04 LTS (#2188)
  • تم إيقاف الدعم لنظام التشغيل Ubuntu 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

  • أصلِح إيقاف دعم 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.

الماركة

  • تتطلب Make >= 4.3 (استخدام دالة إجراء التقييم).
  • تتطلب CMake >= 3.14 (استخدام خيار CMake --verbose).
  • يمكنك إضافة خيار لإيقاف دعم SCIP باستخدام -DUSE_SCIP=OFF (راجِع #2134).
  • إضافة خيار لإيقاف دعم CLP وCBC باستخدام -DUSE_COINOR=OFF.

Java

  • OR-أدوات الآن تنشئ حزم Maven (راجِع #202).

إصلاح الأخطاء

  • إصلاح إصدار C++ وPython على FreeBSD (راجِع #2126).
  • إصلاح تصحيح الأخطاء في الإصدار على Windows (راجِع #2077).
  • إصلاح العطل الطويل بالتوازي على نظام CP-SAT على نظام التشغيل Windows (يُرجى الاطّلاع على #2001، #2019).

تمّوز (يوليو) 2020

الإعلان عن طرح الإصدار 7.8 من "أدوات OR"

أصدرنا الإصدار 7.8 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

التعديلات المتعلقة بالاعتمادية

  • تم دمج Gurobi 9.0.2 مسبقًا في البرامج الثنائية سابقة الإنشاء. وسيبحث عن مكتبة gurobi 90 المشتركة في مسار التثبيت الافتراضي لأدوات تثبيت Gurobi على نظام التشغيل MAC OS X وWindows، أو في دليل GUROBI_home.
  • تم دمج SCIP 7.0.1 الآن في البرامج الثنائية التي تم إنشاؤها مسبقًا. يُرجى التأكد من الامتثال لترخيص SCIP قبل استخدامه.
  • تمت إضافة الدعم للإصدار الاختياري Xpress Solver 8.9.0.

Linear Solver

  • تمت إضافة طريقة LinearSolver::CreateSolver() ثابتة لتبسيط عملية التأكّد من إتاحة الخلفيات للحلّ الخطّي المُدمج. يمكن استخدام هذه الميزة في جميع اللغات.

إصلاح الأخطاء

  • تم إصلاح إصدار CMake استنادًا إلى FreeBSD.
  • تم إصلاح ترتيب CP-SAT في عملية إنشاء القطع التراكمية.
  • تم إصلاح تسرُّب ذاكرة أداة الحلّ الخطي في برنامج تضمين Net.

حزيران (يونيو) 2020

الإعلان عن طرح الإصدار 7.7 من "أدوات OR"

أصدرنا الإصدار 7.7 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

التعديلات المتعلقة بالاعتمادية

  • تم تحديث Abseil-cpp b832dce إلى c51510d (LTS 20200225.2).
  • Protobuf 3.11.4 تم تحديثه إلى 3.12.2.

ميزات وتحسينات جديدة

  • تعرض أداة حلّ CP-SAT الآن القيمة Optimal بدلاً من Feasible في نموذج مستوى الرضا (أي بدون هدف).
  • تمت إضافة مضخة الاحتمالات الإرشادية من منتدى MIP.

إصلاح الأخطاء

تم إصلاح عطل في سلاسل المحادثات المتعددة عبر CP-SAT (يُرجى الاطّلاع على #2005).

نيسان (أبريل) 2020

الإعلان عن طرح الإصدار 7.6 من "أدوات OR"

أصدرنا الإصدار 7.6 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

الميزات الجديدة CP-SAT

لقد أضفنا الميزات الجديدة التالية إلى أداة حل CP-SAT:

  • إدارة محسنة لخفض التخطيطات لقوائم LPs.
  • أدوات تصحيح الأخطاء.

التعديلات المتعلقة بالاعتمادية

تم تحديث Abseil-cpp 8ba96a8 إلى b832dce (LTS 20200225).

إصلاح الأخطاء

  • تم إصلاح خطأ CP-SAT UNSAT في presolve (راجِع #1908).
  • تم إصلاح عنوان URL swigwin.exe.
  • إصلاح إدارة خريطة أنماط SWIG لـ Java و .Net.

كانون الثاني (يناير) 2020

الإعلان عن طرح الإصدار 7.5 من أدوات OR

أصدرنا الإصدار 7.5 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • دعم إضافي للغة Python 3.8 (#1719)
  • تم إيقاف تجميع الدعم من مصادر في Visual Studio 2017 (#1852).
  • تم تحديث الدعم من Centos 7 إلى Centos 8 (#1827).

تعديل التبعية

  • protobuf، الإصدار 3.10.0 تم تحديثه إلى الإصدار 3.11.2 (#1829).

إصلاح الأخطاء

تم إصلاح المشاكل التالية في الإصدار 7.5 من "أدوات OR" (للاطّلاع على قائمة كاملة، يُرجى الاطّلاع على الإصدار 7.5 من المعالم الرئيسية).

وعلى وجه الخصوص:

  • جارٍ تحميل المجموعة الثابتة راجع #1421.
  • تم الاطّلاع على طريقتَي GetStartIndex() وGetEndIndex() في RouteIndexManager (#1843).
  • تم إصلاح SWIG لإزالة الطرق المعطلة (#1838، #1276).

تشرين الأول (أكتوبر) 2019

الإعلان عن طرح الإصدار 7.4 من أدوات OR

أصدرنا الإصدار 7.4 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

ميزات وتحسينات جديدة

  • تتحقق أداة حل CP-SAT الآن من القيود التي لا تدعم أساسيات التنفيذ. سيعرض مدقق النموذج خطأ قبل الحل إذا كان هذا القيد يحتوي على فرض حرفي.
  • بحث محلي أفضل وأسرع لمكتبة التوجيه.
  • أصبحت أداة حلّ المساواة بين نقاط الاتصال تتوافق الآن مع البرنامج الخارجي Xpress-MP. ستحتاج إلى إعادة إنشاء OR-الأدوات من المصدر لاستخدامها.
  • تمت إعادة كتابة بنية حزمة NuGet بالكامل. وعلى وجه التحديد، يدعم الآن البرنامج .NET أُطر العمل >= 4.5.2 على الأنظمة الأساسية لنظام التشغيل Windows.

النظام الأساسي المتوقّف نهائيًا

كما تم الإعلان في ملاحظات إصدار تموز (يوليو) 2019، لم تعد OR-Tools تدعم Python 2.7.

تعديل التبعية

تم تحديث Protobuf 3.9.0 إلى 3.10.0.

آب (أغسطس) 2019

الإعلان عن طرح الإصدار 7.3 من "أدوات OR"

أصدرنا الإصدار 7.3 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

النظام الأساسي المتوقّف نهائيًا

نحن بصدد إيقاف العمل بالإصدار 2.7 من Python للتوافق مع انتقال Google إلى Python 3. سيكون هذا هو الإصدار الأخير من أدوات OR التي تدعم لغة بايثون 2.7.

تعديل التبعية

تم تحديث Protobuf 3.8.0 إلى 3.9.0.

إصلاح الأخطاء

تم إصلاح المشاكل التالية في الإصدار 7.3 من أدوات OR. (للحصول على قائمة كاملة، يُرجى الاطّلاع على الإصدار 7.3 من Kanban).

وعلى وجه الخصوص:

  • تم إصلاح مشكلة الإرسال في init/int64 على Java (#1448
  • تم إصلاح عملية التحقّق من presolve عند معالجة القيود التراكمية الفارغة.

تمّوز (يوليو) 2019

الإعلان عن طرح الإصدار 7.2 من "أدوات OR"

أصدرنا الإصدار 7.2 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات النظام الأساسي

  • نحن بصدد إيقاف العمل بالإصدار 2.7 من Python للتوافق مع انتقال Google إلى Python 3. سيكون هناك إصدار واحد آخر على الأكثر من أدوات OR تدعم بايثون 2.7.
  • تم تحديث Ubuntu 18.10 إلى Ubuntu 19.04.
  • تم توفير إمكانية تجميع المحتوى من مصادر في Visual Studio 2019.
  • لم يعد Python 3.5 مدعومًا على Windows، يُرجى استخدام Python 3.6 أو إصدار أحدث.

تعديلات على التبعيات

  • نستهدف الآن الإصدار 2.10.3 من CBC.
  • نستهدف الآن Protobuf 3.8.0.

CP-SAT

  • لقد أجرينا تحسينات متعددة على البحث والتوازي والاسترخاء الخطي.
  • تمت إضافة واجهات برمجة التطبيقات LinearExpr.Sum() وLinearExpr.ScalProd() في بايثون.
  • تم إيقاف واجهات برمجة التطبيقات IntVar[].Sum() وIntVar[].ScalProd() في C#.
  • C++: تمت إزالة SolveWithModel() لكونه تكرارًا لـ SolveCpModel().
  • تمت إضافة طريقتي CpModel.addGreaterThan() وCpModel.addLessThan() إلى Java API.

أداة حلّ المساواة بين نقاط الاتصال

  • تمت إضافة MPSolver.SetHint() للغة Python وJava وC# (متوافقة مع SCIP وGurobi).
  • تمت إضافة MPSolver.SetNumThreads() للغة Python وJava وC# (محتوى متوافق مع CBC وGurobi وSCIP).
  • تمت إعادة كتابته لدعم SCIP 6.0.1.

المستندات المرجعية

  • لقد أضفنا كتيبات مرجعية تستند إلى الأكسجين وpdoc3 لجميع اللغات وجميع الأدوات (الخوارزميات والتوجيه والرسم البياني وline_solver وCP-SAT). راجع الأدلّة المرجعية للأدوات.
  • الوثائق المرجعية كاملة لـ C++ (جميع المنتجات) وCP-SAT (C++ وPython وJava).
  • نحن بصدد تصدير جميع وثائق C++ إلى بايثون وJava.
  • وثائق .NET غير موجودة، وليس لدينا حل في المستقبل المتوقع لتحسين ذلك. وقد احتفظنا بهذه البيانات لأنّه لا يزال يعرض واجهة برمجة التطبيقات المتاحة.

أيار (مايو) 2019

الإعلان عن طرح الإصدار 7.1 من "أدوات OR"

أصدرنا الإصدار 7.1 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات على التبعيات المطلوبة

يحتوي الإصدار 7.1 من OR-Tools على التبعيات الجديدة والمحدثة التالية:

  • تم تحديث الإصدار 0.3.5 من glog إلى الإصدار 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
  • تم تحديث الإصدار 2.10.14 من CoinUtils إلى الإصدار 2.11.1.

التغييرات في واجهة برمجة تطبيقات CP-SAT

تصف الأقسام التالية التغييرات التي تم إجراؤها على واجهة برمجة تطبيقات CP-SAT في الإصدار 7.1 من أدوات OR.

استخدام النطاق لإنشاء المتغيرات

توضح الأمثلة التالية كيفية إنشاء متغير عدد صحيح باستخدام نطاقات غير متجاورة. يحل ذلك محل الطريقة التي تمّت إزالتها NewEnumeratedIntVar(). هنا، يمكن أن يكون المتغير x أي مما يلي: 1 أو 3 أو 4 أو 6:

Python

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

C++

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

Java

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

C#

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

يمكن أيضًا إنشاء المتغيرات باستخدام قائمة من الفترات. أدناه، يتم تقييد المتغير x ليكون 1 أو 2 أو 4 أو 5 أو 6:

Python

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

C++

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

Java

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

C#

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

استخدام النطاق في التعبير الخطي

توضح الأمثلة التالية كيفية تحديد تعبير خطي على نطاق غير متجاورة. هنا، يتم تعريف التعبير الخطي line_expr في 5 و6 و8 و9 و10:

Python

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

C++

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

Java

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

Net.

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

استخدام أدوات مساعدة التعبير الخطي

توضح الأمثلة التالية كيفية استخدام الطرق المساعدة لإنشاء مجاميع ومنتجات عددية. إليك مثالًا نريد فيه x + y == 20 و4 * x + 2 * y = 56:\

Python

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);

Java

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

Net.

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

آذار (مارس) 2019

الإعلان عن طرح الإصدار 7.0 من OR-Tools

أصدرنا الإصدار 7.0 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب من تثبيت أدوات OR.

تغييرات على المنصات المتوافقة

لم يعد الإصدار 7.0 من OR-Tools متوافقًا مع الأنظمة الأساسية التالية:

  • Visual C++ 2015
  • الإصدار 14.04 من نظام التشغيل Ubuntu
  • Python 3.4 على Linux

إذا كنت تستخدم إحدى هذه الأنظمة الأساسية، لا يزال بإمكانك تثبيت OR-Tools v6.10.

تغييرات على التبعيات المطلوبة

يحتوي الإصدار 7.0 من OR-Tools على التبعيات الجديدة والمحدثة التالية:

تصف الأقسام التالية الميزات والتحسينات الجديدة في أدوات OR-7.0.

مدير فهرس جديد لبرامج التوجيه

في الإصدار 7.0 من OR-Tools، يجب أن تستخدم برامج توجيه المركبات سياسة RoutingIndexManager الجديدة. ويضمن ذلك أن تكون الفهارس العادية للمواقع الجغرافية متوافقة مع الفهارس الداخلية التي تستخدمها أداة الحلّ، كما يساعد في منع حدوث أخطاء في الرمز.

تتطلب علامة RoutingIndexManager الجديدة إجراء بعض التغييرات الطفيفة على برامج التوجيه، وسيتم توضيحها في الأقسام التالية:

تضمين/استيراد RoutingIndexManager

في OR-tools 7.0، يجب أن تتضمن برامج التوجيه في C++ وJava أو تستورد RoutingIndexManager كما هو موضح في الأمثلة أدناه:

C++

#include "ortools/constraint_solver/routing_index_manager.h"

Java

import com.google.ortools.constraintsolver.RoutingIndexManager;

لم تتغيّر عمليات الاستيراد من Python وC#.

إقرار RoutingIndexManager

في الإصدار 7.0 من أدوات OR، يجب أن تذكر برامج التوجيه RoutingIndexManager وأن تنشئ نموذج التوجيه، كما هو موضح في الأمثلة التالية:

Python

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

C++

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

Java

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

Net.

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

وسيطات RoutingIndexManager هي:

  • عدد المواقع الجغرافية
  • عدد المركبات
  • فهرس المستودع (موقع البداية والنهاية لجميع المركبات)

عمليات معاودة الاتصال

في الإصدار 7.0 من OR-أدوات، يجب استخدام RoutingIndexManager لإنشاء عمليات معاودة الاتصال، مثل معاودة الاتصال بالمسافة التي يتم تمريرها إلى أداة الحلّ. توضّح الأمثلة التالية كيفية إنشاء معاودة الاتصال بالمسافة.

Python

    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);

Java

    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);

Net.

        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 فهارس المواقع الجغرافية الداخلية التي يستخدمها الحلّ إلى الفهارس العادية لمصفوفة المسافة.

وبدلاً من تمرير طلب معاودة الاتصال مباشرةً إلى أداة الحلّ، كما في الإصدارات السابقة، عليك إنشاء transit&nbsp;callback&nbsp;index أولاً، وهو مرجع إلى طلب معاودة الاتصال وإرسال ذلك إلى أداة الحلّ (في هذه الحالة، يُرجى إرسال SetArcCostEvaluatorOfAllVehicles في هذه الحالة).

الأبعاد

توضّح الأمثلة التالية كيفية إنشاء بُعد للطلبات والسعة، والذي يتم استخدامه لحل مشكلة توجيه المركبات ذات الإمكانيات العالية.

Python

    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");

Java

    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");

Net.

        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");

حلول الطباعة

في الإصدار 7.0 من OR-tools، يجب استخدام RoutingIndexManager لعرض مسارات المركبات في حل. توضح الأمثلة التالية كيفية طباعة الحلول بجميع اللغات المتاحة.

Python

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";
}

Java

  /// @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");
  }

Net.

    /// <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) مع إمكانية استلام الطلبات وتوصيلها

يوفر الإصدار 7.0 من OR-أدوات دعمًا لحل مشكلات توجيه المركبات (VRP) من خلال عمليات الاستلام والتسليم، حيث يكون الهدف هو العثور على أقصر الطرق لأسطول من المركبات التي تنقِل العناصر وسلّمها في مواقع مختلفة. لقد أعددت المشكلة بشكل مشابه لـ VRP العادي، ولكن بالإضافة إلى ذلك، حدد زوجًا من (i, j) من المواقع لكل عنصر، حيث i هو موقع الاستلام وj هو موقع التسليم. تعرض أداة حلّ التوجيه مسارات المركبات، بحيث يكون كل زوج من (i, j) وi وj على المسار نفسه، وتزور المركبة i قبل j.

للاطّلاع على مثال لحلّ هذا النوع من المشاكل، راجِع توجيه المركبات باستخدام خدمات الاستلام والتسليم.

دعم دوال lambda

يتضمن الإصدار 7.0 من OR-أدوات الآن دعمًا لدوال lambda في C# وJava (بالإضافة إلى C++ وPython، والتي كانت مدعومة بالفعل). توفر دوال Lambda طريقة ملائمة لتحديد عمليات معاودة الاتصال في برامج التوجيه. ومع ذلك، يمكنك تحديد معاودة الاتصال باستخدام الدوال القياسية إذا شعرت أن ذلك يجعل التعليمة البرمجية أكثر قابلية للقراءة.

توضح أمثلة معاودة الاتصال في C# وJava أعلاه كيفية تحديد عمليات معاودة الاتصال باستخدام دوال lambda.

تشرين الثاني (نوفمبر) 2018

الإعلان عن إطلاق الإصدار 6.10

أصدرنا الإصدار 6.10 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

تصف الأقسام التالية الميزات والتحسينات الجديدة في الإصدار 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
راجِع بدء استخدام أدوات OR للحصول على تعليمات محدّدة حول تشغيل البرامج حسب اللغة.

دعم لـ SCIP 6.0.0

توفر أدوات OR الآن الدعم لـ SCIP 6.0.0.

البرامج الثنائية

تم إنشاء التوزيعات الثنائية باستخدام Java JDK 8 (JDK 7 لنظام Ubuntu 14.04).

أداة حل CP-SAT

تحديث واجهة برمجة التطبيقات

  • أضف C++ CP-SAT CpModelBuilder API.

أمثلة

تم نقل بعض الأمثلة.

  • نقل أمثلة المنتدى إلى examples/contrib
  • نقل بعض الأمثلة إلى ortools/<var>component</var>/samples (مثل ortools/linear_solver/samples/simple_program.java)

أيلول (سبتمبر) 2018

الإعلان عن طرح الإصدار 6.9

لقد أطلقنا OR-أدوات الإصدار 6.9. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

التبعيات المحدثة

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

أداة حل CP-SAT

  • التغييرات التي طرأت على واجهة برمجة التطبيقات - يمكنك الاطّلاع على التفاصيل الكاملة هنا:
  • إعادة تسمية SolveWithSolutionObserver إلى SolveWithSolutionCallback في بايثون.
  • أعد تسمية NewSolution إلى OnSolutionCallback في الفئة CpSolverSolutionCallback في بايثون. يوضح المثال التالي الطريقة الجديدة لإنشاء معاودة الاتصال بالحل في 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

  • اعرض StopSearch في معاودة الاتصال بالحل في Python وJava وC#. يمكنك الاطّلاع على المستندات هنا.

  • عرِّف ModelStats وCpSolverResponseStats في Python وJava وC#.

  • تحسين وثائق Python docstring. يمكنك الاطّلاع على المستندات هنا.

  • تعديلات على تنفيذ Java لواجهة أداة الحل وكتاب الطبخ

  • تنفيذ باقي القسمة

  • تغيير تنفيذ الخزان: أضِف واجهة برمجة تطبيقات باستخدام القيمة المنطقية لتحديد أحداث استنزاف/تعبئة اختيارية.

Linear Solver

  • اعرض InterruptSolve باستخدام Java وC#.

أداة حلّ CP

  • إظهار مخرج SolutionCollector في C#

Python

  • توفير الدعم لـ Python 3.7.
  • عند إنشاء المحتوى من المصدر: ننصحك بتفضيل python3 على python2 عند رصد لغة بايثون.

NET.

  • أكمل إعادة كتابة طبقة .NET.
  • يُرجى تقديم حزمة Google.OrTools NetStandard 2.0 Nuget المتوافقة مع معرّف وقت التشغيل win-x64 وlinux-x64 وosx-x64.
  • توفير حزمة Nuget لـ Google.OrTools.FSharp.
  • أضف ملف المشروع لجميع أمثلة NET.
  • تعديل جميع أمثلة نصوص F# ( .fsx) إلى مشروع F# عادي (.fs)
  • يمكنك إضافة مستندات حول إنشاء إصدار حزمة NET هنا.

فلاتزنك

  • إضافة دعم للمجموعات في Flazinc (باستخدام nosets.mzn).

المساهمات

تموز (يوليو) 2018

الإعلان عن طرح الإصدار 6.8

وقد أطلقنا OR-أدوات الإصدار 6.8. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

الإعلان عن أداة حلّ CP-SAT

إنّ أداة حلّ CP-SAT هي أداة جديدة لبرمجة القيود. أداة حلّ CP-SAT هي أسرع من أداة حلّ CP-SAT الأصلي، ويجب استخدامها لحلّ مسائل CP.

للحصول على أمثلة تستخدم أداة حلّ CP-SAT، يمكنك الاطّلاع على دليل الأمثلة على GitHub للعثور على الملفات التي تحتوي أسماؤها _sat.

سيستمر الاحتفاظ بأداة حلّ CP الأصلية لفترة من الوقت لإتاحة الرمز الحالي، ولكن تم إيقافها نهائيًا.

خيارات جديدة لأداة حلّ CP-SAT

الخيارات التالية لأداة حلّ CP-SAT هي جديدة في هذا الإصدار:

  • البحث عن الحي المحلي (LNS): استخدِم الخيار SatParameters.use_lns لتفعيل LNS.
  • البحث الموازي: استخدِم الخيار SatParameters.num_search_workers لتفعيل عدة سلاسل محادثات أثناء البحث. يمكن أن تحتوي كل سلسلة على معلَمات مختلفة وبذور عشوائية مختلفة. هذا يزيد من التنوع، واحتمالية أن تجد سلسلة محادثات واحدة على الأقل حلولاً.

تحسينات في الأداء على أدوات الحلّ

لقد أجرينا تحسينات على الأداء على أدوات حلّ CP-SAT وGlop.

آذار (مارس) 2018

الإعلان عن طرح الإصدار 6.7

أصدرنا الإصدار 6.7 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب لتثبيت أدوات OR.

تحديث التبعيات المطلوبة

  • Protobuf 3.5.0 -> 3.5.1.

ميزات متنوّعة

  • قاعدة إعادة البناء لإعداد عملية دمج abseil-cpp.
  • استخدام خدمات Travis CI وAppveyor للتكامل المستمر (CI).

SAT

  • تحسين الأداء.
  • لتحسين واجهة برمجة تطبيقات بايثون.
  • أضِف واجهة برمجة تطبيقات C# والمعروفة أيضًا باسم CpSolver.cs (EXPERIMENTAL).

غلوب

  • إعادة بناء التعليمات البرمجية
  • تحسين الأداء.

CMake Support (تجريبي)

  • إضافة دعم C++ OR-أدوات CMake.
  • القدرة على إنشاء أدوات OR كمشروع CMake مستقل.
  • القدرة على دمج أدوات OR في مشروع CMake الحالي.
  • إضافة Python OR-tools CMake-based إصدار.
  • إنشاء حزمة بايثون (عجلة) باستخدام CMake.

المساهمات

  • إصلاح إعادة تعريف unsock2.h على النوافذ. شكرًا لـ فلورنت تولين دي ريفارول.
  • إضافة دعم F# (تجريبي) شكرًا لـ ماثيو مور. ملاحظة: لا تتوفر هذه الميزة إلا مع أداة إنشاء الملفات Makefile.
  • إضافة NET Standard Support (EXPERIMENTAL). شكرًا لـ زياد المالكي. ملاحظة: لا تتوفر هذه الميزة إلا مع أداة إنشاء الملفات Makefile.

تشرين الثاني (نوفمبر) 2017

الإعلان عن طرح الإصدار 6.6

لقد أطلقنا OR-أدوات الإصدار 6.6. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

تعديلات على التبعيات المطلوبة

  • 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

  • تحسين أداة حلّ SAT الداخلي، وإصلاح الأخطاء المختلفة
  • أضِف قيد VRP إلى أداة حل SAT المرتبطة بأداة حل LP.
  • عليك تغيير أداة مراقبة الحل في أداة حلّ SAT إلى اعتبار CpSolverResponse معلَمة.
  • تحسين استخدام Glop في أداة SAT Solver.
  • تسريع اتصال SAT-LP.
  • أضِف قيد الخزان إلى تنسيق النموذج SAT cp_model.

اختبار SAT/Python

أمثلة

  • أعِد كتابة rcpsp_parser لاستخدام تنسيق ProtoBuf لتخزين المشكلة.
  • تحسين محلّل RCPSP

تشرين الأول (أكتوبر) 2017

الإعلان عن طرح الإصدار 6.5

لقد أطلقنا OR-أدوات الإصدار 6.5. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

تغيير في المنصات

  • تم دمج وحدة pypi py3-ortools في وحدة ortools. توجد الآن وحدة واحدة فقط وهي: "ortools".
  • التنسيق الرئيسي لوحدات بايثون هذه هو ملفات العجلات الآن. لتثبيت OR-أدوات للغة بايثون من pypi، شغِّل pip install ortools. يجب تثبيت إصدار حديث من pip (>= 9.0.1). من المفترض أن يؤدي هذا إلى سحب أحدث إصدار (الإصدار 6.5).

Bug fixed

يتم الآن إنشاء ملف بروتوبوف jar بشكل صحيح باستخدام الفئات المجمّعة.

أمثلة جديدة

  • تمت المساهمة بالمزيد من أمثلة F# في دليل الأمثلة/fsharp (شكرًا مرة أخرى لـ "ماثيو مور").
  • تمت أيضًا المساهمة بأمثلة على MIP في Java (شكرًا يا داريان).

أيلول (سبتمبر) 2017

الإعلان عن طرح الإصدار 6.4

وقد أطلقنا OR-أدوات الإصدار 6.4. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

تغيير في المنصات

  • يتم الآن عرض وحدات Pypi على أنظمة التشغيل Linux كملفات عجلات باستخدام علامة Manylinux1. شكرًا لـ فيديريكو فيكاريلي. بفضل هذا التغيير، تم التراجع عن الوحدات التي تم تقديمها في إصدار تموز (يوليو) 2017 من نظام التشغيل لكل Linux.

الميزات الجديدة

  • تم تحسين طريقة التحجيم المستخدمة داخل GLOP.
  • إصلاح التفاف المقيّمين في مكتبة التوجيه C#. شكرًا لـ DevNamedZed.
  • تحسين أداء حلّ الزينة المسطحة للنماذج الكبيرة.
  • استخدم اختبار SAT المدعوم تلقائيًا بـ Flazinc.
  • تحسين أداء النهج المستند إلى "الأساسية" لأداة حل SAT.
  • إصلاح الخلل في خوارزمية التعيين الخطي الذي أخفق بشكل غير صحيح.
  • تمت إضافة أمثلة عن F# في ortools/examples/fsharp.
  • إزالة التحقق من العقوبات الموجبة في مكتبة التوجيه.

آب (أغسطس) 2017

الإعلان عن طرح الإصدار 6.3

لقد أطلقنا قسم OR-أدوات الإصدار 6.3. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

ملفات جديدة للتنزيل

ملفات عجلة بايثون لنظام التشغيل Linux متاحة الآن للتنزيل في صفحة إصدار أدوات OR، بالإضافة إلى أحدث الإصدارات من جميع عمليات التنزيل.

أداة حلّ Minizinc

تحتوي هذه النسخة على رمزَي Sat وflazinc النهائي الذي تم إرساله لتحدّي Minizinc 2017.

تموز (يوليو) 2017

الإعلان عن طرح الإصدار 6.2

لقد أطلقنا قسم OR-أدوات الإصدار 6.2. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

تغيير في المنصات

  • نتيح الآن استخدام عدة توزيعات ثنائية لنظام Linux (Ubuntu 14.04 و16.04 و17.04 وCentOS 7 وDebian 9).
  • تشتمل وحدات Pypi على أنظمة التشغيل Linux الآن على علامة تصف التوزيع (ubuntu-14.04, ubuntu-16.04, ubuntu-17.04, centos-7, debian-9).

الميزات الجديدة

لقد أضفنا دعمًا لـ Docker لإنشاء أدوات لينكس. انتقِل إلى or-tools/tools/docker وألقِ نظرة على Makefile للاطّلاع على الأهداف المحتملة (make archive وmake pypi وmake pypi3).

ستؤدي هذه الأوامر إلى إنشاء دليل فرعي export وإضافة عناصر ثنائية فيه.

حزيران (يونيو) 2017

الإعلان عن طرح الإصدار 6.1

أصدرنا الإصدار 6.1 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

تغيير في المنصات

  • تتوفّر أداة Visual Studio 2017، بينما لم يعُد Visual Studio 2013 متاحًا.
  • يتوافق التطبيق مع الإصدار 10.9 من نظام التشغيل macOS والإصدارات الأحدث.

الميزات الجديدة

لقد أضفنا تنسيقًا جديدًا للنموذج الأوّلي لأداة حلّ CP-SAT. اطّلع على ortools/sat/cp_model.proto لتحديد نموذجك، وortools/sat/cp_model_solver.h لحل مشكلتك.

إصلاح الأخطاء

المشكلة رقم 420: لقد أصلحنا سمة __version__ المفقودة في وحدات Python pypi على جميع الأنظمة الأساسية.

أيّار (مايو) 2017

الإعلان عن طرح الإصدار 6.0

لقد أطلقنا OR-أدوات الإصدار 6.0. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

هيكل دليل جديد في C++

لقد غيَّرنا بنية المصدر/التضمين لأدوات OR-أدوات عند استخدام C++. والهدف هو توفير تغليف أفضل لملفات C++. كما أن لها فائدة مواءمة هياكل دليل C++ وPython.

  • تم تغيير اسم src/ إلى ortools/.
  • تمت إضافة البادئة ortools الآن إلى جميع أوامر #include في ملفات C++. تغيّر اسم #include "constraint/constraint_solver.h" ليصبح الآن #include "ortools/constraint/constraint_solver.h".

الميزات الجديدة

  • دعم Bazel يمكنك الآن إنشاء "أدوات OR" باستخدام bazel، وهي أداة إنشاء من Google. وتعمل على نظام التشغيل Linux وMac OS X. بعد تنزيل الإصدار 0.4.5 من Bazel أو إصدار أحدث، يمكنك تغيير الدليل إلى أو-tools وإنشاء الأمثلة: bazel build examples/cpp/....

يتم الآن تخطيط المسار

لقد طبّقنا دعمًا للاستراحة (على سبيل المثال، وقت تعطل المركبة بسبب تناول السائقين للغداء) في مكتبة التوجيه. يتم عرض هذه الميزة في مثال cvrptw_with_breaks.cc.

دعم SCIP

يتوافق برنامج تضمين أداة الحلّ الخطي الآن مع SCIP 4.0. تحتاج الآن إلى إنشاء SCIP أولاً، ثم إخبار أو أدوات أنك ستستخدمه. يمكنك الاطّلاع على التعليمات هنا.

دعم GLPK

كما غيرنا طريقة الإصدار باستخدام GLPK. يُرجى الاطّلاع على المعلومات الواردة هنا.

عمليات تنظيف

  • لقد أزلنا كل استخدامات التجزئة_map وتجزئة_set في قاعدة رموز C++ لأنهما تم إيقافها نهائيًا. تم استبدالها بـ unorder_map وunorder_set من STL.
  • تنظيف ملفات C# makefiles، مقدمة من Michael Powell.

كانون الثاني (يناير) 2017

الإعلان عن طرح الإصدار 5.1

أصدرنا الإصدار 5.1 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

الميزات الجديدة

جارٍ التثبيت

يتم الآن تخطيط المسار

تنفيذ خوارزمية لحساب الحد الأدنى لـ "هيلد كارب" لمشكلات مندوب مبيعات السفر المتماثل. يمكّنك هذا من حساب حد أعلى للفجوة بين تكلفة الحل الذي يُحتمل أن يكون غير مثالي وتكلفة الحل الأمثل.

  • تمت إضافة طريقة جديدة إلى مكتبة توجيه المركبات، وهي RoutingModel::SetBreakIntervalsOfVehicle، تتيح لك إضافة فواصل break، وهي الفترات الزمنية التي لا يمكن للمركبة فيها تنفيذ أي مهام (مثل السفر أو زيارة عقدة). للاطلاع على مثال يستخدم هذا الخيار، راجع cvrptw_with_breaks.cc

الجدولة

أداة حلّ السبت

  • يقبل القيد التراكمي لأداة حل SAT الآن الفواصل الزمنية الاختيارية، التي يتم إنشاؤها باستخدام الطريقة NewOptionalInterval. على سبيل المثال، يُرجى الاطّلاع على https://github.com/google/or-tools/blob/master/examples/cpp/rcpsp_sat.cc.
  • يمكنك الآن حل مسألة Max-SAT (الحد الأقصى لمشكلة الرضا_عن طريق تحديد الهدف كمجموع مرجّح للقيم الحرفية). لم يعد من الضروري إنشاء متغير عدد صحيح متوسط.

تحسينات الأداء

  • أداة حلّ SAT: تم تحسين أداء الأداة، لا سيّما للقيد التراكمي.
  • أداة حلّ Glop: تم تحسين المتانة الرقمية لأداة حلّ Glop، والتي تعرض الآن حلولاً أكثر دقة للمسائل الرقمية الصعبة.
  • أداة حلّ فلاتزنك
  • تم تحسين أداء الواجهة الخلفية Sat بشكل كبير للترجمة الفورية من الزنك.
  • تم تبسيط واجهة C# Flazinc. للحصول على مثال للواجهة الجديدة، اطّلِع على https://github.com/google/or-tools/blob/master/examples/csharp/csfz.cs.

إصلاح الأخطاء

  • قد يؤدي استخدام PathCheapestArc في نماذج التوجيه مع مركبة واحدة وقيود جانبية في بعض الأحيان إلى تشغيل أداة الحلّ لفترة طويلة جدًا. تم إصلاح ذلك من خلال مراعاة القيود الجانبية بشكل صحيح.
  • في Java، قد تتعطل أداة حل التوجيه أحيانًا عند حل مشكلات توجيه المركبة. تم إصلاح هذه المشكلة في أحدث إصدار.

‏‫تشرين الثاني (نوفمبر)‬ 2016

الإعلان عن طرح الإصدار 5.0

لقد أطلقنا OR-أدوات الإصدار 5.0. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

أمثلة على التنفيذ

  • تم تقديم أهداف خاصة باللغة لتسهيل تجميع برامجك وتشغيلها، بالإضافة إلى الأمثلة التي تأتي مع أدوات OR.

السبت

FlatZinc

أداة حلّ القيود

يتم الآن تخطيط المسار

  • تم تنفيذ AddAtSolutionCallback، وهي استدعاء يتم طلبه في كل مرة يتم فيها العثور على حل أثناء البحث.
  • تمت إزالة البنى الإنشائية بدون مستودع RouteModel. أصبح تحديد مستودع واحد على الأقل في نموذج التوجيه إلزاميًا الآن.

أيلول (سبتمبر) 2016

الإعلان عن طرح الإصدار 4.4

لقد أطلقنا OR-أدوات الإصدار 4.4. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

السبت

  • واجهة برمجة تطبيقات الجدولة الموسّعة وأمثلة معدّلة (weighted_tardiness_sat وjobshop_sat) لاستخدامها.

رسم بياني للدالة

  • تمت إضافة سمات المكرر إلى فئات الرسم البياني.

توزيع الأدوات "أو"

  • أصبحت حزمة Nuget متاحة مرة أخرى.

آب (أغسطس) 2016

الإعلان عن طرح الإصدار 4.3

لقد أطلقنا OR-أدوات الإصدار 4.3. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

أداة حلّ القيود

  • تم تنفيذ طريقة NotBetween لتقييد المتغيّر ليكون خارج فاصل زمني معيّن.

تحديد أفضل مسار

  • تمت إضافة تحليل للنموذج للتحقق من قيود NotMember الحالية كما هو موضّح في هذا المثال، واستخدامها في فلاتر البحث المحلي.
  • تمت إضافة ملف تعريف البحث المحلي.
  • إصلاح عمليات النقل المحلية

أداة حلّ المساواة بين نقاط الاتصال

  • إعداد تقارير حالة SCIP ثابت.

السبت

  • تم تنفيذ طريقة SolveWithPresolve لتبسيط استخدام أداة SAT presolver.
  • يتم استخدام البحث الذي تمت إعادة تجميعه في src/sat/util.h|cc.
  • تم تنفيذ قيود جدولة SMT (إنشاء العبارات البطيئة): يُرجى الاطّلاع على jobshop_sat.cc وweighted_tardiness_sat.cc.

غلوب

  • تحسين الأداء من خلال استغلال الندرة في مراحل أكثر من العمليات الحسابية

فلاتزنك

  • تم إصلاح الأخطاء التي تم العثور عليها في تحدّي minizinc.

Lp_data

  • استمرار تبسيط النماذج في المكرّرات

توزيع الأدوات "أو"

  • تتم الآن تسمية مجموعات C# بقوة بشكل افتراضي.
  • تمت الترقية إلى Protobuf3.0.0.
  • تمت إضافة نص برمجي بلغة Python للتحقق من تبعيات الأرشيف OR-tools.

تموز (يوليو) 2016

الإعلان عن طرح الإصدار 4.2

أصدرنا الإصدار 4.2 من OR-Tools. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

أداة حلّ القيود (التوجيه)

  • يمكن الآن تعريف الفصل باستخدام عدد القيم الفريدة للسمة، وهو الحد الأقصى لعدد العُقد التي يمكن أن تكون نشطة ضمن هذا الفصل. على سبيل المثال، إذا أضفت فاصلاً بين عُقد n وعقدة قيمة k، فعندئذٍ يُسمح بأن تكون العُقد k بين عُقد n نشطة. يمكنك استخدام التعريف الجديد لـ AddDisjunction لإجراء ذلك.
  • تمت إضافة الدعم لتقسيمات متعددة لكل عقدة. على سبيل المثال، يمكنك الآن إضافة عقدة، N1، إلى العديد من الفواصل (D1..Dm). وهذا يزيد من فرصة أن يكون نشطًا داخل أي منها. تم تقديم خوارزمية بحث للتوجيه الأسرع للمشكلات المتعلقة بالنوافذ الزمنية المنفصلة.
  • تمت إضافة معلَمات أداة حل القيود إلى معلَمات نموذج التوجيه وlog_search لتوجيه معلَمات البحث.
  • تتميز خوارزمية البحث المحلي بأنها أسرع في حل المشكلات ذات النوافذ الزمنية المنفصلة. يمكنك الاطّلاع على مثال cvrp_disjoint_tw.cc للمزيد من التفاصيل.

Glop (التحسين الخطي)

  • تم تقديم خوارزمية بسيطة أسرع.

توزيع الأدوات "أو"

  • أرشيف واحد لكل نظام أساسي، بدلاً من أرشيفات فردية لكل من C++ وJava و .Net. لا تزال أرشيفات Python مستضافة على pypi.
  • في نظام التشغيل pypi، تم التبديل إلى وحدات العجلات (whl) في نظامي التشغيل Mac OS X وWindows. تم تقديم مخطط ترقيم MAJOR.MINOR. تستخدم هذه الأرقام أسماء الأرشيف، والإصدار المخزّن في المكتبات المشتركة لنظام التشغيل Mac OS X، ووحدات بايثون، ومجموعات .NET. الإصدار الأول الذي سنطرحه هو الإصدار 4.2 من هذا المخطط.

حزيران (يونيو) 2016

الإعلان عن إصدار الإصدار 2016-06

لقد طرحنا الإصدار 2016-06 من أدوات OR-أدوات. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

أداة حلّ القيود

  • تمت إزالة معظم مثيلات عمليات الاستدعاء (src/base/callback.h) من مكتبة "CP".
  • تمت إضافة NotMemberCt (لا يمكن أن ينتمي المتغير إلى مجموعة من الفترات).

مكتبة التوجيه

  • تغيير غير متوافق: لتحديد سعة المركبات في AddDimensionWithVehicleCapacity، عليك الآن ضبط مصفوفة (متجه في c++ ) بدلاً من معاودة الاتصال.

GOP

  • تغيير التمثيل الداخلي للمصفوفة المتفرقة.
  • تحسينات في الأداء.

رسم بياني للدالة

  • أعِد كتابة خوارزميات Dijkstra و Bellman-Ford لاستبدال عمليّات الاستدعاء في std::function (C++).
  • تغيير واجهة برمجة التطبيقات لتنفيذ رسم بياني مختلف عند التكرار فوق الأقواس والعُقد.

السبت

  • إزالة الطريقة الأساسية غير المستخدَمة (عُقد الحل)
  • تمت إضافة كاتب المسودة للاطّلاع على الأدلة حول عدم الرضا.
  • إضافة معالج أوّلي.

موسيقى البوب

  • إضافة أحياء جديدة

أمثلة

  • c++: التخلص من قارئ الملفات في الأمثلة.
  • البيانات: إضافة مسائل جدولة جهاز واحد.

الوثائق

نيسان (أبريل) 2016

الإعلان عن إصدار الإصدار 2016-04

لقد طرحنا الإصدار 2016-04 من أدوات OR-أدوات. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

التبعيات المحدثة

كانون الأول (ديسمبر) 2015

الإعلان عن طرح الإصدار 2015-12

وقد أطلقنا الإصدار 2015-12 من أدوات OR-أدوات. لتحديث الإصدار لديك، راجِع القسم المناسب ضمن تثبيت أدوات OR.

أداة حلّ القيود

  • تم قطع التوافق في "بحث الأحياء المجاورة" في أداة حل CP (يُرجى الاطّلاع على examples/cpp/ls_api.cc وexamples/python/pyls_api.py وexamples/csharp/csls_api.cs وexamples/com/google/ortools/sample/LsApi.java للاطّلاع على واجهة برمجة التطبيقات الجديدة).
  • تم تنظيف التفاف بايثون. إتاحة القرار المخصّص في أداة حلّ CP (يُرجى الاطّلاع على examples/test/test_cp_api.py للاطّلاع على واجهة برمجة التطبيقات قيد التنفيذ).
  • تحسينات مختلفة وإصلاحات للأخطاء

أيلول (سبتمبر) 2015

الإعلان عن الإصدار الأول على github.

سيتم تخزين الملفات هناك من الآن فصاعدًا.

فلاتزنك

  • تمت إضافة الأرشيفات الثنائية إلى مترجم فلازنك (يُرجى الاطّلاع على www.minizinc.org).
  • يحتوي على بعض الإصلاحات للإصدار المستخدَم في الاختبار.