diff --git a/few/_version.py b/few/_version.py index 123755b..c65dc2f 100644 --- a/few/_version.py +++ b/few/_version.py @@ -6,4 +6,4 @@ """ -__version__ = '0.0.44' +__version__ = '0.0.45' diff --git a/few/few.py b/few/few.py index 76bc9a5..cd220fd 100644 --- a/few/few.py +++ b/few/few.py @@ -60,7 +60,7 @@ def __init__(self, population_size=50, generations=100, scoring_function=None, disable_update_check=False, elitism=True, boolean = False,classification=False,clean=False, track_diversity=False,mdr=False,otype='f',c=True, - weight_parents=True,operators=None): + weight_parents=True,operators=None, lex_size=False): # sets up GP. # Save params to be recalled later by get_params() @@ -95,6 +95,7 @@ def __init__(self, population_size=50, generations=100, self.op_weight = op_weight self.max_stall = max_stall self.weight_parents = weight_parents + self.lex_size = lex_size self.seed_with_ml = seed_with_ml self.erc = erc self.random_state = check_random_state(random_state) @@ -726,6 +727,9 @@ def main(): dest='WEIGHT_PARENTS',default=True, help='Feature importance weights parent selection.') + parser.add_argument('--lex_size', action='store_true',dest='LEX_SIZE',default=False, + help='Size mediated parent selection for lexicase survival.') + parser.add_argument('-sel', action='store', dest='SEL', default='epsilon_lexicase', choices = ['tournament','lexicase','epsilon_lexicase', @@ -857,7 +861,7 @@ def main(): fit_choice = args.FIT_CHOICE,boolean=args.BOOLEAN, classification=args.CLASSIFICATION,clean = args.CLEAN, track_diversity=args.TRACK_DIVERSITY,mdr=args.MDR, - otype=args.OTYPE,c=args.c, + otype=args.OTYPE,c=args.c, lex_size = args.LEX_SIZE, weight_parents = args.WEIGHT_PARENTS,operators=args.OPS) learner.fit(training_features, training_labels) diff --git a/few/lib/epsilon_lexicase.h b/few/lib/epsilon_lexicase.h index e9e7b97..2583571 100644 --- a/few/lib/epsilon_lexicase.h +++ b/few/lib/epsilon_lexicase.h @@ -81,7 +81,7 @@ static random_device rd; static mt19937 gen(rd()); //extern "C" void epsilon_lexicase(const ExtMat & F, int n, int d, - int num_selections, ExtVec& locs) + int num_selections, ExtVec& locs, bool lex_size, ExtVec& sizes) { // training cases // ExtMat T (F, n, d); @@ -96,15 +96,28 @@ void epsilon_lexicase(const ExtMat & F, int n, int d, for (int i = 0; i ind_locs(n); - iota(ind_locs.begin(),ind_locs.end(),0); + vector ind_locs; + if(lex_size){ + //randomly select a size from sizes + int max_index = sizes.size(); + int random_index = rand() % max_index; + + // individual locations + int j=0; + for(int i=0;i winner; - for (int i = 0; i