
org.cpsolver.coursett.criteria.DepartmentBalancingPenalty Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cpsolver Show documentation
Show all versions of cpsolver Show documentation
The constraint solver library contains a local search based framework that allows
modeling of a problem using constraint programming primitives (variables, values, constraints).
The newest version!
package org.cpsolver.coursett.criteria;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.cpsolver.coursett.constraint.DepartmentSpreadConstraint;
import org.cpsolver.coursett.model.Lecture;
import org.cpsolver.coursett.model.Placement;
import org.cpsolver.ifs.assignment.Assignment;
import org.cpsolver.ifs.util.DataProperties;
/**
* Department balancing penalty. This criterion tries to balance classes of each
* department evenly. This means that for instance each department gets a fair
* amount of unpopular times like early morning or late afternoon. This criterion
* is counted by {@link DepartmentSpreadConstraint}.
*
*
* @author Tomas Muller
* @version CourseTT 1.3 (University Course Timetabling)
* Copyright (C) 2006 - 2014 Tomas Muller
* [email protected]
* http://muller.unitime.org
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not see
* http://www.gnu.org/licenses/.
*/
public class DepartmentBalancingPenalty extends SameSubpartBalancingPenalty {
@Override
public double getWeightDefault(DataProperties config) {
return 12.0 * config.getPropertyDouble("Comparator.DeptSpreadPenaltyWeight", 1.0);
}
@Override
public String getPlacementSelectionWeightName() {
return "Placement.DeptSpreadPenaltyWeight";
}
@Override
public double getValue(Assignment assignment, Placement value, Set conflicts) {
return (value.variable().getDeptSpreadConstraint() == null ? 0.0 : value.variable().getDeptSpreadConstraint().getPenalty(assignment, value)) / 12.0;
}
@Override
public double getValue(Assignment assignment, Collection variables) {
double ret = 0;
Set constraints = new HashSet();
for (Lecture lect: variables)
if (lect.getDeptSpreadConstraint() != null && constraints.add(lect.getDeptSpreadConstraint()))
ret += lect.getDeptSpreadConstraint().getPenalty(assignment);
return ret / 12.0;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy