particleswarm
입자 군집 최적화
구문
설명
예제
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: [1×1 struct]
iterations: 43
funccount: 2203
message: 'Optimization ended: relative change in the objective value ↵over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.↵FMINCON: Initial point is a local minimum that satisfies the constraints.↵↵Optimization completed because at the initial point, the objective function is non-decreasing ↵in feasible directions to within the value of the optimality tolerance, and ↵constraints are satisfied to within the value of the constraint tolerance.↵↵<stopping criteria details>↵↵Optimization completed: The final point is the initial point.↵The first-order optimality measure, 2.118144e-07, is less than options.OptimalityTolerance =↵1.000000e-06, and the maximum constraint violation, 0.000000e+00, is less than↵options.ConstraintTolerance = 1.000000e-06.↵'
hybridflag: 1
points = struct with fields:
X: [50×2 double]
Fval: [50×1 double]
입력 인수
목적 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다. 길이가 nvars인 행 벡터를 받고 스칼라 값을 반환하는 목적 함수를 작성합니다.
'UseVectorized' 옵션이 true인 경우 pop×nvars 행렬을 받도록 fun을 작성합니다. 여기서 pop는 현재 모집단 크기입니다. 이 경우 fun은 적합도 함수 값을 포함하는 pop과 동일한 길이의 벡터를 반환합니다. particleswarm 함수는 벡터화된 계산에서도 단일 구성원 모집단을 전달할 수 있으므로 fun이 pop에 대해 특정 크기를 가정하지 않도록 합니다.
예: fun = @(x)(x-[4,2]).^2
데이터형: char | function_handle | string
변수 개수로, 양의 정수로 지정됩니다. 이 솔버는 길이가 nvars인 행 벡터를 fun으로 전달합니다.
예: 4
데이터형: double
하한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. lb는 lb ≤ x ≤ ub에서 요소별 하한을 나타냅니다.
내부적으로 particleswarm는 배열 lb를 벡터 lb(:)으로 변환합니다.
예: lb = [0;-Inf;4]는 x(1) ≥ 0, x(3) ≥ 4를 의미합니다.
데이터형: double
상한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. ub는 lb ≤ x ≤ ub에서 요소별 상한을 나타냅니다.
내부적으로 particleswarm는 배열 ub를 벡터 ub(:)으로 변환합니다.
예: ub = [Inf;4;10]는 x(2) ≤ 4, x(3) ≤ 10을 의미합니다.
데이터형: double
particleswarm에 대한 옵션으로, optimoptions의 출력값으로 지정됩니다.
일부 옵션은 optimoptions 표시에 나타나지 않습니다. 이러한 옵션은 기울임꼴로 나열됩니다. 자세한 내용은 최적화 옵션 보기 항목을 참조하십시오.
CreationFcn | 초기 군집을 만드는 함수입니다. |
Display | 명령줄에 반환되는 표시 수준입니다.
|
| DisplayInterval | 반복 과정의 표시 간격입니다. 반복 과정 표시는 DisplayInterval 반복마다 한 줄씩 출력합니다. 디폴트 값은 1입니다. |
FunctionTolerance | 디폴트 값이 1e-6인 음이 아닌 스칼라입니다. 마지막 MaxStallIterations회의 반복에서 최적의 목적 함수 값의 상대 변화가 options.FunctionTolerance보다 작을 때 반복이 종료됩니다. |
| FunValCheck | 목적 함수 값과 제약 조건 값이 유효한지 여부를 확인합니다. |
HybridFcn |
하이브리드 함수와 해당 옵션을 지정하는 셀형 배열(예: When to Use a Hybrid Function 항목을 참조하십시오. |
InertiaRange | 부호 값이 동일하고 오름차순인 요소를 2개 가진 실수 벡터입니다. 적응형 관성의 하한 및 상한을 제공합니다. 일정한(비적응형) 관성을 얻으려면 InertiaRange의 두 요소를 동일한 값으로 설정합니다. 디폴트 값은 [0.1,1.1]입니다. Particle Swarm Optimization Algorithm 항목을 참조하십시오. |
InitialPoints | 입자의 초기 모집단 또는 부분 모집단으로, 행렬 또는 구조체로 지정됩니다.
|
InitialSwarmSpan |
|
MaxIterations | particleswarm이 수행하는 최대 반복 횟수입니다. 디폴트 값은 200*nvars이며, 여기서 nvars는 변수 개수입니다. |
MaxStallIterations | 디폴트 값이 20인 양의 정수입니다. 마지막 MaxStallIterations회의 반복에서 최적의 목적 함수 값의 상대 변화가 options.FunctionTolerance보다 작을 때 반복이 종료됩니다. |
MaxStallTime | 알려진 최적의 목적 함수 값이 개선되지 않은 채 지속되는 최대 시간(초)입니다. 디폴트 값이 Inf인 양의 스칼라입니다. |
MaxTime | particleswarm이 실행되는 최대 시간(초)입니다. 디폴트 값은 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는 변수 개수입니다. |
UseParallel | true이면 목적 함수를 병렬로 계산합니다. 디폴트 값은 false입니다. Parallel or Vectorized Function Evaluation 항목을 참조하십시오. |
UseVectorized | true이면 목적 함수를 벡터화된 방식으로 계산합니다. 디폴트 값은 false입니다. Parallel or Vectorized Function Evaluation 항목을 참조하십시오. |
최적화 문제로, 다음 필드를 가진 구조체로 지정됩니다.
solver | 'particleswarm' |
objective | 목적 함수에 대한 함수 핸들 또는 목적 함수의 이름입니다. |
nvars | 문제에서 변수의 개수입니다. |
lb | 하한으로 구성된 벡터 또는 배열입니다. |
ub | 상한으로 구성된 벡터 또는 배열입니다. |
options | optimoptions로 생성되는 옵션입니다. |
rngstate | 풀이 과정을 시작할 때의 난수 생성기의 상태(선택 항목)입니다. |
데이터형: struct
출력 인수
해로, 범위 제약 조건에 따라 목적 함수를 최소화하는 실수 벡터로 반환됩니다.
목적 함수 값으로, 실수형 스칼라 fun(x)로 반환됩니다.
알고리즘 중지 조건으로, 알고리즘이 중지된 이유를 나타내는 정수로 반환됩니다. 다음에는 exitflag의 값과 particleswarm이 중지된 이유가 나열되어 있습니다.
| 마지막 |
| 반복 횟수가 |
| 출력 함수나 플롯 함수에 의해 반복이 중지되었습니다. |
| 범위에 모순이 있습니다. 일부 |
| 최상의 목적 함수 값이 |
| 최상의 목적 함수 값이 |
| 실행 시간이 |
풀이 과정 요약으로, 최적화 과정에 대한 정보를 포함하는 구조체로 반환됩니다.
| 솔버 반복 횟수 |
| 목적 함수 실행 횟수입니다. |
| 알고리즘이 중지된 이유입니다. |
| 하이브리드 함수의 종료 플래그입니다. |
| 알고리즘이 시작되기 직전 디폴트 난수 생성기의 상태입니다. |
최종 군집 위치와 목적 함수 값으로, 다음 필드를 갖는 구조체로 반환됩니다.
X— 최종 군집의 위치로, 행렬로 반환됩니다. 행렬의 각 행은 하나의 점을 나타냅니다.Fval— 최종 군집의 목적 함수 값입니다. 각i에 대해 최종 군집points.Fval(i) = fun(points.X(i))의 멤버의 인텍스입니다.
최적화를 계속하려면 points를 InitialPoints 옵션으로 전달합니다. 하지만 이 접근법은 처음부터 더 오랜 시간 동안 최적화를 실행하는 것과는 다릅니다. 최종 모집단에서 최적화가 다시 시작되면 알고리즘의 많은 부분이 동일하지 않기 때문입니다. Particle Swarm Optimization Algorithm 항목을 참조하십시오.
데이터형: struct
제한 사항
문제 기반 최적화 라이브 편집기 작업은 현재 여러 초기점 또는 초기 목적 함수 값 지정을 지원하지 않습니다. 초기점을 지정하려면 솔버 기반 작업을 사용하거나 명령줄을 사용하십시오.
알고리즘
입자 군집 최적화 알고리즘에 대한 설명은 Particle Swarm Optimization Algorithm 항목을 참조하십시오.
대체 기능
앱
최적화 라이브 편집기 작업은 particleswarm에 대한 시각적 인터페이스를 제공합니다.
확장 기능
병렬로 실행하려면 'UseParallel' 옵션을 true로 설정하십시오.
options = optimoptions('solvername','UseParallel',true)
자세한 내용은 How to Use Parallel Processing in Global Optimization Toolbox 항목을 참조하십시오.
버전 내역
R2014b에 개발됨particleswarm이 이제 출력값 points(군집의 최종 위치와 관련 목적 함수 값이 포함된 구조체)를 반환할 수 있습니다. 이제는 InitialPoints 옵션을 사용하여 초기 군집에 대한 위치와 목적 함수 값을 제공할 수 있습니다. InitialSwarmMatrix 옵션 또는 InitialSwarm 옵션을 사용하여 초기 군집 위치를 제공하는 것도 여전히 가능합니다. 이 경우 particleswarm은 초기 군집 행렬을 InitialPoints 옵션으로 전달합니다.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)