Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

simulannealbnd

담금질 기법 알고리즘을 사용하여 함수의 최솟값 구하기

설명

예제

x = simulannealbnd(fun,x0)은 목적 함수의 값을 계산하는 함수 핸들 fun에 대해, 국소 최솟값 x를 구합니다. x0은 담금질 기법 알고리즘의 초기점으로, 실수 벡터입니다.

참고

추가 파라미터 전달하기에는 필요한 경우 추가 파라미터를 목적 함수에 전달하는 방법이 설명되어 있습니다.

예제

x = simulannealbnd(fun,x0,lb,ub)는 해가 항상 범위 lb x ub 내에 있도록 설계 변수 x에 대한 하한 및 상한 집합을 정의합니다. x(i)의 하한이 비유계인 경우 lb(i) = -Inf를 설정하고, x(i)의 상한이 비유계인 경우 ub(i) = Inf를 설정하십시오.

예제

x = simulannealbnd(fun,x0,lb,ub,options)options에 지정된 최적화 옵션을 사용하여 최소화합니다. optimoptions를 사용하여 options를 만듭니다. 범위가 존재하지 않는 경우 lb = [] 및/또는 ub = []을 설정하십시오.

x = simulannealbnd(problem)problem에 설명되어 있는 구조체인 problem의 최솟값을 구합니다.

[x,fval] = simulannealbnd(___)는 모든 구문에서 해 x에서의 목적 함수 fun의 값을 반환합니다.

예제

[x,fval,exitflag,output] = simulannealbnd(___)simulannealbnd의 종료 상황을 설명하는 값 exitflag와 최적화 과정에 대한 정보가 포함된 구조체 output을 추가로 반환합니다.

예제

모두 축소

다수의 국소 최솟값을 갖는 2차원 함수인 De Jong의 5번째 함수를 최소화합니다. 이 함수는 이 예제를 실행할 때 제공됩니다.

De Jong의 5번째 함수를 플로팅합니다.

dejong5fcn

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

simulannealbnd를 사용하여 점 [0,0]부터 시작하여 De Jong의 5번째 함수를 최소화합니다.

fun = @dejong5fcn;
x0 = [0 0];
x = simulannealbnd(fun,x0)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -32.0285   -0.1280

simulannealbnd 알고리즘은 MATLAB® 난수 스트림을 사용하기 때문에 사용자는 다른 결과를 얻을 수도 있습니다.

De Jong의 5번째 함수를 유계 영역 내에서 최소화합니다. 이 함수는 이 예제를 실행할 때 제공됩니다.

De Jong의 5번째 함수를 플로팅합니다.

dejong5fcn

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

[0,0]에서 시작하여 simulannealbnd를 시작하고 각 성분에 대해 하한 -64, 상한 64를 설정합니다.

fun = @dejong5fcn;
x0 = [0 0];
lb = [-64 -64];
ub = [64 64];
x = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

simulannealbnd 알고리즘은 MATLAB® 난수 스트림을 사용하기 때문에 사용자는 다른 결과를 얻을 수도 있습니다.

일부 플롯 함수를 사용하도록 옵션을 설정하여 simulannealbnd의 진행률을 관찰합니다.

몇몇 플롯 함수를 사용하도록 담금질 기법 옵션을 설정합니다.

options = optimoptions('simulannealbnd','PlotFcns',...
          {@saplotbestx,@saplotbestf,@saplotx,@saplotf});

[0,0]에서 시작하여 simulannealbnd를 시작하고 각 성분에 대해 하한 -64, 상한 64를 설정합니다. dejong5fcn(이 예제를 실행할 때 제공됨)을 최소화합니다.

rng default % For reproducibility
fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)

Figure Simulated Annealing contains 4 axes objects. Axes object 1 with title Best Point, xlabel Variable number, ylabel Best point contains an object of type bar. Axes object 2 with title Best Function Value: 1.99203, xlabel Iteration, ylabel Function value contains an object of type scatter. Axes object 3 with title Current Point, xlabel Variable number, ylabel Current point contains an object of type bar. Axes object 4 with title Current Function Value: 1.99203, xlabel Iteration, ylabel Function value contains an object of type scatter.

simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

담금질 기법 최소화의 모든 출력값을 구합니다.

De Jong의 5번째 함수(이 예제를 실행할 때 제공됨)를 플로팅합니다.

dejong5fcn

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

[0,0]에서 시작하여 simulannealbnd를 시작하고 각 성분에 대해 하한 -64, 상한 64를 설정합니다.

fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
[x,fval,exitflag,output] = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

fval = 1.9920
exitflag = 1
output = struct with fields:
     iterations: 1762
      funccount: 1779
        message: 'simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.'
       rngstate: [1x1 struct]
    problemtype: 'boundconstraints'
    temperature: [2x1 double]
      totaltime: 0.6695

simulannealbnd 알고리즘은 MATLAB® 난수 스트림을 사용하기 때문에 사용자는 다른 결과를 얻을 수도 있습니다.

입력 인수

모두 축소

최소화할 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다. fun은 벡터 x를 받아서, x에서 계산된 목적 함수인 실수형 스칼라 f를 반환하는 함수입니다.

fun은 다음과 같이 파일에 대한 함수 핸들로 지정할 수 있습니다.

x = simulannealbnd(@myfun,x0)

여기서 myfun은 다음과 같은 MATLAB® 함수입니다.

function f = myfun(x)
f = ...            % Compute function value at x

fun을 익명 함수에 대한 함수 핸들로 지정할 수도 있습니다.

x = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);

예: fun = @(x)sin(x(1))*cos(x(2))

데이터형: char | function_handle | string

초기점으로, 실수형 벡터로 지정됩니다. simulannealbndx0의 요소 개수를 사용하여 fun이 받는 변수의 개수를 확인합니다.

예: x0 = [1,2,3,4]

데이터형: double

하한으로, 실수형 벡터나 실수형 배열로 지정됩니다. x0의 요소 개수가 lb의 요소 개수와 같으면 lb는 다음을 지정합니다.

모든 i에 대해 x(i) >= lb(i)

numel(lb) < numel(x0)이면 lb는 다음을 지정합니다.

1 <= i <= numel(lb)에 대해

x(i) >= lb(i)

이 경우 솔버가 경고를 발생시킵니다.

예: 모든 제어 변수가 양수가 되도록 지정하려면 lb = zeros(size(x0))을 사용하십시오.

데이터형: double

상한으로, 실수형 벡터나 실수형 배열로 지정됩니다. x0의 요소 개수가 ub의 요소 개수와 같으면 ub는 다음을 지정합니다.

모든 i에 대해 x(i) <= ub(i)

numel(ub) < numel(x0)이면 ub는 다음을 지정합니다.

1 <= i <= numel(ub)에 대해

x(i) <= ub(i)

이 경우 솔버가 경고를 발생시킵니다.

예: 모든 제어 변수가 1보다 작도록 지정하려면 ub = ones(size(x0))을 사용하십시오.

데이터형: double

최적화 옵션으로, optimoptions에 의해 반환되는 객체 또는 구조체로 지정됩니다. 자세한 내용은 Simulated Annealing Options 항목을 참조하십시오.

optimoptions기울임꼴로 나열된 옵션을 숨깁니다. Options that optimoptions Hides 항목을 참조하십시오.

{}은 디폴트 값을 나타냅니다. 옵션 세부 정보는 Simulated Annealing Options 항목을 참조하십시오.

옵션설명

AcceptanceFcn

알고리즘이 새 점을 수락할지 결정하는 데 사용하는 함수입니다. 'acceptancesa' 또는 함수 핸들로 지정합니다.

함수 핸들 | {'acceptancesa'}

AnnealingFcn

알고리즘이 새 점을 생성하는 데 사용하는 함수입니다. 내장 담금질 함수의 이름 또는 함수 핸들로 지정합니다.

함수 핸들 | 함수 이름 | 'annealingboltz' | {'annealingfast'}

DataType

결정 변수의 유형

'custom' | {'double'}

Display

표시 수준

'off' | 'iter' | 'diagnose' | {'final'}

DisplayInterval

반복 과정의 표시 간격

양의 정수 | {10}

FunctionTolerance

함수 값에 대한 종료 허용오차

options 구조체의 경우 TolFun을 사용합니다.

양의 스칼라 | {1e-6}

HybridFcn

솔버가 반복을 수행하는 동안 또는 반복을 종료할 때 자동으로 HybridFcn(또 다른 최적화 함수)을 실행합니다. 함수 이름 또는 함수 핸들로 지정합니다.

When to Use a Hybrid Function 항목을 참조하십시오.

'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

또는

1×2 셀형 배열 | {@solver, hybridoptions}, 여기서 solver = fminsearch, patternsearch, fminunc, 또는 fmincon {[]}

