fmincon objective function problem
10 visualizzazioni (ultimi 30 giorni)
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!
0 Commenti
Risposta accettata
Walter Roberson
il 21 Giu 2017
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);
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
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
Vedere anche
Categorie
Scopri di più su Get Started with Optimization Toolbox in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!