Optimizing a function with a vector as input

Hi everyone,
I have a function with an input of 6 values (6 periods of power) and only one output, the price. I would like to optimize the output value (minimize it) changing the input, but I have found no information about how to optimize with a vector as an imput instead of an scalar. I already tried with fminsearch or optimproblem, but none worked.
Thank you in advance!

 Akzeptierte Antwort

Matt J
Matt J am 18 Mai 2021
There is no reason why an OptimizationVariable can't be vector-valued, e.g.,
P=optimvar('P',[6,1]);
size(P)
ans = 1×2
6 1

5 Kommentare

Víctor García
Víctor García am 19 Mai 2021
Bearbeitet: Víctor García am 19 Mai 2021
Then the problem should be in how I call the function: (being P a vector 1x6)
prob.Objective = function(P);
but I don't see why there should be a problem there
the error is the following:
The following error occurred converting from optim.problemdef.OptimizationExpression to single:
Conversion to single from optim.problemdef.OptimizationExpression is not possible.
I don't know what your revised code looks like, but you definitely can't do things like this:
P=optimvar('P',[6,1]);
single(P)
Error using single
Conversion to single from optim.problemdef.OptimizationVariable is not possible.
Matt J
Matt J am 19 Mai 2021
Bearbeitet: Matt J am 19 Mai 2021
You also can't insert OptimizationVariables into numeric matrices, as in:
P=optimvar('P');
C=zeros(1,3,'single');
C(1)=P;
Unable to perform assignment because value of type 'optim.problemdef.OptimizationVariable' is not convertible to 'single'.

Caused by:
Error using single
Conversion to single from optim.problemdef.OptimizationVariable is not possible.
To be honest, I'm not sure why you are using optimvar at all, as opposed to the solver-based framework. Your constraints are not very complicated, and your objective function is. That's exactly the opposite of when the problem-based framework is useful.
How can I write then the prob.Objective function? Let's say you want to minimize a function f output (which is a scalar), and the input is that: P=optimvar('P',[6,1]); Wouldn't it be:
prob = optimproblem('Objective',@function(P);
[x, fval] = solve(prob)
Thank you Matt!
Matt J
Matt J am 19 Mai 2021
Bearbeitet: Matt J am 19 Mai 2021
You have much more freedom in the way you write the objective function if you use the solver-based framework

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by