Optaplanner: как оставить переменные планирования нулевыми, если это нарушает жесткое ограничение

Поведение, которое я вижу в результатах, заключается в том, что два курса, которые могут быть только в один период времени (например, в понедельник, 9 утра), в любом случае устанавливаются в один и тот же период, несмотря на жесткое ограничение. Я хотел бы, чтобы для одного из них было установлено значение null, чтобы я мог получить их позже и сообщить пользователю.

Есть ли конфигурация для этого? Если нет, то как мне обращаться с такими случаями? Я ожидаю, что в моих приложениях будут нарушены жесткие ограничения, но для меня важно то, что я могу уведомить пользователя, какие курсы нельзя запланировать, чтобы он мог запланировать их сам (через пользовательский интерфейс).

Вот соответствующее правило жесткого ограничения:

rule "roomOccupancy"
    when 
        Lecture(period != null, $leftPeriod:period, room != null, $leftRoom: room)
        Lecture(eval($leftPeriod.overlaps(period) == true), $leftRoom == room)
    then
        scoreHolder.addHardConstraintMatch(kcontext, -1);
end

person Samuel    schedule 03.07.2017    source источник


Ответы (1)


Если я правильно понимаю, вы хотите, чтобы один из курсов оставался незанятым в расписании, если нарушается определенное ограничение. По умолчанию каждый объект планирования будет планироваться. Решение с наивысшим баллом по-прежнему будет решением.

Я предлагаю вам ознакомиться с over- планирование с ограничениями: вы назначаете как можно больше объектов, не нарушая жестких ограничений. При планировании с чрезмерными ограничениями сущности можно не назначать.

person Manish    schedule 10.07.2017