# fmincon: any way to enforce linear inequality constraints at intermediate iterations?

26 views (last 30 days)

Show older comments

I am solving an optimization problem with the interior-point algorithm of fmincon.

My parameters have both lower and upper bounds and linear inequality constraints.

A_ineq = [1 -1 0 0 0;

-1 2 -1 0 0;

0 -1 2 -1 0;

0 0 -1 2 -1;

0 0 0 1 -1];

b_ineq=[0 0 0 0 0];

I observed that fmincon satisfies, of corrse, the bounds at all iterations but not the linear inequality constraints.

However, the linear inequality constraints are crucially important in my case. If violated, my optimization problem can not be solved.

Is there anything one can do to ensure that linear inequality constraints are satisfied at intermediate iterations?

##### 6 Comments

Matt J
on 6 May 2023

Edited: Matt J
on 6 May 2023

### Accepted Answer

Matt J
on 5 May 2023

Edited: Matt J
on 23 May 2023

Within your objective function, project the current x onto the constrained region using quadprog,

fun=@(x) myObjective(x, A_ineq,b_ineq,lb,ub);

x=fmincon(fun, x0,[],[],[],[],[],lb,ub,options)

function fval=myObjective(x, A_ineq,b_ineq,lb,ub)

C=speye(numel(x));

x=lsqlin(C,x,A_ineq,b_ineq,[],[],lb,ub); %EDIT: was quadprog by mistake

fval=...

end

##### 29 Comments

Torsten
on 24 May 2023

Suppose a_i*x > b_i before calling lsqlin. After calling lsqlin, is this constraint active or inactive, or is there no general statement?

No general statement is possible in my opinion.

### More Answers (2)

Shubham
on 5 May 2023

Hi SA-W,

Yes, there are a few options you can try to ensure that the linear inequality constraints are satisfied at intermediate iterations of the interior-point algorithm in fmincon:

- Tighten the tolerances: By tightening the tolerances in the fmincon options, you can force the algorithm to take smaller steps and converge more slowly, but with higher accuracy. This may help to ensure that the linear inequality constraints are satisfied at all intermediate iterations.
- Use a barrier function: You can try using a barrier function to penalize violations of the linear inequality constraints. This can be done by adding a term to the objective function that grows very large as the constraints are violated. This will encourage the algorithm to stay within the feasible region defined by the constraints.
- Use a penalty function: Similar to a barrier function, a penalty function can be used to penalize violations of the linear inequality constraints. However, instead of growing very large, the penalty function grows linearly with the degree of violation. This can be a more computationally efficient approach than a barrier function.
- Use a combination of methods: You can try using a combination of the above methods to ensure that the linear inequality constraints are satisfied at all intermediate iterations. For example, you could tighten the tolerances and use a penalty function or barrier function to further enforce the constraints.

It's important to note that these methods may increase the computational cost of the optimization problem, so it's important to balance the accuracy requirements with the available resources.

##### 0 Comments

Matt J
on 5 May 2023

Within your objective function, check if the linear inequalites are satsfied. If they are not, abort the function and return Inf. Otherwise, compute the output value as usual.

fun=@(x) myObjective(x, A_ineq,b_ineq);

x=fmincon(fun, x0,A_ineq,b_ineq,[],[],lb,ub,[],options)

function fval=myObjective(x, A_ineq,b_ineq)

if ~all(A_ineq*x<=b_ineq)

fval=Inf; return

end

fval=...

end

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!