问题描述
我正在使用 GA 函数,它在具有边界的矩形平面中搜索一组“n_piles”(x 和 y 坐标)点的最佳位置。 (n_piles 是点数)。 GA 变量数是 n_piles 的 3 倍,因为它们代表这些桩的倾角(第三个变量表示为 1 到 5 的整数,但它们不是非 lcons 方程的一部分)。 使用 nonlcon,因此每个点 (x,y) 至少相隔距离 D_min。辅助函数用于计算不等式的数量和要相互比较的变量的索引。接下来我附上代码:
非lcon
function [c,ceq] = pile_heads_separation3D(vars)
%%This constraint function keeps the pile heads separated by D = 4*d_piles
load ('inputSeparation3D.mat','n_piles','N_separation','d_piles')
[n_ineq,idx_2,idx_3] = constraint_indexes3D(n_piles);
D_min = round(N_separation*d_piles,1); %minsta pålavtånd (m)
for i=1:1:n_ineq
c(:,i) = (D_min.^2) -...
((vars(:,idx_3(i)) - vars(:,idx_2(i))).^2)...
- ((vars(:,n_piles+idx_3(i)) - vars(:,n_piles+idx_2(i))).^2);
end
ceq = [];
end
索引
function [n_ineq,idx_3] = constraint_indexes3D(n_piles)
if n_piles > 1
n_ineq = nchoosek(n_piles,2); %number of inequalities
j_1=1;
idx_2=[]; %required index to fill the A matrix columns(i)
for i=1:n_piles-j_1
idx_2 = vertcat(idx_2,i*ones((n_piles-j_1),1));
j_1=j_1+1;
end
j_1=1;
idx_3=[]; %required index to fill the A matrix columns(j)
for i=1:1:n_piles-1
for j=j_1+1:1:n_piles
idx_3 = vertcat(idx_3,j*ones(1,1));
end
j_1=j_1+1;
end
else
n_ineq = [];
idx_2 = [];
idx_3 = [];
end
end
GA 发起者
d_piles = 0.170; %Piles section diameter (m)
n_piles = 5; %number of piles
N_separation = 4; %minsta pålavstånd
D_border = 0.5;
L_x = 5.40; %Pile cap x_dimension (m)
L_y = 10.00; %Pile cap y_dimension (m)
lb_x = (-0.5*L_x+D_border)*ones(1,n_piles); %lower boundary for support position
lb_y = (-0.5*L_y+D_border)*ones(1,n_piles); %lower boundary for support position
lb_dir = ones(1,n_piles); %lower boundary for pile direction
lb = cat(2,lb_x,lb_y,lb_dir);
ub_x = (0.5*L_x-D_border)*ones(1,n_piles); %upper boundary for support position
ub_y = (0.5*L_y-D_border)*ones(1,n_piles); %upper boundary for support position
ub_dir = 5*ones(1,n_piles); %upper boundary for pile direction
ub = cat(2,ub_x,ub_y,ub_dir);
nonlcon = @pile_heads_separation3D;
IntCon = 2*n_piles+1:1:3*n_piles; %the inclination explained at the beggining
[vars,alpha,exitflag,output,population,scores] = ga(fun,3*n_piles,[],lb,ub,IntCon,options);
问题是当我试用时,有几个个体不满足c (ConstraintTolerance的选项保留为默认1e-3,但个体有时会违反此容忍度) .
例如,GA 提出的其中一个个体的矩阵作为图像附加。 在矩阵上试验 nonlcon 时,至少有 35 种情况 c > 0。
非常感谢任何形式的帮助
example of vars matrix generated by GA for n_piles=10
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)