varindex
Чтобы установить определенные опции при использовании подхода, основанного на проблеме, необходимо преобразовать переменные задачи в индексы путем вызова varindex
. Например, ga
решатель принимает опцию под названием InitialPopulationRange
это - двухстрочная матрица. Первая строка представляет нижний предел, и вторая строка представляет верхний предел переменных задачи. Столбцы матрицы представляют индивидуумов в населении, которые являются переменными задачи. Чтобы совпадать с индексами столбца к переменным задачи, используйте varindex
.
Например, установите целевую функцию на функцию помощника mrosenbrock
, данный в конце этого примера. Эта целевая функция является близко к 0 близости точкой \forall . Создайте 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