001 package net.sf.cpsolver.ifs.example.csp;
002
003 import java.util.*;
004
005 /**
006 * CSP variable.
007 * <br><br>
008 * This class only implements generation of variable's values (domain)
009 *
010 * @version
011 * IFS 1.1 (Iterative Forward Search)<br>
012 * Copyright (C) 2006 Tomáš Müller<br>
013 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
014 * Lazenska 391, 76314 Zlin, Czech Republic<br>
015 * <br>
016 * This library is free software; you can redistribute it and/or
017 * modify it under the terms of the GNU Lesser General Public
018 * License as published by the Free Software Foundation; either
019 * version 2.1 of the License, or (at your option) any later version.
020 * <br><br>
021 * This library is distributed in the hope that it will be useful,
022 * but WITHOUT ANY WARRANTY; without even the implied warranty of
023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
024 * Lesser General Public License for more details.
025 * <br><br>
026 * You should have received a copy of the GNU Lesser General Public
027 * License along with this library; if not, write to the Free Software
028 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
029 */
030 public class CSPVariable extends net.sf.cpsolver.ifs.model.Variable {
031 private int iKernelId=-1;
032
033 /**
034 * Constructor
035 * @param domainSize number of values of the variable
036 */
037 public CSPVariable(int id, int domainSize) {
038 this(id, domainSize, -1);
039 }
040
041 /**
042 * Constructor
043 * @param domainSize number of values of the variable
044 * @param kernelId kernel id (for structured CSP)
045 */
046 public CSPVariable(int id, int domainSize, int kernelId) {
047 super(null);
048 iId = id;
049 iKernelId = kernelId;
050 setValues(computeValues(domainSize));
051 }
052
053 /** Get kernel id */
054 public int getKernelId() { return iKernelId; }
055
056 /** Generate an intial value (for MPP and for forcing of existance of a solution) */
057 public void generateInitialValue(Random rnd) {
058 CSPValue aValue = (CSPValue)values().elementAt((int)(rnd.nextFloat()*values().size()));
059 setInitialAssignment(aValue);
060 }
061
062 private Vector computeValues(int domainSize) {
063 Vector values = new Vector();
064 for (int i=0; i< domainSize; i++) {
065 CSPValue value = new CSPValue(this, i);
066 values.addElement(value);
067 }
068 return values;
069 }
070
071 public String getName() { return "V"+getId(); }
072 }