Main Content

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

particleswarm

입자 군집 최적화

설명

예제

x = particleswarm(fun,nvars)fun의 국소 최솟값을 달성하는 벡터 x를 구하려고 시도합니다. nvarsfun의 차원(설계 변수의 수)입니다.

참고

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

예제

x = particleswarm(fun,nvars,lb,ub)는 해가 범위 lb x ub 내에 있도록 설계 변수 x에 대한 하한 및 상한 집합을 정의합니다.

예제

x = particleswarm(fun,nvars,lb,ub,options)options의 값으로 대체된 디폴트 최적화 파라미터를 사용하여 최소화합니다. 범위가 존재하지 않을 경우 lb = []ub = []을 설정하십시오.

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

예제

[x,fval,exitflag,output,points] = particleswarm(___)은 위에 열거된 구문의 입력 인수 조합을 사용하여 다음을 반환합니다.

  • fval: 목적 함수 값 fun(x)인 스칼라

  • exitflag: 종료 상황을 설명하는 값

  • output: 최적화 과정에 대한 정보가 포함된 구조체

  • points: points.X의 최종 군집 위치와 points.Fval의 관련 목적 함수 값이 포함된 구조체

예제

모두 축소

2개의 변수로 구성된 단순한 함수를 최소화합니다.

목적 함수를 정의합니다.

fun = @(x)x(1)*exp(-norm(x)^2);

particleswarm을 호출하여 함수를 최소화합니다.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.

x =

  629.4474  311.4814

함수 플롯에서 볼 수 있듯이 이 해는 실제 최솟값과 거리가 멉니다.

fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))

일반적으로 범위를 설정하는 것이 가장 좋습니다. 범위를 설정해서 단순한 함수 최소화하기 항목을 참조하십시오.

2개의 변수로 구성된 단순한 함수를 범위 제약 조건을 적용해서 최소화합니다.

목적 함수를 정의합니다.

fun = @(x)x(1)*exp(-norm(x)^2);

변수에 범위를 설정합니다.

lb = [-10,-15];
ub = [15,20];

particleswarm을 호출하여 함수를 최소화합니다.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

더 큰 모집단과 하이브리드 함수를 사용하여 더 나은 해를 구해 봅니다.

목적 함수와 범위를 지정합니다.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];

옵션을 지정합니다.

options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);

particleswarm을 호출하여 함수를 최소화합니다.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

풀이 과정을 더 자세히 검토하려면 선택적 출력 인수를 반환합니다.

문제를 정의합니다.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];
options = optimoptions('particleswarm','SwarmSize',50,'HybridFcn',@fmincon);

함수를 최소화하고 풀이 과정에 대한 정보를 얻기 위해 모든 출력값을 포함하여 particleswarm을 호출합니다.

rng default  % For reproducibility
nvars = 2;
[x,fval,exitflag,output,points] = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

fval = -0.4289
exitflag = 1
output = struct with fields:
      rngstate: [1x1 struct]
    iterations: 43
     funccount: 2203
       message: 'Optimization ended: relative change in the objective value ...'
    hybridflag: 1

points = struct with fields:
       X: [50x2 double]
    Fval: [50x1 double]

입력 인수

모두 축소

목적 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다. 길이가 nvars인 행 벡터를 받고 스칼라 값을 반환하는 목적 함수를 작성합니다.

'UseVectorized' 옵션이 true인 경우 pop×nvars 행렬을 받도록 fun을 작성합니다. 여기서 pop는 현재 모집단 크기입니다. 이 경우 fun은 적합도 함수 값을 포함하는 pop과 동일한 길이의 벡터를 반환합니다. particleswarm 함수는 벡터화된 계산에서도 단일 구성원 모집단을 전달할 수 있으므로 funpop에 대해 특정 크기를 가정하지 않도록 합니다.

예: fun = @(x)(x-[4,2]).^2

데이터형: char | function_handle | string

변수 개수로, 양의 정수로 지정됩니다. 이 솔버는 길이가 nvars인 행 벡터를 fun으로 전달합니다.

예: 4

데이터형: double

하한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. lblb x ub에서 요소별 하한을 나타냅니다.

내부적으로 particleswarm는 배열 lb를 벡터 lb(:)으로 변환합니다.

예: lb = [0;-Inf;4]x(1) ≥ 0, x(3) ≥ 4를 의미합니다.

데이터형: double

상한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. ublb x ub에서 요소별 상한을 나타냅니다.

내부적으로 particleswarm는 배열 ub를 벡터 ub(:)으로 변환합니다.

예: ub = [Inf;4;10]x(2) ≤ 4, x(3) ≤ 10을 의미합니다.

데이터형: double

particleswarm에 대한 옵션으로, optimoptions의 출력값으로 지정됩니다.

일부 옵션은 optimoptions 표시에 나타나지 않습니다. 이러한 옵션은 기울임꼴로 나열됩니다. 자세한 내용은 최적화 옵션 보기 항목을 참조하십시오.

CreationFcn

