2014-09-11 2 views
0

내 첫 번째 게시물이고 학교 프로젝트를 위해 Java 프로그래머를 배우는 팀원을 위해 게시하고 있습니다. 그래서 우리는 좋은 프로그래머가 아닙니다. Optaplanner가 특정 방 유형으로 강의를 이동하도록 제약 조건을 어떻게 추가 할 수 있습니까? 예를 들어 강의실 '프로그래밍'을 컴퓨터 실과 일반 강의실에서 '수학'강의로 옮기고 싶습니다. 그러나 제 제약으로 그것은 어려운 제약을 선언하지만 그들의 방에서 강의를 움직이지 않습니다. 이것은 부정적인 제약이되어야합니다. 따라서이 하드 제한 조건에 대한 부정적인 점수가 표시되지만 여전히 해결/이동되지는 않습니다. Optaplanner가 컴퓨터 룸 제한을 추가합니다

rule "computerroom" 
    when 
     $room : Room($computerroom : computerroom) 
     $course : Course(computerroom == $computerroom) 
    then 
     scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 

우리는 클래스 룸에 새로운 변수를 추가, 같이 : 그래서 u는 우리에게 조언을 가지고있다

package org.optaplanner.examples.curriculumcourse.domain; 

import com.thoughtworks.xstream.annotations.XStreamAlias; 
import org.optaplanner.examples.common.domain.AbstractPersistable; 

@XStreamAlias("Room") 
public class Room extends AbstractPersistable { 

    private String code; 
    private int capacity; 
    private boolean computerroom; 

    public String getCode() { 
     return code; 
    } 

    public void setCode(String code) { 
     this.code = code; 
    } 

    public boolean getComputerroom() { 
     return computerroom; 
    } 

    public void setComputerroom(boolean computerroom) { 
     this.computerroom = computerroom; 
    } 

    public int getCapacity() { 
     return capacity; 
    } 

    public void setCapacity(int capacity) { 
     this.capacity = capacity; 
    } 

    public String getLabel() { 
     return code; 
    } 

    @Override 
    public String toString() { 
     return code + " {C" + capacity + "}"; 
    } 

} 

여기

제약 조건인가?

또 다른 작은 점 : Optaplanner가 작동 할 많은 데이터를 얻습니다 : 해결을위한 최대 지출 시간을 어떻게 늘릴 수 있습니까? 우리는 1152 이상의 다른 값을 시도했기 때문에 작동하지 않습니다. 약간의 질문 일뿐입니다. 제약 조건이 더 중요하지만 프로그램을 실행하게되어 기쁩니다!

은 접견 규칙은 "계획 변수"(= 해결하는 동안 변경 변수) 아무것도 확인되지 않은 점수 SEP2014

답변

0

. 정적이기 때문에 처음 시작했을 때와 다른 점수를 가질 수 없습니다.

이 대신 고려 :

rule "computerroom" 
    when 
    // If there's a room which has no computer 
    $r : Room(hasComputer == false) 
    // And we're putting a course which needs a computer in that room 
    $course : Course(needsComputer == true, room == $r) 
    then 
    scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 

중요한 것은 여기 Course(..., room == $r)입니다. 그 은 계획 변수입니다. 계획 중에 변경됩니다.

참고 : 컴퓨터 실을 사용하는 경우 컴퓨터가 필요없는 코스는 처벌되지 않습니다 (하지만 쉽게 변경 될 수 있음).

같은 규칙이 있지만,보다 효율적으로 짧은을 쓰고 :

rule "computerroom" 
    when 
    $course : Course(needsComputer == true, room != null, room.hasComputer == false) 
    then 
    scoreHolder.addHardConstraintMatch(kcontext, -1); 
end