Некоторые решатели 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
и затем передайте начальную точку или население в связанной опции:
InitialPopulationMatrix
для ga
InitialSwarmMatrix
для particleswarm
InitialPoints
для surrogateopt
Например, возьмите 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
.