--- jsr166/src/test/loops/TSPExchangerTest.java 2009/10/29 23:11:03 1.7 +++ jsr166/src/test/loops/TSPExchangerTest.java 2015/09/13 16:28:14 1.19 @@ -1,7 +1,7 @@ /* * Written by Doug Lea and Bill Scherer with assistance from members * of JCP JSR-166 Expert Group and released to the public domain, as - * explained at http://creativecommons.org/licenses/publicdomain + * explained at http://creativecommons.org/publicdomain/zero/1.0/ */ import java.util.*; @@ -18,13 +18,13 @@ import java.util.concurrent.locks.*; * A set of worker threads perform updates on subpops. The basic * update step is: *
    - *
  1. Select a breeder b from the subpop - *
  2. Create a strand of its tour with a random starting point and length - *
  3. Offer the strand to the exchanger, receiving a strand from - * another subpop - *
  4. Combine b and the received strand using crossing function to - * create new chromosome c. - *
  5. Replace a chromosome in the subpop with c. + *
  6. Select a breeder b from the subpop + *
  7. Create a strand of its tour with a random starting point and length + *
  8. Offer the strand to the exchanger, receiving a strand from + * another subpop + *
  9. Combine b and the received strand using crossing function to + * create new chromosome c. + *
  10. Replace a chromosome in the subpop with c. *
