Dear Julia users,
For a computationally challenging problem I'm trying to port an existing
design-optimization from MATLAB to Julia. Currently, the designs are
organized in a MATLAB struct and I am looking for some advice on how to
efficiently store and distribute the data for a parallel evaluation in
Julia. The idea of the MATLAB algorithm is to make some random changes in
each design, re-calculate their effiency (using everything in the MATLAB
struct) within a parallel loop, and sorting the designs based on their
updated efficiency. Below is how the data is organized in Matlab. I figured
a composite type ( http://julia.readthedocs.org/en/latest/manual/types/ )
would be the relevant Julia structure, but I am not sure how to create a
vector of composite types and whether to use "type" or "immutable". Hence,
a specific suggestion about how to do this in Julia would be much
appreciated!
Thank you and best regards,
Marcel
% setup structure to save designs (only once)
for d = 1:100
design(d).efficiency = 99;
design(d).ind_eff = zeros(8,10000);
design(d).design = zeros(14,12,8);
design(d).X = zeros(196,22,8);
design(d).dX = zeros(144,22,8);
for subNr=1:8
for drawNr = 1:10000
design(d).draws(subNr,drawNr).V = zeros(144,1);
design(d).draws(subNr,drawNr).expV = zeros(144,1);
design(d).draws(subNr,drawNr).sumExpV = zeros(144,1);
design(d).draws(subNr,drawNr).P = zeros(144,1);
design(d).draws(subNr,drawNr).PdX = zeros(144, 22);
design(d).draws(subNr,drawNr).sumPdX = zeros(144, 22);
design(d).draws(subNr,drawNr).ZZ = zeros(22,22);
end
end
end
% update efficiency
parfor d = 1:100
updateEff( design(d) );
end
% sort designs based on updated efficiencies
[~,v]=sort( [design.efficiency] );
design=design(v);