How to define constraint in Optimization such that difference in value between two consecutive unknowns is not greater than 50%

3 次查看(过去 30 天)
Hello everyone,
I have prepared code in matlab for genetic algorithm from toolbox
The function code is a bit long. In summary, There are 30 unknowns with upper and lower bounds as 1.
How to apply a constraint while running such that difference in value between two consecutive unknowns obtained is not greater than 50% ?.

回答(2 个)

Matt J
Matt J 2021-10-6
Here is a way to set up the constraint matrices using prob2matrices from,
x=optimvar('x',30,'Lower',0,'Upper',1);
Constraints.diffUB=diff(x)<=+0.5*x(1:end-1);
Constraints.diffLB=diff(x)>=-0.5*x(1:end-1);
p=prob2matrices({x},'Constraints',Constraints)
p = struct with fields:
intcon: [] lb: [30×1 double] ub: [30×1 double] Aineq: [58×30 double] bineq: [58×1 double] Aeq: [] beq: []
  6 个评论
Ankur Shah
Ankur Shah 2021-10-6
I get your point, but i am not sure how to apply in code
for example if linear equalities are as below
x(1) -x(2) <= -1
-x(1) + x(2) <= 5
We define
A = [-1,-1;
-1,1];
b = [-1;5];
because above is 2 variables, it is easy to apply as follows
fun = @ps_example;
x = ga(fun,2,A,b)
How to apply the solution which you gave in coding ?
Matt J
Matt J 2021-10-6
编辑:Matt J 2021-10-6
The code in my original answer generates the matrices for you. You can use them directly in the call to ga:
x=optimvar('x',30,'Lower',0,'Upper',1);
Constraints.diffUB=diff(x)<=+0.5*x(1:end-1);
Constraints.diffLB=diff(x)>=-0.5*x(1:end-1);
p=prob2matrices({x},'Constraints',Constraints);
x=ga(fun,30,p.Aineq,p.bineq,p.Aeq,p.beq,p.lb,p.ub);

请先登录,再进行评论。


Bjorn Gustavsson
Bjorn Gustavsson 2021-10-6
Perhaps a constraint-function like this would get the job done (might be used with fmincon for example):
function [c,ceq] = your_con(x,a,b)
if nargin < 3
b = 0.1;
end
if nargin < 2
a = 1/2;
end
dx = diff(x);
c = 2*abs(dx)./(max(abs(x(1:end-1))+abs(x((2:end))),...
max(b,...
max(abs(x(1:end-1)),abs(x(2:end)))...
)...
))-a;
ceq = [];
To read up on the details of using this read the help and documentation of fmincon.
HTH

类别

Help CenterFile Exchange 中查找有关 Genetic Algorithm 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by