Skip to content

Commit

Permalink
subset no longer in-place
Browse files Browse the repository at this point in the history
  • Loading branch information
mb706 committed May 13, 2024
1 parent 5a30e7e commit 3feab6d
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 112 deletions.
99 changes: 49 additions & 50 deletions R/moc_algo.R
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
moc_algo = function(predictor, x_interest, pred_column, target, param_set, lower, upper, sdevs_num_feats,
moc_algo = function(predictor, x_interest, pred_column, target, param_set, lower, upper, sdevs_num_feats,
epsilon, fixed_features, max_changed, mu, termination_crit, n_generations, p_rec, p_rec_gen,
p_mut, p_mut_gen, p_mut_use_orig, k, weights, init_strategy, distance_function, cond_sampler = NULL,
p_mut, p_mut_gen, p_mut_use_orig, k, weights, init_strategy, distance_function, cond_sampler = NULL,
ref_point, quiet = TRUE) {

codomain = ps(
dist_target = p_dbl(tags = "minimize"),
dist_x_interest = p_dbl(tags = "minimize"),
no_changed = p_int(tags = "minimize"),
dist_train = p_dbl(tags = "minimize")
)

fitness_function = make_fitness_function(
predictor, x_interest, pred_column, target, weights, k, fixed_features, param_set, distance_function
)

flex_cols = setdiff(names(x_interest), fixed_features)
if (!is.null(sdevs_num_feats)) {
sdevs_flex_num_feats = sdevs_num_feats[names(sdevs_num_feats) %in% flex_cols]
}

param_set_flex = param_set$clone()
param_set_flex$subset(flex_cols)


param_set_flex = param_set$clone()$subset(flex_cols)

objective = bbotk::ObjectiveRFunDt$new(
fun = fitness_function,
domain = param_set_flex,
fun = fitness_function,
domain = param_set_flex,
codomain = codomain
)

if (n_generations > 0L) {
if (termination_crit == "gens") {
terminator = bbotk::trm("gens", generations = n_generations)
Expand All @@ -40,89 +39,89 @@ moc_algo = function(predictor, x_interest, pred_column, target, param_set, lower
},
include_previous_generations = TRUE,
min_delta = 0.00,
patience = n_generations),
patience = n_generations),
bbotk::trm("gens", generations = 500)
)
)
}
} else {
terminator = bbotk::trm("none")
}

oi = bbotk::OptimInstanceMultiCrit$new(
objective,
objective,
terminator = terminator
)

if (n_generations > 0L) {
# Mutator
if (is.null(cond_sampler)) {
op_m = make_moc_mutator(
ps = param_set_flex,
x_interest = x_interest,
max_changed = max_changed,
sdevs = sdevs_flex_num_feats,
ps = param_set_flex,
x_interest = x_interest,
max_changed = max_changed,
sdevs = sdevs_flex_num_feats,
p_mut = p_mut,
p_mut_gen = p_mut_gen,
p_mut_gen = p_mut_gen,
p_mut_use_orig = p_mut_use_orig
)
} else {
op_m = make_moc_conditional_mutator(
ps = param_set_flex,
ps = param_set_flex,
x_interest = x_interest,
max_changed = max_changed,
max_changed = max_changed,
p_mut = p_mut,
p_mut_gen = p_mut_gen,
p_mut_gen = p_mut_gen,
p_mut_use_orig = p_mut_use_orig,
cond_sampler = cond_sampler
)
}

# Recombinator
op_r = make_moc_recombinator(
ps = param_set_flex,
x_interest = x_interest,
max_changed = max_changed,
ps = param_set_flex,
x_interest = x_interest,
max_changed = max_changed,
p_rec = p_rec,
p_rec_gen = p_rec_gen
)

# Selectors
# TODO: Replace this by tournament selection
selobj1 = scl("one", objective = 1L)
op_parent = sel("best", selobj1)

sel_nondom_penalized = ScalorNondomPenalized$new(epsilon)
op_survival = sel("best", sel_nondom_penalized)
op_survival = sel("best", sel_nondom_penalized)

mies_prime_operators(
search_space = oi$search_space,
mutators = list(op_m),
search_space = oi$search_space,
mutators = list(op_m),
recombinators = list(op_r),
selectors = list(op_parent, op_survival)
)
)
}

pop_initializer = make_moc_pop_initializer(
ps = param_set_flex,
x_interest = x_interest,
max_changed = max_changed,
init_strategy = init_strategy,
flex_cols = flex_cols,
sdevs = sdevs_flex_num_feats,
lower = lower,
upper = upper,
ps = param_set_flex,
x_interest = x_interest,
max_changed = max_changed,
init_strategy = init_strategy,
flex_cols = flex_cols,
sdevs = sdevs_flex_num_feats,
lower = lower,
upper = upper,
predictor = predictor,
fitness_function = fitness_function,
mu = mu
)

if (quiet) {
quiet(mies_init_population(inst = oi, mu = mu, initializer = pop_initializer))
} else {
mies_init_population(inst = oi, mu = mu, initializer = pop_initializer)
}

if (n_generations > 0L) {
tryCatch({
repeat {
Expand All @@ -132,7 +131,7 @@ moc_algo = function(predictor, x_interest, pred_column, target, param_set, lower
warning = function(w){
if(grepl("no columns to delete or assign RHS to", w$message)){
invokeRestart("muffleWarning")
}
}
})
if (quiet) {
quiet(mies_evaluate_offspring(oi, offspring))
Expand All @@ -145,20 +144,20 @@ moc_algo = function(predictor, x_interest, pred_column, target, param_set, lower
})
}
bbotk::assign_result_default(oi)

# Re-attach fixed features
if (!is.null(fixed_features)) {
oi$result[, (fixed_features) := x_interest[, fixed_features, with = FALSE]]
}

# Transform factor column w.r.t to original data
factor_cols = names(which(sapply(predictor$data$X, is.factor)))
for (factor_col in factor_cols) {
fact_col_pred = predictor$data$X[[factor_col]]
value = factor(oi$result[[factor_col]], levels = levels(fact_col_pred), ordered = is.ordered(fact_col_pred))
oi$result[, (factor_col) := value]
}

int_cols = names(which(sapply(predictor$data$X, is.integer)))
if (length(int_cols) > 0L) {
oi$result[, (int_cols) := lapply(.SD, as.integer), .SDcols = int_cols]
Expand Down

0 comments on commit 3feab6d

Please sign in to comment.