39 |
|
static final int NCPUS = Runtime.getRuntime().availableProcessors(); |
40 |
|
|
41 |
|
/** Runs start with two threads, increasing by two through max */ |
42 |
< |
static final int DEFAULT_MAX_THREADS = Math.max(4, NCPUS + NCPUS/2); |
42 |
> |
static final int DEFAULT_MAX_THREADS = Math.max(4, NCPUS + NCPUS/2); |
43 |
|
|
44 |
|
/** The number of replication runs per thread value */ |
45 |
|
static final int DEFAULT_REPLICATIONS = 3; |
201 |
|
} |
202 |
|
|
203 |
|
/** |
204 |
< |
* Perform one run with the given parameters. Each run complete |
204 |
> |
* Performs one run with the given parameters. Each run completes |
205 |
|
* when there are fewer than 2 active threads. When there is |
206 |
|
* only one remaining thread, it will have no one to exchange |
207 |
|
* with, so it is terminated (via interrupt). |
229 |
|
p.printSnapshot(secs); |
230 |
|
} |
231 |
|
|
232 |
– |
|
232 |
|
/** |
233 |
|
* A Population creates the subpops, subpops, and threads for a run |
234 |
|
* and has control methods to start, stop, and report progress. |
361 |
|
} |
362 |
|
|
363 |
|
/** |
364 |
< |
* A Subpop maintains a set of chromosomes.. |
364 |
> |
* A Subpop maintains a set of chromosomes. |
365 |
|
*/ |
366 |
|
static final class Subpop { |
367 |
|
/** The chromosomes, kept in sorted order */ |
405 |
|
* other. It is hardwired because small variations of it |
406 |
|
* don't matter much. |
407 |
|
* |
408 |
< |
* @param g the first generation to run. |
408 |
> |
* @param g the first generation to run |
409 |
|
*/ |
410 |
|
int runUpdates() throws InterruptedException { |
411 |
|
int n = 1 + (rng.next() & ((subpopSize << 1) - 1)); |
415 |
|
} |
416 |
|
|
417 |
|
/** |
418 |
< |
* Choose a breeder, exchange strand with another subpop, and |
419 |
< |
* cross them to create new chromosome to replace a chosen |
418 |
> |
* Chooses a breeder, exchanges strand with another subpop, and |
419 |
> |
* crosses them to create new chromosome to replace a chosen |
420 |
|
* dyer. |
421 |
|
*/ |
422 |
|
void update() throws InterruptedException { |
431 |
|
} |
432 |
|
|
433 |
|
/** |
434 |
< |
* Choose a breeder, with exponentially decreasing probability |
434 |
> |
* Chooses a breeder, with exponentially decreasing probability |
435 |
|
* starting at best. |
436 |
|
* @return index of selected breeder |
437 |
|
*/ |
446 |
|
} |
447 |
|
|
448 |
|
/** |
449 |
< |
* Choose a chromosome that will be replaced, with |
449 |
> |
* Chooses a chromosome that will be replaced, with |
450 |
|
* exponentially decreasing probability starting at |
451 |
< |
* worst, ignoring the excluded index |
451 |
> |
* worst, ignoring the excluded index. |
452 |
|
* @param exclude index to ignore; use -1 to not exclude any |
453 |
|
* @return index of selected dyer |
454 |
|
*/ |
483 |
|
} |
484 |
|
|
485 |
|
/** |
486 |
< |
* Copy current strand to start of c's, and then append all |
486 |
> |
* Copies current strand to start of c's, and then appends all |
487 |
|
* remaining b's that aren't in the strand. |
488 |
|
* @param breeder the breeder |
489 |
|
* @param child the child |
521 |
|
} |
522 |
|
|
523 |
|
/** |
524 |
< |
* Fix the sort order of a changed Chromosome c at position k |
524 |
> |
* Fixes the sort order of a changed Chromosome c at position k. |
525 |
|
* @param c the chromosome |
526 |
|
* @param k the index |
527 |
|
*/ |
560 |
|
int fitness; |
561 |
|
|
562 |
|
/** |
563 |
< |
* Initialize to random tour |
563 |
> |
* Initializes to random tour. |
564 |
|
*/ |
565 |
|
Chromosome(int length, RNG random) { |
566 |
|
alleles = new int[length]; |
595 |
|
} |
596 |
|
|
597 |
|
/** |
598 |
< |
* Return tour length for points scaled in [0, 1). |
598 |
> |
* Returns tour length for points scaled in [0, 1). |
599 |
|
*/ |
600 |
|
double unitTourLength() { |
601 |
|
int[] a = alleles; |
611 |
|
} |
612 |
|
|
613 |
|
/** |
614 |
< |
* Check that this tour visits each city |
614 |
> |
* Checks that this tour visits each city. |
615 |
|
*/ |
616 |
|
void validate() { |
617 |
|
int len = alleles.length; |
704 |
|
|
705 |
|
int seed; |
706 |
|
RNG(int seed) { this.seed = seed; } |
707 |
< |
RNG() { this.seed = seedGenerator.nextInt() | 1; } |
707 |
> |
RNG() { this.seed = seedGenerator.nextInt() | 1; } |
708 |
|
|
709 |
|
int next() { |
710 |
|
int x = seed; |