Начальные точки для решателей Global Optimization Toolbox

Некоторые решатели Global Optimization Toolbox требуют начальной точки x0. При решении задач оптимизации с помощью подхода, основанного на проблеме вы задаете x0 во втором аргументе для solve и для prob2struct. Чтобы задать начальную точку, создайте структуру с именами переменных как поля и значения переменных как значения структуры. Например, для скалярной переменной x и матричный y 2 на 2 для patternsearch решатель, введите следующий код.

x0.x = 5;
x0.y = eye(2) + 0.1*randn(2);
[sol,fval] = solve(prob,x0,"Solver","patternsearch")

Примечание

При использовании подхода, основанного на проблеме с ga, particleswarm, или surrogateopt, вы не можете задать начальную точку или население. Вместо этого преобразуйте свое использование задач prob2struct и затем передайте начальную точку или население в связанной опции:

Например, возьмите 2D переменную x и матричный y 2 на 2 для ga решатель.

x = optimvar('x',2,"LowerBound",-1,"UpperBound",1);
y = optimvar('y',2,2,"LowerBound",-1,"UpperBound",1);
prob = optimproblem("Objective",...
    cosh(dot(y*x,[2;-1])) - sinh(dot(y*x,[1;-2])));
prob.Constraints = y(1,2) == y(2,1);
problem = prob2struct(prob,"Solver","ga");

% Obtain indices of problem variables
idx = varindex(prob)
idx = 

  struct with fields:

    x: [1 2]
    y: [3 4 5 6]
% Set initial population: x0x for x, x0y for y
rng default
x0x = [1;1/2];
x0y = eye(2)/2 + 0.1*randn(2);
pop = zeros(1,max([idx.x,idx.y])); % Allocate population
pop(idx.x) = x0x(:)'; % Convert to row vector
pop(idx.y) = x0y(:)';
% Place in options
problem.options.InitialPopulationMatrix = pop;
% Solve problem
[sol,fval] = ga(problem)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

sol =

    1.0000   -1.0000    0.3080   -1.0000   -0.9990    1.0000


fval =

  -50.4209

Решение удовлетворяет ограничению y(1,2) == y(2,1) только к допуску ограничения 1e-3: sol(4) = -1.0000, но sol(5) = -0.9990.

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

|

Похожие темы