초기 군집을 만드는 함수입니다. 'pswcreationuniform' 또는 함수 핸들로 지정합니다. 디폴트 값은 'pswcreationuniform'입니다. Swarm Creation 항목을 참조하십시오.

Display

명령줄에 반환되는 표시 수준입니다.

  • 'off' 또는 'none'은 출력값을 표시하지 않습니다.

  • 'final'은 최종 출력값만 표시합니다(디폴트 값).

  • 'iter'은 반복 과정을 표시합니다.

DisplayInterval반복 과정의 표시 간격입니다. 반복 과정 표시는 DisplayInterval 반복마다 한 줄씩 출력합니다. 디폴트 값은 1입니다.
FunctionTolerance디폴트 값이 1e-6인 음이 아닌 스칼라입니다. 마지막 MaxStallIterations회의 반복에서 최적의 목적 함수 값의 상대 변화가 options.FunctionTolerance보다 작을 때 반복이 종료됩니다.
FunValCheck

목적 함수 값과 제약 조건 값이 유효한지 여부를 확인합니다. 'on'은 목적 함수 또는 제약 조건이 복소수, Inf 또는 NaN 값을 반환하는 경우에 오류를 표시합니다. 디폴트 값인 'off'는 오류를 표시하지 않습니다.

HybridFcn

particleswarm 종료 이후 최적화를 계속 이어가는 함수입니다. 함수 이름 또는 함수 핸들로 지정합니다. 가능한 변수:

  • 'fmincon'

  • 'fminsearch'

  • 'fminunc'

  • 'patternsearch'

하이브리드 함수와 해당 옵션을 지정하는 셀형 배열(예: {@fmincon,fminconopts})일 수도 있습니다. 디폴트 값은 []입니다. Hybrid Function 항목을 참조하십시오.

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

InertiaRange부호 값이 동일하고 오름차순인 요소를 2개 가진 실수 벡터입니다. 적응형 관성의 하한 및 상한을 제공합니다. 일정한(비적응형) 관성을 얻으려면 InertiaRange의 두 요소를 동일한 값으로 설정합니다. 디폴트 값은 [0.1,1.1]입니다. Particle Swarm Optimization Algorithm 항목을 참조하십시오.
InitialPoints

입자의 초기 모집단 또는 부분 모집단으로, 행렬 또는 구조체로 지정됩니다.

  • 행렬의 크기는 M×nvars입니다. 각 행은 하나의 입자를 나타냅니다. M < SwarmSize이면, particleswarm은 더 많은 입자를 만들어 총 개수가 SwarmSize가 되도록 합니다. M > SwarmSize이면, particleswarm은 첫 번째 SwarmSize 행을 사용합니다.

  • 구조체에는 초기점으로 구성된 행렬을 나타내는 X 필드가 있어야 합니다.

  • 구조체에 필드가 2개 이상 있는 경우, 구조체에는 점 InitialPoints.X에 대한 목적 함수 값으로 구성된 벡터를 포함하는 Fval 필드가 있어야 합니다.

InitialSwarmSpan

@pswcreationuniform이 만드는 입자 위치의 초기 범위입니다. 양의 스칼라 또는 nvars개 요소를 가진 벡터일 수 있으며, 여기서 nvars는 변수 개수입니다. 입자 성분의 범위는 -InitialSwarmSpan/2,InitialSwarmSpan/2이며, 필요한 경우 범위를 일치시키기 위해 이동 및 스케일링됩니다. 디폴트 값은 2000입니다.

InitialSwarmSpan은 초기 입자 속도의 범위에도 영향을 미칩니다. Initialization 항목을 참조하십시오.

