Energy storage optimisation problem - separate charge and discharge constraint

24 次查看(过去 30 天)
Hi
I'm currently working on an optimization problem to minimize the cost of energy dispatch where we have solar generation and energy storage system. My fmincon function is working, however after i added the constraints for the battery charging and discharging I'm getting an error :
Unable to perform assignment because value of type 'optim.problemdef.OptimizationExpression' is not convertible to 'double'.
Caused by:
Error using double
Conversion to double from optim.problemdef.OptimizationExpression is not possible.
Failure in initial nonlinear constraint function evaluation. FMINCON cannot continue.
I'm not sure what is causing the issue, any help would be great in fixing this.
options = optimoptions('fmincon',...
'Algorithm','sqp','Display', 'iter', 'ConstraintTolerance', 1e-10);
[p, C] = fmincon (@myfun, p0, [], [], [], [], lb, ub, @mycon, options);
% Cost Function that needs to be minimized..
function C = myfun (p)
C =0;
for t = 1:24
for i = 1:4
cost = ce(i) + b(i)*p(t,i) + a(i)*p(t,i)^2;
C = C + cost;
end
end
end
function [c, ceq] = mycon(p) % function [ceq] = mycon(p) in Octave
global Pd P_solar
N= 24;
dt = 1;
BattEnergy = 650;
Einit = 0.5 * BattEnergy;
Emax = 0.8*BattEnergy;
Emin = 0.2*BattEnergy;
Pch = optimvar('Pch',N,'LowerBound',0,'UpperBound',Emax);
Pdisch = optimvar('Pdisch',N,'LowerBound',0,'UpperBound',Emin);
c =0;
c1 =zeros(24,1);
c2 =zeros(24,1);
c3 =zeros(24,1);
c4 =zeros(24,1);
c5 =zeros(24,1);
c6 =zeros(24,1);
for t = 1:24
c1(t) = ( 0 - Pdisch(t));
c2(t) = ( Pdisch(t) - Pdischmax(t));
c3(t) = ( 0 - Pch(t));
c4(t) = ( Pch(t) - Pchmax(t));
c5(t) = Emin - (sum(Pch(t) - Pdisch(t)) * dt) ;
c6(t) = (sum(Pch(t) - Pdisch(t)) * dt) - Emax;
end
c = [c1;c2;c3;c4;c5;c6];
c=c(:);
ceq=0;
for t = 1:24
ceq1(t) = Pch(t) * Pdisch(t);
ceq2(t) = sum(Pch(t) - Pdisch(t)) * dt;
ceq3(t) = sum(p(t,:)) + Pdisch(t) - Pch(t) - Pd(t);
ceq = [ceq1;ceq2;ceq3];
ceq=ceq(:);
end
end

采纳的回答

Alan Weiss
Alan Weiss 2021-11-24
You are mixing up the problem-based and solver-based formulations. You need to choose one or the other. If you are using the solver-based formulation so that you can call fmincon, then do not create any optimization variables using optimvar. Alternatively, if you are using the problem-based formulation, do not call fmincon. In all cases, don't create optimization variables in the nonlinear constraint function. Create them, if they are needed, in the main workspace.
If you want to create your constraints using the problem-based formulation and then export to the solver-based, use prob2struct. But I think that you will be happier and more successful if you choose just one approach rather than a hybrid.
For documentation of the problem-based approach, see Problem-Based Optimization Workflow. For a simple example, see Solve a Constrained Nonlinear Problem, Problem-Based. For an example related to your application, see Optimal Dispatch of Power Generators: Problem-Based.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation
  4 个评论
hussain askar
hussain askar 2021-11-26
hey Alan,
Can you help me with this issue:
Pmin = -100; % Max Discharge Rate [W]
Pmax = 100; % Max Charge Rate [W]
PbattV = optimvar('PbattV',N,'LowerBound',Pmin,'UpperBound',Pmax);
I would like to introduce a new cost term in my objective function (cost function) so that when PbattV is positive (charging) between t=8:20 then there will be a cost.
I tried this:
for t = 8:20
if PbattV(t) >= 0
c5 = c5 + 300 * PbattV(t);
else
c5 = c5 + 0 * PbattV(t);
end
end
but i'm getting this error " Conversion to logical from optim.problemdef.OptimizationInequality is not possible." How can I solve this?
Alan Weiss
Alan Weiss 2021-11-26
Sorry, you are going to have to reformulate your if statements along the lines of Integer and Logical Modeling. This requires you to create binary variables and link them to your optimization variables. It takes some thought and possibly experimentation. Take it one step at a time, you'll be pleased with the results.
Alan Weiss
MATLAB mathematical toolbox documentation

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by