2016-08-09 4 views
0

초코 솔버의 초보자입니다. 나는 간단한 교대 스케줄러를 만들고 싶다. 제가Choco solver shift scheduling

IntVar day1 = model.intVar("day1", new int[] {0,1,2,3,4,5}); 

같은 정수 변수를 설정 위치를 0, 1, ... 5 직원에게 기준 ID이다.

월별 기준 이동 계획 이후 총 30 개의 변수 (매월 1 일씩)가 있습니다. 예를 들어 허용하지 않는 제약 조건을 설정했습니다. 2 일 연속으로 교대하지 말라.

내 질문은 어떻게 각 고용주가 최소 5 교대를 갖도록 제약 조건을 설정할 수 있습니까? 도메인의 각 값은 30 개의 변수 모두에서 5 번 이상 나타납니다.

감사합니다.

답변

0

이렇게하는 방법에는 여러 가지가 있습니다. model.globalCardinality와 model.count를 살펴보면 이러한 제약 조건을 통해 변수 집합에서 값이 사용 된 횟수를 계산할 수 있습니다. .

인스턴스 model.count 들어

http://choco-solver.org/apidocs/org/chocosolver/solver/constraints/IConstraintFactory.html

후() ((3), (5,10)을 바르 model.intVar); 즉, vars의 5와 10 사이의 변수가 3과 같아야하므로 직원 3은 5와 10 사이의 시프트를 수행해야 함을 의미합니다.