001 package net.sf.cpsolver.studentsct.heuristics;
002
003 import java.util.Enumeration;
004
005 import net.sf.cpsolver.ifs.heuristics.BacktrackNeighbourSelection;
006 import net.sf.cpsolver.ifs.model.Variable;
007 import net.sf.cpsolver.ifs.util.DataProperties;
008 import net.sf.cpsolver.studentsct.model.CourseRequest;
009
010 /**
011 * Randomized backtracking-based neighbour selection.
012 * This class extends {@link RandomizedBacktrackNeighbourSelection}, however,
013 * only a randomly selected subset of enrollments of each request is considered
014 * ({@link CourseRequest#computeRandomEnrollments(int)} with the given limit is used).
015 *
016 * <br><br>
017 * Parameters:
018 * <br>
019 * <table border='1'><tr><th>Parameter</th><th>Type</th><th>Comment</th></tr>
020 * <tr><td>Neighbour.MaxValues</td><td>{@link Integer}</td><td>Limit on the number of enrollments to be visited of each {@link CourseRequest}.</td></tr>
021 * </table>
022 * <br><br>
023 *
024 * @version
025 * StudentSct 1.1 (Student Sectioning)<br>
026 * Copyright (C) 2007 Tomáš Müller<br>
027 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
028 * Lazenska 391, 76314 Zlin, Czech Republic<br>
029 * <br>
030 * This library is free software; you can redistribute it and/or
031 * modify it under the terms of the GNU Lesser General Public
032 * License as published by the Free Software Foundation; either
033 * version 2.1 of the License, or (at your option) any later version.
034 * <br><br>
035 * This library is distributed in the hope that it will be useful,
036 * but WITHOUT ANY WARRANTY; without even the implied warranty of
037 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
038 * Lesser General Public License for more details.
039 * <br><br>
040 * You should have received a copy of the GNU Lesser General Public
041 * License along with this library; if not, write to the Free Software
042 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
043 */
044 public class RandomizedBacktrackNeighbourSelection extends BacktrackNeighbourSelection {
045 private int iMaxValues = 100;
046
047 /**
048 * Constructor
049 * @param properties configuration
050 * @throws Exception
051 */
052 public RandomizedBacktrackNeighbourSelection(DataProperties properties) throws Exception {
053 super(properties);
054 iMaxValues = properties.getPropertyInt("Neighbour.MaxValues", iMaxValues);
055 }
056
057 /**
058 * List of values of a variable.
059 * {@link CourseRequest#computeRandomEnrollments(int)} with the provided limit is used
060 * for a {@link CourseRequest}.
061 */
062 protected Enumeration values(Variable variable) {
063 if (iMaxValues>0 && variable instanceof CourseRequest) {
064 return ((CourseRequest)variable).computeRandomEnrollments(iMaxValues).elements();
065 }
066 return variable.values().elements();
067 }
068 }