Problem with nonlinear objective function

15 次查看(过去 30 天)
Hello all
I have problem with running a script that written to excute a multi-objective optimization problem using the solver " gamultiobj ", the error message that appears in the commnad window is " Objective must be an OptimizationExpression or a struct containing scalar OptimizationExpressions."
The optimization problem is a problem-based type and the part of script related to the objective functions is presented below:
% The First Objective Function
Jems = optimexpr;
for i = 0:Hp-1
if i+k <=Ns+Hp
Jems = Jems + ((CCb./(2.*Nc_b.*Eb)).*DT.*Pb_ch(i+k))...
+((CCb./(2.*Nc_b.*Eb)).*DT.*Pb_disch(i+k))...
+ (nfc.*((CCfc./Nh_fc) + Com_fc).*Delta_fc(i+k).*DT + Css_fc.* ASegma_fc(i+k))...
+ (nez.*((CCez./Nh_ez) + Com_ez).*Delta_ez(i+k).*DT + Css_ez.* ASegma_ez(i+k))...
+ (Bid_imp.*Pg_imp(i+k).*DT) - (Bid_exp.*Pg_exp(i+k).*DT);
else
break
end
end
show(Jems);
prob.Objective.OF1 = Jems;
%==============================
% The Second Objective Function
Eff = optimexpr;
for i = 0:Hp-1
if i+k <=Ns+Hp
Eff = Eff + ((Pfc(i+k)+Pb_disch(i+k))) ./ ((Pez(i+k)+Pb_ch(i+k)));
else
break
end
end
show(Eff)
prob.Objective.OF2 = Eff;
prob.Objective.OF2 = "max";
%========================
show(prob);
the optimization variables are presented below
Pb_ch = optimvar('Pb_ch',Nhr,'LowerBound',0,'UpperBound',nb*Pb_ch_max);
Pb_disch = optimvar('Pb_disch',Nhr,'LowerBound',0,'UpperBound',nb*Pb_disch_max);
Pg_imp = optimvar('Pg_imp',Nhr,'LowerBound',0,'UpperBound',Pg_imp_max);
Pg_exp = optimvar('Pg_exp',Nhr,'LowerBound',0,'UpperBound',Pg_exp_max);
Pfc = optimvar('Pfc',Nhr,'LowerBound',0,'UpperBound',nfc*Pfc_max);% Watch out here
Pez = optimvar('Pez',Nhr,'LowerBound',0,'UpperBound',nez*Pez_max);% Watch out here
SoCb = optimvar('SoCb',Nhr,'LowerBound',SoCb_min,'UpperBound',SoCb_max);
SoCH2 = optimvar('SoCH2',Nhr,'LowerBound',SoCH2_min,'UpperBound',SoCH2_max);
Delta_fc = optimvar('Delta_fc',Nhr,'LowerBound',0,'UpperBound',1,'Type','integer');
Delta_ez = optimvar('Delta_ez',Nhr,'LowerBound',0,'UpperBound',1,'Type','integer');
Delta_b_ch = optimvar('Delta_b_ch',Nhr,'LowerBound',0,'UpperBound',1,'Type','integer');
Delta_b_disch = optimvar('Delta_b_disch',Nhr,'LowerBound',0,'UpperBound',1,'Type','integer');
Delta_g_imp = optimvar('Delta_g_imp',Nhr,'LowerBound',0,'UpperBound',1,'Type','integer');
Delta_g_exp = optimvar('Delta_g_exp',Nhr,'LowerBound',0,'UpperBound',1,'Type','integer');
Segma_fc = optimvar('Segma_fc',Nhr,'LowerBound',-1,'UpperBound',1,'Type','integer');
Segma_ez = optimvar('Segma_ez',Nhr,'LowerBound',-1,'UpperBound',1,'Type','integer');
ASegma_fc = optimvar('ASegma_fc',Nhr,'LowerBound',0,'Type','integer');
ASegma_ez = optimvar('ASegma_ez',Nhr,'LowerBound',0,'Type','integer');
Kindly, I need to know what is the wrong associated with the objective functions formulation, especially the second functions.
Thanks in advance

采纳的回答

Matt J
Matt J 2023-3-26
编辑:Matt J 2023-3-26
prob.Objective.OF2 = "max";
"max" is just a string. There is no optimization expression that can be interpreted from it.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Multiobjective Optimization 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by