Установите опции в подходе, основанном на проблеме Используя varindex

Чтобы установить определенные опции при использовании подхода, основанного на проблеме, необходимо преобразовать переменные задачи в индексы путем вызова varindex. Например, ga решатель принимает опцию под названием InitialPopulationRange это - двухстрочная матрица. Первая строка представляет нижний предел, и вторая строка представляет верхний предел переменных задачи. Столбцы матрицы представляют индивидуумов в населении, которые являются переменными задачи. Чтобы совпадать с индексами столбца к переменным задачи, используйте varindex.

Например, установите целевую функцию на функцию помощника mrosenbrock, данный в конце этого примера. Эта целевая функция является близко к 0 близости точкой xi=yi=1 \forall i. Создайте 3-D переменные задачи x и y в форме строки, которая является формой ga ожидает.

x = optimvar("x",1,3);
y = optimvar("y",1,3);

Создайте задачу оптимизации с целевой функцией mrosenbrock(x,y).

prob = optimproblem("Objective",mrosenbrock(x,y));

Установите начальную область значений x переменные к [-1 2], и область значений y переменные к [0 3]. Для этого найдите индексы для переменных.

xidx = varindex(prob,"x")
xidx = 1×3

     1     2     3

yidx = varindex(prob,"y")
yidx = 1×3

     4     5     6

Установите начальную область значений как двухстрочную матрицу с первой строкой, содержащей нижние границы и вторую строку, содержащую верхние границы.

poprange = zeros(2,max([xidx,yidx]));
poprange(1,xidx) = -1;
poprange(2,xidx) = 2;
poprange(1,yidx) = 0;
poprange(2,yidx) = 3;
disp(poprange)
    -1    -1    -1     0     0     0
     2     2     2     3     3     3

Установите генератор случайных чисел и решите задачу с помощью начальной матрицы области значений.

rng default % For reproducibility
opts = optimoptions("ga","InitialPopulationRange",poprange);
[sol,fval] = solve(prob,"Solver","ga","Options",opts)
Solving problem using ga.
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
sol = struct with fields:
    x: [1.2583 0.7522 1.2317]
    y: [1.5830 0.5653 1.5167]

fval = 0.1818

Возвращенное решение имеет довольно маленькое значение целевой функции.

Функция помощника

Этот код создает mrosenbrock функция помощника.

function F = mrosenbrock(x,y)
F = [10*(y - x.^2),1 - x];
F = sum(F.^2,2);
end

Смотрите также

Похожие темы