## How to solve the problem about "Conversion to logical from optim.prob​lemdef.Opt​imizationC​onstraint is not possible!"

### Nicholas Deng (view profile)

on 15 Jul 2019
Latest activity Commented on by Matt J

on 22 Jul 2019

### Matt J (view profile)

batteryNominalEnergy=optimvar('batteryNominalEnergy',1,'LowerBound',0,'UpperBound',20);
powerElectronicsRatedPower=optimvar('powerElectronicsRatedPower',1,'LowerBound',0,'UpperBound',10);
Ppv_batt=optimvar('Ppv_batt',simTime,1,'LowerBound',0);
Ppv_grid=optimvar('Ppv_grid',simTime,1,'LowerBound',0,'UpperBound',9.9824e+03);
Pcurtail=optimvar('Pcurtail',simTime,1,'LowerBound',0,'UpperBound',5000);
Esoh=optimexpr(simTime,1);
Esoh(1)=1;
if Pbatt(i-1)>=0 %% this line reports the arror
Esoh(i)=Esoh(i-1)-0.2*(sampletime/gvarYEARS2SECONDS/20+0.5*Pbatt(i-1)*sampletime/(batteryNominalEnergy*gvarKWH2WS*Esoh(i-1))/4500);
else
Esoh(i)=Esoh(i-1)-0.2*(sampletime/gvarYEARS2SECONDS/20-0.5*Pbatt(i-1)*sampletime/(batteryNominalEnergy*gvarKWH2WS*Esoh(i-1))/4500);
end
Hi, I have meet the problem in MATLAB using linprog. "Pbatt" can be positive or negative. when it is posive, the battery will be charging. And when it is negetive, the battery will be discharging. The equation above caculates the battery SOH whenever the battery is charging or discharging.
"Pbatt" is calculated from the optimization variables. But if I use "abs(Pbatt)", there will be an error that I can't use abs function.

on 19 Jul 2019
I have a similar problem as yours, please let me know if you find a way to use the abs function, please share. I will do likewise when I find a way around this.
Nicholas Deng

### Nicholas Deng (view profile)

on 22 Jul 2019
Hi. Recently I'm using another MATLAB tool box which is Yalmip. Maybe you can try it. Or you can try Matt's answer. I will try it, too. Then I will leave my conclusion right here.

on 19 Jul 2019
Edited by Matt J

### Matt J (view profile)

on 19 Jul 2019

Introduce variables r to represent bounds on Pbatt
r=optimvar('absPbatt',simTime1,'LowerBound',0);
prob.Constraints.r_upper=Pbatt<=r;
prob.Constraints.r_lower=Pbatt>=-r;
prob.Objective=prob.Objective+sum(r);
and finally
prob.Constraints.SOH = Esoh(2:end)==Esoh(1:end-1)-0.2*(sampletime/gvarYEARS2SECONDS/20+0.5*r(1:end-1)*sampletime/(batteryNominalEnergy*gvarKWH2WS*Esoh(1:end-1))/4500);

Nicholas Deng

on 22 Jul 2019