HybridInterval

HybridFcn이 호출되는 간격('end' 또는 'never'가 아닌 경우)

양의 정수 | 'never' | {'end'}

InitialTemperature

온도의 초기값

양의 스칼라 | 양의 벡터 | {100}

MaxFunctionEvaluations

허용되는 목적 함수 실행의 최대 횟수

options 구조체의 경우 MaxFunEvals을 사용합니다.

양의 정수 | {3000*numberOfVariables}

MaxIterations

허용되는 최대 반복 횟수

options 구조체의 경우 MaxIter을 사용합니다.

양의 정수 | {Inf}

MaxStallIterations

현재 점에서의 적합도 함수 값의 평균 변화가 options.FunctionTolerance보다 작게 나오는 반복의 횟수

options 구조체의 경우 StallIterLimit을 사용합니다.

양의 정수 | {500*numberOfVariables}

MaxTime

알고리즘이 MaxTime초 동안 실행 후 중지함

options 구조체의 경우 TimeLimit을 사용합니다.

양의 스칼라 | {Inf}

ObjectiveLimit

원하는 목적 함수의 최솟값

스칼라 | {-Inf}

OutputFcn

함수가 반복 데이터를 가져오고 런타임에 옵션을 변경할 수 있음

options 구조체의 경우 OutputFcns를 사용합니다.

함수 핸들 | 함수 핸들로 구성된 셀형 배열 | {[]}

PlotFcn

반복 중에 호출되는 플롯 함수

options 구조체의 경우 PlotFcns를 사용합니다.

함수 핸들 | 내장 플롯 함수 이름 | 함수 핸들로 구성된 셀형 배열 | 내장 플롯 함수 이름으로 구성된 셀형 배열 | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

PlotInterval

플롯 함수가 해당 간격마다 호출됨

양의 정수 | {1}

ReannealInterval

재담금질 간격

양의 정수 | {100}

TemperatureFcn

온도 스케줄을 업데이트하는 데 사용되는 함수

함수 핸들 | 내장 온도 함수 이름 | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

예: options = optimoptions(@simulannealbnd,'MaxIterations',150)

데이터형: struct

문제 구조체로, 다음 필드를 가진 구조체로 지정됩니다.

  • objective — 목적 함수

  • x0 — 시작점

  • lbx에 대한 하한

  • ubx에 대한 상한

  • solver'simulannealbnd'

  • optionsoptimoptions로 만든 옵션 또는 options 구조체

  • rngstate — 난수 생성기의 상태를 재설정하는 선택적 필드

참고

problem은 위에서 지정한 대로 모든 필드가 있어야 합니다.

데이터형: struct

출력 인수

모두 축소

해로, 실수형 벡터로 반환됩니다. x의 크기는 x0의 크기와 같습니다. 일반적으로 xexitflag가 양수인 경우 문제에 대한 국소해입니다.

해에서 계산된 목적 함수 값으로, 실수로 반환됩니다. 일반적으로 fval = fun(x)입니다.

simulannealbnd가 중지된 이유로, 정수로 반환됩니다.

종료 플래그의미
1

options.MaxStallIterations 반복 동안 목적 함수 값의 평균 변화량이 options.FunctionTolerance보다 작습니다.

5

목적 함수 값이 options.ObjectiveLimit보다 작습니다.

0

최대 함수 실행 횟수 또는 반복 횟수에 도달했습니다.

-1

출력 함수나 플롯 함수에 의해 최적화가 종료되었습니다.

-2

실현가능점을 찾지 못했습니다.

-5

시간 제한을 초과했습니다.

최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.

  • problemtype — 문제 유형(제약 조건 없음 또는 범위 제약 조건 있음)입니다.

  • iterations — 계산된 반복 횟수입니다.

  • funccount — 목적 함수의 실행 횟수입니다.

  • message - 알고리즘이 종료된 이유입니다.

  • temperature — 솔버가 종료되었을 때의 온도입니다.

  • totaltime — 솔버가 실행된 총 시간입니다.

  • rngstate — 알고리즘이 시작되기 직전 MATLAB 난수 생성기의 상태입니다. rngstate의 값을 사용하여 simulannealbnd의 출력값을 재현할 수 있습니다. Reproduce Your Results 항목을 참조하십시오.

대체 기능

최적화 라이브 편집기 작업은 simulannealbnd에 대한 시각적 인터페이스를 제공합니다.

버전 내역

R2007a에 개발됨