Существует четыре способа, которыми вы говорите 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);