line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Sim::OPT::Takechance; |
2
|
|
|
|
|
|
|
# Copyright (C) 2014-2015 by Gian Luca Brunetti and Politecnico di Milano. |
3
|
|
|
|
|
|
|
# This is "Sim::OPT::Takechance", a program that can produce efficient search structures for block coordinate descent given some initialization blocks (subspaces). |
4
|
|
|
|
|
|
|
# Its strategy is based on making a search path more efficient than the average randomly chosen ones, by selecting the search moves |
5
|
|
|
|
|
|
|
# so that (a) the search wake is fresher than the average random ones and (b) the search moves are more novel than the average random ones. |
6
|
|
|
|
|
|
|
# The rationale for the selection of the seach path is explained in detail (with algorithms) in my paper at the following web address: http://arxiv.org/abs/1407.5615 . |
7
|
|
|
|
|
|
|
|
8
|
1
|
|
|
1
|
|
7
|
use v5.14; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
32
|
|
9
|
|
|
|
|
|
|
# use v5.20; |
10
|
1
|
|
|
1
|
|
3
|
use Exporter; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
42
|
|
11
|
1
|
|
|
1
|
|
6
|
use parent 'Exporter'; # imports and subclasses Exporter |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
8
|
|
12
|
|
|
|
|
|
|
|
13
|
1
|
|
|
1
|
|
68
|
use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS ); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
52
|
|
14
|
1
|
|
|
1
|
|
4
|
use Math::Trig; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
137
|
|
15
|
1
|
|
|
1
|
|
4
|
use Math::Round; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
42
|
|
16
|
1
|
|
|
1
|
|
4
|
use List::Util qw[ min max reduce shuffle]; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
51
|
|
17
|
1
|
|
|
1
|
|
4
|
use List::MoreUtils qw(uniq); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
4
|
|
18
|
1
|
|
|
1
|
|
287
|
use List::AllUtils qw(sum); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
43
|
|
19
|
1
|
|
|
1
|
|
3
|
use Statistics::Basic qw(:all); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
5
|
|
20
|
1
|
|
|
1
|
|
409
|
use IO::Tee; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
44
|
|
21
|
1
|
|
|
1
|
|
5
|
use Set::Intersection; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
59
|
|
22
|
1
|
|
|
1
|
|
7
|
use List::Compare; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
24
|
|
23
|
1
|
|
|
1
|
|
4
|
use Data::Dumper; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
64
|
|
24
|
|
|
|
|
|
|
#$Data::Dumper::Indent = 0; |
25
|
|
|
|
|
|
|
#$Data::Dumper::Useqq = 1; |
26
|
|
|
|
|
|
|
#$Data::Dumper::Terse = 1; |
27
|
1
|
|
|
1
|
|
7
|
use Data::Dump qw(dump); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
57
|
|
28
|
1
|
|
|
1
|
|
4
|
use feature 'say'; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
52
|
|
29
|
|
|
|
|
|
|
#use feature qw(postderef); |
30
|
|
|
|
|
|
|
#no warnings qw(experimental::postderef); |
31
|
|
|
|
|
|
|
#use Sub::Signatures; |
32
|
|
|
|
|
|
|
#no warnings qw(Sub::Signatures); |
33
|
|
|
|
|
|
|
#no strict 'refs'; |
34
|
1
|
|
|
1
|
|
4
|
no strict; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
34
|
|
35
|
1
|
|
|
1
|
|
3
|
no warnings; |
|
1
|
|
|
|
|
5
|
|
|
1
|
|
|
|
|
35
|
|
36
|
|
|
|
|
|
|
|
37
|
1
|
|
|
1
|
|
4
|
use Sim::OPT; |
|
1
|
|
|
|
|
4
|
|
|
1
|
|
|
|
|
25
|
|
38
|
1
|
|
|
1
|
|
4
|
use Sim::OPT::Morph; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
19
|
|
39
|
1
|
|
|
1
|
|
4
|
use Sim::OPT::Sim; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
12
|
|
40
|
1
|
|
|
1
|
|
13
|
use Sim::OPT::Retrieve; |
|
1
|
|
|
|
|
0
|
|
|
1
|
|
|
|
|
18
|
|
41
|
1
|
|
|
1
|
|
3
|
use Sim::OPT::Report; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
16
|
|
42
|
1
|
|
|
1
|
|
3
|
use Sim::OPT::Descend; |
|
1
|
|
|
|
|
7
|
|
|
1
|
|
|
|
|
6971
|
|
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
our @ISA = qw(Exporter); # our @adamkISA = qw(Exporter); |
45
|
|
|
|
|
|
|
#%EXPORT_TAGS = ( DEFAULT => [qw( &opt &prepare )]); # our %EXPORT_TAGS = ( 'all' => [ qw( ) ] ); |
46
|
|
|
|
|
|
|
#@EXPORT_OK = qw(); # our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
@EXPORT = qw( takechance ); # our @EXPORT = qw( ); |
49
|
|
|
|
|
|
|
$VERSION = '0.05'; |
50
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
######################################################################################### |
52
|
|
|
|
|
|
|
# HERE FOLLOWS THE CONTENT OF "Takechance.pm", Sim::OPT::Takechance |
53
|
|
|
|
|
|
|
######################################################################################### |
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
sub takechance |
56
|
|
|
|
|
|
|
{ |
57
|
0
|
0
|
|
0
|
0
|
|
if ( not ( @ARGV ) ) |
58
|
|
|
|
|
|
|
{ |
59
|
0
|
|
|
|
|
|
$toshell = $main::toshell; |
60
|
0
|
|
|
|
|
|
$tee = new IO::Tee(\*STDOUT, ">>$toshell"); # GLOBAL ZZZ |
61
|
0
|
|
|
|
|
|
say $tee "\n#Now in Sim::OPT::Takechance.\n"; |
62
|
0
|
|
|
|
|
|
$configfile = $main::configfile; #say "dump(\$configfile): " . dump($configfile); |
63
|
0
|
|
|
|
|
|
@sweeps = @main::sweeps; #say "dump(\@sweeps): " . dump(@sweeps); |
64
|
0
|
|
|
|
|
|
@varinumbers = @main::varinumbers; #say $tee "dump(\@varinumbers): " . dump(@varinumbers); |
65
|
0
|
|
|
|
|
|
@mediumiters = @main::mediumiters; |
66
|
0
|
|
|
|
|
|
@rootnames = @main::rootnames; #say "dump(\@rootnames): " . dump(@rootnames); |
67
|
0
|
|
|
|
|
|
%vals = %main::vals; #say "dump(\%vals): " . dump(%vals); |
68
|
0
|
|
|
|
|
|
@caseseed = @main::caseseed; #say $tee "dump(INTAKE\@caseseed): " . dump(@caseseed); |
69
|
0
|
|
|
|
|
|
@chanceseed = @main::chanceseed; #say $tee "dump(INTAKE\@chanceseed): " . dump(@chanceseed); |
70
|
0
|
|
|
|
|
|
@chancedata = @main::chancedata; #say $tee "dump(INTAKE\@chancedata): " . dump(@chancedata); |
71
|
0
|
|
|
|
|
|
@pars_tocheck = @main::pars_tocheck; #say $tee "dump(INTAKE\@pars_tocheck): " . dump(@pars_tocheck); |
72
|
0
|
|
|
|
|
|
$dimchance = $main::dimchance; #say $tee "dump(INTAKE\$dimchance): " . dump($dimchance); |
73
|
|
|
|
|
|
|
|
74
|
0
|
|
|
|
|
|
$mypath = $main::mypath; #say TOSHELL "dumpINDESCEND(\$mypath): " . dump($mypath); |
75
|
0
|
|
|
|
|
|
$exeonfiles = $main::exeonfiles; #say TOSHELL "dumpINDESCEND(\$exeonfiles): " . dump($exeonfiles); |
76
|
0
|
|
|
|
|
|
$generatechance = $main::generatechance; |
77
|
0
|
|
|
|
|
|
$file = $main::file; |
78
|
0
|
|
|
|
|
|
$preventsim = $main::preventsim; |
79
|
0
|
|
|
|
|
|
$fileconfig = $main::fileconfig; #say TOSHELL "dumpINDESCEND(\$fileconfig): " . dump($fileconfig); # NOW GLOBAL. TO MAKE IT PRIVATE, FIX PASSING OF PARAMETERS IN CONTRAINTS PROPAGATION SECONDARY SUBROUTINES |
80
|
0
|
|
|
|
|
|
$outfile = $main::outfile; |
81
|
0
|
|
|
|
|
|
$target = $main::target; |
82
|
|
|
|
|
|
|
|
83
|
0
|
|
|
|
|
|
$report = $main::report; |
84
|
0
|
|
|
|
|
|
$simnetwork = $main::simnetwork; |
85
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
#open ( OUTFILE, ">>$outfile" ) or die "Can't open $outfile: $!"; |
87
|
|
|
|
|
|
|
#open ( TOSHELL, ">>$toshell" ) or die "Can't open $toshell: $!"; |
88
|
|
|
|
|
|
|
#$tee = new IO::Tee(\*STDOUT, ">>$toshell"); # GLOBAL ZZZ |
89
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
#say TOSHELL "dump(\$repfile): " . dump($repfile); |
91
|
0
|
|
|
|
|
|
%dowhat = %main::dowhat; |
92
|
|
|
|
|
|
|
|
93
|
0
|
|
|
|
|
|
@themereports = @main::themereports; #say "dumpTakechance(\@themereports): " . dump(@themereports); |
94
|
0
|
|
|
|
|
|
@simtitles = @main::simtitles; #say "dumpTakechance(\@simtitles): " . dump(@simtitles); |
95
|
0
|
|
|
|
|
|
@reporttitles = @main::reporttitles; |
96
|
0
|
|
|
|
|
|
@simdata = @main::simdata; |
97
|
0
|
|
|
|
|
|
@retrievedata = @main::retrievedata; |
98
|
0
|
|
|
|
|
|
@keepcolumns = @main::keepcolumns; |
99
|
0
|
|
|
|
|
|
@weights = @main::weights; |
100
|
0
|
|
|
|
|
|
@weightsaim = @main::weightsaim; |
101
|
0
|
|
|
|
|
|
@varthemes_report = @main::varthemes_report; |
102
|
0
|
|
|
|
|
|
@varthemes_variations = @vmain::arthemes_variations; |
103
|
0
|
|
|
|
|
|
@varthemes_steps = @main::varthemes_steps; |
104
|
0
|
|
|
|
|
|
@rankdata = @main::rankdata; # CUT ZZZ |
105
|
0
|
|
|
|
|
|
@rankcolumn = @main::rankcolumn; |
106
|
0
|
|
|
|
|
|
@reporttempsdata = @main::reporttempsdata; |
107
|
0
|
|
|
|
|
|
@reportcomfortdata = @main::reportcomfortdata; |
108
|
0
|
|
|
|
|
|
@reportradiationenteringdata = @main::reportradiationenteringdata; |
109
|
0
|
|
|
|
|
|
@report_loadsortemps = @main::report_loadsortemps; |
110
|
0
|
|
|
|
|
|
@files_to_filter = @main::files_to_filter; |
111
|
0
|
|
|
|
|
|
@filter_reports = @main::filter_reports; |
112
|
0
|
|
|
|
|
|
@base_columns = @main::base_columns; |
113
|
0
|
|
|
|
|
|
@maketabledata = @main::maketabledata; |
114
|
0
|
|
|
|
|
|
@filter_columns = @main::filter_columns; |
115
|
0
|
|
|
|
|
|
@pars_tocheck = @main::pars_tocheck; #say $tee "BEGINNING dump(\@pars_tocheck): " . dump(@pars_tocheck); |
116
|
|
|
|
|
|
|
} |
117
|
|
|
|
|
|
|
else |
118
|
|
|
|
|
|
|
{ |
119
|
0
|
|
|
|
|
|
my $file = $ARGV[0]; |
120
|
0
|
|
|
|
|
|
require $file; |
121
|
|
|
|
|
|
|
} |
122
|
|
|
|
|
|
|
|
123
|
0
|
|
|
|
|
|
my %res; |
124
|
|
|
|
|
|
|
my %lab; |
125
|
0
|
|
|
|
|
|
my $countcase = 0; |
126
|
0
|
|
|
|
|
|
my @caseseed_ = @caseseed; |
127
|
0
|
|
|
|
|
|
my @chanceseed_ = @chanceseed; |
128
|
0
|
|
|
|
|
|
foreach my $case (@caseseed_) # In a $casefile one or more searches are described. Here one or more searches are fabricated. |
129
|
|
|
|
|
|
|
{ |
130
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
#say $tee "BEGINNING dump(\@varinumbers): " . dump(@varinumbers); |
132
|
0
|
|
|
|
|
|
my @tempvarinumbers = @varinumbers; ###ZZZ |
133
|
0
|
|
|
|
|
|
foreach my $elt ( keys %{ $varinumbers[$countcase] } ) # THIS STRIPS AWAY THE PARAMETERS THAT ARE NOT CONTAINED IN @pars_tocheck. |
|
0
|
|
|
|
|
|
|
134
|
|
|
|
|
|
|
{ |
135
|
0
|
0
|
|
|
|
|
unless ( $elt ~~ @{ $pars_tocheck[$countcase] } ) |
|
0
|
|
|
|
|
|
|
136
|
|
|
|
|
|
|
{ |
137
|
0
|
|
|
|
|
|
delete ${ $tempvarinumbers[$countcase] }{$elt}; |
|
0
|
|
|
|
|
|
|
138
|
|
|
|
|
|
|
} |
139
|
|
|
|
|
|
|
} |
140
|
|
|
|
|
|
|
#say $tee "BEGINNING AFTER \tempvarinumbers " . dump(@tempvarinumbers); |
141
|
|
|
|
|
|
|
|
142
|
0
|
|
|
|
|
|
my $testfile = "$mypath/$file-testfile-$countcase.csv"; #say $tee "dump(INTAKE\$testfile): " . dump($testfile); |
143
|
0
|
0
|
|
|
|
|
open (TEST, ">>$testfile") or die; |
144
|
0
|
|
|
|
|
|
my @blockrefs = @{$case}; #say $tee "dump(INTAKE\@blockrefs): " . dump(@blockrefs); |
|
0
|
|
|
|
|
|
|
145
|
0
|
|
|
|
|
|
my (@varnumbers, @newvarnumbers, @chance, @newchance, @shuffledchanceelms); |
146
|
0
|
|
|
|
|
|
my @chancerefs = @{$chanceseed_[$countcase]}; #say $tee "dump(INTAKE\@chancerefs): " . dump(@chancerefs); |
|
0
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
|
148
|
0
|
|
|
|
|
|
my %varnums = Sim::OPT::getcase(\@varinumbers, $countcase); #say TOSHELL "dumpIN---(\%varnums): " . dump(%varnums); |
149
|
0
|
|
|
|
|
|
my @variables; |
150
|
0
|
0
|
|
|
|
|
if ( not (@{$pars_tocheck->[$countcase]}) ) |
|
0
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
{ |
152
|
0
|
|
|
|
|
|
@variables = sort { $a <=> $b } keys %varnums; #say $tee "dump(INTAKE1\@variables): " . dump(@variables); |
|
0
|
|
|
|
|
|
|
153
|
|
|
|
|
|
|
} |
154
|
|
|
|
|
|
|
else |
155
|
|
|
|
|
|
|
{ |
156
|
0
|
|
|
|
|
|
@variables = sort { $a <=> $b } @{ $pars_tocheck[$countcase] }; #say $tee "dump(INTAKE2\@variables): " . dump(@variables); |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
} |
158
|
0
|
|
|
|
|
|
my $numberof_variables = scalar(@variables); #say $tee "dump(INTAKE\$numberof_variables): " . dump($numberof_variables); |
159
|
|
|
|
|
|
|
|
160
|
0
|
|
|
|
|
|
my $blocklength = $chancedata[$countcase][0]; #say $tee "dump(INTAKE\$blocklength): " . dump($blocklength); |
161
|
0
|
|
|
|
|
|
my $blockoverlap = $chancedata[$countcase][1]; #say $tee "dump(INTAKE\$blockoverlap): " . dump($blockoverlap); |
162
|
0
|
|
|
|
|
|
my $numberof_sweepstoadd = $chancedata[$countcase][2]; #say $tee "dump(INTAKE\$numberof_sweepstoadd): " . dump($numberof_sweepstoadd); |
163
|
0
|
|
|
|
|
|
my $numberof_seedblocks = scalar(@blockrefs); #say $tee "dump(INTAKE\$numberof_seedblocks): " . dump($numberof_seedblocks); |
164
|
0
|
|
|
|
|
|
my $totalnumberof_blocks = ( $numberof_seedblocks + $numberof_sweepstoadd ); #say $tee "dump(INTAKE\$totalnumberof_blocks): " . dump($totalnumberof_blocks); |
165
|
0
|
|
|
|
|
|
my (@caserefs_alias, @chancerefs_alias); |
166
|
0
|
|
|
|
|
|
my $countbuild = 1; |
167
|
0
|
|
|
|
|
|
while ( $countbuild <= $numberof_sweepstoadd ) |
168
|
|
|
|
|
|
|
{ |
169
|
0
|
|
|
|
|
|
say $tee "####################################################################### |
170
|
|
|
|
|
|
|
ADDING \$countbuild $countbuild"; |
171
|
|
|
|
|
|
|
|
172
|
0
|
|
|
|
|
|
my $countchance = 1; |
173
|
0
|
|
|
|
|
|
while ($countchance <= $dimchance) |
174
|
|
|
|
|
|
|
{ |
175
|
0
|
|
|
|
|
|
say $tee"EXPLORING CHANCE, TIME \$countchance $countchance \$countbuild $countbuild"; |
176
|
0
|
|
|
|
|
|
my %lab; |
177
|
0
|
|
|
|
|
|
my ($beginning, @shuffledchanceres, @shuffledchanceelms, @overlap); |
178
|
0
|
|
|
|
|
|
my $semaphore = 0; |
179
|
0
|
|
|
|
|
|
my $countshuffle = 1; |
180
|
|
|
|
|
|
|
sub _shuffle_ |
181
|
|
|
|
|
|
|
{ |
182
|
0
|
|
|
0
|
|
|
say $tee "####################################################################### |
183
|
|
|
|
|
|
|
SHUFFLING NUMBER $countshuffle, \$countbuild $countbuild \$countchance $countchance"; |
184
|
0
|
|
|
|
|
|
@shuffledchanceelms = (); |
185
|
0
|
|
|
|
|
|
@overlap = (); |
186
|
0
|
|
|
|
|
|
@shuffledchanceres = shuffle(@variables); #say $tee "dump(INBUILD\@shuffledchanceres): " . dump(@shuffledchanceres); |
187
|
|
|
|
|
|
|
######@shuffledchanceres = ( 1, 2, 3, 4, 5);##### |
188
|
0
|
|
|
|
|
|
push (@shuffledchanceelms, @shuffledchanceres, @shuffledchanceres, @shuffledchanceres ); #say $tee "dump(INTAKE\@shuffledchanceelms): " . dump(@shuffledchanceelms); |
189
|
0
|
|
|
|
|
|
$beginning = int(rand($blocklength-1) + $numberof_variables); #say $tee "dump(INBUILD\$beginning): " . dump($beginning); |
190
|
0
|
|
|
|
|
|
my $endblock = ( $beginninng + $blocklength ); #say $tee "dump(INBUILD\$endblock): " . dump($endblock); |
191
|
|
|
|
|
|
|
#my @shuffledchanceslice = sort { $a <=> $b } (uniq(@shuffledchanceelms[$beginninng..$endblock])); say $tee "dump(INBUILD\@shuffledchanceslice): " . dump(@shuffledchanceslice); # my @shuffledchanceslice = @shuffledchanceelms[$beginning..$endblock] ; |
192
|
0
|
|
|
|
|
|
@caserefs_alias = @blockrefs; #say $tee "dump(INBUILD\@caserefs_alias): " . dump(@caserefs_alias); |
193
|
0
|
|
|
|
|
|
@chancerefs_alias = @chancerefs; #say $tee "dump(INBUILD\@chancerefs_alias): " . dump(@chancerefs_alias); |
194
|
0
|
|
|
|
|
|
my @pastsweepblocks = Sim::OPT::fromopt_tosweep_simple( { casegroup => [@caserefs_alias], chancegroup => [@chancerefs_alias] } ); say $tee "dumpXX(INBUILD-AFTER\@pastsweepblocks): " . dump(@pastsweepblocks); |
|
0
|
|
|
|
|
|
|
195
|
|
|
|
|
|
|
|
196
|
0
|
|
|
|
|
|
push (@caserefs_alias, [ $beginning, $blocklength ]); #say $tee "dump(INBUILD-AFTER\@caserefs_alias): " . dump(@caserefs_alias); |
197
|
0
|
|
|
|
|
|
push (@chancerefs_alias, [ @shuffledchanceelms ]); #say $tee "dump(INBUILD-AFTER\@chancerefs_alias): " . dump(@chancerefs_alias); |
198
|
|
|
|
|
|
|
|
199
|
0
|
|
|
|
|
|
my $pastbeginning = $chancerefs_alias[ $#chancerefs_alias -1 ][ 0] ; |
200
|
0
|
0
|
|
|
|
|
if ( scalar(@chancerefs_alias) <= 1 ) |
201
|
|
|
|
|
|
|
{ |
202
|
0
|
|
|
|
|
|
$pastbeginning eq ""; |
203
|
|
|
|
|
|
|
} |
204
|
|
|
|
|
|
|
|
205
|
0
|
|
|
|
|
|
my $pastendblock; |
206
|
0
|
0
|
|
|
|
|
if ($pastbeginning) |
207
|
|
|
|
|
|
|
{ |
208
|
0
|
|
|
|
|
|
$pastendblock = ( $pastbeginning + $blocklength ); |
209
|
|
|
|
|
|
|
} |
210
|
|
|
|
|
|
|
else |
211
|
|
|
|
|
|
|
{ |
212
|
0
|
|
|
|
|
|
$pastendblock eq ""; |
213
|
|
|
|
|
|
|
} |
214
|
|
|
|
|
|
|
#say $tee "dump(INBUILD-AFTER\$pastbeginning): " . dump($pastbeginning); |
215
|
|
|
|
|
|
|
#say $tee "dump(INBUILD-AFTER\$pastendblock): " . dump($pastendblock); |
216
|
|
|
|
|
|
|
|
217
|
0
|
|
|
|
|
|
my @slice = @{ $chancerefs_alias[$#chancerefs_alias] }[ $beginning..( $beginning + $blocklength -1 ) ]; #say $tee "dump(INTAKE\@slice): " . dump(@slice); |
|
0
|
|
|
|
|
|
|
218
|
0
|
|
|
|
|
|
my @pastslice = @{ $chancerefs_alias[ $#chancerefs_alias -1 ] }[ $pastbeginning..( $pastbeginning + $blocklength -1 ) ]; #say $tee "dump(INTAKE\@pastslice): " . dump(@pastslice); |
|
0
|
|
|
|
|
|
|
219
|
0
|
|
|
|
|
|
my $lc = List::Compare->new(\@slice, \@pastslice); |
220
|
0
|
|
|
|
|
|
my @intersection = $lc->get_intersection; #say $tee "dump(INBUILD\@intersection): " . dump(@intersection); |
221
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
#my $res = Sim::OPT::checkduplicates( { slice => \@slice, sweepblocks => \@pastsweepblocks } ); say $tee "dumpXX(INBUILD\$res): " . dump($res); |
223
|
|
|
|
|
|
|
|
224
|
0
|
0
|
|
|
|
|
if ( scalar( @intersection ) == $blockoverlap ) { $semaphore = 1; } |
|
0
|
|
|
|
|
|
|
225
|
|
|
|
|
|
|
|
226
|
0
|
0
|
|
|
|
|
if ( not ( $semaphore == 1 ) ) |
227
|
|
|
|
|
|
|
{ |
228
|
0
|
|
|
|
|
|
say $tee "NOT HIT. \$countshuffle: $countshuffle."; |
229
|
0
|
|
|
|
|
|
$countshuffle++; |
230
|
0
|
|
|
|
|
|
&_shuffle_; |
231
|
|
|
|
|
|
|
} |
232
|
|
|
|
|
|
|
else |
233
|
|
|
|
|
|
|
{ |
234
|
0
|
|
|
|
|
|
return (\@shuffledchanceres, \@shuffledchanceelms); |
235
|
0
|
|
|
|
|
|
say $tee "HIT. \$countshuffle: $countshuffle."; |
236
|
|
|
|
|
|
|
} |
237
|
|
|
|
|
|
|
} |
238
|
0
|
|
|
|
|
|
my @result = _shuffle_; |
239
|
0
|
|
|
|
|
|
@shuffledchanceres = @{$result[0]}; |
|
0
|
|
|
|
|
|
|
240
|
0
|
|
|
|
|
|
@shuffledchanceelms = @{$result[1]}; |
|
0
|
|
|
|
|
|
|
241
|
0
|
|
|
|
|
|
say $tee "EXITING SHUFFLE WITH \@shuffledchanceres: @shuffledchanceres, \@shuffledchanceelms, @shuffledchanceelms"; |
242
|
0
|
|
|
|
|
|
$lab{$countcase}{$countbuild}{$countchance}{case} = \@caserefs_alias; #say $tee "dump(OUTBUILD\$lab{$countcase}{$countbuild}{$countchance}{case}): " . dump($lab{$countcase}{$countbuild}{$countchance}{case}); |
243
|
0
|
|
|
|
|
|
my @thiscase = @{ $lab{$countcase}{$countbuild}{$countchance}{case} }; #say $tee "dump(OUTBUILD\@thiscase): " . dump(@thiscase); |
|
0
|
|
|
|
|
|
|
244
|
|
|
|
|
|
|
|
245
|
0
|
|
|
|
|
|
$lab{$countcase}{$countbuild}{$countchance}{chance} = \@chancerefs_alias; #say $tee "dump(OUTBUILD\$lab{$countcase}{$countbuild}{$countchance}{chance}): " . dump($lab{$countcase}{$countbuild}{$countchance}{chance}); |
246
|
0
|
|
|
|
|
|
my @thischance = @{ $lab{$countcase}{$countbuild}{$countchance}{chance} }; #say $tee "dump(OUTBUILD\@thischance): " . dump(@thischance); |
|
0
|
|
|
|
|
|
|
247
|
0
|
|
|
|
|
|
say $tee "dump(OUTBUILD\%lab): " . dump(%lab); |
248
|
|
|
|
|
|
|
|
249
|
|
|
|
|
|
|
################################ |
250
|
|
|
|
|
|
|
#> HERE THE CODE FOLLOWS FOR THE CALCULATION OF HEURISTIC INDICATORS MEASURING THE EFFECTIVENESS OF A SEARCH STRUCTURE FOR SEARCH. |
251
|
|
|
|
|
|
|
|
252
|
0
|
|
|
|
|
|
my $countfirstline = 0; |
253
|
|
|
|
|
|
|
|
254
|
0
|
|
|
|
|
|
my ( $totalsize, $totaloverlapsize, $totalnetsize, $commonalityflow, $totalcommonalityflow, |
255
|
|
|
|
|
|
|
$cumulativecommonalityflow, $localcommonalityflow, $addcommonalityflow, $remembercommonalityflow, |
256
|
|
|
|
|
|
|
$cumulativecommonalityflow, $localrecombinationratio, $heritageleft, $heritagecentre, |
257
|
|
|
|
|
|
|
$heritageright, $previousblock, $flatoverlapage, $rootexpoverlapage, $expoverlapage, |
258
|
|
|
|
|
|
|
$flatweightedoverlapage, $overlap, $iruif, $stdcommonality, $stdrecombination, $stdinformation, |
259
|
|
|
|
|
|
|
$stdfatminus, $stdshadow, $localrecombinalityminusratio, |
260
|
|
|
|
|
|
|
$localrecombinalityratio, $localrenewalratio, $infminusflow, $cumulativeinfminusflow, $totalinfminusflow, $infflow, |
261
|
|
|
|
|
|
|
$cumulativeinfflow, $totalinfflow, $infoflow, $cumulativeinfoflow, $totalinfoflow, |
262
|
|
|
|
|
|
|
$refreshment, $refreshmentminus, $n_basketminus, $n_unionminus, $n_basket, $n_union, |
263
|
|
|
|
|
|
|
$recombination_ratio, $proportionhike, $iruifflow, $cumulativeiruif, $totaliruif, |
264
|
|
|
|
|
|
|
$commonalityflowproduct, $commonalityflowenhanced, $commonalityflowproductenhanced, |
265
|
|
|
|
|
|
|
$cumulativecommonalityflowproduct, $cumulativecommonalityflowenhanced, $cumulativecommonalityflowproductenhanced, |
266
|
|
|
|
|
|
|
$averageageexport, $cumulativeage, $refreshratio, $flowratio, $cumulativeflowratio, $flowageratio, |
267
|
|
|
|
|
|
|
$cumulativeflowageratio, $shadowexport, $modiflow, $cumulativemodiflow, $cumulativehike, $cumulativerefreshment, |
268
|
|
|
|
|
|
|
$refreshmentperformance, $refreshmentsize, $cumulativerefreshmentperformance, $refreshmentvolume, $IRUIF, $mmIRUIF, $averageage, |
269
|
|
|
|
|
|
|
$otherIRUIF, $othermmIRUIF, $mmresult, $mmregen, $score, $sumnovelty,$urr,$IRUIFnovelty,$IRUIFurr, |
270
|
|
|
|
|
|
|
$IRUIFnoveltysquare,$IRUIFurrsquare,$IRUIFnoveltycube,$IRUIFurrcube ); |
271
|
|
|
|
|
|
|
|
272
|
0
|
|
|
|
|
|
my ( @commonalities, @commonalitiespe, @recombinations, @informations, @localcommonances, @commonanceratios, |
273
|
|
|
|
|
|
|
@groupminus, @unionminus, @group, @union, @basketminusnow, @unionminus, @basketnow, @union, @basketageexport, |
274
|
|
|
|
|
|
|
@basketlast, @newbasket, @valuebasket, @otherbasket, @basketcount, @finalbasket, @mmbasketresult, @mmbasketregen, |
275
|
|
|
|
|
|
|
@pastjump, @pastbunch, @resbunches, @scores ); |
276
|
|
|
|
|
|
|
|
277
|
|
|
|
|
|
|
#> |
278
|
|
|
|
|
|
|
###################### |
279
|
|
|
|
|
|
|
|
280
|
0
|
|
|
|
|
|
my $countblock = 0; |
281
|
0
|
|
|
|
|
|
my $countblk = 0; |
282
|
0
|
|
|
|
|
|
my $countblockplus1 = 1; |
283
|
0
|
|
|
|
|
|
foreach my $blockref (@caserefs_alias) |
284
|
|
|
|
|
|
|
{ |
285
|
0
|
|
|
|
|
|
say $tee "################################################################ |
286
|
|
|
|
|
|
|
NOW DEALING WITH BLOCK $countblockplus1, \$countbuild $countbuild, \$countchance $countchance"; |
287
|
0
|
|
|
|
|
|
my @blockelts = @{$blockref}; #say $tee "dump(INBLOCKS\@blockelts): " . dump(@blockelts); |
|
0
|
|
|
|
|
|
|
288
|
0
|
|
|
|
|
|
my @presentblockelts = @blockelts; |
289
|
0
|
|
|
|
|
|
my $chanceref = $chancerefs_alias[$countblk]; #say $tee "dump(INBLOCK\$chanceref): " . dump($chanceref); |
290
|
0
|
|
|
|
|
|
my @chanceelts = @{$chanceref}; #say $tee "dump(INBLOCKS\@chanceelts): " . dump(@chanceelts); |
|
0
|
|
|
|
|
|
|
291
|
|
|
|
|
|
|
|
292
|
|
|
|
|
|
|
############################################# |
293
|
|
|
|
|
|
|
#> |
294
|
|
|
|
|
|
|
|
295
|
0
|
|
|
|
|
|
my $attachment = @blockelts[0]; #say $tee "dump(INBLOCK1\$attachment): " . dump($attachment); ###BEWARE. THE VARIABLES @blockelts AND @pastblockelts IN THIS MODULE ARE NOT THE SAME USED IN Sim::OPT. |
296
|
|
|
|
|
|
|
# ANALOGUES OF THE LATTER VARIABLES ARE HERE CALLED @presentslice AND @pastslice. |
297
|
0
|
|
|
|
|
|
my $activeblock = @blockelts[1]; #say $tee "dump(INBLOCK1\$activeblock): " . dump($activeblock); |
298
|
0
|
|
|
|
|
|
my $zoneend = ( $numberof_variables - $activeblock ); #say $tee "dump(INBLOCK1\$zoneend): " . dump($zoneend); |
299
|
0
|
|
|
|
|
|
my ( $pastattachment, $pastactiveblock, $pastzoneend ); |
300
|
0
|
|
|
|
|
|
my $viewextent = $activeblock; |
301
|
0
|
|
|
|
|
|
my ( @zoneoverlaps, @meanoverlaps, @zoneoverlapextent, @meanoverlapextent ); |
302
|
0
|
|
|
|
|
|
my $countops = 1; |
303
|
0
|
|
|
|
|
|
my $counter = 0; |
304
|
0
|
|
|
|
|
|
while ($countops > 0) |
305
|
|
|
|
|
|
|
{ |
306
|
0
|
|
|
|
|
|
my @pastblockelts = @{$blockrefs[$countblk - $countops]}; |
|
0
|
|
|
|
|
|
|
307
|
0
|
0
|
|
|
|
|
if ($countblk == 0) { @pastblockelts = ""; } |
|
0
|
|
|
|
|
|
|
308
|
0
|
|
|
|
|
|
$pastattachment = $pastblockelts[0]; #say $tee "dump(INBLOCK1\$pastattachment): " . dump($pastattachment); |
309
|
0
|
|
|
|
|
|
$pastactiveblock = $pastblockelts[1]; #say $tee "dump(INBLOCK1\$pastactiveblock): " . dump($pastactiveblock); |
310
|
0
|
|
|
|
|
|
$pastzoneend = ( $numberof_variables - $pastactiveblock ); #say $tee "dump(INBLOCK1\$pastzoneend): " . dump($pastzoneend); |
311
|
0
|
|
|
|
|
|
my @presentslice = @chanceelts[ $attachment..($attachment+$activeblock-1) ]; #say $tee "dump(INBLOCK1\@presentslice): " . dump(@presentslice); |
312
|
0
|
|
|
|
|
|
my @pastslice = @chanceelts[ $pastattachment..($pastattachment+$pastactiveblock-1) ]; #say $tee "dump(INBLOCK1\@pastslice): " . dump(@pastslice); |
313
|
0
|
|
|
|
|
|
my $lc = List::Compare->new(\@presentslice, \@pastslice); |
314
|
0
|
|
|
|
|
|
my @intersection = $lc->get_intersection; #say $tee "dump(INBLOCK1\@intersection): " . dump(@intersection); |
315
|
0
|
|
|
|
|
|
my $localoverlap = scalar(@intersection); #say $tee "dump(INBLOCK1\$localoverlap): " . dump($localoverlap); |
316
|
0
|
|
|
|
|
|
push (@meanoverlapextent, $localoverlap); #say $tee "dump(INBLOCK1\@meanoverlapextent): " . dump(@meanoverlapextent); |
317
|
0
|
|
|
|
|
|
my $overlapsum = 0; |
318
|
0
|
|
|
|
|
|
for ( @meanoverlapextent ) { $overlapsum += $_; } |
|
0
|
|
|
|
|
|
|
319
|
0
|
|
|
|
|
|
$overlap = $overlapsum ; #say $tee "dump(INBLOCK1\$overlap): " . dump($overlap); |
320
|
0
|
0
|
|
|
|
|
if ($countblk == 0) { $overlap = 0; } |
|
0
|
|
|
|
|
|
|
321
|
0
|
|
|
|
|
|
$countops--; |
322
|
0
|
|
|
|
|
|
$counter++; |
323
|
|
|
|
|
|
|
} |
324
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
#if ("yesgo" eq "yesgo") |
326
|
|
|
|
|
|
|
{ |
327
|
0
|
|
|
|
|
|
my $countops = 2; |
|
0
|
|
|
|
|
|
|
328
|
0
|
|
|
|
|
|
my $counter = 0; |
329
|
0
|
|
|
|
|
|
my ( @zoneoverlaps, @meanoverlaps, @zoneoverlapextent, @meanoverlapextent, @basketminus ); |
330
|
0
|
|
|
|
|
|
while ($countops > 1) |
331
|
|
|
|
|
|
|
{ |
332
|
0
|
|
|
|
|
|
my @pastblockelts = @{$blockrefs[$countblk - $countops]}; #say $tee "dump(INBLOCK2\@pastblockelts): " . dump(@pastblockelts); |
|
0
|
|
|
|
|
|
|
333
|
0
|
|
|
|
|
|
$pastattachment = $pastblockelts[0]; #say $tee "dump(INBLOCK2\$pastattachment): " . dump($pastattachment); |
334
|
0
|
|
|
|
|
|
$pastactiveblock = $pastblockelts[1]; #say $tee "dump(INBLOCK2\$pastactiveblock): " . dump($pastactiveblock); |
335
|
0
|
|
|
|
|
|
$pastzoneend = ( $numberof_variables - $pastactiveblock ); #say $tee "dump(INBLOCK2\$pastzoneend): " . dump($pastzoneend); |
336
|
0
|
|
|
|
|
|
my @presentslice = @chanceelts[ $attachment..($attachment+$activeblock-1) ]; #say $tee "dump(INBLOCK2\@presentslice): " . dump(@presentslice); |
337
|
0
|
|
|
|
|
|
my @pastslice = @chanceelts[ $pastattachment..($pastattachment+$pastactiveblock-1) ]; #say $tee "dump(INBLOCK2\@pastslice): " . dump(@pastslice); |
338
|
0
|
|
|
|
|
|
my $lc = List::Compare->new(\@presentslice, \@pastslice); |
339
|
0
|
|
|
|
|
|
my @intersection = $lc->get_intersection; #say $tee "dump(INBLOCK2\@intersection): " . dump(@intersection); |
340
|
0
|
|
|
|
|
|
push (@basketminus, @intersection); #say $tee "dump(INBLOCK2\@basketminus): " . dump(@basketminus); |
341
|
0
|
|
|
|
|
|
$stdfatminus = stddev(@basketminus); #say $tee "dump(INBLOCK2\$stdfatminus): $stdfatminus"; |
342
|
0
|
|
|
|
|
|
my $localoverlap = scalar(@intersection); #say $tee "dump(INBLOCK2\$localoverlap): " . dump($localoverlap); |
343
|
0
|
|
|
|
|
|
my $localoverlapextent = $localoverlap; #say $tee "dump(INBLOCK2\$localoverlapextent): " . dump($localoverlapextent); |
344
|
0
|
|
|
|
|
|
push (@meanoverlapextent, $localoverlap); #say $tee "dump(INBLOCK2\@meanoverlapextent): " . dump(@meanoverlapextent); |
345
|
0
|
|
|
|
|
|
my $overlapsum = 0; |
346
|
0
|
|
|
|
|
|
for ( @meanoverlapextent ) { $overlapsum += $_; } |
|
0
|
|
|
|
|
|
|
347
|
0
|
|
|
|
|
|
$overlapminus = ($overlapsum ); #say $tee "dump(INBLOCK2\$overlapminus): " . dump($overlapminus); |
348
|
0
|
|
|
|
|
|
@basketminusnow = @basketminus; |
349
|
0
|
|
|
|
|
|
$countops--; |
350
|
0
|
|
|
|
|
|
$counter++; |
351
|
|
|
|
|
|
|
} |
352
|
|
|
|
|
|
|
} |
353
|
0
|
|
|
|
|
|
@unionminus = uniq(@basketminusnow); #say $tee "ZONE2OUT: \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk, \$countops: $countops, \$counter: $counter, \@unionminus: @unionminus\n"; |
354
|
0
|
|
|
|
|
|
$n_basketminus = scalar(@basketminusnow); #say $tee "dump(INBLOCK2\$n_basketminus): " . dump($n_basketminus); |
355
|
0
|
|
|
|
|
|
$n_unionminus = scalar (@unionminus); #say $tee "dump(INBLOCK2\$n_unionminus): " . dump($n_unionminus); |
356
|
0
|
0
|
|
|
|
|
if ( $n_unionminus == 0) {$n_unionminus = 1;}; #say $tee "dump(INBLOCK2-IFZERO\$n_unionminus): " . dump($n_unionminus); |
|
0
|
|
|
|
|
|
|
357
|
0
|
0
|
|
|
|
|
if ( $n_basketminus == 0) {$n_basketminus = 1;}; #say $tee "dump(INBLOCK2-IFZERO\$n_basketminus): " . dump($n_basketminus); |
|
0
|
|
|
|
|
|
|
358
|
0
|
|
|
|
|
|
$refreshmentminus = ( ( $n_unionminus / $n_basketminus ) ); #say $tee "dump(INBLOCK2\$refreshmentminus): $refreshmentminus"; |
359
|
|
|
|
|
|
|
|
360
|
|
|
|
|
|
|
#if ("yesgo" eq "yesgo") |
361
|
|
|
|
|
|
|
{ |
362
|
0
|
|
|
|
|
|
my ( @zoneoverlaps, @meanoverlaps, @zoneoverlapextent, @meanoverlapextent, @zoneoverlapweightedextent, @meanoverlapweightedextent); |
|
0
|
|
|
|
|
|
|
363
|
0
|
|
|
|
|
|
my $countops = 1; |
364
|
0
|
|
|
|
|
|
my ( $flatoverlapsum, $expoverlapsum, $flatweightedoverlapsum, $expweightedoverlapsum, $averageage ); |
365
|
0
|
|
|
|
|
|
my $counter = 0; |
366
|
0
|
|
|
|
|
|
my $countage = $numberof_variables; |
367
|
0
|
|
|
|
|
|
my ( @basket, @basketage, @freshbasket, @basketnow ); |
368
|
0
|
|
|
|
|
|
while ($countops < $numberof_variables) |
369
|
|
|
|
|
|
|
{ |
370
|
0
|
|
|
|
|
|
my @pastblockelts = @{$blockrefs[$countblk - $countops]}; #say $tee "dump(INBLOCK3\@pastblockelts): " . dump(@pastblockelts); |
|
0
|
|
|
|
|
|
|
371
|
0
|
|
|
|
|
|
$pastattachment = $pastblockelts[0]; #say $tee "dump(INBLOCK3\$pastattachment): " . dump($pastattachment); |
372
|
0
|
|
|
|
|
|
$pastactiveblock = $pastblockelts[1]; #say $tee "dump(INBLOCK3\$pastactiveblock): " . dump($pastactiveblock); |
373
|
0
|
|
|
|
|
|
$pastzoneend = ( $numberof_variables - $pastactiveblock ); #say $tee "dump(INBLOCK3\$pastzoneend): " . dump($pastzoneend); |
374
|
0
|
|
|
|
|
|
my @pastslice = @chanceelts[ $pastattachment..($pastattachment+$pastactiveblock-1) ]; #say $tee "dump(INBLOCK3\@pastslice): " . dump(@pastslice); |
375
|
|
|
|
|
|
|
#@pastslice = Sim::OPT::_clean_ (\@pastslice); say $tee "dump(INBLOCK3\@pastslice): " . dump(@pastslice); |
376
|
0
|
|
|
|
|
|
my @otherslice = @pastslice; |
377
|
|
|
|
|
|
|
|
378
|
0
|
|
|
|
|
|
foreach $int (@pastslice) |
379
|
|
|
|
|
|
|
{ |
380
|
0
|
0
|
|
|
|
|
if ($int) |
381
|
|
|
|
|
|
|
{ |
382
|
0
|
|
|
|
|
|
$int = "$int" . "-" . "$countops"; |
383
|
|
|
|
|
|
|
} |
384
|
|
|
|
|
|
|
} |
385
|
|
|
|
|
|
|
|
386
|
0
|
0
|
|
|
|
|
if ($countops <= $numberof_variables) |
387
|
|
|
|
|
|
|
{ |
388
|
0
|
|
|
|
|
|
push (@basket, @pastslice); |
389
|
|
|
|
|
|
|
} |
390
|
|
|
|
|
|
|
#@basket = Sim::OPT::_clean_ (\@basket); |
391
|
0
|
|
|
|
|
|
@basket = sort { $a <=> $b } @basket; |
|
0
|
|
|
|
|
|
|
392
|
|
|
|
|
|
|
#say $tee "dump(INBLOCK3\@basket): " . dump(@basket); |
393
|
|
|
|
|
|
|
|
394
|
0
|
0
|
|
|
|
|
if ($countops <= $numberof_variables) |
395
|
|
|
|
|
|
|
{ |
396
|
0
|
|
|
|
|
|
push (@otherbasket, @otherslice); |
397
|
|
|
|
|
|
|
} |
398
|
|
|
|
|
|
|
#@otherbasket = Sim::OPT::_clean_ (\@otherbasket); |
399
|
0
|
|
|
|
|
|
@otherbasket = sort { $a <=> $b } @otherbasket; |
|
0
|
|
|
|
|
|
|
400
|
|
|
|
|
|
|
#say $tee "dump(INBLOCK3\@otherbasket): " . dump(@otherbasket); |
401
|
|
|
|
|
|
|
|
402
|
0
|
|
|
|
|
|
@newbasket = @basket; |
403
|
0
|
|
|
|
|
|
@basketnow = @newbasket; |
404
|
0
|
|
|
|
|
|
@transferbasket = @basketnow; |
405
|
0
|
|
|
|
|
|
my @presentslice = @chanceelts[ $attachment..($attachment+$activeblock-1) ]; #say $tee "dump(INBLOCK3\@presentslice): " . dump(@presentslice); |
406
|
0
|
|
|
|
|
|
@activeblk = @presentslice; #say $tee "dump(INBLOCK3\@activeblk): " . dump(@activeblk); |
407
|
0
|
|
|
|
|
|
$countops++; |
408
|
0
|
|
|
|
|
|
$counter++; |
409
|
0
|
|
|
|
|
|
$countage--; |
410
|
|
|
|
|
|
|
} |
411
|
|
|
|
|
|
|
} #say $tee "ZONE3: \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk, \$countops: $countops, \$counter: $counter, \$countage: $countage, \@transferbasket: @transferbasket\n"; |
412
|
|
|
|
|
|
|
|
413
|
0
|
|
|
|
|
|
my @integralslice = @shuffledchanceelms[ ($numberof_variables) .. (($numberof_variables * 2) - 1) ]; #say $tee "AFTERZONE \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$numberof_variables: $numberof_variables, \@variables: @variables, \@shuffledchanceres: @shuffledchanceres, \@shuffledchanceelms: @shuffledchanceelms, \@integralslice-->: @integralslice"; |
414
|
|
|
|
|
|
|
#my @integralslice = sort { $a <=> $b } @integralslice; |
415
|
0
|
|
|
|
|
|
my @valuebasket; |
416
|
0
|
|
|
|
|
|
foreach my $el (@integralslice) |
417
|
|
|
|
|
|
|
{ |
418
|
0
|
|
|
|
|
|
my @freshbasket; |
419
|
0
|
|
|
|
|
|
foreach my $elm (@transferbasket) |
420
|
|
|
|
|
|
|
{ |
421
|
0
|
|
|
|
|
|
my $elmo = $elm; |
422
|
0
|
|
|
|
|
|
$elmo =~ s/(.*)-(.*)/$1/; |
423
|
0
|
0
|
|
|
|
|
if ($el eq $elmo) |
424
|
|
|
|
|
|
|
{ |
425
|
0
|
|
|
|
|
|
push (@freshbasket, $elm); |
426
|
|
|
|
|
|
|
} |
427
|
|
|
|
|
|
|
} |
428
|
0
|
|
|
|
|
|
@freshbasket = sort { $a <=> $b } @freshbasket; #say $tee "AFTERZONE \@freshbasket: @freshbasket"; say $tee " \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk"; |
|
0
|
|
|
|
|
|
|
429
|
|
|
|
|
|
|
|
430
|
0
|
|
|
|
|
|
my $winelm = $freshbasket[0]; |
431
|
0
|
|
|
|
|
|
push (@valuebasket,$winelm); #say $tee "AFTERZONE \@valuebasket: @valuebasket"; say $tee "AFTERZONE \@freshbasket: @freshbasket"; say $tee "ZONE2OUT: \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk"; |
432
|
|
|
|
|
|
|
|
433
|
0
|
|
|
|
|
|
foreach my $elt (@integralslice) |
434
|
|
|
|
|
|
|
{ |
435
|
0
|
|
|
|
|
|
foreach my $elem (@valuebasket) |
436
|
|
|
|
|
|
|
{ |
437
|
0
|
0
|
|
|
|
|
unless ($elem eq "") |
438
|
|
|
|
|
|
|
{ |
439
|
0
|
|
|
|
|
|
my $elmo = $elem; |
440
|
0
|
|
|
|
|
|
$elmo =~ s/(.*)-(.*)/$1/; |
441
|
0
|
0
|
|
|
|
|
if ($elmo ~~ @integralslice) |
442
|
|
|
|
|
|
|
{ |
443
|
|
|
|
|
|
|
; |
444
|
|
|
|
|
|
|
} |
445
|
|
|
|
|
|
|
else |
446
|
|
|
|
|
|
|
{ |
447
|
0
|
0
|
|
|
|
|
if ($countblk > $$numberof_variables) { my $eltinsert = "$elmo" . "-" . "$numberof_variables"; } |
|
0
|
|
|
|
|
|
|
448
|
0
|
|
|
|
|
|
else { my $eltinsert = "$elmo" . "-" . "$countblk";} |
449
|
0
|
|
|
|
|
|
push (@valuebasket, $eltinsert); |
450
|
|
|
|
|
|
|
} #say $tee "AFTERZONE INTERMEDIATE \@valuebasket: @valuebasket"; |
451
|
|
|
|
|
|
|
} |
452
|
|
|
|
|
|
|
} |
453
|
|
|
|
|
|
|
} |
454
|
|
|
|
|
|
|
} |
455
|
0
|
|
|
|
|
|
@valuebasket = sort { $a <=> $b } @valuebasket; |
|
0
|
|
|
|
|
|
|
456
|
|
|
|
|
|
|
#say $tee "AFTERZONE FINAL \@valuebasket: @valuebasket"; say $tee " \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk"; |
457
|
|
|
|
|
|
|
|
458
|
0
|
|
|
|
|
|
my $sumvalues = 0; |
459
|
0
|
|
|
|
|
|
my @finalbasket; |
460
|
0
|
|
|
|
|
|
foreach my $el (@valuebasket) |
461
|
|
|
|
|
|
|
{ |
462
|
0
|
|
|
|
|
|
my $elmo = $el; |
463
|
0
|
|
|
|
|
|
$elmo =~ s/(.*)-(.*)/$2/; |
464
|
0
|
|
|
|
|
|
$sumvalues = $sumvalues + $elmo; |
465
|
0
|
|
|
|
|
|
push (@finalbasket, $elmo); |
466
|
|
|
|
|
|
|
|
467
|
|
|
|
|
|
|
} #say $tee "POST AFTERZONE \@finalbasket: @finalbasket\n"; |
468
|
|
|
|
|
|
|
|
469
|
0
|
|
|
|
|
|
my ( @presentblockelts, @pastblockelts, @presentslice, @pastslice, @intersection, @presentjump, @presentbunch, @resbunch |
470
|
|
|
|
|
|
|
# @pastminusblockelts, @pastminusslice, @intersectionminus, |
471
|
|
|
|
|
|
|
); |
472
|
|
|
|
|
|
|
|
473
|
0
|
0
|
|
|
|
|
if ($countblk > 1) |
474
|
|
|
|
|
|
|
{ |
475
|
0
|
|
|
|
|
|
@pastblockelts = @{$blockrefs[$countblk - 1]}; #say $tee "BEYOND1 @pastblockelts-->: @pastblockelts"; say $tee "AFTERZONE \@freshbasket: @freshbasket"; say $tee " \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk"; |
|
0
|
|
|
|
|
|
|
476
|
0
|
|
|
|
|
|
@pastminusblockelts = @{$blockrefs[$countblk - 2]}; #say $tee "BEYOND1 @pastminusblockelts-->: @pastminusblockelts"; say $tee "AFTERZONE \@freshbasket: @freshbasket"; say $tee " \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk"; |
|
0
|
|
|
|
|
|
|
477
|
|
|
|
|
|
|
# @presentblockelts = @{$blockrefs[$countblk]}; # THERE IS ALREADY: @blockelts; |
478
|
|
|
|
|
|
|
#say $tee "BEYOND1 \@presentblockelts-->: @presentblockelts"; |
479
|
0
|
|
|
|
|
|
$pastattachment = $pastblockelts[0]; #say $tee "BEYOND1 \$pastattachment-->: $pastattachment"; |
480
|
0
|
|
|
|
|
|
$pastactiveblock = $pastblockelts[1]; #say $tee "BEYOND1 \$pastactiveblock: $pastactiveblock"; |
481
|
0
|
|
|
|
|
|
$pastzoneend = ( $numberof_variables - $pastactiveblock ); #say $tee "BEYOND1 \$pastzoneend-->: $pastzoneend"; |
482
|
|
|
|
|
|
|
#my $pastminusattachment = $pastminusblockelts[0]; say $tee "BEYOND1 \$pastminusattachment-->: $pastminusattachment";############ ZZZZ UNNEEDED |
483
|
|
|
|
|
|
|
#my $pastminusactiveblock = $pastminusblockelts[1]; say $tee "BEYOND1 \$pastminusactiveblock $pastminusactiveblock";############ ZZZZ UNNEEDED |
484
|
|
|
|
|
|
|
#my $pastminuszoneend = ( $numberof_variables - $pastminusactiveblock ); say $tee "BEYOND1 \$pastminuszoneend-->: $pastminuszoneend";############ ZZZZ UNNEEDED |
485
|
0
|
|
|
|
|
|
@pastslice = @chanceelts[ $pastattachment..($pastattachment + $pastactiveblock-1) ]; #say $tee "BEYOND1 \@pastslice-->: @pastslice"; |
486
|
0
|
|
|
|
|
|
@pastslice = sort { $a <=> $b } @pastslice; #say $tee "BEYOND1-ORDERED \@pastslice-->: @pastslice"; |
|
0
|
|
|
|
|
|
|
487
|
|
|
|
|
|
|
#@pastminusslice = = @chanceelts[ $pastminusattachment..($pastminusattachment + $pastminusactiveblock-1) ]; say $tee "BEYOND1 \@pastsminuslice-->: @pastsminuslice";############ ZZZZ UNNEEDED |
488
|
|
|
|
|
|
|
#@pastsminuslice = sort { $a <=> $b } @pastminusslice; say $tee "BEYOND1-ORDERED \@pastsminuslice-->: @pastsminuslice";############ ZZZZ UNNEEDED |
489
|
0
|
|
|
|
|
|
@presentslice = @chanceelts[ $attachment..($attachment + $activeblock-1) ]; #say $tee "BEYOND1 \@presentslice-->: @presentslice"; |
490
|
0
|
|
|
|
|
|
@presentslice = sort { $a <=> $b } @presentslice; #say $tee "BEYOND1-ORDERED \@presentslice-->: @presentslice"; |
|
0
|
|
|
|
|
|
|
491
|
0
|
|
|
|
|
|
my $lc = List::Compare->new(\@presentslice, \@pastslice); |
492
|
0
|
|
|
|
|
|
@intersection = $lc->get_intersection; #say $tee "dump(INBLOCK2\@intersection): " . dump(@intersection); |
493
|
|
|
|
|
|
|
#my $lc2 = List::Compare->new(\@pastslice, @pastminusslice);############ ZZZZ UNNEEDED |
494
|
|
|
|
|
|
|
#@intersectionminus = $lc2->get_intersection; say $tee "dump(INBLOCK2\@intersectionminus): " . dump(@intersectionminus);############ ZZZZ UNNEEDED |
495
|
|
|
|
|
|
|
|
496
|
0
|
|
|
|
|
|
my $counter = 0; |
497
|
0
|
|
|
|
|
|
foreach my $presentelm (@presentslice) |
498
|
|
|
|
|
|
|
{ |
499
|
0
|
|
|
|
|
|
my $pastelm = $pastslice[$counter]; |
500
|
0
|
|
|
|
|
|
my $joint = "$pastelm" . "-" . "$presentelm"; |
501
|
0
|
|
|
|
|
|
push (@resbunch, $joint); |
502
|
0
|
|
|
|
|
|
$counter++; |
503
|
|
|
|
|
|
|
} |
504
|
|
|
|
|
|
|
|
505
|
|
|
|
|
|
|
#@resbunch = Sim::OPT::_clean_ (\@resbunch); |
506
|
0
|
|
|
|
|
|
say $tee "BEYOND AFTERCLEAN: \@resbunch: @resbunch"; |
507
|
|
|
|
|
|
|
|
508
|
0
|
|
|
|
|
|
push (@resbunches, [@resbunch]); |
509
|
|
|
|
|
|
|
|
510
|
|
|
|
|
|
|
#@resbunches = Sim::OPT::_clean_ (\@resbunches); |
511
|
0
|
|
|
|
|
|
say $tee "BEYOND1 AFTERCLEAN Dumper(\@resbunches:) " . Dumper(@resbunches) ; |
512
|
|
|
|
|
|
|
|
513
|
0
|
|
|
|
|
|
my @presentbunch = @{$resbunches[0]}; |
|
0
|
|
|
|
|
|
|
514
|
|
|
|
|
|
|
#@presentbunch = Sim::OPT::_clean_ (\@presentbunch); |
515
|
0
|
|
|
|
|
|
say $tee "BEYOND1 AFTERCLEAN: \@presentbunch: @presentbunch"; |
516
|
|
|
|
|
|
|
|
517
|
0
|
|
|
|
|
|
my $countthis = 0; |
518
|
0
|
|
|
|
|
|
foreach my $elm (@resbunches) |
519
|
|
|
|
|
|
|
{ |
520
|
0
|
0
|
|
|
|
|
unless ($countthis == 0) |
521
|
|
|
|
|
|
|
{ |
522
|
0
|
|
|
|
|
|
my @pastbunch = @{$elm}; |
|
0
|
|
|
|
|
|
|
523
|
0
|
|
|
|
|
|
my $lc = List::Compare->new(\@presentbunch, \@pastbunch); |
524
|
0
|
|
|
|
|
|
my @intersection = $lc->get_intersection; #say $tee "BEYOND1 \@intersection: @intersection"; |
525
|
|
|
|
|
|
|
|
526
|
0
|
|
|
|
|
|
push ( @scores, scalar(@intersection) ); #say $tee "BEYOND1 INSIDE: \@scores @scores"; |
527
|
|
|
|
|
|
|
} |
528
|
0
|
|
|
|
|
|
$countthis++; |
529
|
|
|
|
|
|
|
} |
530
|
|
|
|
|
|
|
|
531
|
|
|
|
|
|
|
#@scores = Sim::OPT::_clean_ (\@scores); |
532
|
0
|
|
|
|
|
|
say $tee "BEYOND1 OUTSIDE AFTERCLEAN \@scores: @scores"; |
533
|
|
|
|
|
|
|
|
534
|
0
|
|
|
|
|
|
$score = Sim::OPT::max(@scores); #say $tee "BEYOND1 \$score: $score"; |
535
|
0
|
|
|
|
|
|
my $newoccurrences = $activeblock - $score; #say $tee "BEYOND1 \$newoccurrences: $newoccurrences"; |
536
|
0
|
|
|
|
|
|
say $tee "BEYOND1 \$numberof_variables $numberof_variables\n"; |
537
|
0
|
|
|
|
|
|
$novelty = $newoccurrences / $numberof_variables ; #say $tee "BEYOND1 \$novelty: $novelty\n"; # NSM, Novelty of the Search Move |
538
|
|
|
|
|
|
|
# my $novelty = ($steps ** $newoccurrences) / ($steps ** $numberof_variables ); #say $tee "BEYOND1 \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk: $countblk, \$novelty: $novelty\n"; # NSM, Novelty of the Search Move |
539
|
|
|
|
|
|
|
} |
540
|
0
|
|
|
|
|
|
my ($averageage, $n1_averageage); |
541
|
0
|
0
|
|
|
|
|
if ($numberof_variables != 0) |
542
|
|
|
|
|
|
|
{ |
543
|
0
|
|
|
|
|
|
$averageage = ( $sumvalues / $numberof_variables ); #say $tee "BEYOND2 \$averageage: $averageage"; say $tee "AFTERZONE \@freshbasket: @freshbasket"; say $tee " \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk"; |
544
|
|
|
|
|
|
|
} |
545
|
0
|
|
|
|
|
|
else { print "IT WAS ZERO AT DENOMINATOR OF \$averageage.\n"; } |
546
|
|
|
|
|
|
|
|
547
|
0
|
0
|
|
|
|
|
if ($averageage != 0) |
548
|
|
|
|
|
|
|
{ |
549
|
0
|
|
|
|
|
|
$n1_averageage = 1 / $averageage; #say $tee "BEYOND \$n1_averageage-->: $n1_averageage"; # FSW, Freshness of the Search Wake |
550
|
|
|
|
|
|
|
} |
551
|
|
|
|
|
|
|
|
552
|
0
|
|
|
|
|
|
my $urr = ($n1_averageage * $novelty); |
553
|
|
|
|
|
|
|
# my $urr = ($n1_averageage * $sumnovelty ) ** ( 1 / 2 ); # ALTERNATIVE. |
554
|
0
|
|
|
|
|
|
say $tee "BEYOND2 \$urr-->: $urr"; # URR, Usefulness of Recursive Recombination say $tee "AFTERZONE \@freshbasket: @freshbasket"; say $tee "ZONE2OUT: \$countcase: $countcase, \$countbuild: $countbuild, \$countchance: $countchance, \$countblk:$countblk"; |
555
|
|
|
|
|
|
|
|
556
|
0
|
|
|
|
|
|
my $stddev = stddev(@finalbasket); |
557
|
0
|
0
|
|
|
|
|
if ($stddev == 0) {$stddev = 0.0001;} |
|
0
|
|
|
|
|
|
|
558
|
0
|
|
|
|
|
|
my $n1_stddev = 1 / $stddev; |
559
|
0
|
|
|
|
|
|
my $mix = $averageage * $stddev; |
560
|
|
|
|
|
|
|
|
561
|
0
|
0
|
|
|
|
|
if ($mix != 0) |
562
|
|
|
|
|
|
|
{ |
563
|
0
|
|
|
|
|
|
$result = 1 / $mix; #say $tee "BEYOND2 \$result-->: $result"; |
564
|
|
|
|
|
|
|
} |
565
|
0
|
|
|
|
|
|
else { print "IT WAS ZERO AT DENOMINATOR OF \$mix."; } |
566
|
|
|
|
|
|
|
|
567
|
0
|
|
|
|
|
|
push (@mmbasketresult, $result); #say $tee "BEYOND2 \@mmbasketresult-->: @mmbasketresult"; |
568
|
0
|
|
|
|
|
|
$mmresult = mean(@mmbasketresult); #say $tee "BEYOND2 \$mmresult-->: $mmresult"; |
569
|
0
|
|
|
|
|
|
$regen = $n1_averageage; #say $tee "BEYOND2 \$regen-->: $regen"; |
570
|
0
|
|
|
|
|
|
push (@mmbasketregen, $regen); #say $tee "BEYOND2 \@mmbasketregen-->: @mmbasketregen"; |
571
|
0
|
|
|
|
|
|
$mmregen = mean(@mmbasketregen); #say $tee "BEYOND2 \$mmregen-->: $mmregen\n"; |
572
|
|
|
|
|
|
|
|
573
|
|
|
|
|
|
|
#say $tee "sequence:$countcase,\$countblk:$countblk,\@valuebasket:@valuebasket,\@finalbasket:@finalbasket,averageage:$averageage,\$stddev:$stddev,\$mix:$mix,\$result:$result,\$mixsize:$mixsize,\$regen:$regen,\$score:$score,novelty:$novelty,\$urr-->: $urr\n\n"; |
574
|
|
|
|
|
|
|
################################################################################################################################################## |
575
|
|
|
|
|
|
|
|
576
|
|
|
|
|
|
|
#say |
577
|
|
|
|
|
|
|
#REPORTFILE |
578
|
|
|
|
|
|
|
#$tee "sequence:$countcase,\$countblk:$countblk,\@valuebasket:@valuebasket,\@finalbasket:@finalbasket,averageage:$averageage,\$stddev:$stddev,\$mix:$mix,\$result:$result,\$mixsize:$mixsize,\$regen:$regen,\$score:$score,\$novelty:$novelty,\$urr-->: $urr\n\n"; |
579
|
|
|
|
|
|
|
|
580
|
|
|
|
|
|
|
# END CALCULATION OF THE LOCAL SEARCH AGE. |
581
|
|
|
|
|
|
|
################################################################################################################# |
582
|
|
|
|
|
|
|
################################################################################################################# |
583
|
|
|
|
|
|
|
|
584
|
|
|
|
|
|
|
###my $steps = Sim::OPT::getstepsvar($elt, $countcase, \@varinumbers); |
585
|
|
|
|
|
|
|
|
586
|
0
|
|
|
|
|
|
$varsnum = ( $activeblock + $zoneend); #say $tee "BEYOND3 \$varsnum: $varsnum"; |
587
|
0
|
|
|
|
|
|
$limit = ($attachment + $activeblock + $zoneend); #say "BEYOND \$limit: $limit"; |
588
|
0
|
|
|
|
|
|
$countafter = 0; |
589
|
0
|
|
|
|
|
|
$counterrank = 0; |
590
|
0
|
|
|
|
|
|
$leftcounter = $attachment; #say $tee "BEYOND3 \$leftcounter: $leftcounter"; |
591
|
0
|
|
|
|
|
|
$rightcounter = ($attachment + $activeblock); #say "BEYOND \$rightcounter: $rightcounter"; |
592
|
|
|
|
|
|
|
|
593
|
|
|
|
|
|
|
#say $tee "BEYOND3 dump(\@varinumbers): " . dump(@varinumbers); |
594
|
|
|
|
|
|
|
#say $tee "BEYOND3 AFTER tempvarinumbers " . dump(@tempvarinumbers); |
595
|
|
|
|
|
|
|
|
596
|
0
|
|
|
|
|
|
$countfirstline = 0; |
597
|
|
|
|
|
|
|
|
598
|
0
|
0
|
|
|
|
|
if ($countblk > 0) { $antesize = Sim::OPT::givesize(\@pastslice, $countcase, \@varinumbers); } #say $tee "BEYOND3 \$antesize: $antesize"; |
|
0
|
|
|
|
|
|
|
599
|
|
|
|
|
|
|
|
600
|
0
|
|
|
|
|
|
$postsize = Sim::OPT::givesize(\@presentslice, $countcase, \@varinumbers); #say $tee "BEYOND3 \$postsize: $postsize"; |
601
|
0
|
|
|
|
|
|
$localsize = $postsize + $antesize; #say $tee "BEYOND3 \$localsize: $localsize\n"; |
602
|
|
|
|
|
|
|
|
603
|
0
|
0
|
|
|
|
|
if ($countblk == 0) |
604
|
|
|
|
|
|
|
{ |
605
|
0
|
|
|
|
|
|
$localsize = $postsize; |
606
|
0
|
|
|
|
|
|
$localsizeproduct = $postsize; |
607
|
|
|
|
|
|
|
} |
608
|
|
|
|
|
|
|
|
609
|
0
|
|
|
|
|
|
$localsizeproduct = $postsize * $antesize; #say $tee "BEYOND3 \$localsizeproduct " . dump($localsizeproduct); |
610
|
|
|
|
|
|
|
|
611
|
0
|
|
|
|
|
|
$overlapsize = Sim::OPT::givesize(\@intersection, $countcase, \@tempvarinumbers); #say $tee "BEYOND3 \@intersection @intersection, \$overlapsize $overlapsize"; |
612
|
|
|
|
|
|
|
###$overlapsize = ($steps ** $overlap); say $tee "BEYOND3 \$overlapsize $overlapsize";###DDD |
613
|
|
|
|
|
|
|
|
614
|
0
|
0
|
|
|
|
|
if ($overlap == 0) {$overlapsize = 1;} |
|
0
|
|
|
|
|
|
|
615
|
|
|
|
|
|
|
|
616
|
|
|
|
|
|
|
#if ( ( $countcase == 0) and ($countblk == 0) ) |
617
|
|
|
|
|
|
|
#{ |
618
|
|
|
|
|
|
|
# print |
619
|
|
|
|
|
|
|
# #OUTFILEWRITE #TABLETITLES |
620
|
|
|
|
|
|
|
# $tee "\$countcase,\$countblk,\$attachment,\$activeblock,\$zoneend,\$pastattachment,\$pastactiveblock,\$pastzoneend,\$antesize,\$postsize,\$overlap,\$overlapsize,\$overlapminus,\$overlapminussize,\$overlapsum,\$overlapsumsize,\$localsize,\$localnetsize,\$totalsize,\$totaloverlapsize,\$totalnetsize,\$commonalityratio,\$commonality_volume,\$commonalityflow,\$recombinationflow,\$informationflow,\$cumulativecommonalityflow,\$cumulativerecombinationflow,\$cumulativeinformationflow,\$totalcommonalityflow,\$totalrecombinationflow,\$totalinformationflow,\$addcommonalityflow,\$addrecombinationflow,\$addinformationflow,\$recombinalityminusflow,\$cumulativerecombinalityminusflow,\$totalrecombinalityminusflow,\$recombinalityflow,\$cumulativerecombinalityflow,\$totalrecombinalityflow,\$renewalflow,\$cumulativerenewalflow,\$totalrenewalflow,\$infoflow,\$cumulativeinfoflow,\$totalinfoflow,\$refreshmentminus,\$recombination_ratio,\$proportionhike,\$hike,\$refreshment,\$infflow,\$cumulativeinfflow,\$totalinfflow,\$iruiflow,\$cumulativeiruif,\$totaliruif,\$averageageexport,\$cumulativeage,\$stdage,\$refreshratio,\$averageagesize,\$flowratio,\$cumulativeflowratio,\$flowageratio,\$cumulativeflowageratio,\$modiflow,\$cumulativemodiflow,\$refreshmentsize,\$refreshmentperformance,\$cumulativerefreshmentperformance,\$refreshmentvolume,\$IRUIF,\$mmIRUIF,\$IRUIFvolume,\$mmIRUIFvolume,\$hikefactor,\$otherIRUIF,\$othermmIRUIF,\$otherIRUIFvolume,\$othermmIRUIFvolume,\$averageage,\$steddev,\$mix,\$result,\$mixsize,\$regen,\$n1_averageage,\$n1_stddev,\$n1_averageagesize,\$mmresult,\$mmregen,\$novelty,\$urr,\$IRUIFnovelty,\$IRUIFurr,\$IRUIFnoveltysquare,\$IRUIFurrsquare,\$IRUIFnoveltycube,\$IRUIFurrcube"; |
621
|
|
|
|
|
|
|
#} |
622
|
|
|
|
|
|
|
|
623
|
0
|
0
|
|
|
|
|
if ($countblk == 0) |
624
|
|
|
|
|
|
|
{ |
625
|
0
|
|
|
|
|
|
$antesize = 0; |
626
|
0
|
|
|
|
|
|
$overlap = 0; |
627
|
0
|
|
|
|
|
|
$overlapsize = 0; |
628
|
|
|
|
|
|
|
#$overlapminus = 0; ############ ZZZZ UNNEEDED |
629
|
|
|
|
|
|
|
#$overlapminussize = 0; ############ ZZZZ UNNEEDED |
630
|
|
|
|
|
|
|
} |
631
|
|
|
|
|
|
|
|
632
|
|
|
|
|
|
|
#if ($overlapminussize == 0) {$overlapminussize = 1;} ############ ZZZZ UNNEEDED |
633
|
0
|
0
|
|
|
|
|
if ($overlapsize == 0){$overlapsize = 1;} |
|
0
|
|
|
|
|
|
|
634
|
0
|
0
|
|
|
|
|
if ($totaloverlapsize == 0){$totaloverlapsize = 1;} ############ ZZZZ UNNEEDED? |
|
0
|
|
|
|
|
|
|
635
|
|
|
|
|
|
|
|
636
|
|
|
|
|
|
|
|
637
|
|
|
|
|
|
|
#$overlapminussize = Sim::OPT::givesize(\@intersectionminus, $countcase, \@varinumbers); say $tee "BEYOND3 \$overlapsize $overlapsize"; ############ ZZZZ UNNEEDED |
638
|
|
|
|
|
|
|
#$overlapminussize = ($steps ** $overlapminus); ############ ZZZZ UNNEEDED |
639
|
|
|
|
|
|
|
|
640
|
|
|
|
|
|
|
#if ($overlapminussize == 0){$overlapminussize = 1;} ############ ZZZZ UNNEEDED |
641
|
|
|
|
|
|
|
#$overlapsum = ($overlapsize / $overlapminussize ); ############ ZZZZ UNNEEDED |
642
|
|
|
|
|
|
|
|
643
|
|
|
|
|
|
|
#$overlapsumsize = ($steps ** $overlapsum); ########## ZZZZ UNNEEDED |
644
|
|
|
|
|
|
|
|
645
|
|
|
|
|
|
|
|
646
|
|
|
|
|
|
|
#if ($countblk == 0) {$overlapsumsize = 1;} ############ ZZZZ UNNEEDED |
647
|
|
|
|
|
|
|
|
648
|
0
|
|
|
|
|
|
$localnetsizeproduct = ( $localsizeproduct - $overlapsize ); |
649
|
0
|
0
|
|
|
|
|
if ($localnetsizeproduct == 0) {$localnetsizeproduct = 1;} |
|
0
|
|
|
|
|
|
|
650
|
|
|
|
|
|
|
|
651
|
0
|
0
|
|
|
|
|
if ($totalsize == 0){$totalsize = 1;} |
|
0
|
|
|
|
|
|
|
652
|
|
|
|
|
|
|
|
653
|
0
|
|
|
|
|
|
$localnetsize = ( $localsize - $overlapsize ); # OK |
654
|
0
|
0
|
|
|
|
|
if ($localnetsize == 0) {$localnetsize = 1;} |
|
0
|
|
|
|
|
|
|
655
|
0
|
|
|
|
|
|
$totalsize = $totalsize + $postsize; # OK |
656
|
|
|
|
|
|
|
|
657
|
0
|
|
|
|
|
|
$totaloverlapsize = $totaloverlapsize + $overlapsize; #OK |
658
|
0
|
|
|
|
|
|
$totalnetsize = ($totalsize - $totaloverlapsize); # OK |
659
|
0
|
0
|
|
|
|
|
if ($totalnetsize == 0) { $localcommonalityratio = 0; } |
|
0
|
|
|
|
|
|
|
660
|
|
|
|
|
|
|
|
661
|
|
|
|
|
|
|
#$refreshratio = $overlapsize/$overlapminussize; ############ ZZZZ UNNEEDED |
662
|
|
|
|
|
|
|
|
663
|
0
|
0
|
|
|
|
|
if ($countblk == 0) |
|
|
0
|
|
|
|
|
|
664
|
|
|
|
|
|
|
{ |
665
|
|
|
|
|
|
|
|
666
|
0
|
|
|
|
|
|
$localcommonalityratio = 1; # |
667
|
0
|
|
|
|
|
|
$localiruifratio = 1; # THIS IS THE COMMONALITY OF THE SHADOW AT TIME STEP - 2. |
668
|
|
|
|
|
|
|
} |
669
|
|
|
|
|
|
|
elsif ($countblk > 0) |
670
|
|
|
|
|
|
|
{ |
671
|
0
|
0
|
|
|
|
|
if ( ( ( $antesize * $postsize) ** (1/2)) != 0) |
672
|
|
|
|
|
|
|
{ |
673
|
0
|
|
|
|
|
|
$localcommonalityratio = ( $overlapsize/ ( ( $antesize * $postsize) ** (1/2))); #say $tee "BEYOND4 \$localcommonalityratio: $localcommonalityratio"; #OK |
674
|
|
|
|
|
|
|
} |
675
|
0
|
|
|
|
|
|
else { print $tee "IT WAS ZERO AT DENOMINATOR OF \$localcommonalityratio.\n"; } |
676
|
|
|
|
|
|
|
|
677
|
0
|
0
|
|
|
|
|
if ( ( ( $antesize * $postsize) ** (1/2)) != 0) |
678
|
|
|
|
|
|
|
{ |
679
|
0
|
|
|
|
|
|
$localiruifratio = ( $overlapminussize / ( ( $antesize * $postsize) ** (1/2)) ); #say $tee "BEYOND4 \$localiruifratio: $localiruifratio"; ############ ZZZZ UNNEEDED # THIS IS THE COMMONALITY OF THE SHADOW AT TIME STEP - 2. |
680
|
|
|
|
|
|
|
} |
681
|
0
|
|
|
|
|
|
else { print $tee "IT WAS ZERO AT DENOMINATOR OF \$localiruifratio.\n"; } |
682
|
|
|
|
|
|
|
} |
683
|
|
|
|
|
|
|
|
684
|
0
|
0
|
|
|
|
|
if ($totalnetsize > 0) |
685
|
|
|
|
|
|
|
{ |
686
|
0
|
|
|
|
|
|
$commonalityratio = ( $totaloverlapsize / $totalnetsize ); #OK |
687
|
|
|
|
|
|
|
} |
688
|
0
|
|
|
|
|
|
$commonality_volume = ($totalnetsize * $commonalityratio); #OK |
689
|
|
|
|
|
|
|
|
690
|
0
|
0
|
|
|
|
|
if ($countblk == 0) |
|
|
0
|
|
|
|
|
|
691
|
|
|
|
|
|
|
{ |
692
|
0
|
|
|
|
|
|
$commonalityflow = $postsize ** (1/3) ; #OK |
693
|
0
|
|
|
|
|
|
$iruiflow = $postsize ** (1/3) ; #OK |
694
|
|
|
|
|
|
|
} |
695
|
|
|
|
|
|
|
elsif ($countblk > 0) |
696
|
|
|
|
|
|
|
{ |
697
|
0
|
|
|
|
|
|
$commonalityflow = ( $commonalityflow * $localcommonalityratio * $postsize) ** (1/3) ; #say $tee "BEYOND4 \$commonalityflow: $commonalityflow"; #OK # CF, Commonality Flow |
698
|
|
|
|
|
|
|
#$iruiflow = ( $iruifflow * (($localiruifratio * $postsize) ** (1/3))); ############ ZZZZ UNNEEDED |
699
|
|
|
|
|
|
|
} |
700
|
|
|
|
|
|
|
|
701
|
0
|
|
|
|
|
|
push (@commonalities, $commonalityflow);# |
702
|
0
|
|
|
|
|
|
$stdcommonality = stddev(@commonalities);# |
703
|
0
|
|
|
|
|
|
$cumulativecommonalityflow = ($cumulativecommonalityflow + $commonalityflow ); #say $tee "BEYOND4 \$cumulativecommonalityflow: $cumulativecommonalityflow"; #OK # CCF, Cumulative Commonality FLow |
704
|
0
|
|
|
|
|
|
$IRUIFurrsquare = $IRUIFurrsquare + ( $totalnetsize * ( ( $urr ) ** 2 ) ); #say $tee "BEYOND4 \$totalnetsize $totalnetsize, \$urr $urr--->>> \$IRUIFurrsquare: $IRUIFurrsquare"; #OK # IRUIF, Indicator of Recursive Usefulness of the Information Flow |
705
|
|
|
|
|
|
|
#$cumulativeiruif = ($cumulativeiruif + $iruifflow ); say $tee"BEYOND4 \$cumulativeiruif: $cumulativeiruif"; # ############ ZZZZ UNNEEDED |
706
|
|
|
|
|
|
|
|
707
|
|
|
|
|
|
|
#if ($countblk == 0) { print OUTFILEWRITE "\n"; } |
708
|
|
|
|
|
|
|
|
709
|
|
|
|
|
|
|
#print OUTFILEWRITE "$countcase,$countblk,$attachment,$activeblock,$zoneend,$pastattachment,$pastactiveblock,$pastzoneend,$antesize,$postsize,$overlap,$overlapsize,$overlapminus,$overlapminussize,$overlapsum,$overlapsumsize,$localsize,$localnetsize,$totalsize,$totaloverlapsize,$totalnetsize,$commonalityratio,$commonality_volume,$commonalityflow,$recombinationflow,$informationflow,$cumulativecommonalityflow,$cumulativerecombinationflow,$cumulativeinformationflow,$totalcommonalityflow,$totalrecombinationflow,$totalinformationflow,$addcommonalityflow,$addrecombinationflow,$addinformationflow,$recombinalityminusflow,$cumulativerecombinalityminusflow,$totalrecombinalityminusflow,$recombinalityflow,$cumulativerecombinalityflow,$totalrecombinalityflow,$renewalflow,$cumulativerenewalflow,$totalrenewalflow,$infoflow,$cumulativeinfoflow,$totalinfoflow,$refreshmentminus,$recombination_ratio,$proportionhike,$hike,$refreshment,$infflow,$cumulativeinfflow,$totalinfflow,$iruiflow,$cumulativeiruif,$totaliruif,$averageageexport,$cumulativeage,$stdage,$refreshratio,$averageagesize,$flowratio,$cumulativeflowratio,$flowageratio,$cumulativeflowageratio,$modiflow,$cumulativemodiflow,$refreshmentsize,$refreshmentperformance,$cumulativerefreshmentperformance,$refreshmentvolume,$IRUIF,$mmIRUIF,$IRUIFvolume,$mmIRUIFvolume,$hikefactor,$otherIRUIF,$othermmIRUIF,$otherIRUIFvolume,$othermmIRUIFvolume,$averageage,$steddev,$mix,$result,$mixsize,$regen,$n1_averageage,$n1_stddev,$n1_averageagesize,$mmresult,$mmregen,$novelty,$urr,$IRUIFnovelty,$IRUIFurr,$IRUIFnoveltysquare,$IRUIFurrsquare,$IRUIFnoveltycube,$IRUIFurrcube\n"; |
710
|
0
|
|
|
|
|
|
say $tee "RESULPLOT: \$countcase:$countcase,\$countblk:$countblk,\$countbuild:$countbuild,\$countchance:$countchance,\$attachment:$attachment, |
711
|
|
|
|
|
|
|
\$activeblock:$activeblock,\$zoneend:$zoneend,\$pastattachment:$pastattachment,\$pastactiveblock:$pastactiveblock,\$pastzoneend:$pastzoneend, |
712
|
|
|
|
|
|
|
\$antesize:$antesize,\$postsize:$postsize,\$overlap:$overlap,\$overlapsize:$overlapsize,\$overlapminus:$overlapminus, |
713
|
|
|
|
|
|
|
\$overlapminussize:$overlapminussize,\$overlapsum:$overlapsum,\$overlapsumsize:$overlapsumsize,\$localsize:$localsize, |
714
|
|
|
|
|
|
|
\$localnetsize:$localnetsize,\$totalsize:$totalsize,\$totaloverlapsize:$totaloverlapsize,\$totalnetsize:$totalnetsize, |
715
|
|
|
|
|
|
|
\$commonalityratio:$commonalityratio,\$commonality_volume:$commonality_volume,\$commonalityflow:$commonalityflow, |
716
|
|
|
|
|
|
|
\$cumulativecommonalityflow:$cumulativecommonalityflow,\$n1_averageage:$n1_averageage,\$novelty:$novelty,\$urr:$urr, |
717
|
|
|
|
|
|
|
\$IRUIFurrsquare:$IRUIFurrsquare,\$cumulativeiruif:$cumulativeiruif"; |
718
|
|
|
|
|
|
|
|
719
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{IRUIF} = $IRUIFurrsquare; |
720
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{commonality} = $cumulativecommonalityflow; |
721
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{novelty} = $novelty; |
722
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{totalnetsize} = $totalnetsize; |
723
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{freshness} = $n1_averageage; |
724
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{urr} = $urr; |
725
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{newblockrefs} = \@caserefs_alias; |
726
|
0
|
|
|
|
|
|
$res{$countcase}{$countbuild}{$countchance}{$countblk}{newchance} = \@chancerefs_alias; |
727
|
|
|
|
|
|
|
|
728
|
|
|
|
|
|
|
#> |
729
|
|
|
|
|
|
|
#################################################### |
730
|
|
|
|
|
|
|
|
731
|
|
|
|
|
|
|
#print TEST "\$countchance,$countchance,\$countbuild,$countbuild,\$countblockplus1,$countblockplus1,\$countblk,$countblk,\$countcase,$countcase,\$IRUIFurrsquare,$IRUIFurrsquare\n"; |
732
|
|
|
|
|
|
|
|
733
|
0
|
|
|
|
|
|
$countblk++; |
734
|
0
|
|
|
|
|
|
$countblock++; |
735
|
0
|
|
|
|
|
|
$countblockplus1++; |
736
|
|
|
|
|
|
|
} |
737
|
|
|
|
|
|
|
|
738
|
0
|
|
|
|
|
|
$countchance++; |
739
|
|
|
|
|
|
|
} |
740
|
|
|
|
|
|
|
|
741
|
|
|
|
|
|
|
sub getmax |
742
|
|
|
|
|
|
|
{ |
743
|
0
|
|
|
0
|
0
|
|
my @IRUIFcontainer; |
744
|
0
|
|
|
|
|
|
my $countc = 1; |
745
|
0
|
|
|
|
|
|
while ( $countc <= $dimchance ) |
746
|
|
|
|
|
|
|
{ |
747
|
0
|
|
|
|
|
|
push (@IRUIFcontainer, $res{$countcase}{$countbuild}{$countc}{$#caserefs_alias}{IRUIF}); #say $tee "POST-IN\@IRUIFcontainer " . dump(@IRUIFcontainer); |
748
|
0
|
|
|
|
|
|
$countc++; |
749
|
|
|
|
|
|
|
} |
750
|
0
|
|
|
|
|
|
my $maxvalue = Sim::OPT::max(@IRUIFcontainer); #say $tee "POST-IN\$maxvalue " . dump($maxvalue); |
751
|
0
|
|
|
|
|
|
return ($maxvalue); |
752
|
|
|
|
|
|
|
} |
753
|
0
|
|
|
|
|
|
my $maxvalue = getmax; #say $tee "POST-OUT\$maxvalue " . dump($maxvalue); |
754
|
|
|
|
|
|
|
|
755
|
|
|
|
|
|
|
sub pick |
756
|
|
|
|
|
|
|
{ |
757
|
0
|
|
|
0
|
0
|
|
my $maxvalue = shift; |
758
|
0
|
|
|
|
|
|
my ($beststruct, $bestchance); |
759
|
0
|
|
|
|
|
|
my $countc = 1; |
760
|
0
|
|
|
|
|
|
while ( $countc <= $dimchance ) |
761
|
|
|
|
|
|
|
{ |
762
|
|
|
|
|
|
|
#say $tee "POST-IN2\$maxvalue " . dump($maxvalue); |
763
|
|
|
|
|
|
|
#say $tee "POST-IN2\$res{\$countcase}{\$countbuild}{\$countc}{ \$#caserefs_alias } " . dump($res{$countcase}{$countbuild}{$countc}{ $#caserefs_alias }); |
764
|
0
|
0
|
|
|
|
|
if( $res{$countcase}{$countbuild}{$countc}{ $#caserefs_alias }{IRUIF} == $maxvalue ) |
765
|
|
|
|
|
|
|
{ |
766
|
0
|
|
|
|
|
|
$beststruct = $res{$countcase}{$countbuild}{$countc}{ $#caserefs_alias }{newblockrefs}; #say $tee "FOUND-INWHILE\$beststruct " . dump($beststruct); |
767
|
0
|
|
|
|
|
|
$bestchance = $res{$countcase}{$countbuild}{$countc}{ $#caserefs_alias }{newchance}; #say $tee "FOUND-INWHILE\$bestchance " . dump($bestchance); |
768
|
0
|
|
|
|
|
|
last; |
769
|
|
|
|
|
|
|
} |
770
|
0
|
|
|
|
|
|
$countc++; |
771
|
|
|
|
|
|
|
} |
772
|
0
|
|
|
|
|
|
return ($beststruct, $bestchance); |
773
|
|
|
|
|
|
|
} |
774
|
0
|
|
|
|
|
|
my @arr = pick($maxvalue); |
775
|
0
|
|
|
|
|
|
$beststruct = $arr[0]; say $tee "POST\$beststruct " . dump($beststruct); |
|
0
|
|
|
|
|
|
|
776
|
0
|
|
|
|
|
|
$bestchance = $arr[1]; say $tee "POST\$bestchance " . dump($bestchance); |
|
0
|
|
|
|
|
|
|
777
|
|
|
|
|
|
|
|
778
|
0
|
|
|
|
|
|
say $tee "PRE\@blockrefs " . dump(@blockrefs); |
779
|
0
|
|
|
|
|
|
@blockrefs = @$beststruct; say $tee "POST\@blockrefs " . dump(@blockrefs); |
|
0
|
|
|
|
|
|
|
780
|
0
|
|
|
|
|
|
say $tee "PRE\@chancerefs " . dump(@chancerefs); |
781
|
0
|
|
|
|
|
|
@chancerefs = @$bestchance; say $tee "POST\@chancerefs " . dump(@chancerefs); |
|
0
|
|
|
|
|
|
|
782
|
0
|
|
|
|
|
|
say $tee "\$res " . dump(%res); |
783
|
0
|
|
|
|
|
|
$chanceseed_[$countcase] = $bestchance; say $tee "POST\@chanceseed_ " . Dumper(@chanceseed_); |
|
0
|
|
|
|
|
|
|
784
|
0
|
|
|
|
|
|
$caseseed_[$countcase] = $beststruct; say $tee "POST\@caseseed_ " . Dumper(@caseseed_); |
|
0
|
|
|
|
|
|
|
785
|
0
|
|
|
|
|
|
@sweeps_ = Sim::OPT::fromopt_tosweep( casegroup => \@caseseed_, chancegroup => \@chanceseed_ ); say $tee "POST\@sweeps_ " . Dumper(@sweeps_); |
|
0
|
|
|
|
|
|
|
786
|
0
|
|
|
|
|
|
close TEST; |
787
|
0
|
|
|
|
|
|
close CASEFILE_PROV; |
788
|
0
|
|
|
|
|
|
close CHANCEFILE_PROV; |
789
|
|
|
|
|
|
|
|
790
|
0
|
|
|
|
|
|
$countbuild++; |
791
|
|
|
|
|
|
|
} |
792
|
0
|
|
|
|
|
|
$countcase++; |
793
|
|
|
|
|
|
|
} |
794
|
0
|
|
|
|
|
|
return (\@sweeps_, \@caseseed_, \@chanceseed_ ); |
795
|
|
|
|
|
|
|
} |
796
|
|
|
|
|
|
|
|
797
|
|
|
|
|
|
|
1; |
798
|
|
|
|
|
|
|
|
799
|
|
|
|
|
|
|
__END__ |