# How to use fmincon as fminbd with two different variables

31 views (last 30 days)

Show older comments

Hi there,

While trying to test different RL models, I've come to a concern, we define the model through a function "loglik" where I define the different input vectors and values through an iteration of different subjects (i) and I use fminbnd to search for the min value, being 0 and 1 the min and max limits. U and UU simply relates to two different vectors of data from two different agents.

hh = @(alpha)loglik_modelA(alpha,U,UU);

aa(i) = fminbnd(hh,0,1);

LL(i)=loglik_modelA(aa(i),U,UU);

This simply works perfectly fine, but the problem is when our model has more parameters, let's say for instance two alphas. I know fminbnd is thought for a single variable function, and I understand fmincon is the function that would help me with multiple variables. I've tried this piece of code based on the previous one, but it does not seem to work as I understand the logic behind fmincon might be slightly different.

hh = @(alpha1,alpha2)loglik_modelB(alpha1,alpha2,U,UU);

aa(i) = fmincon(hh,alpha1,alpha2,0,1); %I would expect aa(i) to be a 2D matrix

LL(i)=loglik_modelB(aa(i,1),aa(i,2),U,UU);

As usual, alphas are parameters associated to different prediction errors, and range from 0 to 1.

Any insight would be highly appreciated!

### Accepted Answer

Alan Weiss
on 9 Jul 2021

I think that you need to understand that fmincon minimizes a function of a single argument, usually called x. The x argument can have as many entries as you like. So, for example, if your objective function is naturally a function of three variables, var1, var2, and var3, and var1 is a scalar (single real argument), var2 is a column vector of 25 entries, and var3 is a 25-by-25 matrix, then your objective function of x would look something like this:

function val = myfun(x)

var1 = x(1);

var2 = x(2:26);

var2 = var2(:); % Ensure that var2 is a column vector

var3 = x(27:end);

var3 = reshape(var3,25,25);

% Now do the calculations in terms of var1, var2, and var3 that give val

% When you give x0, the initial point, it should be a column vector of 1 +

% 25 + 25*25 entries

end

Yes, this can be confusing. That is why recent MATLAB versions have another approach, the Problem-Based Optimization Workflow. Using the problem-based approach, you define problem variables in their natural sizes.

Good luck,

Alan Weiss

MATLAB mathematical toolbox documentation

### More Answers (1)

Kapil Gupta
on 9 Jul 2021

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!