001 package 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 * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
011 * @version 1.0
012 */
013 public class CSPVariable extends ifs.model.Variable {
014 private int iKernelId=-1;
015 private int iId = 0;
016
017 /**
018 * Constructor
019 * @param domainSize number of values of the variable
020 */
021 public CSPVariable(int id, int domainSize) {
022 this(id, domainSize, -1);
023 }
024
025 /**
026 * Constructor
027 * @param domainSize number of values of the variable
028 * @param kernelId kernel id (for structured CSP)
029 */
030 public CSPVariable(int id, int domainSize, int kernelId) {
031 super(null);
032 iId = id;
033 iKernelId = kernelId;
034 setValues(computeValues(domainSize));
035 }
036
037 /** Get kernel id */
038 public int getKernelId() { return iKernelId; }
039
040 /** Generate an intial value (for MPP and for forcing of existance of a solution) */
041 public void generateInitialValue(Random rnd) {
042 CSPValue aValue = (CSPValue)values().elementAt((int)(rnd.nextFloat()*values().size()));
043 setInitialAssignment(aValue);
044 }
045
046 private Vector computeValues(int domainSize) {
047 Vector values = new Vector();
048 for (int i=0; i< domainSize; i++) {
049 CSPValue value = new CSPValue(this, i);
050 values.addElement(value);
051 }
052 return values;
053 }
054
055 public String getName() { return "V"+getId(); }
056 }