บันทึกประจำรุ่นของ "OR-Tools"

หน้านี้แสดงการเปลี่ยนแปลงใน "หรือ" ของเครื่องมือ ซึ่งรวมถึงฟีเจอร์ใหม่ การแก้ไขข้อบกพร่อง และการปรับปรุงโค้ดและขั้นตอนการติดตั้ง

หากพบปัญหาในการติดตั้ง OR-เครื่องมือ ให้ตรวจสอบส่วน การแก้ปัญหา ในคำแนะนำในการติดตั้ง "หรือ" หากปัญหาของคุณไม่อยู่ในรายการนี้ โปรดตรวจสอบปัญหาใน GitHub หรือเปิดปัญหาใหม่ เรายินดีให้ความช่วยเหลือคุณ

ต่อไปนี้คือบันทึกประจำรุ่นสำหรับ "หรือ" "เครื่องมือ" ซึ่งเริ่มต้นด้วยรุ่นล่าสุด

มีนาคม 2024

ประกาศการเปิดตัว OR-Tools v9.9

เราได้เปิดตัว OR-Tools v9.9 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

คุณดูบันทึกประจำรุ่นใน GitHub

พฤศจิกายน 2023

ประกาศการเปิดตัว OR-Tools v9.8

เราได้เปิดตัว OR-Tools v9.8 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • เพิ่ม Python 3.12
  • เพิ่มการสนับสนุนสำหรับ Ubuntu 23.10

ตัวช่วยโปรแกรมเชิงเส้น

  • พอร์ต ModelBuilder ไปยัง .Net
  • เปลี่ยนชื่อ LogCallback เป็น MbLogCallback เพื่อไม่ให้เกิดการทับซ้อนกับ SAT LogCallback
  • ขยาย ModelBuilder API:
    • เพิ่มข้อจำกัดของตัวบ่งชี้
    • เพิ่มการสนับสนุนการแนะนำ
    • เพิ่มการโคลนโมเดล

ตัวเลือกทางคณิตศาสตร์

  • ปรับปรุงให้ดีขึ้น

การกำหนดเส้นทาง

  • เพิ่มสถานะ ROUTING_OPTIMAL
  • ทำให้ RoutingModel คัดลอกหรือย้ายไม่ได้
  • แก้ไขการวนซ้ำที่ไม่สิ้นสุดในโอเปอเรเตอร์การค้นหาในเครื่อง
  • เพิ่มโครงสร้างภายใน PickupDeliveryPosition
  • เพิ่มเมธอด IsPickup() และ IsDelivery()

SAT

  • ลดการใช้หน่วยความจำสำหรับโมเดลขนาดใหญ่
  • ปรับปรุงการค้นหาตามกำหนดการ
  • เพิ่ม packing_precedences_lns
  • เพิ่มประสิทธิภาพและแก้ไขการเพิ่มขึ้นของความเป็นไปได้
  • เพิ่มประสิทธิภาพตัวปรับแต่งเชิงเส้นและการกำหนดค่าการบันทึกล่วงหน้าได้ดีขึ้น
  • ปรับปรุงคำนำหน้าสำหรับ int_abs, int_mod, int_prod และ lin_max
  • ปรับปรุงการรองรับ Panda
  • แก้ไขข้อบกพร่องเล็กน้อย

บันทึกการเปลี่ยนแปลงของ GitHub

สิงหาคม 2023

ประกาศการเปิดตัว OR-Tools v9.7

เราได้เปิดตัว OR-Tools v9.7 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • Drop Centos-8 (EOL)
  • วาง Debian 10
  • วาง Fedora [33, 36] (EOL)
  • วาง Ubuntu 18.04 LTS (EOL)
  • Drop Python 3.7 (EOL)
  • ปิดใช้การรองรับ netcore3.1 ใน CMake (EOL)

งูหลามสร้างโมเดล

  • อนุญาตให้ใช้ DataFrames และ Series ของ Pandas สร้างตัวแปร
  • กรอกข้อมูลการพิมพ์

PDLP

  • อัปเดตต่างๆ

CP-SAT

  • การปรับปรุงประสิทธิภาพ (feasibility_jump, lin_max)
  • ปรับปรุงการจัดการการตัด
  • ผู้ปฏิบัติงาน Context_shaving_search ใหม่ที่มีไว้เพื่อปรับปรุงขอบเขตล่างของวัตถุประสงค์ (เมื่อลดขอบเขต)
  • การพิมพ์คำอธิบายประกอบสำหรับ Python cp_model.py
  • การรองรับแพนด้าบางส่วนแบบทดลองใน cp_model.py
  • ผู้ปฏิบัติงานที่ละเมิดการค้นหาในท้องถิ่นแบบทดลอง:
    • เปิดใช้งานโดยมีพารามิเตอร์: num_violation_ls:xxx
    • เพิ่มประสิทธิภาพสำหรับรูปแบบเชิงเส้น (linear, bool_or, bool_and, at_most_one, exactly_one)
    • ทำงานได้อย่างถูกต้องกับ lin_max, product, division
    • สนับสนุนข้อมูลไม่ซ้อนทับ, ข้อมูลสะสม, วงจร, เส้นทาง
    • ถูกปิดใช้โดยไม่มี_overlap_2d
    • จำนวนผู้ปฏิบัติงาน ls ที่แนะนำ: num_workers -> num_violation_ls: (8, 1), (16, 2) (24, 3), (32, 4)

บันทึกการเปลี่ยนแปลงของ GitHub

มีนาคม 2023

ประกาศการเปิดตัว OR-Tools v9.6

เราได้เปิดตัว OR-Tools v9.6 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง 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
  • สวิก 4.1.1
  • Java JNA 5.11.0 -> 5.12.1

Bazel

  • เพิ่มการสนับสนุน pybind11
  • เพิ่มการรองรับ Java Wrapper

เครื่องมือแก้โจทย์

  • PDLP: dd Wrapper ของ Python
  • CP-SAT: ปรับปรุงประสิทธิภาพ
  • GLOP: ปรับแต่งล่วงหน้า
  • ModelBuilder: Python: ปรับปรุงการรองรับตัวเลข
  • การกำหนดเส้นทาง: การปรับปรุงประสิทธิภาพ (การค้นหาในท้องถิ่น)

