optaplanner를 처음 사용하려고 시도했습니다. (은 매우 간단하고 도움은 매우 완전하며 오류 메시지는 매우 명확합니다). 내 문제는 간단합니다. 크기에 따라 팀을 팀에 할당하십시오. 나는 모든 방을 채우고 싶습니다, 그리고 나는 팀이 훨씬 더 많은 사람들이 이용 가능한 공간 인보다 더 많을 수도 있습니다.Optaplanner에서 변수 할당을 강제로하지 마십시오
제 문제는 분명히 모든 팀을 할당 할 수 없다는 것입니다. 그리고 나는 이것을 어떻게 나타낼 지 궁금합니다.
처음에는으로 HARD_SOFT 점수를 사용했습니다. 사용 가능한 공간과 할당 된 팀의 차이로 인해 필자에게 하드 스코어가 주어졌습니다. 간단한 구현으로 솔버는 하드 제한을 깨는 경우에도 모든 팀을 할당하고 계속 실행합니다.
// Loop on all rooms
for (Room currentRoom : currentAllocation.getRoomList()){
int requiredSize = 0;
// Cumulated sum of allocated people required size
for (People currentPeople : currentAllocation.getPeopleList()){
if (currentRoom.equals(currentPeople.getRoom())){
requiredSize += currentPeople.get_requiredSize();
}
}
// Check if max capacity is respected or not for current room
if (requiredSize > currentRoom.getSize()){
// Max capacity is not respected
hardScore += (currentRoom.getSize()-requiredSize);
}
}
다음, 나는 또 하나 개의 인공 룸 (방 0)을 추가했다. 팀이 그 방에 배정되면 내 점수가 떨어집니다. 다른 객실은 하드 스코어로 추적됩니다.
이제 하드 점수가 0이되면 즉시 솔버를 멈출 수 있습니다. 소프트 점수는 왼쪽 공간을 줄이기 위해 사용됩니다. 그리고 최종 솔루션에서 할당되지 않은 팀 (방 0에 할당 된 팀)을 쉽게 찾을 수 있습니다. 진행하는 올바른 방법입니까?
많은 도움을 주셔서 감사합니다.
도움 주셔서 감사합니다. – RandomCoder