我有以下代码创建100x2
种群向量,根据函数f
评估种群,然后根据获得最低的前10名人口成员创建新种群功能评分:
N = 100;
N_elite = 0.1*N;
dim = 2;
a = 0;
b = 3;
x = (b-a).*rand(N, dim)+a;
f = @(x) x(:,1).^2 + x(:,2).^2;
cost = f(x)
population_cost = [x,cost]
x_sorted = sortrows(population_cost,dim+1)
x_elite = x_sorted(1:N_elite,:)
mu = mean(x_elite(:,[1:dim]))
sigma = cov(x_elite(:,[1:dim]))
x = mvnrnd(mu,sigma,N)
代码使用mvnrnd
来创建新的人口。我希望有一个新的填充向量具有以下属性:x(:,1)<x(:,2)
,即第一列中的每个值必须低于第二列中的每个值。 mvnrnd
中是否有属性/选项允许这样做,而不是必须使用for循环来检查每一行并执行x(i,1)>x(i,2)
时的切换?
答案 0 :(得分:0)
您无需为此修改mvnrnd
,只需使用sort
对第二维(列)x
进行排序:
% sort x columns such that x(i,1) < x(i,2) for all i
x = sort(x,2,'ascend');
% check
all(x(:,1) < x(:,2)) % yes