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

cz.cvut.felk.cig.jcop.problem.sat.SATIterator Maven / Gradle / Ivy

The newest version!
/*
 * Copyright © 2010 by Ondrej Skalicka. All Rights Reserved
 */

package cz.cvut.felk.cig.jcop.problem.sat;

import cz.cvut.felk.cig.jcop.problem.Configuration;
import cz.cvut.felk.cig.jcop.problem.Operation;
import cz.cvut.felk.cig.jcop.problem.OperationIterator;
import cz.cvut.felk.cig.jcop.util.JcopRandom;

import java.util.NoSuchElementException;

/**
 * SAT operation iterator.
 * 

* Iterates over all variables, for each returning either {@link SetFalseOperation} (if variable in configuration is 1) * or {@link SetTrueOperation} (if variable in configuration is 0). * * @author Ondrej Skalicka */ public class SATIterator implements OperationIterator { /** * Active index to return operation for. */ protected int counter = 0; /** * Configuration to iterate over */ protected Configuration configuration; /** * SAT problem */ protected SAT problem; /** * Creates new SAT problem iterator with given configuration and problem. * * @param configuration configuration to iterate over * @param problem problem specifications */ public SATIterator(Configuration configuration, SAT problem) { this.configuration = configuration; this.problem = problem; this.counter = 0; } public boolean hasNext() { return this.counter < this.problem.getDimension(); } public Operation next() throws NoSuchElementException { if (this.counter >= this.problem.getDimension()) throw new NoSuchElementException("SAT iterator has no more operations"); if (this.configuration.valueAt(this.counter) == 1) return this.problem.setFalseOperations.get(this.counter++); return this.problem.setTrueOperations.get(this.counter++); } public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException("SAT does not support remove()"); } public Operation getRandomOperation() throws UnsupportedOperationException { int i = JcopRandom.nextInt(this.problem.getDimension()); if (this.configuration.valueAt(i) == 1) return this.problem.setFalseOperations.get(i); return this.problem.setTrueOperations.get(i); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy