Существует четыре способа, которыми вы говорите MultiStart
который стартовые точки использовать для локального решателя:
Передайте положительный целочисленный k
. MultiStart
генерирует стартовые точки k - 1
как будто с помощью объекта RandomStartPointSet
и структуры problem
. MultiStart
также использует стартовую точку x0
от структуры problem
в общей сложности для стартовых точек k
.
Передайте объект RandomStartPointSet
.
Передайте объект CustomStartPointSet
.
Передайте массив ячеек объектов CustomStartPointSet
и RandomStartPointSet
. Передайте массив ячеек, если у вас есть некоторые отдельные моменты, вы хотите запустить, но также и хотеть, чтобы 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;
По умолчанию объект 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);
Объект RandomStartPointSet
генерирует стартовые точки с той же размерностью как точка x0
в структуре задачи; смотрите list
.
Чтобы использовать определенный набор отправных точек, группируйте их в CustomStartPointSet
можно следующим образом:
Поместите отправные точки в матрицу. Каждая строка матрицы представляет одну отправную точку. MultiStart
запускает все строки матрицы согласно фильтрации со свойством StartPointsToRun
. Для получения дополнительной информации см. Алгоритм MultiStart.
Создайте объект CustomStartPointSet
из матрицы:
tpoints = CustomStartPointSet(ptmatrix);
Например, создайте набор 40 пятимерных точек с каждым компонентом точки, равной 10 плюс экспоненциально распределенная переменная со средним значением 25:
pts = -25*log(rand(40,5)) + 10; tpoints = CustomStartPointSet(pts);
Чтобы получить исходную матрицу точек от объекта CustomStartPointSet
, используйте list
:
pts = list(tpoints); % Assumes tpoints is a CustomStartPointSet
CustomStartPointSet
имеет два свойства: StartPointsDimension
и NumStartPoints
. Можно использовать эти свойства запросить объект CustomStartPointSet
. Например, объект tpoints
в примере имеет следующие свойства:
tpoints.StartPointsDimension ans = 5 tpoints.NumStartPoints ans = 40
Чтобы использовать определенный набор отправных точек наряду с некоторыми случайным образом сгенерированными точками, передайте массив ячеек объектов CustomStartPointSet
или RandomStartPointSet
.
Например, чтобы использовать и 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);