Этот код является частью кода, который сортирует недоминированные точки. F
- это массив ячеек, сохраняющий фронты парето. но Юлия дает эту ошибку:
BoundsError: attempt to access 0-element Array{Any,1} at index [1]
setindex!(::Array{Any,1}, ::Any, ::Int64) at essentials.jl:183
macro expansion at Nondominated sorting.juliarc.jl:41 [inlined]
не могли бы вы мне помочь. Как я могу это исправить?
#=pop is a structure including
struct individual
position
cost
Rank
Dominationset
Dominatedcount
Crowdingdostance
end
this pop is used for this code as input
5-element Array{individual,1}:
individual(Any[-3, 4, -2], Any[1.0, 1.0], Any[], Any[], Any[], Any[])
individual(Any[4, 4, 1], Any[1.0, 1.0], Any[], Any[], Any[], Any[])
individual(Any[1, 4, 4], Any[1.0, 1.0], Any[], Any[], Any[], Any[])
individual(Any[4, 4, -2], Any[1.0, 1.0], Any[], Any[], Any[], Any[])
individual(Any[1, 4, 2], Any[0.999999, 1.0], Any[], Any[], Any[], Any[])=#
using JuMP,DataStructures
npop=length(pop);
l=0;
F=[]; # F{1}=[] in matlab it is correct
for i=1:npop
for j=i+1:npop
p=pop[i];
q=pop[j];
if (dominates(p.cost,q.cost))
append!(p.Dominationset,j);
append!(q.Dominatedcount,l+1)
end
if (dominates(q.cost,p.cost))
append!(q.Dominationset,i);
append!(p.Dominatedcount,l+1)
end
pop[i]=p;
pop[j]=q;
end
if pop[i].Dominatedcount==[]
F[1]=[F;i]; #F{1}=[F{1} i] in matlab is used
append!(pop[i].Rank,1);
end
end
доминирующая функция выглядит следующим образом:
function dominates(x,y)
b=all(x.<=y) && any(x.<y);
return(b);
end