Package kodkod.util.ints

Examples of kodkod.util.ints.IntSet


    this.bounds = bounds;
    this.usize = bounds.universe().size();
   
        //  start with the maximum partition -- the whole universe.
    this.parts = new LinkedList<IntSet>();
    final IntSet set = Ints.bestSet(usize);
    for(int i = 0; i < usize; i++) { set.add(i); }
    this.parts.add(set);
  }
View Full Code Here


      return;
    }
   
    final List<IntSet> otherColumns = new LinkedList<IntSet>();
    int firstColFactor = (int) StrictMath.pow(usize, arity-1);
    IntSet firstCol = Ints.bestSet(usize);
    for(IntIterator rbIter = set.iterator(); rbIter.hasNext(); ) {
      firstCol.add(rbIter.next() / firstColFactor);
    }
    refinePartitions(firstCol);
   
    int idenFactor = (1 - firstColFactor) / (1 - usize);
    for(ListIterator<IntSet> partsIter = parts.listIterator(); partsIter.hasNext(); ) {
      IntSet part = partsIter.next();
      if (firstCol.contains(part.min())) { // contains one, contains them all
        range2domain.clear();
        for(IntIterator atoms = part.iterator(); atoms.hasNext(); ) {
          int atom = atoms.next();
          IntSet atomRange = Ints.bestSet(firstColFactor);
          for(IntIterator rbIter = set.iterator(atom*firstColFactor, (atom+1)*firstColFactor - 1);
          rbIter.hasNext(); ) {
            atomRange.add(rbIter.next() % firstColFactor);
          }
          IntSet atomDomain = range2domain.get(atomRange);
          if (atomDomain != null) atomDomain.add(atom);
          else range2domain.put(atomRange, oneOf(usize, atom));
        }
        partsIter.remove();
        IntSet idenPartition = Ints.bestSet(usize);
        for(Map.Entry<IntSet, IntSet> entry : range2domain.entrySet()) {
          if (entry.getValue().size()==1 && entry.getKey().size()==1 &&
            entry.getKey().min() == entry.getValue().min() * idenFactor) {
            idenPartition.add(entry.getValue().min());
          } else {
            partsIter.add(entry.getValue());
            otherColumns.add(entry.getKey());
          }
        }
        if (!idenPartition.isEmpty())
          partsIter.add(idenPartition);     
      }
    }
   
    // refine based on the remaining columns
