cz.cvut.felk.cig.jcop.problem.sat.SATIterator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jcop Show documentation
Show all versions of jcop Show documentation
Java Combinatorial Optimization Platform
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);
}
}