How to add penalty function to constrained genetic algorithm

6 views (last 30 days)
Sir/Mam I am working on constrained optimization using genetic algorithm.. My input chromosomes are of BitStrings... Then from literature, I found that we have to add constraints as Penalty function. But I could not understand what is penalty function clearly... how to add penalty function to GA optimization tool box..?? Please help me.. Thanking you Gopakumar

Answers (1)

Prateekshya
Prateekshya on 19 Jul 2024
Edited: Prateekshya on 19 Jul 2024
Hello Gopa Kumar,
Penalty functions are a common method for handling constraints in Genetic Algorithm. The basic idea is to modify the objective function to penalize solutions that violate the constraints, thereby guiding the GA towards feasible solutions. Mathematically, we can describe the approach as follows:
F(x) = f(x)+P(x), where f(x) is the original objective function and P(x) is the penalty function. F(x) is the penalized objective function.
Here is an example on how to do it:
% Penalty Function
function penalty = penaltyFunction(x)
% Define your penalty function here
end
% Objective Function with Penalty
function J = penalizedObjectiveFunction(x)
% Define your original objective function here
% Call penaltyFunction(x)
end
% setup GA here
% Run the Genetic Algorithm with the penalizedObjectiveFunction
[x_opt, fval_opt] = ga(@penalizedObjectiveFunction, ... ); % add other options as per the requirement
Here is a complete example on the same:
% Example Constraint Functions
function [c, ceq] = constraints(x)
% Example inequality constraint: g1(x) <= 0
c = [x(1) + x(2) - 1.5; % Example constraint 1
-x(1) + 0.5]; % Example constraint 2
% Example equality constraint: h1(x) = 0
ceq = [];
end
% Penalty Function
function penalty = penaltyFunction(x)
[c, ceq] = constraints(x);
penalty = sum(max(0, c).^2) + sum(ceq.^2);
end
% Objective Function with Penalty
function J = penalizedObjectiveFunction(x)
% Original objective function
J_original = sum(x.^2); % Example objective function
% Penalty for constraint violations
penalty = penaltyFunction(x);
% Penalized objective function
J = J_original + 1e6 * penalty; % 1e6 is the penalty coefficient
end
% Main Script to Run GA
% Define the number of variables (length of BitString)
nVars = 10;
% Set the Genetic Algorithm options
gaOptions = optimoptions('ga', ...
'PopulationType', 'bitstring', ...
'PopulationSize', 50, ...
'MaxGenerations', 100, ...
'CrossoverFraction', 0.8, ...
'MutationFcn', @mutationuniform, ...
'Display', 'iter');
% Run the Genetic Algorithm
[x_opt, fval_opt] = ga(@penalizedObjectiveFunction, nVars, [], [], [], [], [], [], [], gaOptions);
% Display the results
disp('Optimal solution:');
disp(x_opt);
disp('Objective function value:');
disp(fval_opt);
I hope this helps!
Thank you.

Community Treasure Hunt

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

Start Hunting!