Class ParallelMultistarter<T extends Copyable<T>>
- Type Parameters:
T
- The type of object being optimized.
- All Implemented Interfaces:
AutoCloseable
,Splittable<TrackableSearch<T>>
,Metaheuristic<T>
,TrackableSearch<T>
Metaheuristic
interface. A multistart metaheuristic returns
the best result from among all of the restarts. In the case of a parallel multistart
metaheuristic, the search returns the best result from among all restarts across all threads.
There are several constructors enabling different ways to configure the search. You can
initialize the search with a combination of a Metaheuristic
and number of threads along
with either a RestartSchedule
for the purpose of specifying run lengths for the restarts,
or a run length if all runs are to be of the same length. You can also initialize the search with
a Collection of RestartSchedule
objects, one for each thread (with number of threads
implied by size of Collection. Or you can initialize the search with a Collection of Metaheuristic
objects and a Collection of RestartSchedule
objects (both Collections of
the same size). You can also initialize the search with a Multistarter
configured with
your restart schedule, along with the number of threads, or a Collection of Multistarter
objects.
When calling the optimize
method, the runLength parameter corresponds to the
number of restarts for each of the Multistarter instances, where those restarts will have run
lengths determined by the restart schedule specified upon construction. If the optimize
method is called multiple times, the restart schedules of the parallel metaheuristics
are not reinitialized, and the run lengths for the additional restarts will continue where the
schedules left off.
-
Constructor Summary
ConstructorDescriptionParallelMultistarter
(Collection<? extends Metaheuristic<T>> searches, int runLength) Constructs a parallel multistart metaheuristic that executes multiple runs of a set of specified metaheuristics in parallel across multiple threads.ParallelMultistarter
(Collection<? extends Metaheuristic<T>> searches, Collection<? extends RestartSchedule> schedules) Constructs a parallel multistart metaheuristic that executes multiple runs of a set of specified metaheuristics in parallel across multiple threads.ParallelMultistarter
(Collection<? extends Multistarter<T>> multistarters) Constructs a parallel multistart metaheuristic that executes multiple runs of a set of specified metaheuristics in parallel across multiple threads.ParallelMultistarter
(Metaheuristic<T> search, int runLength, int numThreads) Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads.ParallelMultistarter
(Metaheuristic<T> search, Collection<? extends RestartSchedule> schedules) Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads.ParallelMultistarter
(Metaheuristic<T> search, RestartSchedule r, int numThreads) Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads.ParallelMultistarter
(Multistarter<T> multistartSearch, int numThreads) Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads. -
Method Summary
Modifier and TypeMethodDescriptionsplit()
Generates a functionally identical copy of this object, for use in multithreaded implementations of search algorithms.Methods inherited from class org.cicirello.search.concurrent.ParallelMetaheuristic
close, finalize, getProblem, getProgressTracker, getTotalRunLength, isClosed, optimize, setProgressTracker
-
Constructor Details
-
ParallelMultistarter
Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads. All restarts are the same in length.- Parameters:
search
- The metaheuristic to restart multiple times in parallel.runLength
- The length of every restarted run of the metaheuristic.numThreads
- The number of threads to use.- Throws:
IllegalArgumentException
- if numThreads is less than 1.IllegalArgumentException
- if nunLength is less than 1.
-
ParallelMultistarter
Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads. All parallel instances follow the same restart schedule of run lengths.- Parameters:
search
- The metaheuristic to restart multiple times in parallel.r
- The schedule of run lengths. Note that the threads do not share a single RestartSchedule. Rather, each thread will be initialized with its own copy of r.numThreads
- The number of threads to use.- Throws:
IllegalArgumentException
- if numThreads is less than 1.
-
ParallelMultistarter
public ParallelMultistarter(Metaheuristic<T> search, Collection<? extends RestartSchedule> schedules) Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads. Each parallel instance follows its own restart schedule of run lengths.- Parameters:
search
- The metaheuristic to restart multiple times in parallel.schedules
- The schedules of run lengths, one for each thread. The number of threads will be equal to the number of restart schedules.- Throws:
IllegalArgumentException
- if schedules.size() is less than 1.
-
ParallelMultistarter
public ParallelMultistarter(Collection<? extends Metaheuristic<T>> searches, Collection<? extends RestartSchedule> schedules) Constructs a parallel multistart metaheuristic that executes multiple runs of a set of specified metaheuristics in parallel across multiple threads. Each parallel search follows its own restart schedule of run lengths.- Parameters:
searches
- A collection of the metaheuristics to restart multiple times in parallel. The number of threads will be equal to the size of this collection.schedules
- The schedules of run lengths, one for each thread.- Throws:
IllegalArgumentException
- if searches.size() is not equal to schedules.size().IllegalArgumentException
- if the Collection of Metaheuristics don't all share the same problem (i.e., requires that s1.getProblem() == s2.getProblem() for all s1, s2 in searches).IllegalArgumentException
- if the Collection of Metaheuristics don't all share a single ProgressTracker (i.e., requires that s1.getProgressTracker() == s2.getProgressTracker() for all s1, s2 in searches).
-
ParallelMultistarter
Constructs a parallel multistart metaheuristic that executes multiple runs of a set of specified metaheuristics in parallel across multiple threads. All runs of all parallel instances follows a constant run length.- Parameters:
searches
- A collection of the metaheuristics to restart multiple times in parallel. The number of threads will be equal to the size of this collection.runLength
- The length of all restarted runs of all parallel metaheuristics.- Throws:
IllegalArgumentException
- if runLength < 1.IllegalArgumentException
- if the Collection of Metaheuristics don't all share the same problem (i.e., requires that s1.getProblem() == s2.getProblem() for all s1, s2 in searches).IllegalArgumentException
- if the Collection of Metaheuristics don't all share a single ProgressTracker (i.e., requires that s1.getProgressTracker() == s2.getProgressTracker() for all s1, s2 in searches).
-
ParallelMultistarter
Constructs a parallel multistart metaheuristic that executes multiple runs of a specified metaheuristic in parallel across multiple threads. All parallel instances follow the same restart schedule of run lengths.- Parameters:
multistartSearch
- A Multistarter configured with the metaheuristic and restart schedule. Each of the threads will be an identical copy of this Multistarter.numThreads
- The number of threads to use.- Throws:
IllegalArgumentException
- if numThreads is less than 1.
-
ParallelMultistarter
Constructs a parallel multistart metaheuristic that executes multiple runs of a set of specified metaheuristics in parallel across multiple threads. Each of the Multistarters will run in its own thread. The number of threads will be equal to the number of Multistarters passed to the constructor.- Parameters:
multistarters
- A collection of Multistarters configured with the metaheuristics and restart schedules for the threads.- Throws:
IllegalArgumentException
- if the Collection of Multistarters don't all share the same problem (i.e., requires that s1.getProblem() == s2.getProblem() for all s1, s2 in multistarters).IllegalArgumentException
- if the Collection of Multistarters don't all share a single ProgressTracker (i.e., requires that s1.getProgressTracker() == s2.getProgressTracker() for all s1, s2 in multistarters).
-
-
Method Details
-
split
Description copied from interface:Splittable
Generates a functionally identical copy of this object, for use in multithreaded implementations of search algorithms. The state of the object that is returned may or may not be identical to that of the original. Thus, this is a distinct concept from the functionality of theCopyable
interface. Classes that implement this interface must ensure that the object returned performs the same functionality, and that it does not share any state data that would be either unsafe or inefficient for concurrent access by multiple threads. The split method is allowed to simply return the this reference, provided that it is both safe and efficient for multiple threads to share a single copy of the Splittable object. The intention is to provide a multithreaded search with the capability to provide spawned threads with their own distinct search operators. Such multithreaded algorithms can call the split method for each thread it spawns to generate a functionally identical copy of the operator, but with independent state.- Specified by:
split
in interfaceMetaheuristic<T extends Copyable<T>>
- Specified by:
split
in interfaceSplittable<T extends Copyable<T>>
- Overrides:
split
in classParallelMetaheuristic<T extends Copyable<T>>
- Returns:
- A functionally identical copy of the object, or a reference to this if it is both safe and efficient for multiple threads to share a single instance of this Splittable object.
-