All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cpsolver.coursett.criteria.DepartmentBalancingPenalty Maven / Gradle / Ivy

Go to download

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