2014-05-15 1 views
0

비슷한 쌍으로 된 운송 실행을 최대화하기 위해 OptaPlanner에 대한 Drools 점수를 개발하려고합니다. 여러 계획 엔티티를 사용하여 drools 점수

  • amPmIndicator을 runID

    • 12,000 - - 오전 또는 오후
    • 위치

    기획 변수가 짝을 포함 실행 가능성을 포함 이들 중 500 -

    기획 개체는 실행입니다 이 중 :

    • runID1
    • 높은 순위 점수가 짝을 극대화하기 위해 사용되는
    • amPmIndicator

    LOCATION1

  • runID2
  • LOCATION2는 runID를 사용하여 실행하고 특정 runID로 확인하기 때문에 그 규칙을 잘 작동합니다.

    오전과 오후의 쌍을 이루는 위치의 수를 최대화하는 낮은 순위 규칙을 개발해야합니다. 따라서 AM에 쌍으로 연결된 두 위치는 PM의 동일한 위치에서 쌍을 이루어야합니다.

    Drools 점수는 어떻게 구성 할 수 있습니까? 두 개의 계획 엔티티에 할당 된 AM에 대한 계획 변수의 수를 누적 한 다음 AM 계획 엔티티와 동일한 위치로 유사한 PM 계획 변수 수와 비교해야합니다.

    또는 이것을 모델링하는 더 좋은 방법이 있습니까?

    모든 도움을 주시면 대단히 감사하겠습니다.

    저는 제 질문이 DRL 언어 기능 중 하나 이상이며 집계를 수행하는 방법이라고 생각합니다. 내가 작성한 규칙은 다음과 같습니다. 단, PM에 한 쌍만 존재한다는 것을 보증합니다.

    // Attempts to make certain that a morning pairing at a Location level exists in the morning and afternoon 
    // This rule should attempt to count Location pairs in AM and PM rule 
    "matchedLocationsAmToPm" 
         when 
          Run(amPm == "AM" && earlyLate == "EARLY", $amPair : pair, $earlyLocationId : LocationId) 
          Run(amPm == "AM" && earlyLate == "LATE" && pair == $amPair, $lateLocationId : LocationId) 
          Run(amPm == "PM" && earlyLate == "EARLY" && LocationId == $earlyLocationId, $pmPair : pair) 
          not Run(amPm == "PM" && earlyLate == "LATE" && LocationId == $lateLocationId && pair == $pmPair) 
         then 
          scoreHolder.addSoftConstraintMatch(kcontext, -1000); 
    
  • 답변

    0

    6.1 문서에서 "fairness/load balacing score constraints"를 찾으십시오. 또한 그것에 대해 see this video.

    페어링 된 실행이 (명백하게) 부드러운 제약 조건이므로 분명히 모델을 변경하지 않습니다. (하드 제약 조건이라면 계획 엔티티에 계획 변수가 2 개 있다고하는 모델을 주장 할 수 있지만 권장하지는 않을 것입니다.)

    +0

    위의 원래 질문에 설명과 샘플 코드를 추가했습니다. – user2952819

    +0

    한숨. 내 답변의 첫 번째 문장을보십시오 : docs = clarification, video = optplanner 예제의 예제 이름. –

    +0

    감사합니다. 나는 지금 나는이 해결책을 시도 할 것임을 이해한다고 생각한다. 이런 식으로 생각하면 시간이 좀 걸립니다. 양해 해 주셔서 대단히 감사합니다. – user2952819