constraint on some output of a fitfunc in genetic algorithm
4 views (last 30 days)
Show older comments
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?
0 Comments
Answers (1)
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
0 Comments
See Also
Categories
Find more on Genetic Algorithm in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!