fmincon objective function problem
Mostra commenti meno recenti
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!
Risposta accettata
Più risposte (1)
Alan Weiss
il 22 Giu 2017
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 Commenti
Sara
il 22 Giu 2017
Modificato: Walter Roberson
il 23 Giu 2017
Alan Weiss
il 23 Giu 2017
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
Sara
il 25 Giu 2017
Categorie
Scopri di più su Get Started with Optimization Toolbox in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!