이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
parfeval
을 사용하여 백그라운드에서 함수 실행
이 예제에서는 백그라운드에서 함수를 실행하기 위해 parfeval
을 사용하여 간단한 최적화 문제를 푸는 방법을 보여줍니다. 결과가 나오는 대로 수집하고 결과가 적합하면 최적화 루프를 일찍 중단할 수 있습니다.
나중에 동일한 계산을 재현하기 위해 난수 생성기의 시드값을 디폴트 값으로 설정합니다.
rng('default')
목적 함수 objFun
은 행 벡터 x
를 입력값으로 받고 목적 함수를 나타내는 스칼라 값을 반환합니다. 목적 함수와 최적화 루프 반복 횟수를 정의합니다. 목적 함수를 실행하기 위해 사용할 x
값에 대한 후보를 무작위로 생성합니다. 최솟값과 인덱스 변수의 값을 설정합니다.
objFun = @(x) x(1)^2 + x(2)^2; numIterations = 500; xCandidates = rand(numIterations,2); minFval = inf; minIndex = inf;
parfeval
을 사용하여 백그라운드에서 각 x
후보 세트에 대해 목적 함수를 실행합니다. 효율성을 위해서 Future 객체로 구성된 배열을 사전할당합니다.
futures(1:numIterations) = parallel.FevalFuture; for i = 1:numIterations futures(i) = parfeval(objFun,1,xCandidates(i,:)); end
Starting parallel pool (parpool) using the 'Processes' profile ... Connected to parallel pool with 6 workers.
결과가 나오는 대로 가져오고 새 최솟값이 발견되면 최소 함수 값과 인덱스를 업데이트합니다. 해당 최솟값이 특정 임계값 미만인 경우 루프를 일찍 중단합니다.
for idx = 1:numIterations [completedIndex, fval] = fetchNext(futures); if fval < minFval minFval = fval; minIndex = completedIndex; end if minFval <= 0.01 fprintf("Minimum found at x = [%f,%f]\n", ... xCandidates(minIndex,1),xCandidates(minIndex,2)); break; end end
Minimum found at x = [0.031833,0.093820]
나머지 Future를 취소합니다.
cancel(futures);
clear futures;
구한 최선해를 표시합니다.
fprintf("Best solution found: x = [%f,%f], fval = %f\n", ... xCandidates(minIndex,1),xCandidates(minIndex,2),minFval);
Best solution found: x = [0.031833,0.093820], fval = 0.009816