NSGAⅢ如何定义多个不同决策变量上下限

想要用NSGAⅢ进行优化,但是输入决策变量上下限时却只能输入单个的数,无法输入数组,没法给多个决策变量分别定义上下限。如果输入数组,会报无法执行赋值,因为左侧和右侧的元素数目不同。问题相关代码如下
%% Problem Definition

CostFunction = @(x) MOP2(x); % Cost Function

nVar = 3; % Number of Decision Variables
VarSize = [1 nVar]; % Size of Decision Variables Matrix

VarMin = [1,2,3]; % Lower Bound of Variables
VarMax = [4,5,6]; % Upper Bound of Variables

img

function y=Mutate(x,mu,sigma)

nVar=numel(x); 

nMu=ceil(mu*nVar);

j=randsample(nVar,nMu);

y=x;

y(j)=x(j)+sigma*randn(size(j));

end
如果决策变量上下限定义为

VarMin = -1; % Lower Bound of Variables
VarMax = 1; % Upper Bound of Variables

可以正常运行,请问如何能够输入正常的变量上下限呢?

原因在于你的初始化种群的设置时的问题,将其修改后应该就可以。原算法NSGAIII中的决策变量的上下限都是将其设置为一样,这样原算法在编写初始化种群时就按上下限都相同来处理的。比如,我这里写的差分进化算法解决单目标优化问题时,第一个是只能解决决策变量上下限相同的问题:

Np=20; %种群数
D=3; 个体数(决策变量)
xmin=-2;
xmax=1
%初始化种群

P=xmin+(xmax-xmin)*rand(Np,D)

将上述的代码修改即可对应的解决决策变量上下限不同的问题,如下:


Np=20; %种群数
D=3; 个体数(决策变量)
xmin=[-2,1,2];
xmax=[1,2,4];
%初始化种群
for j=1:D
P(:,j)=xmin(:,j)+(xmax(:,j)-xmin(:,j))*rand(Np,1)
end

按上述的修改初始化种群的设置,就能解决决策变量上下限不同的问题。注意,当修改之后可能对应的后面的一些内容对应会发生修改。