이 페이지에는 새로운 기능, 버그 수정, 코드 및 설치 절차 개선사항을 비롯하여 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.OrToolsNetStandard 2.0 Nuget 패키지를 제공합니다. Google.OrTools.FSharpNuget 패키지를 제공합니다.- 모든 .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 참고).
- 챌린지에 사용된 버전의 몇 가지 수정사항이 포함되어 있습니다.