## how to run function 1000 times to find minimum

### Kangkeon Jeon (view profile)

on 14 Oct 2019
Latest activity Commented on by Rena Berman

on 28 Oct 2019

### per isakson (view profile)

i have a main function that eventually gives a score with randomized grouping of names. score is just one number calculated through function. I want to run this 1000 times to have 1000 scores and want to know minimum and know which grouping gave that score.
how can i do this?

per isakson

### per isakson (view profile)

on 16 Oct 2019
I restored the original subject line
Stephen Cobeldick

### Stephen Cobeldick (view profile)

on 16 Oct 2019
i have a main function that eventually gives a score with randomized grouping of names. score is just one number calculated through function. I want to run this 1000 times to have 1000 scores and want to know minimum and know which grouping gave that score.
how can i do this?
Rena Berman

on 28 Oct 2019

### per isakson (view profile)

on 14 Oct 2019
Edited by per isakson

### per isakson (view profile)

on 14 Oct 2019

Something like
S = struct( 'score', cell(1,1000), 'grouping', cell(1,1000) );
for jj = 1 :1000
S(jj).grouping = randomized_grouping_of_names();
S(jj).score = main_function( S(jj).grouping );
end
[~,ix_min] = min([S.score]);
S(ix_min)
In response to comment
What's in the file, FileName ?
FileName = ???
groupsize = ???
number_of_people = size(data, 2);
number_of_groups = ceil( number_of_people / groupsize );
S = struct( 'score', cell(1,N), 'grouping', cell(1,N) );
for jj = 1 : N
S(jj).grouping = generate_random_grouping( data, number_of_people, number_of_groups );
S(jj).score = score_grouping( data, S(jj).grouping, ~ );
end
[~,ix_min] = min([S.score]);
S(ix_min)
No good.
With substatial help from Walter
>> subject_scores = Jeon_clust( 'Biol_528_2019_sheet.xlsx', 3 )
subject_scores =
struct with fields:
score: 0.66667
grouping: {1×8 cell}
where
function S = Jeon_clust( FileName, groupsize )
N = 1000;
number_of_people = size(data, 2);
number_of_groups = ceil( number_of_people / groupsize );
S = struct( 'score', cell(1,N), 'grouping', cell(1,N) );
for jj = 1 : N
S(jj).grouping = generate_random_grouping( data, number_of_people, number_of_groups );
S(jj).score = sum_total_subject_score( data, S(jj).grouping, number_of_groups );
end
[~,ix_min] = min([S.score]);
S = S(ix_min);
end
and
function stss = sum_total_subject_score( data, grouping, number_of_groups )
subject_scores = score_grouping(data, grouping,number_of_groups);
group_ = [subject_scores{1:number_of_groups}];
group_scores = group_.';
diff_score = diff(group_scores);
total_subject_score = abs(sum(diff_score));
stss = sum(total_subject_score);
end

Kangkeon Jeon

### Kangkeon Jeon (view profile)

on 14 Oct 2019
FileName is excel file that contains all numbers to generate scores and names to generate groups.
per isakson

### per isakson (view profile)

on 14 Oct 2019
What is the size of the table data ?
Kangkeon Jeon

### Kangkeon Jeon (view profile)

on 14 Oct 2019
i attached the file! ### Walter Roberson (view profile)

on 14 Oct 2019

N = 1000;
all_scores = zeros(1,N);
all_groupings = cell(1,N);
for iter = 1 : N
[all_scores(iter), all_groupings{N}] = generate_one_grouping_and_score_it();
end
[minscore, idx] = min(all_scores);
grouping_for_minscore = all_groupings{idx};
disp(minscore)
disp(grouping_for_minscore)

Show 1 older comment
Walter Roberson

### Walter Roberson (view profile)

on 14 Oct 2019
Normally you would put it into a .m file and run the file.
Note that you will need to adjust the line
[all_scores(iter), all_groupings{N}] = generate_one_grouping_and_score_it();
to reflect the real name of your function. Also, this assumes that the function returns the grouping as well as the score (you need it to return the grouping in order to be able to display the grouping later.)
Kangkeon Jeon

### Kangkeon Jeon (view profile)

on 14 Oct 2019
i tried this but it gave "Insufficient number of outputs from right hand side of equal sign to satisfy assignment" error. am i doing this wrong?
Walter Roberson

### Walter Roberson (view profile)

on 14 Oct 2019
function [best_score, best_grouping] = Jeon_clust(FileName, groupsize)
number_of_people = size(data, 2);
number_of_groups = ceil(number_of_people / groupsize);
number_of_questions = size(data, 1);
N = 1000;
all_scores = zeros(1,N);
all_groups = cell(1,N);
for iter = 1 : N
grouping = generate_random_grouping(data, number_of_people, number_of_groups);
subject_scores = score_grouping(data, grouping,number_of_groups);
group_ = [subject_scores{1:number_of_groups}];
group_scores = group_.';
diff_score = diff(group_scores);
total_subject_score = abs(sum(diff_score));
score = sum(total_subject_score);
all_scores(iter) = score;
all_groups{iter} = grouping;
end
[best_score, idx] = min(all_scores);
best_grouping = all_groups{idx};