2012-03-24 6 views
1

제약 조건을 가진 효율적인 작업 스케줄링을 개발하는 방법 ??Java에서 프로그래밍하는 제약 조건

스케줄러는 이러한 방법을 포함한다 :

startBeforeEndOf(Job j) 
startAfterEndOf(Job j) 
startBeforeStartOf(Job j) 
startAfterStartOf(Job j) 
endBeforeEndOf(Job j) 
endAfterEndOf(Job j) 
endBeforeStartOf(Job j) 
endAfterStartOf(Job j) 

모든 작업은 ID와 시간 매개 변수가 있습니다.

이 문제에 대한 가능한 해결책은 기술 백 트랙킹을 기반으로 할 수 있습니다. 작업은 선택 점으로, 일시적인 순간은 선택 사항으로 사용됩니다 (최악의 경우 전체 작업 시간은 작업 시간의 합계이므로 전체 순차 실행이됩니다).

또는 데이터를 적절하게 나타내야하고 제약 조건이 충족되지 않은 경우 작업을 제약 조건에 배치하고 작업 (및 그것에 종속 된 모든 작업)에서 앞으로 이동하는 시간축에서 일정을 생성해야합니다. 하지만 정확히 내가 자바에서 이것을 할 수 있는지 모르겠다.

다른 말로하면 나는 직업 관리에서 강렬한 역 추적 접근법을 피하는 방법을 찾고 있습니다.

+1

인가 :

예를 들어, 다음과 같은 점수 규칙을 추가, 각 JobstartMinute에 할당? 이 알고리즘을 사용할 수있는 알고리즘을 알고 있습니까? 검색 프로세스에 휴리스틱을 추가 할 수 있지만 백 트랙킹은 솔루션의 일부로 보입니다. 철저한 검색을 원하지 않는 한 :-) –

+0

나는 개인 목록과 같은 제약 조건에 따라 각 작업을 구분하기 위해 다양한 목록을 사용하려고 생각합니다. startBeforeEnd; \t 개인 목록 startAfterEnd; \t 개인 목록 startBeforeStart; \t 개인 목록 startAfterStart; \t 개인 목록 endBeforeEnd; \t 개인 목록 endAfterEnd; \t 개인 목록 endBeforeStart; \t 개인 목록 endAfterStart; \t 개인 목록 제한됨; 그러나 나는 이것을 정확히 어떻게 개발할 수 있는지 모른다. – AndreaF

답변

0

시도 OptaPlanner (java, 오픈 소스) a quick start here이 있습니다. 이 숙제

when 
    $leftJob : Job($startMinute : startMinute) 
    // getEndMinute() returns startMinute + durationInMinutes 
    $rightJob : Job(beforeJob == $leftJob, endMinute > $startMinute) 
then 
    // punish 
end 
+0

emmm ...이 문제에서 해결책을 만나는 데 어떻게 졸음을 적용 할 수 있습니까? 감사합니다 – AndreaF

+0

@AndreaF : 위 참조 –

0

오픈 소스 제약 프로그래밍 라이브러리를 사용할 수 있습니다. This은 제약 조건 만족 문제 등을 위해 Java로 작성된 많은 솔버에게 게시 지점을 지정합니다.

+0

감사합니다. 그러나이 라이브러리는이 특정 문제에 비해 너무 큽니다. 더 작은 것이 있습니까? – AndreaF

+0

@AndreaF - 내가 아는 것은 아닙니다. 그러나 라이브러리 중 하나에서 필요한 기능을 찾을 수 있습니다. 그런 다음 라이브러리의 구현을 파고 귀하의 케이스에 적용하십시오. –

+0

백가지 코드 라인 광고를 읽는 것은이 문제에서 이러한 일반 라이브러리를 수정하려고 시도하는 것은 너무 복잡한 방법입니다. 직감이 적당하다면 숙련 된 개발자가 약간의 수업을 통해 해결할 수 있다고 생각합니다. – AndreaF