fmincon objective function problem
10 次查看(过去 30 天)
显示 更早的评论
I need to maximize the following objective function in Matlab:
mean (a*I'*x1+b*(ones(1,24)-I)'*x1)-mean((a*(ones(1,24)-I)'*y1)+(b*I'*y1))
I made two .m file: 1) In the objfun.m file I defined the objective function as:
function f = objfun(x)
f = mean (a*I'*x1+b*(ones(1,24)-I)'*x1)-mean((a*(ones(1,24)-I)'*y1)+(b*I'*y1));
2) In the second (main) .m file I have my parameters and calculations for a, b and I and also below constraints and fmincon:
lb = [0,0];
ub = [10,10];
x0 = [1,2];
[x,fval] = fmincon(@objfun,x0,[],[],[],[],lb,ub)
When I run the program I get below error for fmincon:
''Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.'' Would you please advise how can I fix this problem? Is there anything wrong with my objective function, as it is a function of x1 and y1 but I have objfun(x) only? Or do I call the function wrongly? Any help is appreciated!
0 个评论
采纳的回答
Walter Roberson
2017-6-21
Guessing about what a, b, x1, y1 are for:
First make sure x1 and y1 are defined.
Then
f = @(ab) mean (ab(1)*I'*x1+ab(2)*(ones(1,24)-I)'*x1)-mean((ab(1)*(ones(1,24)-I)'*y1)+(ab*2)*I'*y1));
lb = [0,0];
ub = [10,10];
x0 = [1,2];
[ab,fval] = fmincon(@objfun,x0,[],[],[],[],lb,ub)
a = ab(1); b = ab(2);
更多回答(1 个)
Alan Weiss
2017-6-22
You need to put ALL of your control variables in one vector or matrix x.
function f = objfun(x,a,b,I)
x1 = x(1:24);
y1 = x(25:end);
f = mean (a*I'*x1+b*(ones(1,24)-I)'*x1)-mean((a*(ones(1,24)-I)'*y1)+(b*I'*y1));
Call the function like this, after you put the a, b, and I arrays in your workspace:
fun = @(x)objfun(x,a,b,I);
[x,fval] = fmincon(fun,...)
Alan Weiss
MATLAB mathematical toolbox documentation
3 个评论
Alan Weiss
2017-6-23
Oh, I didn't know that you were trying to optimize symbolic variables. Basically, you either need to formulate your problem without using symbolic variables, or you need to convert your symbolic expressions to floating-point using matlabFunction as shown in Using Symbolic Mathematics with Optimization Toolbox Solvers.
However, most likely you do not need to do anything symbolically at all. Remember, MATLAB computes numerically, and so you just need to understand that fmincon is going to present your objective function with a numerical x that is, say, a 48-element vector. Your objective function simply needs to accept that vector and compute the value of the objective function. No symbolic math needed.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!