このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
混合整数代理最適化
この例では、整数変数を含む最適化問題を解決する方法を示します。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)
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