メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

混合整数サロゲート最適化

この例では、整数変数を含む最適化問題を解決する方法を示します。R2019b 以降、surrogateopt は整数制約を受け入れます。この例では、10 次元で -3 から 6 までの範囲の整数値の引数に対して multirosenbrock 関数を最小化する点 x を見つけます。multirosenbrock 関数はスケーリングが不十分な関数であり、最適化が困難です。その最小値は 0 で、[1,1,...,1] の点で達成されます。multirosenbrock 関数のコードは この例の最後 に表示されます。

rng(1,'twister') % For reproducibility
nvar = 10; % Any even number
lb = -3*ones(1,nvar);
ub = 6*ones(1,nvar);
fun = @multirosenbrock;
intcon = 1:nvar; % All integer variables
[sol,fval] = surrogateopt(fun,lb,ub,intcon)

Figure Optimization Plot Function contains an axes object. The axes object with title Best Function Value: 0, xlabel Iteration, ylabel Function value contains an object of type scatter. This object represents Best function value.

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
sol = 1×10

     1     1     1     1     1     1     1     1     1     1

fval = 
0

この場合、surrogateopt が解決策を見つけます。

補助関数

次のコードは、補助関数 multirosenbrock を作成します。

function F = multirosenbrock(x)
% This function is a multidimensional generalization of Rosenbrock's
% function. It operates in a vectorized manner, assuming that x is a matrix
% whose rows are the individuals.
% Copyright 2014 by The MathWorks, Inc.
N = size(x,2); % assumes x is a row vector or 2-D matrix
if mod(N,2) % if N is odd
    error('Input rows must have an even number of elements')
end
odds  = 1:2:N-1;
evens = 2:2:N;
F = zeros(size(x));
F(:,odds)  = 1-x(:,odds);
F(:,evens) = 10*(x(:,evens)-x(:,odds).^2);
F = sum(F.^2,2);
end

参考

トピック