이 페이지에는 새로운 기능, 버그 수정, 코드 및 설치 절차 개선사항을 비롯하여 OR-도구의 변경사항이 나와 있습니다.
OR-Tools를 설치하는 데 문제가 있으면 OR-Tools 설치 안내의 문제 해결 섹션을 참고하세요. 문제가 목록에 없는 경우 GitHub의 문제를 확인하거나 언제든지 새 문제를 제기해 주세요. 최선을 다해 도와드리겠습니다.
다음은 OR-도구의 출시 노트로, 최신 출시 버전부터입니다.
2024년 5월
OR-Tools v9.10 출시 발표
OR-Tools v9.10이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
GitHub에서 출시 노트를 확인할 수 있습니다.
2024년 3월
OR-Tools v9.9 출시 발표
OR-Tools v9.9가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
GitHub에서 출시 노트를 확인할 수 있습니다.
2023년 11월
OR-Tools v9.8 출시 발표
OR-Tools v9.8이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Python 3.12를 추가합니다.
- Ubuntu 23.10 지원 추가
선형 솔버
ModelBuilder
을 .Net으로 포팅합니다.- SAT LogCallback과의 충돌을 방지하기 위해
LogCallback
의 이름을MbLogCallback
로 바꿉니다. - ModelBuilder API를 확장합니다.
- 표시기 제약 조건을 추가합니다.
- 힌팅 지원을 추가합니다.
- 모델 클론을 추가합니다.
수학 최적화
- 심층적인 재작업.
라우팅
ROUTING_OPTIMAL
상태를 추가합니다.RoutingModel
를 복사 또는 이동이 불가능하게 합니다.- 지역 검색 연산자의 일부 무한 루프를 수정합니다.
PickupDeliveryPosition
내부 구조체를 추가합니다.IsPickup()
및IsDelivery()
메서드를 추가합니다.
토
- 대규모 모델의 메모리 공간을 줄입니다.
- 예약 검색이 개선되었습니다.
- packing_previousnces_lns를 추가합니다.
- 실행 가능성 점프를 최적화하고 수정합니다
- 선형 presolve를 최적화하고 presolve 로깅을 개선해야 합니다.
int_abs
,int_mod
,int_prod
,lin_max
의 presolve를 개선합니다.- Panda 지원 개선
- 버그가 거의 수정되었습니다.
2023년 8월
OR-Tools v9.7 출시 발표
OR-Tools v9.7이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Centos-8 (EOL)을 드롭합니다.
- Debian 10을 삭제합니다.
- Fedora
[33, 36]
(EOL)를 드롭합니다. - Ubuntu 18.04 LTS (EOL)를 삭제합니다.
- Python 3.7 (EOL)을 중단합니다.
- CMake (EOL)에서
netcore3.1
지원을 사용 중지합니다.
모델 빌더 Python
- Pandas DataFrame 및 계열을 사용하여 변수를 만들도록 허용합니다.
- 과제 보기
- bin_packing을 참조하세요.
- 정보 입력 완료
개인 정보 보호 표준 DLP
- 확인할 수 있습니다
CP-SAT
- 성능이 개선되었습니다. (실행 가능성_점프, lin_max)
- 컷 관리 개선
- 목표의 하한값을 개선하기 위한 새로운 goal_shave_search 작업자 (최소화 시)
- Python cp_model.py의 주석 입력
- cp_model.py의 Pandas를 실험용으로 부분적으로 지원합니다.
- 과제 보기
- bin_packing을 참조하세요.
- 지역 검색 위반 실험용 작업자:
- 다음 매개변수로 사용 설정됨: num_violation_ls:xxx
- 선형 모델에 최적화됨 (
linear
,bool_or
,bool_and
,at_most_one
,exactly_one
) - lin_max, product, Division과 함께
- no_overlap, 누적, 회선, 경로 지원
- no_overlap_2d로 사용 중지됨
- 권장 ls 작업자 수:
num_workers
->num_violation_ls
:(8, 1), (16, 2) (24, 3), (32, 4)
2023년 3월
OR-Tools v9.6 출시 발표
OR-Tools v9.6이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Fedora 37, 38 지원을 추가합니다.
- Python 3.6을 삭제합니다 (
protobuf
에서 지원하지 않음). - macOS에 Python 3.7을 드롭합니다 (
scipy
에서 지원하지 않음). - CMake에
net7.0
지원 추가 (-DUSE_DOTNET_7=ON
사용) - nuget .org 패키지의
netcore3.1
삭제
종속 항목
- SCIP
v801
->v803
(참고: 이제 SCIP는 OSI 호환 라이선스를 사용함) - 요약
20220623.1
->20230105.0
- Protobuf
v21.5
->v21.12
- 스위그
4.1.1
- 자바 JNA
5.11.0
->5.12.1
Bazel
- pybind11 지원을 추가합니다.
- 자바 래퍼 지원을 추가합니다.
문제 해결사
- PDLP: dd python 래퍼입니다.
- CP-SAT: 성능이 개선되었습니다.
- GLOP: presolve를 조정합니다.
- ModelBuilder: Python: NumPy 지원을 개선합니다.
- 경로: 성능 개선 (지역 검색)
알려진 문제:
- CP-SAT:
pseudo_costs
서브콜버를 무시하면 잘못된 매개변수가 반환됩니다(#3706 참고).
2022년 11월
OR-Tools v9.5 출시 발표
OR-Tools v9.5가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Debian SID 지원을 추가합니다.
- Fedora 35, 36 지원을 추가합니다.
- Ubuntu 22.10 지원을 추가합니다.
- macOS에서 Python 3.6을 드롭합니다.
- Python 3.11 지원을 추가합니다.
종속 항목 업데이트
- Protobuf
v19.4
->v21.5
- SCIP 문제 해결사
v800
->v801
CP-SAT
- Presolve 개선사항: max(배열), 부울 제약 조건, 선형 제약 조건
- 인터리브 검색은 병렬로 확정적이어야 합니다.
- 선형 절단: 정사각형 및 int_prod 컷을 정리하고 컷 파이프라인을 다시 작성합니다.
- 지문 입력 모델 및 솔루션 (로그에 표시됨)
- 일정 예약이 개선되었습니다.
- 일반적인 버그 수정 (presolve 도중 비정상 종료, 컷에서 비정상 종료, 실행할 수 없는 솔루션, LNS에서 모델 실행 불가)
글로프
- 피벗 선택 규칙뿐만 아니라 선형 대수도 다시 작성하여 속도를 높이세요.
선형 솔버
knapsack_interface.cc
를 추가합니다.- model_builder API를 linear_solver 디렉터리 (헤더 및 샘플) 아래로 이동합니다.
- Gurobi 10 지원을 추가합니다.
라우팅
- 다양한 라우팅 문제를 해결하기 위해 몇 개의 파서를 해제합니다.
2022년 8월
OR-Tools v9.4 출시 발표
OR-Tools v9.4가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼
- Debian-10 지원을 추가합니다(#3029 참조).
- Ubuntu 22.04 LTS 지원을 추가합니다(#3276 참고). 참고: .Net 3.1은 지원되지 않습니다 (dotnet/core#7038 참고).
- Ubuntu 21.10 지원을 삭제합니다.
기타
- 언어별로 보관 파일을 분할하고 C++ 구성에 CMake 구성을 추가합니다 (#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, core 기반 휴리스틱)
- MIP 성능 (presolve, cuts)
2022년 3월
OR-Tools v9.3 출시 발표
OR-Tools v9.3이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Debian-10 지원을 중단합니다.
- Ubuntu-16.04 지원을 중단합니다.
- .NET Framework 4.5.2를 삭제합니다.
종속 항목 업데이트
- Eigen
3.4.0
를 추가합니다. - Google re2
2021-11-01
를 추가합니다. - Protobuf
3.19.1
->3.19.4
- SCIP
7.0.1
->v800
Python
- pybind11을 추가합니다.
기능
- PDLP를 실험용으로 추가합니다.
- MathOpt를 실험용으로 추가합니다.
CP-SAT
- 일관성을 위해 일부 API의 이름을 바꿨습니다(예:
LinearExpr.ScalProd.
->LinearExpr.WeightedSum.
). AddAtLeastOne
/AddAtMostOne
/AddExactlyOne
메서드를 추가합니다.- 모든 언어로
AddMultiplicationConstraint(z, x, y)
추가 - 모든 언어로
AddMultipleCircuit()
추가
C++
- 명시적 ctor
IntVar(BoolVar)
. LinearExpr::Add*
를 삭제하고 연산자(예:LinearExpr +=
)로 대체했습니다.- 선형 표현식에 산술 연산자를 추가합니다.
LinearExpr::BooleanSum/BooleanScalProd
를 삭제했습니다.Sum/WeightedSum
를 사용하세요.- 변수의 도메인을 단일 값으로 덮어쓰는
CpModelBuilder::FixVariable()
를 추가합니다.
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년 12월
OR-Tools v9.2 출시 발표
OR-Tools v9.2가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Ubuntu 21:10 (마지막 롤아웃 출시) 지원이 추가되었습니다.
종속 항목 업데이트
- .Net TFM update net5.0 -> net6.0(.Net SDK 6.0 LTS 및 .Net SDK 3.1 LTS 필요)
- abseil-cpp 20210324.2 -> 20211102.0
- Protobuf 3.18.0 -> 3.19.1
- Googletest 1.10.0 -> 1.11.0
- Python: numpy >= 1.13.3을 추가합니다.
- MacOS에서는
-O1
에서 Coin-OR을 컴파일하여 실행기에서 비정상 종료를 방지합니다.
라우팅
- 필터 개선
- 첫 번째 솔루션 휴리스틱 개선
- 휴식 시간 게재위치를 개선합니다.
CP-SAT
브레이킹 체인지
- 기본 프로토콜 버퍼가 이전 버전과 호환되지 않습니다. 저장된 프로토콜 버퍼는 업데이트된 빌더 API (C++, Python, 자바, .NET에서)로 다시 생성해야 합니다.
- 특히 이전 필드(start, size, end)를 삭제하고 삭제된 필드의 이름을 사용하도록 새 필드 (
_view
사용)의 이름을 변경하면서 간격 protobuf가 정리되었습니다.
새로운 기능
all_different
,reservoir
,modulo
,multiplication
,division
제약조건은 정수 변수가 필요한 모든 곳에서 아핀 표현식 (a * var + b
)을 허용합니다.- 목표는 부동 소수점 계수를 허용합니다. C++/Java/.NET의
DoubleLinearExpr
클래스를 참고하세요. Python의knapsack_2d_sat.py
예를 참고하세요. no_overlap_2d
제약 조건은 선택적 간격을 지원합니다.- C++ API는
+
및*
연산자를 구현하여 표현식을 작성합니다.
개선 사항
- presolve 코드가 개선되었습니다.
- 더욱 엄격한 모델 검사기.
- 저장소 제약조건 재작업
- no_overlap_2d 제약 조건에 에너지 넘치는 컷을 추가합니다.
- 인코딩 제약 조건의 선형 완화가 개선되었습니다(
literal implies var == value
).
지원 중단되고 삭제된 메서드
- C++
BooleanSum
및BooleanScalProd
가 지원 중단되었습니다.Sum
와ScalProd
만 사용하면 됩니다. - C++
AddLinMinEquality
및AddLinMaxEquality
가 삭제되었습니다.AddMinEquality
와AddMaxEquality
만 사용하면 됩니다.
향후 비호환성
- 향후 언젠가는 C++ 레이어에 더 가깝게 자바 모델링 레이어를 다시 작성할 예정입니다.
- C++ 모델링 레이어에서 IntVar(BoolVar var) ctor를 명시적으로 만듭니다.
- python API PEP 8이 규정을 준수하도록 하는 방안을 고려하고 있습니다 (snake_case 이름 사용). 이 경우 코드를 포팅할 sed 파일이 제공됩니다.
빌드 시스템
Bazel
- Windows 빌드를 수정합니다.
CMake
FETCH_PYTHON_DEPS
옵션을 추가합니다 (기본값ON
).- GPLK 솔버를 위한 선택적 지원을 추가합니다 (기본값
-DUSE_GLPK=OFF
).
Python
- 대부분의 CP-SAT API에서
numpy
정수를 지원합니다. __version__
누락을 수정합니다.
2021년 9월
OR-Tools v9.1 출시 발표
OR-Tools v9.1이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Python:
manylinux2014
이미지를 사용합니다 (PEP 599 참고). - Python:
manylinux2014_aarch64
이미지를 사용하여 aarch64 Linux 지원을 추가합니다. - .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:
cp_model.py
에서warning
사용 (#2530 참고). - python: absl-py 0.11 -> 0.13.
CMake
제조업체
Make 기반 빌드가 지원 중단되었습니다. 소스에서 빌드하려면 CMake 또는 Bazel로 이전하세요.
Java
- 네이티브 라이브러리 로더의 견고성을 개선합니다 (#2742 참고).
- 라우팅 모델 또는 제약 조건 솔버가 삭제될 때 JVM 가비지 컬렉터 비정상 종료 문제를 수정했습니다 (#2091 참고)(#2466 참고).
- 여러 worker를 사용할 때 발생하는 CP-SAT 로깅 콜백 비정상 종료 문제를 수정했습니다. (#2775 참고)
CP-SAT
- LNS 코드의 견고성을 개선합니다 (#2525 참고).
- 일정 코드 개선: 고정된 크기 간격, 새로운 검색 휴리스틱, 개선된 presolve, 새로운 선형 컷을 만드는 새로운 팩토리 메서드.
- 라우팅 코드 개선: 새로운 전용 LNS
- 모델 검사기 개선 특히 잠재적 오버플로우에 대해 더 현명합니다.
- MIP 코드 개선: presolve를 개선하고 MIP 및 CP 모델의 선형 완화를 여러 가지로 개선했습니다.
- 검색 다양성을 개선합니다. 작업자가 13개 이상인 경우 목표 하한값을 개선하기 위한 작업자를 추가합니다.
- 동시 로드 코드 변경: 이제 솔버가 이제 사용 가능한 모든 코어를 사용합니다.
num_search_parameters
를 사용하여 동시 로드 수준을 지정합니다. SearchAllSolutions
및SolveWithSolutionCallback
가 지원 중단되었습니다.- Python API:
model.Add()
호출 외부에서var == ...
또는var != ...
를 사용할 때 좀 더 현명한 검사가 가능합니다.
2021년 4월
OR-Tools v9.0 출시 발표
OR-Tools v9.0이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
종속 항목 업데이트
- Abseil-cpp 20200923.3이 20210324.1 LTS로 업데이트되었습니다.
- Protobuf 3.15.3이 3.15.8로 업데이트되었습니다.
- 자바: jna-platform 5.5.0이 5.8.0으로 업데이트됨
Java
- OR-Tools는 이제 Maven Central에서 제공됩니다 (com.google.ortools:ortools-java 참고).
버그 수정
- CP-SAT 솔버를 사용할 때 멀티스레딩을 개선합니다 (#1588 참고).
std::vector<std::string>
의 Python 래퍼 지원을 수정합니다 (#2453 참고).- CPLEX 지원을 재작업합니다 (#2470 참고).
알려진 브레이킹 체인지
- Python, Java, .Net에서 로거 액세스를 추가합니다 (#2245 참고).
- 모든 맞춤 Google 유형을
cstdint
에 제공된 유형으로 대체합니다.
CP-SAT
SearchForAllSolutions()
,SearchAllSolutions()
,SolveWithSolutionCallback()
메서드가 지원 중단되었습니다. 대신Solve()
를 사용하세요.- Python 표준 연산자 지원을 개선합니다. 이로 인해 잘못된 기존 코드가 손상될 수 있습니다.
2021년 3월
OR-Tools v8.2 출시 발표
OR-Tools v8.2가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
종속 항목 업데이트
- Abseil-cpp 20200923.2가 20200923.3 LTS로 업데이트되었습니다.
- Protobuf 3.14.0이 3.15.3으로 업데이트되었습니다.
라우팅
RoutingModel.RegisterTransitMatrix()
및RoutingModel.RegisterUnaryTransitVector()
를 추가했습니다.RoutingModel.AddVectorDimension()
및RoutingModel.AddMatrixDimension()
의 반환을int
가 대중교통 평가자 ID인std::pair<int, bool>
로 변경합니다.
2020년 12월
OR-Tools v8.1의 출시 발표
OR-Tools v8.1이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
종속 항목 업데이트
- Abseil-cpp 20200923이 20200923.2 LTS로 업데이트되었습니다.
- Protobuf 3.13.0이 3.14로 업데이트되었습니다.
- Gurobi 9.1.0 지원 추가
- GLog 종속 항목 삭제 (abseil-cpp 플래그에 따라 맞춤 구현으로 대체됨)
- GFlag 종속 항목 삭제 (abseil-cpp 플래그 구성요소로 대체됨)
버그 수정
2020년 10월
OR-Tools v8.0 출시 발표
OR-Tools v8.0이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- 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
-DUSE_SCIP=OFF
사용 시 SCIP 지원 사용 중지 문제를 수정합니다. (#2129 참고)- CMake 빌드 시스템에 샘플과 예를 통합합니다. 참고:
-DBUILD_SAMPLES=OFF
및-DBUILD_EXAMPLES=OFF
를 사용하여 사용 중지할 수 있습니다. 참고:-DBUILD_<LANG>_SAMPLES=OFF
또는-DBUILD_<LANG>_EXAMPLES=OFF
를 사용하여 특정 언어에 대해 사용 중지할 수 있습니다.<LANG>
사용:CXX
,PYTHON
,JAVA
~DOTNET
.
제조업체
Make >= 4.3
가 필요합니다 (Make eval 함수 사용).CMake >= 3.14
가 필요합니다 (CMake --verbose 옵션 사용).-DUSE_SCIP=OFF
를 사용하여 SCIP 지원을 사용 중지하는 옵션을 추가합니다 (#2134 참고).-DUSE_COINOR=OFF
를 사용하여 CLP 및 CBC 지원을 사용 중지하는 옵션을 추가합니다.
Java
- OR-Tools가 Maven 패키지를 생성합니다 (#202 참고).
버그 수정
- FreeBSD에서 C++ 및 Python 빌드를 수정합니다 (#2126 참고).
- Windows의 디버그에서 빌드를 수정합니다 (#2077 참고).
- Windows의 CP-SAT에서 동시에 발생하는 장기 비정상 종료를 수정합니다 (#2001, #2019 참고).
2020년 7월
OR-Tools v7.8 출시 발표
OR-Tools v7.8이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
종속 항목 업데이트
- Gurobi 9.0.2는 이제 사전 빌드된 바이너리에 사전 통합됩니다. MAC OS X 및 Windows에서 Gurobi 설치 프로그램의 기본 설치 경로 또는 GUROBI_HOME 디렉터리에서 gurobi 90 공유 라이브러리를 검색합니다.
- SCIP 7.0.1은 이제 사전 빌드된 바이너리에 통합됩니다. SCIP 라이선스를 사용하기 전에 규정을 준수하는지 확인하세요.
- 선택적 Xpress Solver 8.9.0에 대한 지원이 추가되었습니다.
선형 솔버
- 통합 선형 솔버 백엔드 지원 확인을 간소화하는 정적
LinearSolver::CreateSolver()
메서드가 추가되었습니다. 모든 언어로 이용할 수 있습니다.
버그 수정
- FreeBSD에서 CMake 기반 빌드를 수정했습니다.
- 누적 컷 생성에서 CP-SAT 정렬을 수정했습니다.
- .Net 래퍼의 선형 솔버 메모리 누수를 수정했습니다.
2020년 6월
OR-Tools v7.7의 출시 발표
OR-Tools v7.7이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
종속 항목 업데이트
- Abseil-cpp b832dce가 c51510d (LTS 20200225.2)로 업데이트되었습니다.
- Protobuf 3.11.4가 3.12.2로 업데이트되었습니다.
새로운 기능 및 개선사항
- CP-SAT 솔버가 이제 만족도 모델에서 즉, 목표 없이
Feasible
대신Optimal
를 반환합니다. - MIP 커뮤니티의 타당성 펌프 휴리스틱을 추가했습니다.
버그 수정
CP-SAT 다중 스레딩 비정상 종료 문제가 해결되었습니다 (#2005 참고).
2020년 4월
OR-Tools v7.6 출시 발표
OR-Tools v7.6이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
CP-SAT의 새로운 기능
CP-SAT 문제 해결사에 다음과 같은 새로운 기능이 추가되었습니다.
- LP의 절단기 관리 개선
- 디버깅 도구
종속 항목 업데이트
Abseil-cpp 8ba96a8이 b832dce (LTS 20200225)로 업데이트되었습니다.
버그 수정
- presolve의 CP-SAT UNSAT 버그가 수정되었습니다 (#1908 참고).
- swigwin.exe url이 수정되었습니다.
- 자바 및 .Net용 SWIG 타입맵 관리가 수정되었습니다.
2020년 1월
OR-Tools v7.5 출시 발표
OR-Tools v7.5가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Python 3.8 지원이 추가되었습니다. (#1719)
- Visual Studio 2017의 소스에서 지원 컴파일을 중단했습니다. (#1852)
- Centos 7에서 Centos 8로 지원을 업데이트했습니다. (#1827)
종속 항목 업데이트
버그 수정
OR-Tools v7.5에서 다음 문제가 수정되었습니다 (전체 목록은 Milestone v7.5 참고).
구체적인 방법은 다음과 같습니다.
- 어셈블리 로드를 수정했습니다. #1421을 참고하세요.
- RouteIndexManager의
GetStartIndex()
및GetEndIndex()
메서드가 노출되었습니다. (#1843) - SWIG가 손상된 메서드를 삭제하도록 수정되었습니다. (#1838, #1276)
2019년 10월
OR-Tools v7.4 출시 발표
OR-Tools v7.4가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
새로운 기능 및 개선사항
- CP-SAT 솔버가 이제 적용 리터럴을 지원하지 않는 제약 조건을 확인합니다. 이러한 제약조건에 시행 리터럴이 있는 경우 모델 검사기는 해결 전에 오류를 반환합니다.
- 라우팅 라이브러리를 위한 더 빠르고 향상된 지역 검색
- 이제 선형 솔버에서 서드 파티 소프트웨어 Xpress-MP를 지원합니다. 이를 사용하려면 소스에서 OR 도구를 다시 빌드해야 합니다.
- NuGet 패키지의 아키텍처가 완전히 재작성되었습니다. 특히, 이제 Windows 플랫폼에서 4 .5.2 이상의.NET 프레임워크를 지원합니다.
지원 중단된 플랫폼
2019년 7월 출시 노트에 공지된 바와 같이 OR-Tools는 더 이상 Python 2.7을 지원하지 않습니다.
종속 항목 업데이트
Protobuf 3.9.0이 3.10.0으로 업데이트되었습니다.
2019년 8월
OR-Tools v7.3의 출시 발표
OR-Tools v7.3이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
지원 중단된 플랫폼
Google에서 Python 3로 이전함에 따라 Python 2.7에 대한 지원이 중단됩니다. 이는 Python 2.7을 지원하는 OR-Tools의 마지막 출시입니다.
종속 항목 업데이트
Protobuf 3.8.0이 3.9.0으로 업데이트되었습니다.
버그 수정
다음 문제가 OR-Tools v7.3에서 수정되었습니다. 전체 목록은 Kanban v7.3을 참고하세요.
구체적인 방법은 다음과 같습니다.
- Java에서 init/int64 전송 문제가 해결되었습니다. (#1448)
- 빈 누적 제약 조건을 처리할 때 presolve 검사가 수정되었습니다.
2019년 7월
OR-Tools v7.2 출시 발표
OR-Tools v7.2가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
플랫폼 변경사항
- Google에서 Python 3로 이전함에 따라 Python 2.7에 대한 지원이 중단됩니다. Python 2.7을 지원하는 OR-Tools는 최대 1개의 버전만 추가로 출시될 예정입니다.
- Ubuntu 18.10이 Ubuntu 19.04로 업데이트되었습니다.
- Visual Studio 2019에서 소스에서 컴파일하는 기능이 지원됩니다.
- Windows에서는 Python 3.5가 더 이상 지원되지 않습니다. Python 3.6 이상을 사용하세요.
종속 항목 업데이트
- 이제 CBC 2.10.3을 타겟팅합니다.
- 이제 Protobuf 3.8.0을 타겟팅합니다.
CP-SAT
- 검색, 동시 로드, 선형 완화를 여러 가지로 개선했습니다.
- Python에
LinearExpr.Sum()
및LinearExpr.ScalProd()
API가 추가되었습니다. - C#에서
IntVar[].Sum()
및IntVar[].ScalProd()
API가 지원 중단되었습니다. - C++:
SolveCpModel()
의 중복이므로SolveWithModel()
를 삭제했습니다. - Java API에
CpModel.addGreaterThan()
및CpModel.addLessThan()
메서드가 추가되었습니다.
선형 문제 해결사
- Python, Java, C#용
MPSolver.SetHint()
가 추가되었습니다(SCIP 및 Gurobi에서 지원됨). - Python, Java, C#용
MPSolver.SetNumThreads()
가 추가되었습니다(CBC, Gurobi, SCIP에서 지원됨). - SCIP 6.0.1에 대한 지원이 다시 작성되었습니다.
참조 문서
- 모든 언어와 도구 (알고리즘, 라우팅, 그래프, linear_solver 및 CP-SAT)에 관한 doxygen 및 pdoc3 기반 참조 매뉴얼을 추가했습니다. OR-Tools 참조 설명서를 확인하세요.
- C++ (모든 제품) 및 CP-SAT (C++, Python, Java)에 대한 참조 문서가 완전합니다.
- 모든 C++ 문서를 Python 및 Java로 내보내는 중입니다.
- .NET 문서는 부족하며 가까운 미래에 이를 개선할 솔루션이 없습니다. 사용 가능한 API가 계속 표시되므로 이 목록을 보관해 두었습니다.
2019년 5월
OR-Tools v7.1의 출시 발표
OR-Tools v7.1이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
필수 종속 항목 변경사항
OR-Tools v7.1에는 다음과 같은 새로운 종속 항목과 업데이트된 종속 항목이 있습니다.
- 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 변경사항
다음 섹션에서는 OR-Tools 7.1에서 CP-SAT API의 변경사항을 설명합니다.
도메인을 사용하여 변수 만들기
다음 예는 비연속 도메인을 사용하여 정수 변수를 만드는 방법을 보여줍니다.
이렇게 하면 삭제된 메서드 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년 3월
OR-Tools v7.0 출시 발표
OR-Tools v7.0이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 관련 섹션을 참조하세요.
지원되는 플랫폼 변경사항
OR-Tools v7.0은 더 이상 다음 플랫폼을 지원하지 않습니다.
- Visual C++ 2015
- Ubuntu 14.04
- Linux의 Python 3.4
이러한 플랫폼 중 하나를 사용하는 경우에도 OR-Tools v6.10을 설치할 수 있습니다.
필수 종속 항목 변경사항
OR-Tools v7.0에는 다음과 같은 새로운 종속 항목과 업데이트된 종속 항목이 있습니다.
- 신규: Abseil-cpp
- gflags 2.2.1이 2.2.2로 업데이트되었습니다.
다음 섹션에서는 OR-Tools 7.0의 새로운 기능과 개선사항을 설명합니다.
라우팅 프로그램을 위한 새로운 색인 관리자
OR-Tools v7.0에서 차량 경로 지정 프로그램은 새 RoutingIndexManager
를 사용해야 합니다.
이렇게 하면 위치의 표준 색인이 솔버에서 사용하는 내부 색인과 일치하고 코드의 오류를 방지하는 데 도움이 됩니다.
새 RoutingIndexManager
에서는 라우팅 프로그램을 약간 변경해야 하며 다음 섹션에서 설명합니다.
- C++ 및 Java에
RoutingIndexManager
를 포함하거나 가져옵니다. RoutingIndexManager
선언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
메서드는 솔버가 사용하는 내부 위치 색인을 거리 행렬의 표준 색인으로 변환합니다.
이전 버전과 같이 콜백을 해결자에 직접 전달하는 대신 v7.0에서는 먼저 콜백 참조인 transit callback 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
가 같은 경로에 있고 차량이 j
전에 i
를 방문하는 차량 경로를 반환합니다.
이러한 유형의 문제를 해결하는 예시는 수령 및 배송을 사용한 차량 라우팅을 참고하세요.
람다 함수 지원
OR-Tools v7.0에는 이제 C# 및 Java (이미 지원되는 C++ 및 Python 외에도)의 람다 함수 지원이 포함됩니다. 람다 함수는 라우팅 프로그램에서 콜백을 정의하는 편리한 방법을 제공합니다. 그러나 코드를 더 쉽게 읽을 수 있다고 생각되면 표준 함수를 사용하여 콜백을 정의할 수 있습니다.
위의 C# 및 자바 콜백 예는 람다 함수를 사용하여 콜백을 정의하는 방법을 보여줍니다.
2018년 11월
버전 v6.10 출시 발표
OR-Tools 버전 6.10이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
다음 섹션에서는 버전 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-Tools에서 이제 SCIP 6.0.0을 지원합니다.
바이너리
바이너리 배포판은 Java JDK 8 (Ubuntu 14.04의 JDK 7)을 사용하여 빌드되었습니다.
CP-SAT 문제 해결사
API 업데이트
- C++ CP-SAT CpModelBuilder API를 추가합니다.
예
일부 예시가 이동되었습니다.
- 커뮤니티 예시를
examples/contrib
(으)로 이동합니다. - 일부 예시를
ortools/<var>component</var>/samples
로 이동합니다 (예:ortools/linear_solver/samples/simple_program.java
).
2018년 9월
버전 v6.9 출시 발표
OR-Tools 버전 6.9가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
종속 항목 업데이트됨
- Protobuf 3.5.1 -> 3.6.1
- SCIP 4.0 -> 6.0
CP-SAT 문제 해결사
- API의 브레이킹 체인지 - 자세한 내용은 여기를 참조하세요.
- Python에서
SolveWithSolutionObserver
의 이름을SolveWithSolutionCallback
로 바꿉니다. Python의
CpSolverSolutionCallback
클래스에서NewSolution
의 이름을OnSolutionCallback
로 바꿉니다. 다음 예는 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
Python, Java, C#의 솔루션 콜백에
StopSearch
를 노출합니다. 문서는 여기를 참조하세요.Python, Java, C#에서
ModelStats
및CpSolverResponseStats
를 노출합니다.Python docstring 문서를 개선했습니다. 문서는 여기를 참조하세요.
문제 해결사 인터페이스 및 설명서의 Java 구현 업데이트
모듈로를 구현합니다.
저장소 구현 변경: 선택적 드레이닝/채우기 이벤트를 지정하기 위해 불리언과 함께 API를 추가합니다.
선형 솔버
- Java 및 C#에서
InterruptSolve
를 노출합니다.
CP 문제 해결사
- C#에서
SolutionCollector
디렉터를 노출합니다.
Python
Python 3.7
지원을 추가합니다.- 소스에서 컴파일하는 경우 Python을 감지할 때는
python2
보다python3
를 사용하세요.
.NET
- .NET 레이어가 완전히 다시 작성됩니다.
- 런타임 식별기
win-x64
,linux-x64
,osx-x64
와 호환되는Google.OrTools
NetStandard 2.0 Nuget 패키지를 제공합니다. Google.OrTools.FSharp
Nuget 패키지를 제공합니다.- 모든 .NET 예시의 프로젝트 파일을 추가합니다.
- 모든 F# 스크립트 예시 (.fsx)를 일반 F# 프로젝트 (.fs)로 업데이트합니다.
- 여기에서 .NET 패키지 빌드 생성에 관한 문서를 추가하세요.
플랫아연
- flatzinc에서 세트 지원을 추가합니다 (nosets.mzn 사용).
참여
- 바인더 지원을 추가합니다. 케빈 매더님께 감사드립니다.
DecisionVisitor
를 자바 바인딩의 디렉터 유형으로 만듭니다. Jeremy Apthorp님, 감사합니다.
2018년 7월
버전 v6.8 출시 발표
OR-Tools 버전 6.8이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
CP-SAT 문제 해결사 발표
CP-SAT 솔버는 제약 조건 프로그래밍을 위한 새로운 솔버입니다. CP-SAT 솔버는 원래 CP 솔버보다 빠르므로 CP 문제에 선호됩니다.
CP-SAT 솔버를 사용하는 예는 GitHub의 examples 디렉터리에서 이름에 _sat
가 포함된 파일을 찾습니다.
원래 CP 솔버는 기존 코드를 지원하기 위해 일정 기간 계속 유지되지만 지원 중단되었습니다.
CP-SAT 문제 해결사를 위한 새로운 옵션
이번 버전에는 다음 CP-SAT 문제 해결사 옵션이 추가되었습니다.
- 지역 주변 검색 (LNS):
SatParameters.use_lns
옵션을 사용하여 LNS를 사용 설정합니다. - 병렬 검색: 검색 중에 여러 스레드를 사용 설정하려면
SatParameters.num_search_workers
옵션을 사용합니다. 각 스레드는 서로 다른 매개변수와 서로 다른 임의의 시드를 가질 수 있습니다. 이렇게 하면 다양성, 그리고 하나 이상의 스레드가 솔루션을 찾을 가능성이 극대화됩니다.
문제 해결사의 성능 개선
CP-SAT 및 Glop 솔버의 성능을 개선했습니다.
2018년 3월
버전 v6.7 출시 발표
OR-Tools 버전 6.7이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
필수 종속 항목으로 업데이트
- Protobuf 3.5.0 -> 3.5.1
기타
- 베이스를 리팩터링하여 abseil-cpp 통합을 준비합니다.
- Travis CI 및 Appveyor 지속적 통합 (CI) 서비스 사용
토
- 성능 개선.
- Python API가 개선되었습니다.
- C# API(CpSolver.cs)를 추가합니다(실험용).
글롭
- 코드 리팩터링
- 성능 개선.
CMake 지원 (실험용)
- C++ OR-Tools CMake 지원을 추가합니다.
- OR-Tools를 독립형 CMake 프로젝트로 빌드할 수 있어야 합니다.
- 기존 CMake 프로젝트에 OR-도구를 통합할 수 있어야 합니다.
- Python OR-Tools CMake 기반 빌드를 추가합니다.
- CMake를 사용하여 Python 패키지 (휠)를 생성합니다.
참여
- 창에서 winsock2.h 재정의를 수정합니다. 플로렌트 톨린 드 리바롤님께 감사드립니다.
- F# 지원을 추가합니다 (실험용). 매튜 무어님께 감사드립니다. 참고: Makefile 빌더에서만 사용할 수 있습니다.
- .NET 스탠더드 지원 (실험용)을 추가합니다. Ziad El Malki님께 감사드립니다. 참고: Makefile 빌더에서만 사용할 수 있습니다.
2017년 11월
버전 v6.6 출시 발표
OR-Tools 버전 6.6이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
필수 종속 항목 업데이트
- Protobuf를 3.3.0에서 3.5.0으로
- gflags를 2.2.0 -> 2.2.1로 변경했습니다.
- CBC 2.9.8 -> 2.9.9
- Python의 필수 종속 항목으로 Python 모듈 6 (1.10)을 추가합니다.
버그 수정
- pull 요청 #494 이름 리팩터링 일부 편집기에서 IntelliSense에 관한 의견이 추가되었습니다. 매튜 무어님께 감사드립니다.
- pull 요청 #516 F# 독립 실행형 바이너리 명령어. 매튜 무어님께 감사드립니다.
- Glop의 정확도를 개선합니다.
SAT 문제 해결사
- 내부 SAT 문제 해결사 개선, 다양한 버그 수정
- LP 솔버에 연결된 SAT 솔버에 VRP 제약조건을 추가합니다.
- SAT 솔버에서 솔루션 관찰자를 변경하여
CpSolverResponse
를 매개변수로 사용합니다. - SAT Solver에서 Glop 사용을 개선합니다.
- SAT-LP 연결 속도를 높입니다.
- SAT cp_model protobuf 형식에 저장소 제약 조건을 추가합니다.
SAT/Python
- Python에서의 SAT API를 소개합니다.
ortools/sat/python/cp_model.py
의 코드- examples/python/에 예를 추가합니다.
- assignment_sat.py
- assignment_with_constraints_sat.py
- code_samples_sat.py
- cp_is_fun_sat.py
- gate_scheduling_sat.py
- hidato_sat.py
- jobshop_ft06_sat.py
- nqueens_sat.py
- nurses_sat.py
- rcpsp_sat.py
- steel_mill_slab_sat.py
- worker_schedule_sat.py
- IPython 노트북에 대한 지원을 추가합니다.
- Python 예시는 노트북으로 내보내지며 examples/notebook에서 제공됩니다.
예
- ProtoBuf 형식을 사용하여 문제를 저장하도록 rcpsp_parser를 다시 작성합니다.
- RCPSP 파서를 개선합니다.
2017년 10월
버전 v6.5 출시 발표
OR-Tools 버전 6.5가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
플랫폼 변화
- pypi 모듈 py3-ortools가 ortools 모듈로 병합되었습니다. 이제 'ortools'라는 하나의 모듈만 있습니다.
- 이러한 Python 모듈의 기본 형식은 이제 휠 파일입니다.
pypi에서 Python용 OR-도구를 설치하려면
pip install ortools
를 실행하면 됩니다. 최신 버전의 pip가 설치되어 있어야 합니다(9.0.1 이상). 이렇게 하면 최신 버전 (v6.5)을 가져올 수 있습니다.
Bug fixed
이제 protobuf jar 파일이 컴파일된 클래스로 올바르게 빌드됩니다.
새로운 예
- 더 많은 F# 예가 example/fsharp 디렉터리에 기여했습니다(매튜 무어 씨께 다시 한번 감사드립니다).
- Java MIP 예도 제공되었습니다 (고마워요, Darian).
2017년 9월
버전 v6.4 출시 발표
OR-Tools 버전 6.4가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
플랫폼 변화
- Linux 플랫폼의 Pypi 모듈은 이제 Manylinux1 태그를 사용하여 휠 파일로 제공됩니다. 페데리코 피카렐리님께 감사드립니다. 이 변경사항으로 인해 2017년 7월 출시에서 도입된 Linux별 모듈이 이전 버전으로 되었습니다.
새로운 기능
- GLOP 내에서 사용되는 확장 방법이 개선되었습니다.
- C# 라우팅 라이브러리에서 평가자 래핑을 수정합니다. 감사합니다. DevNamedZed
- 대형 모델에서 flatzinc presolve의 성능을 개선합니다.
- 기본적으로 flatzinc에 지원되는 SAT를 사용합니다.
- Sat Solv를 위한 Core 기반 접근 방식의 성능을 개선합니다.
- 잘못 실패한 선형 할당 알고리즘의 버그를 수정했습니다.
- ortools/examples/fsharp에 F# 예가 추가되었습니다.
- 라우팅 라이브러리에서 양성 페널티 검사가 삭제됩니다.
2017년 8월
버전 v6.3 출시 발표
OR-Tools 버전 6.3이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
새 다운로드 파일
이제 Linux용 Python 휠 파일은 OR-Tools 출시 페이지에서 모든 다운로드의 최신 버전과 함께 다운로드할 수 있습니다.
미니아연 솔버
이 버전에는 Minzinc 2017 챌린지를 위해 전송된 최종 sat 및 flatzinc 코드가 포함되어 있습니다.
2017년 7월
버전 v6.2 출시 발표
OR-Tools 버전 6.2가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
플랫폼 변화
- 이제 여러 Linux 바이너리 배포판 (Ubuntu 14.04, 16.04, 17.04, CentOS 7, Debian 9)이 지원됩니다.
- 이제 Linux 플랫폼의 Pypi 모듈에 배포를 설명하는 태그 (ubuntu-14.04, ubuntu-16.04, ubuntu-17.04, centos-7, debian-9)가 포함됩니다.
새로운 기능
Linux 아티팩트를 빌드할 수 있도록 Docker에 대한 지원을 추가했습니다. or-tools/tools/docker
로 이동하여 Makefile
를 살펴보고 가능한 타겟(make archive
, make pypi
, make pypi3
)을 확인합니다.
이러한 명령어는 export
하위 디렉터리를 만들고 그 안에 바이너리 아티팩트를 추가합니다.
2017년 6월
버전 v6.1 출시 발표
OR-Tools 버전 6.1이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
플랫폼 변화
- Visual Studio 2017이 지원됩니다. Visual Studio 2013은 더 이상 지원되지 않습니다.
- macOS 버전 10.9 이상이 지원됩니다.
새로운 기능
CP-SAT 솔버를 위해 새로운 protobuf 형식을 추가했습니다.
ortools/sat/cp_model.proto
를 참조하여 모델을 정의하고 ortools/sat/cp_model_solver.h
를 참조하여 문제를 해결하세요.
버그 수정
문제 #420: 모든 플랫폼의 Python pypi 모듈에서 누락된 __version__
속성이 수정되었습니다.
2017년 5월
버전 v6.0 출시 발표
OR-Tools 버전 6.0이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
C++의 새 디렉터리 구조
C++를 사용할 때 OR-Tools의 소스/포함 구조를 변경했습니다. 목표는 C++ include 파일의 캡슐화를 향상하는 것입니다. 또한 C++와 Python 디렉터리 구조를 정렬한다는 이점도 있습니다.
src/
에서ortools/
로 이름이 변경되었습니다.- 이제 C++ 파일의 모든 #include 명령어에
ortools
접두사가 추가됩니다.#include "constraint/constraint_solver.h"
는 이제#include "ortools/constraint/constraint_solver.h"
입니다.
새로운 기능
- Bazel 지원
이제 Google의 빌드 도구인 bazel을 사용하여 OR-도구를 빌드할 수 있습니다. Linux 및 Mac OS X에서 작동합니다. Bazel 버전 0.4.5 이상을 다운로드한 후 디렉터리를 or-tools로 변경하고 예를 빌드합니다.
bazel build examples/cpp/...
라우팅
경로 라이브러리에서 휴식 (예: 점심을 먹는 운전자로 인한 차량 다운타임) 지원을 구현했습니다. 이 기능은 cvrptw_with_breaks.cc
예에 나와 있습니다.
SCIP 지원
이제 선형 솔버 래퍼가 SCIP 4.0을 지원합니다. 이제 SCIP를 먼저 빌드한 다음 이를 사용하겠다고 또는 도구에 알려야 합니다 여기에서 안내를 확인할 수 있습니다.
GLPK 지원
GLPK를 사용한 빌드 방식도 변경되었습니다. 여기를 참조하세요.
정리
- 지원 중단되어 C++ 코드베이스에서 hash_map 및 hash_set의 모든 사용이 삭제되었습니다. STL에서 unordered_map 및 unordered_set으로 대체되었습니다.
- Michael Powell이 제공한 C# makefile 정리
2017년 1월
버전 v5.1 출시 발표
OR-Tools 버전 5.1이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
새로운 기능
설치 중
- 바이너리 배포판이나 소스 코드에서 OR 도구를 설치하는 간단한 절차를 도입했습니다. 자세한 내용은 바이너리에서 OR-도구 설치 또는 소스에서 OR-도구 설치를 참고하세요.
라우팅
대칭적인 여행 영업 담당자 문제에 대한 Held-Karp 하한값을 계산하는 알고리즘을 구현했습니다. 이를 통해 최적의 솔루션이 아닌 솔루션 비용과 최적의 솔루션 비용 간 차이의 상한값을 계산할 수 있습니다.
- 차량 경로 라이브러리에
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 문제 해결사 — 특히 누적 제약조건의 경우 Sat 문제 해결사의 성능이 개선되었습니다.
- Glop 솔버 — Glop 솔버의 수치 견고성이 개선되어 이제 어려운 숫자 문제에 더 정확한 해법을 찾을 수 있습니다.
- 플랫아연 솔버
- flatzinc 인터프리터의 Sat 백엔드 성능이 크게 개선되었습니다.
- C# flatzinc 인터페이스를 간소화했습니다. 새 인터페이스의 예는 https://github.com/google/or-tools/blob/master/examples/csharp/csfz.cs를 참조하세요.
버그 수정
- 단일 차량 및 측면 제약 조건이 있는 라우팅 모델에
PathCheapestArc
휴리스틱을 사용하면 솔버가 지나치게 오래 실행되는 경우가 있습니다. 이 문제는 부차 제약을 적절하게 고려하여 수정되었습니다. - Java에서는 차량 라우팅 문제를 해결할 때 경로 솔버가 때때로 비정상 종료됩니다. 이 문제는 최신 버전에서 수정되었습니다.
2016년 11월
버전 v5.0 출시 발표
OR-Tools 버전 5.0이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
실행 중인 예시
- 프로그램을 더 쉽게 컴파일하고 실행할 수 있는 언어별 타겟과 함께 OR-도구와 함께 제공되는 예가 도입되었습니다.
토
- 제약 조건 프로그래밍 지원이 추가되었습니다.
- diffn, 누적 , 회로 및 서브회로 제약조건을 구현했습니다.
- 불연속 누적 제약조건의 최대 에너지 필터링 알고리즘을 기반으로 오버로드 검사기를 구현했습니다.
- AllDifferent 제약조건에 더 나은 전파를 구현하는 서로 다른 모든 결합된 일관된 전파기를 구현했습니다.
FlatZinc
- FlatZinc 문제에 대한 SAT 문제 해결사를 구현했습니다.
제약 조건 솔버
- 다음 제약 조건이 구현되었습니다.
- atMost: 지정된 값과 동일한 변수 개수의 상한값을 설정합니다.
- MakePathPrecedenceConstraint 및 MakePathTransitPrecedenceConstraint: 쌍 집합에 우선순위 제약조건을 구현합니다.
라우팅
- 검색 중에 솔루션을 찾을 때마다 호출되는 콜백인 AddAtSolutionCallback을 구현했습니다.
- RoutingModel에 디포가 없는 생성자를 삭제했습니다. 이제 라우팅 모델에 하나 이상의 창고를 지정해야 합니다.
2016년 9월
버전 v4.4 출시 발표
OR-Tools 버전 4.4가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
토
- 확장 스케줄링 API를 사용하고 예 (weighted_tardiness_sat, jobshop_sat)를 사용하도록 수정했습니다.
그래프
- Graph 클래스에 반복기 트레잇을 추가했습니다.
OR-도구 배포
- Nuget 패키지가 다시 지원됩니다.
2016년 8월
버전 v4.3 출시 발표
OR-Tools 버전 4.3이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
제약 조건 솔버
- 변수가 지정된 간격을 벗어나도록 제한하기 위해
NotBetween
메서드를 구현했습니다.
라우팅
- 이 예와 같이 기존
NotMember
제약 조건을 확인하고 지역 검색 필터에 사용할 수 있도록 모델의 파싱을 추가했습니다. - 로컬 검색 프로파일링이 추가되었습니다.
- 로컬 이동을 수정합니다.
선형 문제 해결사
- SCIP 상태 보고가 수정되었습니다.
토
- SAT presolver 사용을 단순화하기 위해 SolveWithPresolve 메서드를 구현했습니다.
- src/sat/util.h|cc에서 검색 유틸리티를 다시 그룹화했습니다.
- SMT (Lazy Clause Generation) 스케줄링 제약 조건을 구현했습니다. jobshop_sat.cc 및 weighted_tardiness_sat.cc를 참조하세요.
글롭
- 더 많은 계산 단계에서 희소성을 악용하여 성능을 개선했습니다.
플랫아연
- minizinc 챌린지에서 발견된 버그를 수정했습니다.
Lp_data
- 반복자에서 템플릿을 계속 단순화합니다.
OR-도구 배포
- 이제 C# 어셈블리의 이름이 기본적으로 강력하게 지정됩니다.
- Protobuf3.0.0으로 업그레이드되었습니다.
- OR-Tools 보관 종속 항목을 확인하는 Python 스크립트가 추가되었습니다.
2016년 7월
버전 v4.2 출시 발표
OR-Tools 버전 4.2가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
제약조건 솔버 (라우팅)
- 이제 이 분리 내에서 활성화될 수 있는 최대 노드 수인 카디널리티로 분리를 정의할 수 있습니다. 예를 들어 n개의 노드와 k의 카디널리티가 있는 논리를 추가하면 n개의 노드 중 k개의 노드가 활성 상태가 될 수 있습니다. 이렇게 하려면 AddDisjunction의 새로운 정의를 사용하면 됩니다.
- 노드당 다중 분리에 대한 지원이 추가되었습니다. 예를 들어 이제 노드 N1을 다수의 분리 (D1..Dm)에 추가할 수 있습니다. 이렇게 하면 이들 중 하나에서 활성 상태가 될 가능성이 높아집니다. 분리 기간과 관련된 문제에 대해 더 빠른 라우팅 검색 알고리즘이 도입되었습니다.
- 라우팅 모델 매개변수에 제약조건 문제 해결사 매개변수를 추가하고, 라우팅 검색 매개변수로 log_search를 추가했습니다.
- 분리된 시간대의 문제를 해결하면 지역 검색 알고리즘이 더 빠르게 해결됩니다. 자세한 내용은 cvrp_disjoint_tw.cc 예를 참고하세요.
Glop (선형 최적화)
- 더 빠른 심플렉스 알고리즘이 도입되었습니다.
OR-도구 배포
- C++, Java, .Net의 개별 보관 파일이 아닌 플랫폼당 하나의 보관 파일이 있습니다. Python 보관 파일은 여전히 pypi에서 호스팅됩니다.
- pypi를 사용하면 Mac OS X 및 Windows에서 wheel (.whl) 모듈로 전환되었습니다. MAJOR.MINOR 번호 지정 스키마를 도입했습니다. 이 숫자는 Mac OS X 공유 라이브러리, Python 모듈, .NET 어셈블리에 저장된 버전인 아카이브 이름에 사용됩니다. 우리가 릴리스하는 첫 번째 버전은 이 스키마가 포함된 v4.2입니다.
2016년 6월
버전 v2016-06 출시 발표
OR-Tools 버전 v2016-06이 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
제약 조건 솔버
- CP 라이브러리에서 대부분의 콜백 인스턴스 (src/base/callback.h)를 삭제했습니다.
- NotMemberCt가 추가되었습니다 (변수는 간격 집합에 속할 수 없음).
라우팅 라이브러리
- 호환되지 않는 변경:
AddDimensionWithVehicleCapacity
에서 차량의 용량을 지정하려면 이제 콜백 대신 배열 (c++의 벡터)을 전달해야 합니다.
글로프
- 희소 행렬의 내부 표현을 변경합니다.
- 성능이 개선되었습니다.
그래프
- Dijkstra와 Bellman-Ford 알고리즘을 다시 작성하여 콜백을
std::function
(C++)로 대체합니다. - 호와 노드를 반복할 때 다양한 그래프 구현의 API를 변경합니다.
토
- 사용하지 않는 핵심 메서드 (해결 노드)를 삭제합니다.
- 만족스럽지 않음에 대한 증거를 확인하는 전문가 작성을 추가했습니다.
- 전처리기를 추가합니다.
밥
- 새로운 잘 아는 지역을 추가합니다.
예
- c++: 예시에서 filelineReader 삭제
- 데이터: 단일 머신 예약 문제를 추가합니다.
문서
- 새로운 문서를 확인하세요.
2016년 4월
버전 v2016-04 출시 발표
OR-Tools 버전 v2016-04가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
종속 항목 업데이트됨
- 제약 조건 프로그래밍 및 라우팅 라이브러리에서 플래그 대신 protobuf를 사용합니다. 자세한 내용은 http://or-tools.blogspot.fr/2016/02/heads-up-upcoming-incompatibility-in.html을 참고하세요.
2015년 12월
버전 v2015-12 출시 발표
OR-Tools 버전 v2015-12가 출시되었습니다. 버전을 업데이트하려면 OR-Tools 설치의 해당 섹션을 참조하세요.
제약 조건 솔버
- CP 솔버의 대규모 주변 검색에서 호환성이 손상되었습니다 (새 API를 보려면
examples/cpp/ls_api.cc
,examples/python/pyls_api.py
,examples/csharp/csls_api.cs
,examples/com/google/ortools/sample/LsApi.java
참고). - Python 래핑을 정리했습니다. CP 솔버에서 맞춤 결정을 지원합니다(API의 작동 방식은
examples/test/test_cp_api.py
참고). - 다양한 기능이 개선되고 버그가 수정되었습니다.
2015년 9월
github에서 첫 번째 버전 발표.
이제부터 파일이 여기에 저장됩니다.
플랫아연
- flatzinc 인터프리터용 바이너리 보관 파일을 추가했습니다(www.minizinc.org 참고).
- 챌린지에 사용된 버전의 몇 가지 수정사항이 포함되어 있습니다.