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

org.cpsolver.instructor.criteria.SameRoom Maven / Gradle / Ivy

package org.cpsolver.instructor.criteria;

import java.util.Collection;
import java.util.Set;

import org.cpsolver.ifs.assignment.Assignment;
import org.cpsolver.ifs.util.DataProperties;
import org.cpsolver.instructor.model.Instructor;
import org.cpsolver.instructor.model.InstructorSchedulingModel;
import org.cpsolver.instructor.model.TeachingAssignment;
import org.cpsolver.instructor.model.TeachingRequest;

/**
 * Same Room. This criterion counts how well are the same room preferences that are set on an {@link Instructor} met
 * (counting {@link Instructor#countSameRooms(Assignment, TeachingAssignment, double)}).
 * 
 * @author  Tomas Muller
 * @version IFS 1.3 (Instructor Sectioning)
* Copyright (C) 2016 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 SameRoom extends InstructorSchedulingCriterion { private double iDiffTypeWeight = 0.5; public SameRoom() { setValueUpdateType(ValueUpdateType.NoUpdate); } @Override public void configure(DataProperties properties) { super.configure(properties); iDiffTypeWeight = properties.getPropertyDouble("SameRoom.DifferentTypeWeight", 0.5); } @Override public double getWeightDefault(DataProperties config) { return 1.0; } /** * Different instructional type weight * @return penalty for teaching two same-room that are of different instructional type */ public double getDifferentTypeWeight() { return iDiffTypeWeight; } @Override public double getValue(Assignment assignment, TeachingAssignment value, Set conflicts) { return value.getInstructor().countSameRooms(assignment, value, iDiffTypeWeight); } @Override protected double[] computeBounds(Assignment assignment) { double[] bounds = new double[] { 0.0, 0.0 }; for (Instructor instructor: ((InstructorSchedulingModel)getModel()).getInstructors()) { bounds[1] += Math.abs(instructor.getSameRoomPreference()); } return bounds; } @Override public double[] getBounds(Assignment assignment, Collection variables) { double[] bounds = new double[] { 0.0, 0.0 }; for (Instructor instructor: getInstructors(assignment, variables)) { bounds[1] += Math.abs(instructor.getSameRoomPreference()); } return bounds; } @Override public double getValue(Assignment assignment, Collection variables) { double value = 0.0; for (Instructor instructor: getAssignedInstructors(assignment, variables)) value += instructor.getContext(assignment).countSameRoomPreference(iDiffTypeWeight); return value; } @Override public String getAbbreviation() { return "SameRoom"; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy