Есть четыре способа сказать MultiStart
какие стартовые точки будут использоваться для локального решателя:
Передайте положительное целое число k
. MultiStart
генерирует k - 1
стартовые точки как при использовании RandomStartPointSet
объект и problem
структура. MultiStart
также использует x0
начальная точка от problem
структура, на общую сумму k
начальные точки.
Передайте RandomStartPointSet
объект.
Передайте CustomStartPointSet
объект.
Передайте массив ячеек RandomStartPointSet
и CustomStartPointSet
объекты. Передайте массив ячеек, если у вас есть определенные точки, которые вы хотите запустить, но также хотите MultiStart
для использования других случайных начальных точек.
Примечание
Можно управлять, MultiStart ли
использует все начальные точки или только те точки, которые удовлетворяют границам или другим ограничениям неравенства. Для получения дополнительной информации см. раздел «Фильтрация начальных точек» (необязательно).
Синтаксис выполняемой MultiStart
для k
начальные точки равны
[xmin,fmin,flag,outpt,allmins] = run(ms,problem,k);
Положительное целое число k
задает количество начальных точек MultiStart
использует. MultiStart
генерирует случайные стартовые точки, используя размерность задачи и границы от problem
структура. MultiStart
генерирует k - 1
случайные стартовые точки, а также использует x0
начальная точка от problem
структура.
Создайте RandomStartPointSet
объект следующим образом:
stpoints = RandomStartPointSet;
Выполняйте MultiStart
начиная с RandomStartPointSet
следующим образом:
[xmin,fmin,flag,outpt,allmins] = run(ms,problem,stpoints);
По умолчанию a RandomStartPointSet
объект генерирует 10 начальных точек. Управляйте количеством начальных точек с NumStartPoints
свойство. Для примера, чтобы сгенерировать 40 стартовых точек:
stpoints = RandomStartPointSet('NumStartPoints',40);
Можно задать ArtificialBound
для RandomStartPointSet
. Этот ArtificialBound
работает в сочетании с границами от структуры задачи:
Если у компонента нет границ, RandomStartPointSet
использует нижнюю границу -ArtificialBound
и верхняя граница ArtificialBound
.
Если компонент имеет нижнюю границу lb
но нет верхней границы, RandomStartPointSet
использует верхнюю границу lb + 2*ArtificialBound
.
Точно так же, если компонент имеет верхнюю границу ub
но нет нижней границы, RandomStartPointSet
использует нижнюю границу ub - 2*ArtificialBound
.
Для примера, чтобы сгенерировать 100
начальные точки со ArtificialBound
от 50
:
stpoints = RandomStartPointSet('NumStartPoints',100, ... 'ArtificialBound',50);
A RandomStartPointSet
объект генерирует стартовые точки с той же размерностью, что и x0
точка в структуре задачи; посмотрите list
.
Чтобы использовать определенный набор начальных точек, упакуйте их в CustomStartPointSet
следующим образом:
Поместите начальные точки в матрицу. Каждая строка матрицы представляет одну начальную точку. MultiStart
запускает все строки матрицы, подлежащие фильтрации со StartPointsToRun
свойство. Для получения дополнительной информации см. MultiStart Algorithm.
Создайте CustomStartPointSet
объект из матрицы:
tpoints = CustomStartPointSet(ptmatrix);
Например, создайте множество из 40 пятимерных точек с каждым компонентом точки, равным 10 плюс экспоненциально распределенная переменная со средним 25:
pts = -25*log(rand(40,5)) + 10; tpoints = CustomStartPointSet(pts);
Выполняйте MultiStart
начиная с CustomStartPointSet
следующим образом:
[xmin,fmin,flag,outpt,allmins] = run(ms,problem,tpoints);
Чтобы получить исходную матрицу точек из CustomStartPointSet
объект, использование list
:
pts = list(tpoints); % Assumes tpoints is a CustomStartPointSet
A CustomStartPointSet
имеет два свойства: StartPointsDimension
и NumStartPoints
. Можно использовать эти свойства для запроса CustomStartPointSet
объект. Для примера, tpoints
объект в примере имеет следующие свойства:
tpoints.StartPointsDimension ans = 5 tpoints.NumStartPoints ans = 40
Чтобы использовать определенный набор начальных точек вместе с некоторыми случайным образом сгенерированными точками, передайте массив ячеек RandomStartPointSet
или CustomStartPointSet
объекты.
Например, чтобы использовать как 40 конкретных пятимерных точек объекта CustomStartPointSet для начальных точек, так и 40 дополнительных пятимерных точек из RandomStartPointSet
:
pts = -25*log(rand(40,5)) + 10;
tpoints = CustomStartPointSet(pts);
rpts = RandomStartPointSet('NumStartPoints',40);
allpts = {tpoints,rpts};
Выполняйте MultiStart
начиная с allpts
массив ячеек:
% Assume ms and problem exist
[xmin,fmin,flag,outpt,allmins] = run(ms,problem,allpts);