package edu.neu.ccs.evergreen.state; import java.util.Random; import org.apache.log4j.Logger; import edu.neu.ccs.evergreen.model.Assignments; import edu.neu.ccs.evergreen.model.State; /** * Use a biased coin to decide if the next variable is true or false. */ public class MaxBiasNextState extends BiasNextState { private static final Logger LOGGER = Logger.getLogger(MaxBiasNextState.class); /** * Create a new coin flipper with an optional reset percentage and seed. * @param args Arguments */ public MaxBiasNextState(String args[]) { long seed = 1; if (args.length > 0) { refresh = Double.parseDouble(args[0]); if ((refresh < 0) || (refresh > 1.0)) { refresh = 0.5; } } if (args.length > 1) { seed = Long.parseLong(args[1], 10); } random = new Random(seed); LOGGER.info("Using refresh probability of " + refresh); LOGGER.info("Using random seed of " + seed); } @Override protected double calculateBias(State state, int maxOriginalVariable, Assignments bestAssignments) { return state.maxBias(); } @Override protected boolean doRefresh() { return (doRefresh) || (random.nextDouble() < refresh); } }