필터 지우기
필터 지우기

Multi-function optimization

조회 수: 1 (최근 30일)
Idossou Marius Adom
Idossou Marius Adom 2019년 12월 3일
댓글: Idossou Marius Adom 2019년 12월 4일
Hi.
I have a function f(x,a) where a is a parameter that is exogenously provided. I want to minimize f(x,a) for different values of a (a1 a2 a3 ...) independently. Is there any way to do that without using a for loop ?
If I consider defining f(x,[a1 a2 a3 ...]) as a multidimensional:
function f = obj(x,a)
f(1) = f(x,a1);
f(2) = f(x,a2);
f(3) = f(x,a3);
.
.
.
end
and then minimize f by providing the vector a=[a1 a2 a3 ...], Matlab will not consider the components of the function as independent as I want. Do you have any solution ?
Thank you.
  댓글 수: 1
Walter Roberson
Walter Roberson 2019년 12월 3일
You can hide the loop with arrayfun but otherwise you should still be using a loop of some kind as the objectives are independent.

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2019년 12월 3일
편집: Matt J 2019년 12월 3일
You would need something like the following,
options=optimoptions(@fminunc,'SpecifyObjectiveGradient', true);
allX = fminunc(@(x)obj(x,a),x0,options);
function [ftotal,gradient] = obj(x,a)
delta=1e-6;
f0=getfs(x,a);
ftotal=sum(f0);
if nargout>1
gradient=(getfs(x+delta,a)-f0)./delta; %finite difference approx
end
end
function f=getfs(x,a)
f(1) = f(x(1),a(1));
f(2) = f(x(2),a(2));
f(3) = f(x(3),a(3));
.
.
.
end
You could also of course implement an analytic version of the gradient calculation, instead of using finite differences.
However, you should keep in mind that a for-loop may be advantageous if the a(i) are separated by small increments. That usually means that the optimal solution x(i) is a good initial guess of x(i+1), so you don't have to do as many iterations in the next pass of the for-loop..
  댓글 수: 7
Matt J
Matt J 2019년 12월 4일
But, then, is it sure the fminunc is minimizing the components of f independently ?
As you can see, the objective function we have defined in the above scheme is additively separable: it is the sum of independent terms f(x(i),a(i)) and therefore the minimization of the sum is equivalent to minimizing each f((xi),a(i)) independently.
Idossou Marius Adom
Idossou Marius Adom 2019년 12월 4일
OK. You are right. Thank you Matt.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by