MaxIterationsparticleswarm이 수행하는 최대 반복 횟수입니다. 디폴트 값은 200*nvars이며, 여기서 nvars는 변수 개수입니다.
MaxStallIterations디폴트 값이 20인 양의 정수입니다. 마지막 MaxStallIterations회의 반복에서 최적의 목적 함수 값의 상대 변화가 options.FunctionTolerance보다 작을 때 반복이 종료됩니다.
MaxStallTime알려진 최적의 목적 함수 값이 개선되지 않은 채 지속되는 최대 시간(초)입니다. 디폴트 값이 Inf인 양의 스칼라입니다.
MaxTimeparticleswarm이 실행되는 최대 시간(초)입니다. 디폴트 값은 Inf입니다.
MinNeighborsFraction최소 적응형 이웃 크기로, 0에서 1 사이의 스칼라입니다. 디폴트 값은 0.25입니다. Particle Swarm Optimization Algorithm 항목을 참조하십시오.
ObjectiveLimit최소 목적 값으로, 중지 기준입니다. 디폴트 값이 -Inf인 스칼라입니다.
OutputFcn함수 핸들 또는 함수 핸들로 구성된 셀형 배열입니다. 출력 함수는 반복 데이터를 읽고, 솔버를 중지할 수 있습니다. 디폴트 값은 []입니다. Output Function and Plot Function 항목을 참조하십시오.
PlotFcn함수 이름, 함수 핸들 또는 함수 핸들로 구성된 셀형 배열입니다. 사용자 지정 플롯 함수의 경우, 함수 핸들을 전달하십시오. 플롯 함수는 반복 데이터를 읽고, 각 반복을 플로팅하며, 솔버를 중지할 수 있습니다. 디폴트 값은 []입니다. 사용 가능한 내장 플롯 함수는 'pswplotbestf'입니다. Output Function and Plot Function 항목을 참조하십시오.
SelfAdjustmentWeight속도를 조절할 때 각 입자의 최적 위치에 대한 가중치입니다. 디폴트 값이 1.49인 유한 스칼라입니다. Particle Swarm Optimization Algorithm 항목을 참조하십시오.
SocialAdjustmentWeight속도를 조절할 때 최적 이웃 위치의 가중치입니다. 디폴트 값이 1.49인 유한 스칼라입니다. Particle Swarm Optimization Algorithm 항목을 참조하십시오.
SwarmSize군집 내의 입자 개수로, 1보다 큰 정수입니다. 디폴트 값은 min(100,10*nvars)이며, 여기서 nvars는 변수 개수입니다.
UseParalleltrue이면 목적 함수를 병렬로 계산합니다. 디폴트 값은 false입니다. Parallel or Vectorized Function Evaluation 항목을 참조하십시오.
UseVectorizedtrue이면 목적 함수를 벡터화된 방식으로 계산합니다. 디폴트 값은 false입니다. Parallel or Vectorized Function Evaluation 항목을 참조하십시오.

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

solver'particleswarm'
objective목적 함수에 대한 함수 핸들 또는 목적 함수의 이름입니다.
nvars문제에서 변수의 개수입니다.
lb하한으로 구성된 벡터 또는 배열입니다.
ub상한으로 구성된 벡터 또는 배열입니다.
optionsoptimoptions로 생성되는 옵션입니다.
rngstate풀이 과정을 시작할 때의 난수 생성기의 상태(선택 항목)입니다.

데이터형: struct

출력 인수

모두 축소

해로, 범위 제약 조건에 따라 목적 함수를 최소화하는 실수 벡터로 반환됩니다.

목적 함수 값으로, 실수형 스칼라 fun(x)로 반환됩니다.

알고리즘 중지 조건으로, 알고리즘이 중지된 이유를 나타내는 정수로 반환됩니다. 다음에는 exitflag의 값과 particleswarm이 중지된 이유가 나열되어 있습니다.

1

마지막 options.MaxStallIterations 반복에 대한 목적 함수 값의 상대 변화량이 options.FunctionTolerance보다 작습니다.

0

반복 횟수가 options.MaxIterations를 초과했습니다.

-1

출력 함수나 플롯 함수에 의해 반복이 중지되었습니다.

-2

범위에 모순이 있습니다. 일부 i에 대해 lb(i) > ub(i)입니다.

-3

최상의 목적 함수 값이 options.ObjectiveLimit 미만입니다.

-4

최상의 목적 함수 값이 options.MaxStallTime(단위: 초) 내에서 변경되지 않았습니다.

-5

실행 시간이 options.MaxTime(단위: 초)을 초과했습니다.

풀이 과정 요약으로, 최적화 과정에 대한 정보를 포함하는 구조체로 반환됩니다.

iterations

솔버 반복 횟수

funccount

목적 함수 실행 횟수입니다.

message

알고리즘이 중지된 이유입니다.

hybridflag

하이브리드 함수의 종료 플래그입니다. HybridFcn options와 관련이 있습니다.

rngstate

알고리즘이 시작되기 직전 디폴트 난수 생성기의 상태입니다.

최종 군집 위치와 목적 함수 값으로, 다음 필드를 갖는 구조체로 반환됩니다.

  • X — 최종 군집의 위치로, 행렬로 반환됩니다. 행렬의 각 행은 하나의 점을 나타냅니다.

  • Fval — 최종 군집의 목적 함수 값입니다. 각 i에 대해 최종 군집 points.Fval(i) = fun(points.X(i))의 멤버의 인텍스입니다.

최적화를 계속하려면 pointsInitialPoints 옵션으로 전달합니다. 하지만 이 접근법은 처음부터 더 오랜 시간 동안 최적화를 실행하는 것과는 다릅니다. 최종 모집단에서 최적화가 다시 시작되면 알고리즘의 많은 부분이 동일하지 않기 때문입니다. Particle Swarm Optimization Algorithm 항목을 참조하십시오.

데이터형: struct

제한 사항

  • 문제 기반 최적화 라이브 편집기 작업은 현재 여러 초기점 또는 초기 목적 함수 값 지정을 지원하지 않습니다. 초기점을 지정하려면 솔버 기반 작업을 사용하거나 명령줄을 사용하십시오.

알고리즘

입자 군집 최적화 알고리즘에 대한 설명은 Particle Swarm Optimization Algorithm 항목을 참조하십시오.

대체 기능

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

확장 기능

버전 내역

R2014b에 개발됨

모두 확장