Установите начальные точки для MultiStart

Четыре способа задать стартовые точки

Есть четыре способа сказать 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 для начальных точек

Создайте 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 для начальных точек

Чтобы использовать определенный набор начальных точек, упакуйте их в CustomStartPointSet следующим образом:

  1. Поместите начальные точки в матрицу. Каждая строка матрицы представляет одну начальную точку. MultiStart запускает все строки матрицы, подлежащие фильтрации со StartPointsToRun свойство. Для получения дополнительной информации см. MultiStart Algorithm.

  2. Создайте 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);

Похожие темы