# Unable to debug the infeasibility condition

Hi,
I have the following simple optimization problem to determine the minimum number of batteries. For a given P_av = [507.9294; 594.0480; 443.1900; 85.1496], P_t =10, P_t_BS = 66,t_slots =4, the problem is infeasible when I put the constraint E_bt(1) == N_bat * beta_module.

`````` P_av = [507.9294;  594.0480;  443.1900;   85.1496];
P_t =10;
P_t_BS = 66
beta_module =37.44;
delta_t =1;
eta_bt = 0.9;
t_slots =4;
cvx_begin
cvx_solver mosek
variable N_bat
variable P_bt(t_slots)
variable E_bt(t_slots+1)

minimize N_bat
subject to
E_bt >= 0
E_bt (2:end)<= N_bat * beta_module
E_bt(1) == N_bat * beta_module;

for in=1:t_slots

P_bt(in) == P_av (in) - (P_t+P_t_BS);
if (in ~= 1)
E_bt(in) == E_bt(in-1)+P_bt(in-1)*delta_t*eta_bt;
end

end
E_bt(t_slots+1) ==  E_bt(t_slots)+P_bt(t_slots)*delta_t*eta_bt;
cvx_end
``````

You didn’t provide the value of `beta_module`. So the problem is not reproducible. In the future, you can make things easier for people to help you by including all the input data with the program, rather than making people separately find the input data in your post.

But you’ll probably learn more by figuring things out yourself. All but section 1 of Debugging infeasible models - YALMIP also applies to CVX.

I don’t think it will cause difficulty, but it is probably better to have
`E_bt(2:end) <= N_bat * beta_module`
so that you won’t have a redundant constraint with
`E_bt(1) == N_bat * beta_module;`

Apologies for not providing the complete set of variable values. I have edited the post with all values. I checked with different solvers with and without the objective function, which is still infeasible. The problem is with the constraint E_bt(1) == N_bat * beta_module;

It is just not possible to satisfy all those constraints at once. You can’t impose that combination of initial conditions and dynamics with that input data if you want a feasible solution.

Given the other constraints, you can’t have both
`E_bt(1) == N_bat * beta_module;`
and
`P_bt(1) == P_av (1) - (P_t+P_t_BS);`
hold.
You can pick one or the other, but not both.

It is your model, so you have to be the one to figure out how to fix it, either by changing the form of the model, or by recognizing that certain input data is not feasible.

Yes, you are right. If P_bt(1) is positive then E_bt(2) will become greater than N_bat * beta_module which is not feasible. Thanks a lot!