이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
particleswarm
입자 군집 최적화
구문
설명
는 x
= particleswarm(fun
,nvars
)fun
의 국소 최솟값을 달성하는 벡터 x
를 구하려고 시도합니다. nvars
는 fun
의 차원(설계 변수의 수)입니다.
참고
추가 파라미터 전달하기에는 필요한 경우 추가 파라미터를 목적 함수에 전달하는 방법이 설명되어 있습니다.
예제
단순한 함수 최소화하기
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] = 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
입력 인수
fun
— 목적 함수
함수 핸들 | 함수 이름
목적 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다. 길이가 nvars
인 행 벡터를 받고 스칼라 값을 반환하는 목적 함수를 작성합니다.
'UseVectorized'
옵션이 true
인 경우 pop
×nvars
행렬을 받도록 fun
을 작성합니다. 여기서 pop
는 현재 모집단 크기입니다. 이 경우 fun
은 적합도 함수 값을 포함하는 pop
과 동일한 길이의 벡터를 반환합니다. particleswarm
함수는 벡터화된 계산에서도 단일 구성원 모집단을 전달할 수 있으므로 fun
이 pop
에 대해 특정 크기를 가정하지 않도록 합니다.
예: fun = @(x)(x-[4,2]).^2
데이터형: char
| function_handle
| string
nvars
— 변수 개수
양의 정수
lb
— 하한
[]
(디폴트 값) | 실수형 벡터 또는 배열
하한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. lb
는 lb
≤ x
≤ ub
에서 요소별 하한을 나타냅니다.
내부적으로 particleswarm
는 배열 lb
를 벡터 lb(:)
으로 변환합니다.
예: lb = [0;-Inf;4]
는 x(1) ≥ 0
, x(3) ≥ 4
를 의미합니다.
데이터형: double
ub
— 상한
[]
(디폴트 값) | 실수형 벡터 또는 배열
상한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. ub
는 lb
≤ x
≤ ub
에서 요소별 상한을 나타냅니다.
내부적으로 particleswarm
는 배열 ub
를 벡터 ub(:)
으로 변환합니다.
예: ub = [Inf;4;10]
는 x(2) ≤ 4
, x(3) ≤ 10
을 의미합니다.
데이터형: double
options
— particleswarm
에 대한 옵션
optimoptions
를 사용하여 생성되는 옵션
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 항목을 참조하십시오. |
InitialSwarmMatrix | 입자의 초기 모집단 또는 부분 모집단입니다. M ×nvars 행렬로, 각 행이 하나의 입자를 나타냅니다. M < SwarmSize 이면, particleswarm 은 더 많은 입자를 만들어 총 개수가 SwarmSize 가 되도록 합니다. M > SwarmSize 이면, particleswarm 은 첫 번째 SwarmSize 행을 사용합니다. |
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 항목을 참조하십시오. |
problem
— 최적화 문제
구조체
최적화 문제로, 다음 필드를 가진 구조체로 지정됩니다.
solver | 'particleswarm' |
objective | 목적 함수에 대한 함수 핸들 또는 목적 함수의 이름입니다. |
nvars | 문제에서 변수의 개수입니다. |
lb | 하한으로 구성된 벡터 또는 배열입니다. |
ub | 상한으로 구성된 벡터 또는 배열입니다. |
options | optimoptions 로 생성되는 옵션입니다. |
rngstate | 풀이 과정을 시작할 때의 난수 생성기의 상태(선택 항목)입니다. |
데이터형: struct
출력 인수
x
— 해(Solution)
실수형 벡터
해로, 범위 제약 조건에 따라 목적 함수를 최소화하는 실수 벡터로 반환됩니다.
fval
— 목적 함수 값
실수형 스칼라
목적 함수 값으로, 실수형 스칼라 fun(x)
로 반환됩니다.
exitflag
— 알고리즘 중지 조건
정수
알고리즘 중지 조건으로, 알고리즘이 중지된 이유를 나타내는 정수로 반환됩니다. 다음에는 exitflag
의 값과 particleswarm
이 중지된 이유가 나열되어 있습니다.
| 마지막 |
| 반복 횟수가 |
| 출력 함수나 플롯 함수에 의해 반복이 중지되었습니다. |
| 범위에 모순이 있습니다. 일부 |
| 최상의 목적 함수 값이 |
| 최상의 목적 함수 값이 |
| 실행 시간이 |
output
— 풀이 과정 요약
구조체
풀이 과정 요약으로, 최적화 과정에 대한 정보를 포함하는 구조체로 반환됩니다.
| 솔버 반복 횟수 |
| 목적 함수 실행 횟수입니다. |
| 알고리즘이 중지된 이유입니다. |
| 하이브리드 함수의 종료 플래그입니다. |
| 알고리즘이 시작되기 직전 디폴트 난수 생성기의 상태입니다. |
알고리즘
입자 군집 최적화 알고리즘에 대한 설명은 Particle Swarm Optimization Algorithm 항목을 참조하십시오.
대체 기능
앱
최적화 라이브 편집기 작업은 particleswarm
에 대한 시각적 인터페이스를 제공합니다.
확장 기능
자동 병렬 지원
Parallel Computing Toolbox™를 사용해 자동 병렬 계산을 실행하여 코드 실행 속도를 높일 수 있습니다.
병렬로 실행하려면 'UseParallel'
옵션을 true
로 설정하십시오.
options = optimoptions('
solvername
','UseParallel',true)
자세한 내용은 How to Use Parallel Processing in Global Optimization Toolbox 항목을 참조하십시오.
버전 내역
R2014b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)