Планирование смен Choco Solver

Я новичок в Choco Solver. Я хочу сделать простой планировщик смен. я установил целочисленные переменные, подобные этому

IntVar day1 = model.intVar("day1", new int[] {0,1,2,3,4,5});  

где 0 , 1,...5 — идентификатор ссылки на сотрудника.

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

Мой вопрос в том, как я могу установить ограничение, чтобы у каждого работодателя было минимум 5 смен, т.е. каждое значение в домене встречается не менее 5 раз во всех 30 переменных?

Благодарю вас!


person MrRisoni    schedule 09.08.2016    source источник


Ответы (1)


Есть несколько способов сделать это. Взгляните на model.globalCardinality и model.count, эти ограничения позволяют подсчитать, сколько раз значение используется набором переменных.

http://choco-solver.org/apidocs/org/chocosolver/solver/constraints/IConstraintFactory.html

Например, model.count(3, vars, model.intVar(5,10)).post(); означает, что между 5 и 10 переменными в vars должно быть равно 3, поэтому сотрудник 3 должен выполнять от 5 до 10 смен.

person Jean-Guillaume Fages    schedule 10.08.2016