今天看论文的时候在代码处理里面看看到作者用这个函数来处理边界问题
function newPos = boundConstraint(newPos, oldPos , lb, ub)
[NP, ~] = size(newPos);
xl = repmat(lb, NP, 1);
pos = newPos < xl;
newPos(pos) = oldPos(pos) ;
xu = repmat(ub, NP, 1);
pos = newPos > xu;
newPos(pos) = oldPos(pos) ;
end
话不多说,上实例
A=10*rand(4,5)
A =
1.1905 8.5413 0.0658 4.1537 0.8665
3.1731 3.7950 0.5053 1.1154 3.7719
0.3390 9.4408 8.5486 3.5207 9.8897
5.0776 4.6198 0.8230 9.1629 4.7764
B=10*rand(4,5)+2
B =
8.9785 7.6933 5.0357 7.1866 7.4447
6.5217 2.9174 2.5378 11.9812 6.1105
7.2542 3.7954 3.6541 9.2503 3.6125
8.8337 3.7334 11.4236 5.7939 11.2714
矩阵A为4×5的随机矩阵,范围是[0,10],B为4×5的随机矩阵,范围是[2,12],
boundConstraint(A,B,2,8)
ans =
8.9785 7.6933 5.0357 4.1537 7.4447
3.1731 3.7950 2.5378 11.9812 3.7719
7.2542 3.7954 3.6541 3.5207 3.6125
5.0776 4.6198 11.4236 5.7939 4.7764
该代码运行后,矩阵A中小于2大于8的元素被B中对应元素所替代
反过来
boundConstraint(B,A,2,8)
ans =
1.1905 7.6933 5.0357 7.1866 7.4447
6.5217 2.9174 2.5378 1.1154 6.1105
7.2542 3.7954 3.6541 3.5207 3.6125
5.0776 3.7334 0.8230 5.7939 4.7764
矩阵B中小于2大于8的元素被A中对应元素所替代
这个函数的使用方法可以是先生成一个符合边界条件的矩阵A,需要判断另外另外矩阵B中的元素是否满足边界,对于不满足的元素,换成A中对应的元素,以使得B各元素满足边界条件