/** * Collects numSamples samples of sequences, from the distribution over sequences defined * by the sequence model passed on construction. * All samples collected are sampleInterval samples apart, in an attempt to reduce * autocorrelation. * @return a List containing the sequence samples, as arrays of type int, and their scores */ public List<int[]> collectSamples(SequenceModel model, int numSamples, int sampleInterval) { int[] initialSequence = getRandomSequence(model); return collectSamples(model, numSamples, sampleInterval, initialSequence); }
/** * Finds the best sequence by collecting numSamples samples, scoring them, and then choosing * the highest scoring sample. * @return the array of type int representing the highest scoring sequence */ public int[] findBestUsingSampling(SequenceModel model, int numSamples, int sampleInterval, int[] initialSequence) { List samples = collectSamples(model, numSamples, sampleInterval, initialSequence); int[] best = null; double bestScore = Double.NEGATIVE_INFINITY; for (Object sample : samples) { int[] sequence = (int[]) sample; double score = model.scoreOf(sequence); if (score > bestScore) { best = sequence; bestScore = score; log.info("found new best (" + bestScore + ")"); log.info(ArrayMath.toString(best)); } } return best; }
/** * Collects numSamples samples of sequences, from the distribution over sequences defined * by the sequence model passed on construction. * All samples collected are sampleInterval samples apart, in an attempt to reduce * autocorrelation. * @return a List containing the sequence samples, as arrays of type int, and their scores */ public List<int[]> collectSamples(SequenceModel model, int numSamples, int sampleInterval) { int[] initialSequence = getRandomSequence(model); return collectSamples(model, numSamples, sampleInterval, initialSequence); }
/** * Collects numSamples samples of sequences, from the distribution over sequences defined * by the sequence model passed on construction. * All samples collected are sampleInterval samples apart, in an attempt to reduce * autocorrelation. * @return a List containing the sequence samples, as arrays of type int, and their scores */ public List<int[]> collectSamples(SequenceModel model, int numSamples, int sampleInterval) { int[] initialSequence = getRandomSequence(model); return collectSamples(model, numSamples, sampleInterval, initialSequence); }
/** * Collects numSamples samples of sequences, from the distribution over sequences defined * by the sequence model passed on construction. * All samples collected are sampleInterval samples apart, in an attempt to reduce * autocorrelation. * @return a List containing the sequence samples, as arrays of type int, and their scores */ public List<int[]> collectSamples(SequenceModel model, int numSamples, int sampleInterval) { int[] initialSequence = getRandomSequence(model); return collectSamples(model, numSamples, sampleInterval, initialSequence); }
/** * Finds the best sequence by collecting numSamples samples, scoring them, and then choosing * the highest scoring sample. * @return the array of type int representing the highest scoring sequence */ public int[] findBestUsingSampling(SequenceModel model, int numSamples, int sampleInterval, int[] initialSequence) { List samples = collectSamples(model, numSamples, sampleInterval, initialSequence); int[] best = null; double bestScore = Double.NEGATIVE_INFINITY; for (int i = 0; i < samples.size(); i++) { int[] sequence = (int[]) samples.get(i); double score = model.scoreOf(sequence); if (score>bestScore) { best = sequence; bestScore = score; System.err.println("found new best ("+bestScore+")"); System.err.println(ArrayMath.toString(best)); } } return best; }
/** * Finds the best sequence by collecting numSamples samples, scoring them, and then choosing * the highest scoring sample. * @return the array of type int representing the highest scoring sequence */ public int[] findBestUsingSampling(SequenceModel model, int numSamples, int sampleInterval, int[] initialSequence) { List samples = collectSamples(model, numSamples, sampleInterval, initialSequence); int[] best = null; double bestScore = Double.NEGATIVE_INFINITY; for (int i = 0; i < samples.size(); i++) { int[] sequence = (int[]) samples.get(i); double score = model.scoreOf(sequence); if (score>bestScore) { best = sequence; bestScore = score; System.err.println("found new best ("+bestScore+")"); System.err.println(ArrayMath.toString(best)); } } return best; }
/** * Finds the best sequence by collecting numSamples samples, scoring them, and then choosing * the highest scoring sample. * @return the array of type int representing the highest scoring sequence */ public int[] findBestUsingSampling(SequenceModel model, int numSamples, int sampleInterval, int[] initialSequence) { List samples = collectSamples(model, numSamples, sampleInterval, initialSequence); int[] best = null; double bestScore = Double.NEGATIVE_INFINITY; for (Object sample : samples) { int[] sequence = (int[]) sample; double score = model.scoreOf(sequence); if (score > bestScore) { best = sequence; bestScore = score; log.info("found new best (" + bestScore + ")"); log.info(ArrayMath.toString(best)); } } return best; }