constraint on some output of a fitfunc in genetic algorithm

4 views (last 30 days)
hello dears
I have implemented genetic algorithm by:
options = optimoptions('ga','FunctionTolerance',1e-2,'PlotFcn', @gaplotbestf,'MaxGenerations',50);
[x, fval,exitflag,output]=ga(@(x)fitfun(x),nvars,A,b,Aeq,beq,lb,ub,nonlcon,IntCon,options)
I share you part of my fitfun
function y=nonIdealgas_test(x)
kisi=x(1);
phi=x(2);
psi=x(3);
.
.
U4=sqrt(deltaH0/psi)
Cm4=phi*kisi*U4;
beta4=atand((Cu4-U4)/Cm4
.
.
y=-deltaH0/(deltaH0+loss);
end
it's clear my objective function is y and I want optimize that but I want another output of this problem named beta4 that sould be in a rang like:
A<beta4<B
so how shoud I implement this constraint on ga?

Answers (1)

Sameer
Sameer on 16 Aug 2024
Hi Sajad
To implement a constraint on the variable beta4 such that it lies within a specific range ( A < beta4 < B ) in a genetic algorithm using MATLAB, you can use nonlinear constraints. The ga function allows you to specify nonlinear constraints using a function handle.
Here's how you can modify your setup to include this constraint:
1.Define a Nonlinear Constraint Function:
Create a function that returns two outputs: c and ceq. The c output is for inequality constraints (i.e., constraints of the form ( c(x) <= 0 )), and ceq is for equality constraints (i.e., constraints of the form ( ceq(x) = 0 )). For your requirement, you will only need to use c.
function [c, ceq] = nonlcon(x)
% Extract your variables
kisi = x(1);
phi = x(2);
psi = x(3);
% Calculate U4, Cm4, and beta4 as in your fitfun
U4 = sqrt(deltaH0/psi);
Cm4 = phi * kisi * U4;
beta4 = atand((Cu4 - U4) / Cm4);
% Define the inequality constraints for beta4
A = ...; % Specify the lower bound
B = ...; % Specify the upper bound
c = [A - beta4; beta4 - B]; % Ensure A < beta4 < B
% No equality constraints
ceq = [];
end
2. Update the ga Function Call:
Ensure that you pass this nonlinear constraint function to the ga function.
options = optimoptions('ga', 'FunctionTolerance', 1e-2, 'PlotFcn', @gaplotbestf, 'MaxGenerations', 50);
[x, fval, exitflag, output] = ga(@(x)fitfun(x), nvars, A, b, Aeq, beq, lb, ub, @nonlcon, IntCon, options);
By following these steps, you can enforce the constraint on beta4 within your genetic algorithm optimization process.
I hope this helps!
Sameer

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!