View Full Code Here

   *            (all i: [0..this.parts'.size()) |
   *             this.parts'[i].ints in set.ints || no this.parts'[i].ints & set.ints)
   */
  private void refinePartitions(IntSet set) {
    for(ListIterator<IntSet> partsIter = parts.listIterator(); partsIter.hasNext(); ) {
      IntSet part = partsIter.next();
      IntSet intersection = Ints.bestSet(part.min(), part.max());
      intersection.addAll(part);
      intersection.retainAll(set);
      if (!intersection.isEmpty() && intersection.size() < part.size()) {
        part.removeAll(intersection);
        partsIter.add(intersection);
      }
    }
  }
View Full Code Here

   * the given number.
   * @requries 0 <= num < size
   * @return {s: IntSet | s.ints = num }
   */
  private static final IntSet oneOf(int size, int num) {
    final IntSet set = Ints.bestSet(size);
    set.add(num);
    return set;
  }
View Full Code Here

   * {@inheritDoc}
   * @see kodkod.engine.satlab.ReductionStrategy#next(kodkod.engine.satlab.ResolutionTrace)
   */
  public IntSet next(ResolutionTrace trace) {
    if (varsToTry.isEmpty()) return Ints.EMPTY_SET; // tried everything
    final IntSet relevantVars = StrategyUtils.coreTailUnits(trace);
   
    for(IntIterator varItr = varsToTry.iterator(); varItr.hasNext();) {
      final int var = varItr.next();
      varItr.remove();
      if (relevantVars.remove(var)) { // remove maxVar from the set of relevant variables
        if (relevantVars.isEmpty()) break; // there was only root formula left
        // get all axioms and resolvents corresponding to the clauses that
        // form the translations of formulas identified by relevant vars
        final IntSet relevantClauses = clausesFor(trace, relevantVars);
        assert !relevantClauses.isEmpty() && !relevantClauses.contains(trace.size()-1);
        return relevantClauses;
      }
    }
   
    varsToTry.clear();   
View Full Code Here

   *     A = C.*T |
   *     trace.backwardReachable(A) - trace.backwardReachable(trace.axioms() - A)
   */
  private IntSet clausesFor(ResolutionTrace trace, IntSet relevantVars) {

    final IntSet relevantAxioms = StrategyUtils.clausesFor(trace, relevantVars);

    if (dist<trace.resolvents().size()) {
      IntSet relevant = relevantAxioms;
      for(int i = 0, lastSize = 0; lastSize < relevant.size() && i < dist; i++) {
        lastSize = relevant.size();
        relevant = trace.directlyLearnable(relevant);
      }
      return relevant;
    } else {
      return trace.learnable(relevantAxioms); // return all resolvents
View Full Code Here

  /**
   * {@inheritDoc}
   * @see kodkod.engine.satlab.ReductionStrategy#next(kodkod.engine.satlab.ResolutionTrace)
   */
  public IntSet next(final ResolutionTrace trace) {
    final IntSet core = trace.core();
    if (lastCore > core.size()) {
      lastCore = core.size();
      return core;
    } else {
      lastCore = Integer.MIN_VALUE;                 
      return Ints.EMPTY_SET;
    }
View Full Code Here

   * @see kodkod.engine.satlab.ReductionStrategy#next(kodkod.engine.satlab.ResolutionTrace)
   */
  public IntSet next(ResolutionTrace trace) {
    if (varsToTry.isEmpty()) return Ints.EMPTY_SET; // tried everything

    final IntSet relevantVars = StrategyUtils.coreTailUnits(trace);

   
    for(IntIterator varItr = varsToTry.iterator( ); varItr.hasNext();) {
      final int var = varItr.next();
      varItr.remove();
      if (relevantVars.remove(var)) {  // remove maxVar from the set of relevant variables
        if (relevantVars.isEmpty()) break; // there was only one root formula left
        // get all axioms and resolvents corresponding to the clauses that
        // form the translations of formulas identified by relevant vars
        final IntSet relevantClauses = clausesFor(trace, relevantVars);
        assert !relevantClauses.isEmpty() && !relevantClauses.contains(trace.size()-1);
       
        if (DBG) System.out.println("relevant clauses: " + relevantClauses.size() + ", removed " + var);
       
        return relevantClauses;
      }
    }
   
View Full Code Here

    final double coreRatio = ((double) trace.core().size() / (double) trace.axioms().size());
   
    if (DBG) System.out.println("\ntrace size: " + trace.size() + ", axioms: " + trace.axioms().size() + ", core: " + trace.core().size() + ", resolvents: " + trace.resolvents().size());
    if (DBG) System.out.println("hardness: " + hardness + ", coreRatio: " + coreRatio);
   
    final IntSet relevantAxioms = StrategyUtils.clausesFor(trace, relevantVars);
    if (DBG) System.out.println("relevant axioms:  " + relevantAxioms.size());
   
    if (coreRatio < noRecycleRatio) {
      return relevantAxioms;
    } else if (hardness < hardnessCutOff) {
      return trace.learnable(relevantAxioms);
    } else {
      IntSet current = relevantAxioms, last;
      final int maxRelevant = (int) Math.rint(relevantAxioms.size()*recycleLimit);
      do {
        last = current;
        current = trace.directlyLearnable(current);
      } while (last.size() < current.size() && current.size() < maxRelevant);
     
      if (DBG) System.out.println("last: " + last.size() +", current: " + current.size() + ", maxRelevant: " + maxRelevant);
     
      return current.size() < maxRelevant ? current : last;
    }
       
  }
View Full Code Here

   * properties specified by the {@linkplain ArrayTrace#ArrayResolution(int[][], int)}
   * constructor.
   * @return the indices of the core clauses in the given trace
   */
  private static IntSet core(int[][] trace, int axioms) {
    final IntSet core = new IntBitSet(axioms);
    final IntSet reachable = new IntBitSet(trace.length);
    reachable.add(trace.length-1);
    for(int i = trace.length-1; i >= axioms; i--) {
      if (reachable.contains(i)) {
        int[] resolvent = trace[i];
        for(int j = 1, antes = resolvent[0]; j <= antes; j++) {
          reachable.add(resolvent[j]);
        }
      }
    }
   
    for(IntIterator itr = reachable.iterator(0, axioms-1); itr.hasNext(); ) {
      core.add(itr.next());
    }
   
    return core;
  }
View Full Code Here

TOP

Related Classes of kodkod.util.ints.IntSet

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.