matlab - Matlab:Nonlcon 对我的 GA 不满意
问题描述
我正在使用 GA 函数,它在具有边界的矩形平面中搜索一组“n_piles”(x 和 y 坐标)点的最佳位置。(n_piles 是点数)。GA 变量数是 n_piles 的 3 倍,因为它们表示这些桩的倾斜度(这第三个变量表示为从 1 到 5 的整数,但它们不是 nonlcons 方程的一部分)。使用 nonlcon 使每个点 (x,y) 至少相隔距离 D_min。辅助函数用于获得不等式的数量和要相互比较的变量的索引。接下来我附加代码:
非图标
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_2,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
遗传算法发起者
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 < 0(ConstraintTolerance 的选项保留为默认值 1e-3,但个人有时会违反此容差)。
例如,遗传算法提出的其中一个个体的矩阵被附加为图像。 当在矩阵上试验 nonlcon 时,至少有 35 个案例 c > 0。
任何形式的帮助都非常感谢
解决方案
推荐阅读
- css - 材质 UI 波普尔样式
- c# - 这两个功能是等价的吗?
- c# - 如何设置服务以接收 ASP.NET Core 中的某些选项?
- javascript - 更改 React Native Maps 多边形中填充颜色的不透明度?
- javascript - 节点 js 渲染发布数据和原始 html
- xcode - 原型单元格宽度超出表格视图中的页面
- postgresql - Postgresql 解释命令
- java - 如何使用 DatePicker 元素中的日期作为 MPAndroidChart 上的 x 轴值?
- iframe - 具有与父文档相同域和端口的 src 的 iframe 不可编辑/禁用
- android - Android:处理抽屉菜单中的开关