ปัญหาที่ทราบแล้ว

  • CP-SAT: การละเว้นตัวละลายย่อย pseudo_costs จะแสดงผลพารามิเตอร์ที่ไม่ถูกต้อง (ดู #3706)

พฤศจิกายน 2022

ประกาศการเปิดตัว OR-Tools v9.5

เราได้เปิดตัว OR-Tools v9.5 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง 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

  • การปรับปรุงที่กำหนดล่วงหน้า: สูงสุด(อาร์เรย์) ข้อจำกัดบูลีน ข้อจำกัดเชิงเส้น
  • การค้นหาแบบแทรกสลับควรเป็นการค้นหาเชิงกำหนดแบบคู่ขนาน
  • การตัดแบบเชิงเส้น: การทำความสะอาดแบบสี่เหลี่ยมจัตุรัสและการตัดแบบ int_prod เขียนไปป์ไลน์ที่ตัดใหม่
  • โมเดลและโซลูชันการป้อนข้อมูลด้วยลายนิ้วมือ (แสดงในบันทึก)
  • การปรับปรุงการกำหนดเวลา
  • การแก้ไขข้อบกพร่องทั่วไป (เกิดข้อขัดข้องระหว่างการแก้ไขล่วงหน้า การขัดข้องในการตัด โซลูชันที่ทําไม่ได้ โมเดลที่ทําไม่ได้ใน LNS)

กลอป

  • เร่งความเร็วโดยการเขียนพีชคณิตเชิงเส้นใหม่ รวมถึงกฎการเลือก Pivot

ตัวช่วยโปรแกรมเชิงเส้น

  • เพิ่ม knapsack_interface.cc
  • ย้าย model_builder API ภายใต้ไดเรกทอรี linear_solver (ส่วนหัวและตัวอย่าง)
  • เพิ่มการรองรับ Gurobi 10

การกำหนดเส้นทาง

  • ปลดปล่อยโปรแกรมแยกวิเคราะห์บางรายการสำหรับความท้าทายในการกำหนดเส้นทางที่หลากหลาย

สิงหาคม 2022

ประกาศการเปิดตัว OR-Tools v9.4

เราได้เปิดตัว OR-Tools v9.4 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

แพลตฟอร์ม

  • เพิ่มการรองรับ Debian-10 (ดู #3029)
  • เพิ่มการสนับสนุน Ubuntu 22.04 LTS (ดู #3276) หมายเหตุ: ไม่สนับสนุน .Net 3.1 (ดูที่ dotnet/core#7038)
  • นำการรองรับ Ubuntu 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

เราได้เปิดตัว OR-Tools v9.3 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • วางการสนับสนุน Debian-10
  • วางการรองรับ Ubuntu-16.04
  • วาง .NET Framework 4.5.2

การอัปเดตการขึ้นต่อกัน

  • เพิ่ม 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

  • เปลี่ยนชื่อ API บางรายการเพื่อความสอดคล้อง เช่น 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 แสดงผลคลาสเฉพาะทางที่มี API ที่เพิ่มขึ้นเพื่อเพิ่มตัวแปร ข้อกำหนด และความต้องการใหม่...

C

  • บันทึกวิธีการทั้งหมด
  • ทำตาม 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-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • เพิ่มการสนับสนุนสำหรับ 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
  • Python: บวกตัวเลข >= 1.13.3
  • ใน MacOS คอมไพล์ Coin-OR ใน -O1 เพื่อหลีกเลี่ยงข้อขัดข้องในนักวิ่ง

การกำหนดเส้นทาง

  • การปรับปรุงตัวกรอง
  • ปรับปรุงการเรียนรู้ของโซลูชันแรก
  • ปรับปรุงตำแหน่งช่วงพัก

CP-SAT

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ

  • บัฟเฟอร์โปรโตคอลที่สำคัญใช้ร่วมกับเวอร์ชันก่อนหน้าไม่ได้ คุณจะต้องสร้างบัฟเฟอร์โปรโตคอลที่จัดเก็บไว้อีกครั้งด้วย API เครื่องมือสร้างที่อัปเดตแล้ว (ใน C++, Python, Java และ .NET)
  • โดยเฉพาะอย่างยิ่ง โปรโตคอลของช่วงเวลานั้นสะอาดตาเมื่อเรานำช่องเก่าออก (เริ่มต้น ขนาด และสิ้นสุด) และเปลี่ยนชื่อช่องใหม่ (โดยใช้ _view) เพื่อใช้ชื่อของช่องที่นำออก

ฟีเจอร์ใหม่

  • ข้อจำกัด all_different, reservoir, modulo, multiplication และ division จะยอมรับนิพจน์แบบ affine (a * var + b) ในทุกตำแหน่งที่ต้องมีตัวแปรจำนวนเต็ม
  • วัตถุประสงค์ยอมรับค่าสัมประสิทธิ์จุดลอยตัว (ดูคลาส DoubleLinearExpr ใน C++/Java/.NET ดูตัวอย่าง knapsack_2d_sat.py ใน Python)
  • ข้อจำกัด no_overlap_2d รองรับช่วงเวลาที่ไม่บังคับ
  • C++ API จะใช้โอเปอเรเตอร์ + และ * เพื่อสร้างนิพจน์

การปรับปรุง

  • ปรับปรุงโค้ดเบื้องต้น
  • เครื่องมือตรวจสอบโมเดลแบบละเอียดยิ่งขึ้น
  • แก้ไขข้อจำกัดอ่างเก็บน้ำ
  • เพิ่มการตัดอย่างกระตือรือร้นสำหรับข้อจำกัด no_overlap_2d
  • ปรับปรุงการผ่อนปรนข้อจำกัดในการเข้ารหัสเชิงเส้น (literal implies var == value)

วิธีการที่เลิกใช้งานและนำออกแล้ว

  • เลิกใช้งาน C++ BooleanSum และ BooleanScalProd แล้ว เพียงใช้ Sum และ ScalProd
  • นำ C++ AddLinMinEquality และ AddLinMaxEquality ออกแล้ว เพียงใช้ AddMinEquality และ AddMaxEquality

ความไม่เข้ากันในอนาคต

  • ในอนาคต เราจะเขียนเลเยอร์การสร้างแบบจำลอง Java ใหม่ให้ใกล้เคียงกับเลเยอร์ C++ มากขึ้น
  • ในเลเยอร์การสร้างแบบจำลอง C++ เราจะทำให้ IntVar(BoolVar var) เป็นตัวแปรที่ชัดเจน
  • เรากำลังพิจารณาเกี่ยวกับการทำให้ Python API สำหรับ PEP 8 เป็นไปตามข้อกำหนด (โดยใช้ snake_cases) หากเป็นเช่นนี้ เราจะให้ไฟล์ sed เพื่อพอร์ตโค้ด

สร้างระบบ

Bazel

  • แก้ไขบิลด์ของ Windows

CMake

  • เพิ่มตัวเลือก FETCH_PYTHON_DEPS (ค่าเริ่มต้นคือ ON)
  • เพิ่มการสนับสนุนที่ไม่บังคับสำหรับเครื่องมือแก้โจทย์ GPLK (ค่าเริ่มต้น -DUSE_GLPK=OFF)

Python

  • รองรับจำนวนเต็ม numpy ใน CP-SAT API ส่วนใหญ่
  • แก้ไข __version__ ที่ขาดหายไป

กันยายน 2021

ประกาศการเปิดตัว OR-Tools v9.1

เราได้เปิดตัว OR-Tools v9.1 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • Python: ใช้รูปภาพ manylinux2014 (ดู PEP 599)
  • Python: เพิ่มการรองรับ aarch64 linux โดยใช้อิมเมจ manylinux2014_aarch64
  • .Net: เพิ่มการรองรับ .Net 5.0

การอัปเดตการขึ้นต่อกัน

  • abseil-cpp 20210324.1 -> 20210324.2
  • Protobuf 3.15.8 -> 3.18.0
  • SCIP 7.0.1 -> ต้นฉบับ
  • การทดสอบ Google 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: เพิ่มเวอร์ชันขั้นต่ำ 3.14 -> 3.18 (ดู #2774)

ยี่ห้อ

เลิกใช้งานบิลด์ที่อิงตามความตั้งใจแล้ว โปรดย้ายข้อมูลไปยัง CMake หรือ Bazel เพื่อสร้างจากต้นทาง

Java

  • ปรับปรุงประสิทธิภาพของตัวโหลดไลบรารีในเครื่อง (ดู #2742)
  • แก้ไขข้อขัดข้องของเครื่องมือเก็บขยะของ JVM เมื่อโมเดลการกำหนดเส้นทางหรือเครื่องมือแก้ข้อจำกัดถูกกำจัด (ดู #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

ประกาศการเปิดตัว OR-Tools v9.0

เราได้เปิดตัว OR-Tools v9.0 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง 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

  • หรือตอนนี้เครื่องมือ "หรือ" พร้อมให้บริการแล้วใน Maven Central (โปรดดู com.google.ortools:ortools-java)

แก้ไขข้อบกพร่อง

  • ปรับปรุงเทรดหลายรายการเมื่อใช้ตัวแก้โจทย์ CP-SAT (ดู #1588)
  • แก้ไขการรองรับ Python Wrapper ของ std::vector&ltstd::string&gt (ดู #2453)
  • ปรับปรุงการรองรับ CPLEX (ดู #2470)

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบที่ทราบ

  • เพิ่มการเข้าถึงตัวบันทึกใน Python, Java และ .Net (ดู #2245)
  • แทนที่ประเภท Google ที่กำหนดเองทั้งหมดโดยประเภทที่มีให้ใน cstdint

CP-SAT

  • เลิกใช้งานเมธอด SearchForAllSolutions(), SearchAllSolutions() และ SolveWithSolutionCallback() แล้ว โปรดใช้ Solve() แทน
  • ปรับปรุงการรองรับโอเปอเรเตอร์มาตรฐานของ Python ซึ่งอาจทำให้โค้ดที่มีอยู่ไม่ถูกต้องเสียหาย

มีนาคม 2021

ประกาศการเปิดตัว OR-Tools v8.2

เราได้เปิดตัว OR-Tools v8.2 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง 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

ประกาศการเปิดตัว OR-Tools v8.1

เราได้เปิดตัว OR-Tools v8.1 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การอัปเดตการขึ้นต่อกัน

  • Abseil-cpp 20200923 อัปเดตเป็น 20200923.2 LTS
  • Protobuf 3.13.0 อัปเดตเป็น 3.14
  • เพิ่มการรองรับ Gurobi 9.1.0
  • ทิ้งทรัพยากร Dependency ของ GLog (แทนที่โดยการใช้งานที่กำหนดเองตามแฟล็ก abseil-cpp)
  • ทิ้งทรัพยากร Dependency ของ GFlag (แทนที่โดยคอมโพเนนต์แฟล็ก abseil-cpp)

แก้ไขข้อบกพร่อง

  • แก้ไขการนับใบอนุญาตแบบลอยของ Gurobi ซ้ำ (ดู #2227)
  • แก้ไขการสร้างหน้าต่าง (ดู #2200)

ตุลาคม 2020

ประกาศการเปิดตัว OR-Tools v8.0

เราได้เปิดตัว OR-Tools v8.0 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • เพิ่มการรองรับ Python 3.9 (#2187)
  • ยกเลิกการรองรับ Python 3.5 (#2186) <!-- กำลังรอการรองรับ Microsoftdotnet-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

  • "หรือ" สร้างแพ็กเกจ Maven แล้ว (ดู #202)

แก้ไขข้อบกพร่อง

  • แก้ไขบิลด์ C++ และ Python บน FreeBSD (ดู #2126)
  • แก้ไขการแก้ไขข้อบกพร่องบิลด์บน Windows (ดู #2077)
  • แก้ไขข้อขัดข้องเป็นเวลานานพร้อมกันใน CP-SAT ใน Windows (ดู #2001, #2019)

กรกฎาคม 2020

ประกาศการเปิดตัว OR-Tools v7.8

เราได้เปิดตัว OR-Tools v7.8 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การอัปเดตการขึ้นต่อกัน

  • 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() แบบคงที่เพื่อให้การสนับสนุนการตรวจสอบสำหรับแบ็กเอนด์เครื่องมือแก้โจทย์วิดีโอเชิงเส้นที่ผสานรวมทำได้ง่ายขึ้น ใช้งานได้กับทุกภาษา

แก้ไขข้อบกพร่อง

  • บิลด์ที่ใช้ CMake แบบคงที่บน FreeBSD
  • การแก้ไขการจัดเรียง CP-SAT ในการสร้างการตัดสะสม
  • แก้ไขการรั่วไหลของหน่วยความจำเครื่องมือแก้เชิงเส้นใน .Net Wrapper

มิถุนายน 2020

ประกาศการเปิดตัว OR-Tools v7.7

เราได้เปิดตัว OR-Tools v7.7 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การอัปเดตการขึ้นต่อกัน

  • Abseil-cpp b832dce อัปเดตเป็น c51510d (LTS 20200225.2)
  • Protobuf 3.11.4 อัปเดตเป็น 3.12.2

ฟีเจอร์ใหม่และการปรับปรุง

  • ตอนนี้เครื่องมือแก้โจทย์คณิต CP-SAT จะแสดงผล Optimal แทนที่จะเป็น Feasible ในโมเดลความพึงพอใจ (กล่าวคือ ไม่มีวัตถุประสงค์)
  • เพิ่มการเรียนรู้ของ Pump ความเป็นไปได้จากชุมชน MIP

แก้ไขข้อบกพร่อง

แก้ไขข้อขัดข้องของมัลติเทรด CP-SAT (ดู #2005)

เมษายน 2020

ประกาศการเปิดตัว OR-Tools v7.6

เราได้เปิดตัว OR-Tools v7.6 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

ฟีเจอร์ใหม่ของ CP-SAT

เราได้เพิ่มฟีเจอร์ใหม่ๆ ต่อไปนี้ลงในเครื่องมือแก้โจทย์ CP-SAT

  • ปรับปรุงการจัดการเครื่องบินตัดสำหรับ LP
  • เครื่องมือแก้ไขข้อบกพร่อง

การอัปเดตการขึ้นต่อกัน

Abseil-cpp 8ba96a8 อัปเดตเป็น b832dce (LTS 20200225)

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องของ CP-SAT UNSAT ใน Presolve (ดู #1908)
  • แก้ไข URL swigwin.exe
  • แก้ไขการจัดการ Typemap ของ SWIG สำหรับ Java และ .Net

มกราคม 2020

ประกาศการเปิดตัว OR-Tools v7.5

เราได้เปิดตัว OR-Tools v7.5 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • เพิ่มการรองรับ Python 3.8 (#1719)
  • ยกเลิกการรวบรวมการสนับสนุนจากแหล่งที่มาใน Visual Studio 2017 (#1852)
  • อัปเดตการสนับสนุนจาก Centos 7 เป็น Centos 8 (#1827)

การอัปเดตการขึ้นต่อกัน

  • protobuf v3.10.0 อัปเดตเป็น v3.11.2 (#1829)

แก้ไขข้อบกพร่อง

ปัญหาต่อไปนี้ได้รับการแก้ไขแล้วใน OR-Tools v7.5 (ดูรายการทั้งหมดได้ที่ Milestone v7.5)

โดยเฉพาะอย่างยิ่งฟีเจอร์ต่อไปนี้

  • การโหลดการประกอบที่แก้ไขแล้ว ดู #1421
  • เปิดเผยเมธอด GetStartIndex() และ GetEndIndex() ของ RouteIndexManager (#1843)
  • แก้ไข SWIG เพื่อนำเมธอดที่ใช้งานไม่ได้ออก (#1838, #1276)

ตุลาคม 2019

ประกาศการเปิดตัว OR-Tools v7.4

เราได้เปิดตัว OR-Tools v7.4 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

ฟีเจอร์ใหม่และการปรับปรุง

  • ตอนนี้เครื่องมือแก้โจทย์คณิต CP-SAT จะตรวจหาข้อจำกัดที่ไม่รองรับข้อความการบังคับใช้ เครื่องมือตรวจสอบโมเดลจะแสดงผลข้อผิดพลาดก่อนที่จะแก้ไข หากข้อจำกัดดังกล่าวมีค่าลิเทอรัลการบังคับใช้
  • การค้นหาภายในเครื่องที่ดีและรวดเร็วยิ่งขึ้นสำหรับไลบรารีการกำหนดเส้นทาง
  • ตอนนี้เครื่องมือแก้วิดีโอเชิงเส้นรองรับ Xpress-MP ซอฟต์แวร์ของบุคคลที่สามแล้ว คุณจะต้องสร้าง "หรือ-เครื่องมือ" ใหม่จากซอร์สเพื่อใช้งาน
  • สถาปัตยกรรมของแพ็กเกจ NuGet ได้รับการเขียนใหม่ทั้งหมด โดยเฉพาะตอนนี้ที่รองรับ .NET Framework >= 4.5.2 ในแพลตฟอร์ม Windows

แพลตฟอร์มที่เลิกใช้งาน

ตามที่ได้ประกาศในบันทึกประจำรุ่นเดือนกรกฎาคม 2019 OR-Tools จะไม่รองรับ Python 2.7 อีกต่อไป

การอัปเดตการขึ้นต่อกัน

Protobuf 3.9.0 ได้รับการอัปเดตเป็น 3.10.0

สิงหาคม 2019

ประกาศการเปิดตัว OR-Tools v7.3

เราได้เปิดตัว OR-Tools v7.3 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

แพลตฟอร์มที่เลิกใช้งาน

เรากำลังจะเลิกรองรับ Python 2.7 เพื่อให้สอดคล้องกับการย้ายไปใช้ Python 3 ของ Google นี่จะเป็นรุ่นสุดท้ายของ OR-เครื่องมือที่รองรับ Python 2.7

การอัปเดตการขึ้นต่อกัน

Protobuf 3.8.0 ได้รับการอัปเดตเป็น 3.9.0 แล้ว

แก้ไขข้อบกพร่อง

ปัญหาต่อไปนี้ได้รับการแก้ไขแล้วใน OR-Tools v7.3 (ดูรายการทั้งหมดได้ที่ Kanban v7.3)

โดยเฉพาะอย่างยิ่งฟีเจอร์ต่อไปนี้

  • แก้ไขปัญหาแคสต์ init/int64 ใน Java (#1448)
  • แก้ไขการตรวจสอบล่วงหน้าเมื่อประมวลผลข้อจำกัดสะสมที่ว่างเปล่า

กรกฎาคม 2019

ประกาศการเปิดตัว OR-Tools v7.2

เราได้เปิดตัว OR-Tools v7.2 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงของแพลตฟอร์ม

  • เรากำลังจะเลิกรองรับ Python 2.7 เพื่อให้สอดคล้องกับการย้ายไปใช้ Python 3 ของ Google จะมีรุ่น OR-เครื่องมือ อีกไม่เกิน 1 รุ่นที่รองรับ Python 2.7
  • อัปเดต Ubuntu 18.10 เป็น Ubuntu 19.04 แล้ว
  • เพิ่มการรองรับการรวบรวมจากแหล่งที่มาใน Visual Studio 2019
  • Windows ไม่รองรับ Python 3.5 อีกต่อไป โปรดใช้ Python 3.6 ขึ้นไป

การอัปเดตทรัพยากร Dependency

  • ตอนนี้เรากำหนดเป้าหมายไปที่ CBC 2.10.3
  • ตอนนี้เรากำหนดเป้าหมายเป็น Protobuf 3.8.0

CP-SAT

  • เราได้ปรับปรุงการค้นหา การทำงานพร้อมกัน และการผ่อนปรนแบบเชิงเส้นไว้หลายครั้ง
  • เพิ่ม API LinearExpr.Sum() และ LinearExpr.ScalProd() ใน Python
  • เลิกใช้งาน API 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

เอกสารประกอบอ้างอิง

  • เราได้เพิ่มคู่มืออ้างอิงที่ใช้ Doxygen และ pdoc3 สำหรับภาษาและเครื่องมือทั้งหมด (อัลกอริทึม การกำหนดเส้นทาง กราฟ พารามิเตอร์เชิงเส้น และ CP-SAT) ดูคู่มืออ้างอิงหรือคู่มือเครื่องมือ
  • มีเอกสารอ้างอิงสำหรับ C++ (ผลิตภัณฑ์ทั้งหมด) และ CP-SAT (C++, Python, Java) ครบถ้วน
  • ขณะนี้เรากำลังดำเนินการส่งออกเอกสาร C++ ทั้งหมดไปยัง Python และ Java
  • ไม่มีเอกสาร .NET และยังไม่มีโซลูชันในอนาคตอันใกล้ที่จะปรับปรุงเรื่องนี้ได้ เราได้เก็บ API ไว้เนื่องจากยังแสดง API ที่ใช้งานได้อยู่

พฤษภาคม 2019

ประกาศการเปิดตัว OR-Tools v7.1

เราได้เปิดตัว OR-Tools v7.1 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงทรัพยากร Dependency ที่จำเป็น

OR-Tools v7.1 มีทรัพยากร Dependency ใหม่และที่อัปเดตดังนี้

  • glog v0.3.5 ได้รับการอัปเดตเป็น v0.4.0
  • protobuf v3.6.1 อัปเดตเป็น v3.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

การเปลี่ยนแปลง CP-SAT API

ส่วนต่อไปนี้จะอธิบายการเปลี่ยนแปลงของ CP-SAT API ใน OR-Tools 7.1

การใช้โดเมนเพื่อสร้างตัวแปร

ตัวอย่างต่อไปนี้แสดงวิธีสร้างตัวแปรจำนวนเต็มที่มีโดเมนไม่ต่อเนื่อง วิธีนี้แทนที่เมธอด 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");

การใช้โดเมนในนิพจน์เชิงเส้น

ตัวอย่างต่อไปนี้แสดงวิธีจำกัดนิพจน์เชิงเส้นในโดเมนที่ไม่ต่อเนื่อง ในที่นี้ นิพจน์เชิงเส้น linear_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

ประกาศการเปิดตัว OR-Tools v7.0

เราได้เปิดตัว OR-Tools v7.0 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงในแพลตฟอร์มที่รองรับ

OR-Tools v7.0 จะไม่รองรับแพลตฟอร์มต่อไปนี้อีกต่อไป

  • ภาพ C++ 2015
  • Ubuntu 14.04
  • Python 3.4 บน Linux

หากใช้แพลตฟอร์มเหล่านี้ คุณจะยังคงติดตั้ง OR-Tools v6.10 ได้

การเปลี่ยนแปลงทรัพยากร Dependency ที่จำเป็น

OR-Tools v7.0 มีทรัพยากร Dependency ใหม่และที่อัปเดตดังนี้

ส่วนต่อไปนี้จะอธิบายฟีเจอร์ใหม่และการปรับปรุงใน OR-Tools 7.0

ตัวจัดการดัชนีใหม่สำหรับโปรแกรมการกำหนดเส้นทาง

ใน OR-Tools v7.0 โปรแกรมการกำหนดเส้นทางยานพาหนะต้องใช้ 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

ใน OR-Tools v7.0 โปรแกรมการกำหนดเส้นทางต้องประกาศ 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 คือ

  • จำนวนสถานที่
  • จำนวนยานพาหนะ
  • ดัชนีของดีโป (ตำแหน่งเริ่มต้นและสิ้นสุดสำหรับยานพาหนะทุกคัน)

โค้ดเรียกกลับ

ใน OR-Tools v7.0 คุณต้องใช้ 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");

โซลูชันการพิมพ์

ใน OR-Tools v7.0 คุณต้องใช้ 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 ด้วยบริการรับสินค้าและบริการจัดส่ง

OR-Tools v7.0 จะให้ความช่วยเหลือในการแก้ไขปัญหาการกำหนดเส้นทางรถ (VRP) ด้วยบริการรับสินค้าและการจัดส่ง โดยมีเป้าหมายคือการค้นหาเส้นทางที่สั้นที่สุดสำหรับยานพาหนะที่เข้าไปรับสินค้าและส่งสินค้าในสถานที่ต่างๆ คุณตั้งค่าปัญหาคล้ายกับ VRP มาตรฐาน แต่นอกจากนี้ยังระบุ (i, j) สถานที่สำหรับแต่ละรายการ โดย i คือสถานที่รับสินค้า และ j คือสถานที่ส่ง เครื่องมือแก้เส้นทางส่งคืนเส้นทางพาหนะที่ (i, j), i และ j แต่ละคู่อยู่ในเส้นทางเดียวกัน และรถจะเยี่ยมชม i ก่อนวันที่ j

สำหรับตัวอย่างที่ช่วยแก้ปัญหาประเภทนี้ได้ โปรดดูการกำหนดเส้นทางพาหนะพร้อมรับและนำส่ง

การรองรับฟังก์ชันแลมบ์ดา

ตอนนี้ OR-Tools v7.0 มีการรองรับฟังก์ชัน lambda ใน C# และ Java (นอกเหนือจาก C++ และ Python ซึ่งรองรับอยู่แล้ว) ฟังก์ชัน Lambda เป็นวิธีที่สะดวกในการกำหนดโค้ดเรียกกลับในโปรแกรมการกำหนดเส้นทาง อย่างไรก็ตาม คุณสามารถกำหนดโค้ดเรียกกลับโดยใช้ฟังก์ชันมาตรฐานได้หากรู้สึกว่าทำให้โค้ดอ่านง่ายขึ้น

ตัวอย่างโค้ดเรียกกลับของ C# และ Java ด้านบนจะสาธิตวิธีการกำหนดโค้ดเรียกกลับโดยใช้ฟังก์ชัน lambda

พฤศจิกายน 2018

ประกาศการเปิดตัวเวอร์ชัน v6.10

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.10 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง 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

ตอนนี้ "หรือ" รองรับ SCIP 6.0.0

ไบนารี

ชุดไบนารีสร้างขึ้นโดยใช้ Java JDK 8 (JDK 7 สำหรับ Ubuntu 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

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.9 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

อัปเดตทรัพยากร Dependency แล้ว

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

เครื่องมือแก้โจทย์ CP-SAT

  • รายละเอียดของการเปลี่ยนแปลง API - ดูรายละเอียดทั้งหมดได้ที่นี่
  • เปลี่ยนชื่อ SolveWithSolutionObserver เป็น SolveWithSolutionCallback ใน Python
  • เปลี่ยนชื่อ NewSolution เป็น OnSolutionCallback ในคลาส CpSolverSolutionCallback ใน Python ตัวอย่างต่อไปนี้แสดงวิธีใหม่ในการสร้างโค้ดเรียกกลับของโซลูชันใน 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 ดูเอกสารประกอบที่นี่

  • การอัปเดตการใช้งาน Java ในอินเทอร์เฟซการแก้โจทย์และตำราอาหาร

  • นำมอดูโลไปใช้

  • เปลี่ยนการใช้งานที่เก็บอ่างเก็บน้ำ: เพิ่ม API ที่มีบูลีนเพื่อระบุเหตุการณ์การระบาย/การเติมข้อมูลที่ไม่บังคับ

ตัวช่วยโปรแกรมเชิงเส้น

  • แสดง InterruptSolve ใน Java และ C#

เครื่องมือแก้ปัญหา CP

  • แสดงผู้อำนวยการ SolutionCollector คนใน C#

Python

  • เพิ่มการสนับสนุนสำหรับ Python 3.7
  • เมื่อคอมไพล์จากแหล่งที่มา: เลือกใช้ python3 มากกว่า python2 เมื่อตรวจหา Python

.NET

  • เขียนเลเยอร์ .NET ใหม่ให้เสร็จสมบูรณ์
  • ส่งแพ็กเกจ Google.OrTools NetStandard 2.0 Nuget ที่ใช้ได้กับ Runtime IDentifier win-x64, linux-x64 และ osx-x64
  • ส่งแพ็กเกจ Google.OrTools.FSharp Nuget
  • เพิ่มไฟล์โปรเจ็กต์สำหรับตัวอย่าง .NET ทั้งหมด
  • อัปเดตตัวอย่างสคริปต์ F# ทั้งหมด (.fsx) เป็นโปรเจ็กต์ F# ปกติ (.fs)
  • เพิ่มเอกสารประกอบเกี่ยวกับการสร้างแพ็กเกจ .NET ได้ที่นี่

แฟลตซิงค์

  • เพิ่มการรองรับชุดใน Flatzinc (โดยใช้ nosets.mzn)

การมีส่วนร่วม

  • เพิ่มการรองรับ Binder ขอขอบคุณ Kevin Mader
  • กำหนดให้ DecisionVisitor เป็นประเภท Director ในการเชื่อมโยง Java ขอขอบคุณ Jeremy Apthorp

กรกฎาคม 2018

ประกาศการเปิดตัวเวอร์ชัน v6.8

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.8 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

เปิดตัวเครื่องมือแก้โจทย์ CP-SAT

โปรแกรมแก้โจทย์ CP-SAT เป็นเครื่องมือแก้โจทย์ใหม่สำหรับการเขียนโปรแกรมข้อจำกัด เครื่องมือแก้โจทย์ CP-SAT เร็วกว่าเครื่องมือแก้โจทย์ CP เดิม และควรเป็นวิธีแก้ปัญหา CP

สำหรับตัวอย่างที่ใช้ตัวแก้โจทย์ CP-SAT โปรดดูไฟล์ที่มี _sat ในชื่อในไดเรกทอรี ตัวอย่าง บน GitHub

เครื่องมือแก้โจทย์คณิตเดิมจะยังคงอยู่เป็นระยะเวลาหนึ่งเพื่อรองรับโค้ดที่มีอยู่ แต่ระบบจะเลิกใช้งานไปแล้ว

ตัวเลือกใหม่สำหรับตัวแก้โจทย์ CP-SAT

ตัวเลือกต่อไปนี้สำหรับเครื่องมือแก้โจทย์คณ CP-SAT คือฟีเจอร์ใหม่ในรุ่นนี้

  • ค้นหาย่านใกล้เคียง (LNS): ใช้ตัวเลือก SatParameters.use_lns เพื่อเปิดใช้ LNS
  • การค้นหาพร้อมกัน: ใช้ตัวเลือก SatParameters.num_search_workers เพื่อเปิดใช้ชุดข้อความหลายรายการระหว่างการค้นหา แต่ละเทรดอาจมีพารามิเตอร์ที่ต่างกัน และเมล็ดแบบสุ่มที่ต่างกัน ซึ่งจะช่วยเพิ่มความหลากหลายให้มากที่สุด และความน่าจะเป็นที่เทรดอย่างน้อย 1 สายจะพบวิธีแก้ปัญหา

การปรับปรุงประสิทธิภาพสำหรับเครื่องมือแก้โจทย์

เราได้ปรับปรุงประสิทธิภาพเครื่องมือแก้โจทย์ CP-SAT และ Glop

มีนาคม 2018

ประกาศการเปิดตัวเวอร์ชัน v6.7

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.7 แล้ว หากต้องการอัปเดตเวอร์ชัน โปรดดูที่ส่วนการติดตั้ง OR-เครื่องมือ

อัปเดตเป็นทรัพยากร Dependency ที่จำเป็น

  • Protobuf 3.5.0 -> 3.5.1

อื่นๆ

  • เปลี่ยนโครงสร้างภายในเพื่อเตรียมการผสานรวม abseil-cpp
  • การใช้บริการการผสานรวมอย่างต่อเนื่อง (CI) ของ Travis CI และ Appveyor

SAT

  • การปรับปรุงประสิทธิภาพ
  • ปรับปรุง Python API
  • เพิ่ม C# API หรือ CpSolver.cs (เวอร์ชันทดลอง)

กลอป

  • การเปลี่ยนโครงสร้างโค้ด
  • การปรับปรุงประสิทธิภาพ

การสนับสนุน CMake (ทดลอง)

  • เพิ่มการสนับสนุน C++ หรือเครื่องมือ CMake
  • สร้าง OR-Tools เป็นโปรเจ็กต์ CMake แบบสแตนด์อโลนได้
  • ผสานรวม OR-เครื่องมือ เข้ากับโปรเจ็กต์ CMake ที่มีอยู่ได้
  • เพิ่มบิลด์ที่อิงตาม Python OR-Tools CMake
  • สร้างแพ็กเกจ Python (วงล้อ) โดยใช้ CMake

การมีส่วนร่วม

  • แก้ไขการกำหนดใหม่ "winsock2.h" ในหน้าต่าง ขอขอบคุณ Florent Tollin de Rivarol
  • เพิ่มการสนับสนุน F# (รุ่นทดลอง) ขอขอบคุณ Matthew Moore หมายเหตุ: ใช้ได้กับเครื่องมือสร้าง Makefile เท่านั้น
  • เพิ่มการสนับสนุนระดับมาตรฐาน .NET (รุ่นทดลอง) ขอขอบคุณ Ziad El Malki หมายเหตุ: ใช้ได้กับเครื่องมือสร้าง Makefile เท่านั้น

พฤศจิกายน 2017

ประกาศการเปิดตัวเวอร์ชัน v6.6

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.6 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

การอัปเดตทรัพยากร Dependency ที่จำเป็น

  • Protobuf เป็น 3.3.0 -> 3.5.0
  • gflags เป็น 2.2.0 -> 2.2.1
  • CBC 2.9.8 -> 2.9.9
  • เพิ่มโมดูล Python ที่ 6 (1.10) เป็นทรัพยากร Dependency ที่จำเป็นสำหรับ Python

การแก้ไขข้อบกพร่อง

  • ดึงคำขอเปลี่ยนโครงสร้างภายใน #494 ชื่อ การเพิ่มความคิดเห็นสำหรับ IntelliSense ใน ตัวแก้ไขบางรายการ ขอขอบคุณ Matthew Moore
  • พุลคำขอ #516 คำสั่งสำหรับไบนารีแบบสแตนด์อโลนของ F# ขอขอบคุณ Matthew Moore
  • ปรับปรุงความแม่นยำใน Glop

เครื่องมือแก้โจทย์ SAT

  • ปรับปรุงเครื่องมือแก้โจทย์ SAT ภายใน แก้ไขข้อบกพร่องต่างๆ
  • เพิ่มข้อจำกัด VRP ลงในเครื่องมือแก้โจทย์ SAT ซึ่งลิงก์กับเครื่องมือแก้โจทย์ LP
  • เปลี่ยนเครื่องมือสังเกตการณ์โซลูชันในตัวแก้โจทย์ SAT เพื่อใช้ CpSolverResponse เป็นพารามิเตอร์
  • ปรับปรุงการใช้ Glop ในเครื่องมือแก้โจทย์ SAT
  • เร่งการเชื่อมต่อ SAT-LP
  • เพิ่มข้อจำกัด Reservoir ให้กับรูปแบบ SAT cp_model สองรุ่น

SAT/Python

ตัวอย่าง

  • เขียน rcpsp_parser ใหม่ เพื่อใช้รูปแบบ ProtoBuf ในการจัดเก็บปัญหา
  • ปรับปรุงโปรแกรมแยกวิเคราะห์ RCPSP

ตุลาคม 2017

ประกาศการเปิดตัวเวอร์ชัน v6.5

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.5 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงในแพลตฟอร์ม

  • โมดูล pypi py3-ortools ได้ถูกรวมเข้ากับโมดูล ortools แล้ว ตอนนี้มีเพียงโมดูลเดียว คือ "ortools"
  • รูปแบบหลักของโมดูล Python เหล่านี้ตอนนี้คือไฟล์วีล หากต้องการติดตั้ง OR-เครื่องมือสำหรับ Python จาก Pypi เพียงเรียกใช้ pip install ortools คุณต้องติดตั้ง PIP เวอร์ชันล่าสุด (>= 9.0.1) ซึ่งจะดึงรุ่นล่าสุด (v6.5)

Bug fixed

ขณะนี้ไฟล์ Jar Protobuf สร้างขึ้นอย่างถูกต้องด้วยคลาสที่คอมไพล์แล้ว

ตัวอย่างใหม่

  • ได้มีการส่งตัวอย่าง F# เพิ่มเติมไปยังไดเรกทอรี sample/fsharp (ขอขอบคุณ Matthew Moore อีกครั้ง)
  • นอกจากนี้ เรายังได้ร่วมส่งตัวอย่าง Java MIP (ขอบคุณ Darian)

กันยายน 2017

ประกาศการเปิดตัวเวอร์ชัน v6.4

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.4 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงในแพลตฟอร์ม

  • ตอนนี้โมดูล Pypi บนแพลตฟอร์ม Linux จะแสดงเป็นไฟล์วงล้อโดยใช้แท็ก Manylinux1 ขอขอบคุณ Federico Ficarelli จากการเปลี่ยนแปลงนี้ เราได้ย้อนกลับโมดูล Per-linux ที่เปิดตัวไปในรุ่นเดือนกรกฎาคม 2017

ฟีเจอร์ใหม่

  • วิธีการปรับขนาดที่ใช้ภายใน GLOP ที่ได้รับการปรับปรุง
  • แก้ไขการรวมผู้ประเมินในไลบรารีการกำหนดเส้นทาง C# ขอขอบคุณ DevNamedZed
  • ปรับปรุงประสิทธิภาพของตัวละลาย Flatzinc สำหรับโมเดลขนาดใหญ่
  • ใช้ SAT ที่ได้รับการสนับสนุนสำหรับ Flatzinc โดยค่าเริ่มต้น
  • ปรับปรุงประสิทธิภาพหลักการพื้นฐานสำหรับเครื่องมือแก้คะแนน
  • แก้ไขข้อบกพร่องในอัลกอริทึมการกำหนดเชิงเส้นที่ล้มเหลวอย่างไม่ถูกต้อง
  • เพิ่มตัวอย่าง F# ใน ortools/examples/fsharp
  • นำการตรวจหาการลงโทษเชิงบวกออกจากไลบรารีการกำหนดเส้นทาง

สิงหาคม 2017

ประกาศการเปิดตัวเวอร์ชัน v6.3

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.3 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

ไฟล์ดาวน์โหลดใหม่

ไฟล์ Python Wheel สำหรับ Linux พร้อมให้ดาวน์โหลดแล้วในหน้าการเผยแพร่ "OR-Tools" พร้อมกับเวอร์ชันล่าสุดของการดาวน์โหลดทั้งหมด

เครื่องมือแก้โจทย์คณิตน้อย

เวอร์ชันนี้มีโค้ด Sat และ Flatzinc ขั้นสุดท้ายที่ส่งสำหรับ ชาเลนจ์ Minizinc 2017

กรกฎาคม 2017

ประกาศการเปิดตัวเวอร์ชัน v6.2

เราได้เปิดตัว OR-Tools เวอร์ชัน 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 เพื่อสร้างอาร์ติแฟกต์ที่ใช้ระบบปฏิบัติการ Linux ไปที่ or-tools/tools/docker และดู Makefile เพื่อดูเป้าหมายที่เป็นไปได้ (make archive make pypi และ make pypi3)

คำสั่งเหล่านี้จะสร้างไดเรกทอรีย่อย export และเพิ่มอาร์ติแฟกต์ไบนารีในนั้น

มิถุนายน 2017

ประกาศการเปิดตัวเวอร์ชัน v6.1

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.1 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

การเปลี่ยนแปลงในแพลตฟอร์ม

  • ระบบรองรับ Visual Studio 2017 แต่จะไม่รองรับ Visual Studio 2013 อีกต่อไป
  • รองรับ macOS เวอร์ชัน 10.9 ขึ้นไป

ฟีเจอร์ใหม่

เราได้เพิ่มรูปแบบ Protobuf ใหม่สำหรับเครื่องมือแก้โจทย์ CP-SAT ดู ortools/sat/cp_model.proto เพื่อกำหนดโมเดลของคุณ และ ortools/sat/cp_model_solver.h เพื่อแก้ปัญหา

การแก้ไขข้อบกพร่อง

ปัญหา #420: เราได้แก้ไขแอตทริบิวต์ __version__ ที่ขาดหายไปในโมดูล Python pypi ในทุกแพลตฟอร์มแล้ว

พฤษภาคม 2017

ประกาศการเปิดตัวเวอร์ชัน v6.0

เราได้เปิดตัว OR-Tools เวอร์ชัน 6.0 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

โครงสร้างไดเรกทอรีใหม่ใน C++

เราได้เปลี่ยนโครงสร้างแหล่งที่มา/รวมของ "หรือ" เมื่อใช้ C++ เป้าหมายคือให้มีการห่อหุ้มไฟล์ C++ ที่ดีขึ้น และยังมีประโยชน์ในการปรับโครงสร้างไดเรกทอรี C++ และ Python ให้สอดคล้องกันด้วย

  • src/ เปลี่ยนชื่อเป็น ortools/ แล้ว
  • ตอนนี้คำสั่ง #include ในไฟล์ 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

ตอนนี้ Wrapper เครื่องมือแก้โจทย์เชิงเส้นรองรับ SCIP 4.0 แล้ว ตอนนี้คุณจะต้องสร้าง SCIP ก่อน แล้วบอกหรือเครื่องมือว่าคุณจะใช้ ดูวิธีการได้ที่นี่

การสนับสนุนสำหรับ GLPK

นอกจากนี้ เรายังได้เปลี่ยนวิธีการสร้างด้วย GLPK ด้วย โปรดดูที่นี่

ทำความสะอาดข้อมูล

  • เราได้นำการใช้ Hash_map และแฮช_set ทั้งหมดในฐานของโค้ด C++ ออกแล้วเนื่องจากเลิกใช้งานไปแล้ว ค่าเหล่านี้ถูกแทนที่ด้วย unordered_map และ unordered_set จาก STL
  • การทำความสะอาดไฟล์ C# จาก Michael Powell

มกราคม 2017

ประกาศการเปิดตัวเวอร์ชัน v5.1

เราได้เปิดตัว OR-Tools เวอร์ชัน 5.1 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

ฟีเจอร์ใหม่

กำลังติดตั้ง

การกำหนดเส้นทาง

ใช้งานอัลกอริทึมเพื่อคำนวณขอบเขตล่างของ Held-Karp สำหรับปัญหาเกี่ยวกับ "การเดินทางของพนักงานขาย" แบบสมมาตร ซึ่งทำให้คุณคำนวณขอบเขตบนของช่องว่างระหว่างต้นทุนของโซลูชันที่ไม่เหมาะเท่าไรกับต้นทุนของโซลูชันที่เหมาะสมที่สุดได้

  • เพิ่มเมธอดใหม่ในไลบรารีการกำหนดเส้นทางของรถ RoutingModel::SetBreakIntervalsOfVehicle ซึ่งให้คุณเพิ่มช่วงbreak ซึ่งเป็นระยะเวลาที่ยานพาหนะไม่สามารถดำเนินงานใดๆ ได้ (เช่น เดินทางหรือเข้าโหนด) ดูตัวอย่างที่ใช้ตัวเลือกนี้ได้ที่ cvrptw_with_breaks.cc

Scheduling

เครื่องมือแก้โจทย์ S

  • ตอนนี้ข้อจำกัดสะสมของตัวแก้โจทย์ SAT ยอมรับช่วงเวลาที่ไม่บังคับซึ่งสร้างด้วยเมธอด NewOptionalInterval ดูตัวอย่างได้ที่ https://github.com/google/or-tools/blob/master/examples/cpp/rcpsp_sat.cc
  • ตอนนี้คุณสามารถแก้โจทย์ Max-SAT (ค่าความพอใจสูงสุด_โดยการระบุวัตถุประสงค์เป็นผลรวมแบบถ่วงน้ำหนักของลิเทอรัลได้แล้ว ไม่จำเป็นต้องสร้างตัวแปรจำนวนเต็มกลางอีกต่อไป

ปรับปรุงประสิทธิภาพ

  • เครื่องมือแก้โจทย์ SAT — ปรับปรุงประสิทธิภาพของเครื่องมือแก้โจทย์ Sat โดยเฉพาะสำหรับข้อจำกัดสะสม
  • เครื่องมือแก้โจทย์คณิต Glop — ปรับปรุงประสิทธิภาพด้านตัวเลขของเครื่องมือแก้โจทย์คณ Glop ซึ่งตอนนี้แสดงผลวิธีแก้ปัญหาที่แม่นยำมากขึ้นให้กับโจทย์เลขยาก
  • เครื่องมือแก้โจทย์ Flatzinc
  • แบ็กเอนด์ Sat ได้รับการปรับปรุงให้ดีขึ้นอย่างมากสำหรับล่าม Flatzinc
  • อินเทอร์เฟซ C# Flatzinc แบบเรียบง่าย ดูตัวอย่างอินเทอร์เฟซใหม่ได้ที่ https://github.com/google/or-tools/blob/master/examples/csharp/csfz.cs

การแก้ไขข้อบกพร่อง

  • การใช้การเรียนรู้ของระบบ PathCheapestArc ในโมเดลที่มีรถคันเดียวและมีจุดยึดด้านข้างบางครั้งอาจทำให้เครื่องมือแก้โจทย์ทำงานเป็นเวลานานเกินไป ซึ่งแก้ไขได้โดยการพิจารณาข้อจำกัดข้างเคียงอย่างเหมาะสม
  • บางครั้งเครื่องมือแก้เส้นทางใน Java อาจขัดข้องเมื่อแก้ปัญหาการกำหนดเส้นทางรถ ซึ่งปัญหานี้ได้รับการแก้ไขแล้วในรุ่นล่าสุด

พฤศจิกายน 2016

ประกาศการเปิดตัวเวอร์ชัน v5.0

เราได้เปิดตัว OR-Tools เวอร์ชัน 5.0 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

ตัวอย่างการเรียกใช้

  • เปิดตัวเป้าหมายเฉพาะภาษาซึ่งช่วยให้คอมไพล์และเรียกใช้โปรแกรมของคุณได้ง่ายขึ้น รวมถึงตัวอย่างที่มาพร้อมกับ OR-Tools

FlatZinc

เครื่องมือแก้สี

  • ปฏิบัติตามข้อจำกัดต่อไปนี้
  • atMost: ตั้งค่าขอบเขตบนสำหรับจำนวนตัวแปรที่เท่ากับค่าที่กำหนด
  • MakePathPrecedenceConstraint และ MakePathTransitPrecedenceConstraint: ใช้ข้อจํากัดลําดับความสําคัญสําหรับชุดคู่

การกำหนดเส้นทาง

  • ใช้งาน AddAtSolutionCallback ซึ่งเป็นโค้ดเรียกกลับที่เรียกใช้ทุกครั้งที่มีการพบโซลูชันระหว่างการค้นหา
  • นำตัวสร้าง RoutingModel ที่ไม่มี Depot ออก ตอนนี้ต้องระบุ Depot อย่างน้อย 1 รายการในรูปแบบการกำหนดเส้นทาง

กันยายน 2016

ประกาศการเปิดตัวเวอร์ชัน v4.4

เราได้เปิดตัว OR-Tools เวอร์ชัน 4.4 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

  • API การตั้งเวลาเพิ่มเติมและตัวอย่างที่แก้ไขแล้ว (weighted_tardiness_sat และjobshop_sat) เพื่อใช้งาน

กราฟ

  • เพิ่มลักษณะของตัวซ้ำในคลาสกราฟ

การเผยแพร่ OR-เครื่องมือ

  • รองรับแพ็กเกจ Nuget อีกครั้งแล้ว

สิงหาคม 2016

ประกาศการเปิดตัวเวอร์ชัน v4.3

เราได้เปิดตัว OR-Tools เวอร์ชัน 4.3 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

เครื่องมือแก้โจทย์ข้อจำกัด

  • ใช้งานเมธอด NotBetween เพื่อจำกัดตัวแปรให้อยู่นอกช่วงเวลาที่กำหนด

การกำหนดเส้นทาง

  • เพิ่มการแยกวิเคราะห์โมเดลเพื่อตรวจสอบข้อจำกัด NotMember ที่มีอยู่ตามที่แสดงในตัวอย่างนี้ และนำไปใช้ในตัวกรองการค้นหาในเครื่อง
  • เพิ่มการทำโปรไฟล์การค้นหาในพื้นที่แล้ว
  • แก้ไขสำหรับการย้ายในประเทศ

เครื่องมือแก้โจทย์เชิงเส้น

  • การรายงานสถานะ SCIP ที่แก้ไขแล้ว

  • ใช้วิธีการ SolveWithPresolve เพื่อลดความซับซ้อนในการใช้งานตัวปฏิเสธ SAT
  • ยูทิลิตีการค้นหาที่มีการจัดกลุ่มใหม่ใน src/sat/util.h|cc
  • ใช้ข้อจํากัดการกำหนดเวลาของ SMT (Lazy Clause Generation) ได้ที่ jobshop_sat.cc และ weighted_tardiness_sat.cc

กลอป

  • ปรับปรุงประสิทธิภาพโดยการใช้ประโยชน์จากช่วงเล็กๆ ของการประมวลผลที่มากขึ้น

แฟลตซิงค์

  • แก้ไขข้อบกพร่องจากชาเลนจ์ minizinc

Lp_data

  • ลดความซับซ้อนของเทมเพลตในตัวทำซ้ำอย่างต่อเนื่อง

การเผยแพร่ OR-เครื่องมือ

  • ตอนนี้มีการตั้งชื่อแอสเซมบลี C# อย่างชัดเจนโดยค่าเริ่มต้น
  • อัปเกรดเป็น Protobuf3.0.0 แล้ว
  • เพิ่ม script ของ Python เพื่อตรวจสอบทรัพยากร Dependency ของที่เก็บถาวร "หรือ-เครื่องมือ"

กรกฎาคม 2016

ประกาศการเปิดตัวเวอร์ชัน v4.2

เราได้เปิดตัว OR-Tools เวอร์ชัน 4.2 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

เครื่องมือแก้จุดยึด (การกำหนดเส้นทาง)

  • ตอนนี้คุณสามารถกำหนดการแยกทางด้วย Cardinality ซึ่งเป็นจำนวนโหนดสูงสุดที่ใช้งานได้ภายในการจ่ายแยกนี้ ตัวอย่างเช่น หากคุณเพิ่ม Disjunction ที่มีโหนด n และ Cardinality เป็น k ระบบจะอนุญาตให้ใช้โหนด k จาก n โหนดได้ โดยคุณสามารถใช้คำจำกัดความใหม่ของ AddDisjunction เพื่อดำเนินการนี้ได้
  • เพิ่มการสนับสนุนสำหรับการบิดเบือนหลายรายการต่อโหนด ตัวอย่างเช่น ตอนนี้คุณสามารถเพิ่ม โหนด N1 ไปยังการแยกหลายรายการ (D1..Dm) ซึ่งเป็นการเพิ่มโอกาสให้มีการใช้งานในประเภทนั้นๆ แนะนำอัลกอริทึมการค้นหาการกำหนดเส้นทางที่รวดเร็วขึ้นสำหรับปัญหาที่เกี่ยวข้องกับกรอบเวลาที่หยุดชะงัก
  • เพิ่มพารามิเตอร์การแก้โจทย์ข้อจำกัดลงในพารามิเตอร์โมเดลการกำหนดเส้นทาง และ log_search ไปยังพารามิเตอร์การค้นหา
  • อัลกอริทึมการค้นหาในท้องถิ่นทำงานได้เร็วขึ้นเนื่องจากสามารถแก้ไขปัญหากรอบเวลาที่ไม่ต่อเนื่องได้ ดูรายละเอียดเพิ่มเติมได้ที่ตัวอย่าง cvrp_disjoint_tw.cc

Glop (การเพิ่มประสิทธิภาพเชิงเส้น)

  • แนะนำอัลกอริทึม Simplex ที่เร็วกว่า

การเผยแพร่ OR-เครื่องมือ

  • ที่เก็บถาวร 1 รายการต่อแพลตฟอร์ม แทนที่จะเป็นที่เก็บถาวรแต่ละรายการสำหรับที่เก็บถาวรของ C++, Java และ .Net. Python แต่ละรายการจะยังคงโฮสต์อยู่ใน pypi
  • ใน pypi เราได้เปลี่ยนไปใช้โมดูล Wheel (.whl) ใน Mac OS X และ Windows แนะนำสคีมาหมายเลข MAJOR.MINOR ตัวเลขเหล่านี้ใช้ชื่อที่เก็บถาวร, เวอร์ชันที่จัดเก็บไว้ในไลบรารีที่ใช้ร่วมกันของ Mac OS X, โมดูล Python, .NETassemblies เวอร์ชันแรกที่เรากำลังเผยแพร่อยู่ในสคีมานี้คือ v4.2

มิถุนายน 2016

ประกาศการเปิดตัวเวอร์ชัน v2016-06

เราได้เปิดตัว OR-Tools เวอร์ชัน v2016-06 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

เครื่องมือแก้สี

  • นำอินสแตนซ์ส่วนใหญ่ของโค้ดเรียกกลับ (src/base/callback.h) ออกจากไลบรารี CP
  • NotMemberCt ที่เพิ่ม (ตัวแปรต้องไม่อยู่ในชุดของช่วงเวลา)

ไลบรารีการกำหนดเส้นทาง

  • การเปลี่ยนแปลงที่เข้ากันไม่ได้: หากต้องการระบุความจุของยานพาหนะใน AddDimensionWithVehicleCapacity ตอนนี้คุณจะต้องส่งอาร์เรย์ (เวกเตอร์ใน c++) แทนการเรียกกลับ

กลอป

  • เปลี่ยนการนำเสนอภายในของเมทริกซ์แบบกระจัดกระจาย
  • การปรับปรุงประสิทธิภาพ

กราฟ

  • เขียนอัลกอริทึม Dijkstra และ Bellman-Ford ใหม่เพื่อแทนที่โค้ดเรียกกลับด้วย std::function (C++)
  • เปลี่ยน API ของการใช้งานกราฟแบบต่างๆ เมื่อทำซ้ำแบบโค้งและโหนด

  • นำเมธอดหลักที่ไม่ได้ใช้ (โหนดความละเอียด) ออก
  • เพิ่มนักเขียนดราม่าเพื่อตรวจสอบหลักฐานเกี่ยวกับความไม่พึงพอใจ
  • เพิ่ม Preprocessor

บ๊อป

  • เพิ่มย่านใกล้เคียงใหม่

ตัวอย่าง

  • c++: การกำจัด filelinereader ในตัวอย่าง
  • data: เพิ่มปัญหาการจัดตารางเวลาสำหรับเครื่องเดียว

เอกสารประกอบ

เมษายน 2016

ประกาศการเปิดตัวเวอร์ชัน v2016-04

เราได้เปิดตัว OR-Tools เวอร์ชัน v2016-04 แล้ว หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

อัปเดตทรัพยากร Dependency แล้ว

ธันวาคม 2015

ประกาศการเปิดตัวเวอร์ชัน v2015-12

เราได้เปิดตัว OR-Tools เวอร์ชัน v2015-12 หากต้องการอัปเดตเวอร์ชัน ให้ดู ส่วนที่เกี่ยวข้องของการติดตั้ง OR-เครื่องมือ

เครื่องมือแก้สี

  • เข้ากันไม่ได้กับการค้นหาย่านใกล้เคียงขนาดใหญ่ในตัวแก้โจทย์ CP (ดู examples/cpp/ls_api.cc, examples/python/pyls_api.py, examples/csharp/csls_api.cs และ examples/com/google/ortools/sample/LsApi.java เพื่อดู API ใหม่)
  • ทำความสะอาดการตัด Python แล้ว รองรับการตัดสินใจที่กำหนดเองในเครื่องมือแก้โจทย์ CP (ดู examples/test/test_cp_api.py เพื่อดูการทำงานของ API)
  • การปรับปรุงและแก้ไขข้อบกพร่องหลายรายการ

กันยายน 2015

ประกาศเปิดตัวรุ่นแรกใน GitHub

จากนี้ไประบบจะจัดเก็บไฟล์ไว้

แฟลตซิงค์

  • เพิ่มไบนารีที่เก็บไว้สำหรับอินเทอร์พรีเตอร์ Flatzinc (โปรดดู www.minizinc.org)
  • มีการแก้ไขเวอร์ชันที่ใช้ในภารกิจ