* * This continues for a given number of generations per subpop. @@ -39,7 +39,7 @@ public class TSPExchangerTest { static final int NCPUS = Runtime.getRuntime().availableProcessors(); /** Runs start with two threads, increasing by two through max */ - static final int DEFAULT_MAX_THREADS = Math.max(4, NCPUS + NCPUS/2); + static final int DEFAULT_MAX_THREADS = Math.max(4, NCPUS + NCPUS/2); /** The number of replication runs per thread value */ static final int DEFAULT_REPLICATIONS = 3; @@ -201,7 +201,7 @@ public class TSPExchangerTest { } /** - * Perform one run with the given parameters. Each run complete + * Performs one run with the given parameters. Each run completes * when there are fewer than 2 active threads. When there is * only one remaining thread, it will have no one to exchange * with, so it is terminated (via interrupt). @@ -225,11 +225,10 @@ public class TSPExchangerTest { // Thread.sleep(100); long elapsed = stopTime - startTime; - double secs = (double)elapsed / 1000000000.0; + double secs = (double) elapsed / 1000000000.0; p.printSnapshot(secs); } - /** * A Population creates the subpops, subpops, and threads for a run * and has control methods to start, stop, and report progress. @@ -300,7 +299,7 @@ public class TSPExchangerTest { */ void printSnapshot(double secs) { int xs = totalExchanges(); - long rate = (xs == 0)? 0L : (long)((secs * 1000000000.0) / xs); + long rate = (xs == 0) ? 0L : (long) ((secs * 1000000000.0) / xs); Chromosome bestc = subpops[0].chromosomes[0]; Chromosome worstc = bestc; for (int k = 0; k < subpops.length; ++k) { @@ -362,7 +361,7 @@ public class TSPExchangerTest { } /** - * A Subpop maintains a set of chromosomes.. + * A Subpop maintains a set of chromosomes. */ static final class Subpop { /** The chromosomes, kept in sorted order */ @@ -406,7 +405,7 @@ public class TSPExchangerTest { * other. It is hardwired because small variations of it * don't matter much. * - * @param g the first generation to run. + * @param g the first generation to run */ int runUpdates() throws InterruptedException { int n = 1 + (rng.next() & ((subpopSize << 1) - 1)); @@ -416,8 +415,8 @@ public class TSPExchangerTest { } /** - * Choose a breeder, exchange strand with another subpop, and - * cross them to create new chromosome to replace a chosen + * Chooses a breeder, exchanges strand with another subpop, and + * crosses them to create new chromosome to replace a chosen * dyer. */ void update() throws InterruptedException { @@ -432,7 +431,7 @@ public class TSPExchangerTest { } /** - * Choose a breeder, with exponentially decreasing probability + * Chooses a breeder, with exponentially decreasing probability * starting at best. * @return index of selected breeder */ @@ -447,9 +446,9 @@ public class TSPExchangerTest { } /** - * Choose a chromosome that will be replaced, with + * Chooses a chromosome that will be replaced, with * exponentially decreasing probability starting at - * worst, ignoring the excluded index + * worst, ignoring the excluded index. * @param exclude index to ignore; use -1 to not exclude any * @return index of selected dyer */ @@ -484,7 +483,7 @@ public class TSPExchangerTest { } /** - * Copy current strand to start of c's, and then append all + * Copies current strand to start of c's, and then appends all * remaining b's that aren't in the strand. * @param breeder the breeder * @param child the child @@ -522,7 +521,7 @@ public class TSPExchangerTest { } /** - * Fix the sort order of a changed Chromosome c at position k + * Fixes the sort order of a changed Chromosome c at position k. * @param c the chromosome * @param k the index */ @@ -561,7 +560,7 @@ public class TSPExchangerTest { int fitness; /** - * Initialize to random tour + * Initializes to random tour. */ Chromosome(int length, RNG random) { alleles = new int[length]; @@ -577,9 +576,9 @@ public class TSPExchangerTest { } public int compareTo(Object x) { // to enable sorting - int xf = ((Chromosome)x).fitness; + int xf = ((Chromosome) x).fitness; int f = fitness; - return ((f == xf)? 0 :((f < xf)? -1 : 1)); + return ((f == xf) ? 0 :((f < xf) ? -1 : 1)); } void recalcFitness() { @@ -592,11 +591,11 @@ public class TSPExchangerTest { f += cities.distanceBetween(p, n); p = n; } - fitness = (int)(f / len); + fitness = (int) (f / len); } /** - * Return tour length for points scaled in [0, 1). + * Returns tour length for points scaled in [0, 1). */ double unitTourLength() { int[] a = alleles; @@ -612,7 +611,7 @@ public class TSPExchangerTest { } /** - * Check that this tour visits each city + * Checks that this tour visits each city. */ void validate() { int len = alleles.length; @@ -661,36 +660,36 @@ public class TSPExchangerTest { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { - double dx = (double)xPts[i] - (double)xPts[j]; - double dy = (double)yPts[i] - (double)yPts[j]; + double dx = (double) xPts[i] - (double) xPts[j]; + double dy = (double) yPts[i] - (double) yPts[j]; double dd = Math.hypot(dx, dy) / 2.0; long ld = Math.round(dd); - distances[i][j] = (ld >= Integer.MAX_VALUE)? - Integer.MAX_VALUE : (int)ld; + distances[i][j] = (ld >= Integer.MAX_VALUE) ? + Integer.MAX_VALUE : (int) ld; } } } /** - * Returns the cached distance between a pair of cities + * Returns the cached distance between a pair of cities. */ int distanceBetween(int i, int j) { return distances[i][j]; } // Scale ints to doubles in [0,1) - static final double PSCALE = (double)0x80000000L; + static final double PSCALE = (double) 0x80000000L; /** - * Return distance for points scaled in [0,1). This simplifies + * Returns distance for points scaled in [0,1). This simplifies * checking results. The expected optimal TSP for random * points is believed to be around 0.76 * sqrt(N). For papers * discussing this, see * http://www.densis.fee.unicamp.br/~moscato/TSPBIB_home.html */ double unitDistanceBetween(int i, int j) { - double dx = ((double)xPts[i] - (double)xPts[j]) / PSCALE; - double dy = ((double)yPts[i] - (double)yPts[j]) / PSCALE; + double dx = ((double) xPts[i] - (double) xPts[j]) / PSCALE; + double dy = ((double) yPts[i] - (double) yPts[j]) / PSCALE; return Math.hypot(dx, dy); } @@ -705,7 +704,7 @@ public class TSPExchangerTest { int seed; RNG(int seed) { this.seed = seed; } - RNG() { this.seed = seedGenerator.nextInt() | 1; } + RNG() { this.seed = seedGenerator.nextInt() | 1; } int next() { int x = seed;