def generate_valid_sobol(self, sample_size, failure_multiplier): step_size = failure_multiplier * sample_size parameters = {} info("pkeys: " + str([k for k in self.parameter_ranges.keys()])) info("axisnames: " + str([n for n in self.axis_names])) for p in self.parameter_ranges.keys(): parameters[p] = FloatVector([self.parameter_ranges[p][1] - 1.0]) parameters = DataFrame(parameters) info("Computed parameter ranges:") info(str(parameters)) r_snippet = """library(randtoolbox) library(stringr) library(tibble) ranges <- %s sobol_n <- %s sobol_dim <- %s temp_sobol <- sobol(n = sobol_n, dim = sobol_dim, scrambling = 3, seed = as.integer((99999 - 10000) * runif(1) + 10000), init = TRUE) rm(temp_sobol) gc() design <- sobol(n = sobol_n, dim = sobol_dim, scrambling = 3, seed = as.integer((99999 - 10000) * runif(1) + 10000), init = FALSE) encoded_matrix <- round(design %%*%% diag(ranges)) mode(encoded_matrix) <- "integer" encoded_design <- data.frame(encoded_matrix) names(encoded_design) <- names(ranges) range_list <- %s convert_parameters <- function(name) { encoded_design[, name] <- range_list[[name]][encoded_design[, name] + 1] } converted_design <- data.frame(sapply(names(encoded_design), convert_parameters)) constraint <- "%s" %%>%% str_replace_all(c("True and " = "TRUE & ", "==" = "== ", "<=" = "<= ", "or" = " |", "and" = "&", "\\\\*" = "\\\\* ", " \\\\)" = "\\\\)", "%%" = " %%%% ")) %%>%% rlang::parse_expr() print(str(constraint)) valid_design <- converted_design %%>%% rownames_to_column() %%>%% filter(!!!constraint) result_design <- encoded_design[valid_design$rowname, ] rm(encoded_design) rm(converted_design) rm(valid_design) gc() result_design[ , %s]""" % (parameters.r_repr(), step_size, len(self.axis_names), self.range_matrix.r_repr(), self.constraint, StrVector(self.axis_names).r_repr()) candidate_lhs = robjects.r(r_snippet) gc.collect() info("Valid Design:") info(str(self.base.summary_default(candidate_lhs))) return self.encode_data(candidate_lhs)
def validate_sample(self, sample, selected): decoded_sample = self.rsm.decode_data(sample) parameters = {} info("pkeys: " + str([k for k in self.parameter_ranges.keys()])) info("axisnames: " + str([n for n in self.axis_names])) for p in self.parameter_ranges.keys(): parameters[p] = FloatVector([self.parameter_ranges[p][1] - 1.0]) parameters = DataFrame(parameters) info("Computed parameter ranges:") info(str(parameters)) r_snippet = """ library(stringr) library(tibble) ranges <- %s print("Ranges:") print(str(ranges)) constraint <- "%s" %%>%% str_replace_all(c("True and " = "TRUE & ", "==" = "== ", "<=" = "<= ", "or" = " |", "and" = "&", "\\\\*" = "\\\\* ", " \\\\)" = "\\\\)", "%%" = " %%%% ")) %%>%% rlang::parse_expr() print(str(constraint)) sample <- %s print(str(sample)) encoded_matrix <- round(sample) print(str(encoded_matrix)) encoded_design <- data.frame(encoded_matrix) range_list <- %s convert_parameters <- function(name) { encoded_design[, name] <- range_list[[name]][encoded_design[, name] + 1] } converted_design <- data.frame(sapply(names(encoded_design), convert_parameters)) valid_sample <- converted_design %%>%% rownames_to_column() %%>%% filter(!!!constraint) valid_sample$rowname""" % (parameters.r_repr(), self.constraint, decoded_sample.r_repr(), self.range_matrix.r_repr()) valid_sample = robjects.r(r_snippet) validated_sample = sample.rx(valid_sample[1:selected], True) info("Validated Sample:") info(str(self.base.summary_default(validated_sample))) self.complete_search_space = self.base.rbind( self.complete_search_space, validated_sample) return validated_sample
def generate_valid_lhs(self, sample_size): # TODO: Expose step size as parameter! step_size = 150 * sample_size parameters = {} info("pkeys: " + str([k for k in self.parameter_ranges.keys()])) info("axisnames: " + str([n for n in self.axis_names])) for p in self.parameter_ranges.keys(): parameters[p] = FloatVector([self.parameter_ranges[p][1] - 1.0]) parameters = DataFrame(parameters) info("Computed parameter ranges:") info(str(parameters)) r_snippet = """library(DiceDesign) library(stringr) library(tibble) ranges <- %s output <- lhsDesign(n = %s, dimension = %s) design <- output$design encoded_matrix <- round(design %%*%% diag(ranges)) mode(encoded_matrix) <- "integer" encoded_design <- data.frame(encoded_matrix) names(encoded_design) <- names(ranges) range_list <- %s convert_parameters <- function(name) { encoded_design[, name] <- range_list[[name]][encoded_design[, name] + 1] } converted_design <- data.frame(sapply(names(encoded_design), convert_parameters)) constraint <- "%s" %%>%% str_replace_all(c("True and " = "TRUE & ", "==" = "== ", "<=" = "<= ", "or" = " |", "and" = "&", "\\\\*" = "\\\\* ", " \\\\)" = "\\\\)", "%%" = " %%%% ")) %%>%% rlang::parse_expr() print(str(constraint)) valid_design <- converted_design %%>%% rownames_to_column() %%>%% filter(!!!constraint) encoded_design <- encoded_design[valid_design$rowname, ] encoded_design[ , %s]""" % ( parameters.r_repr(), step_size, len( self.axis_names), self.range_matrix.r_repr(), self.constraint, StrVector(self.axis_names).r_repr()) candidate_lhs = robjects.r(r_snippet) info("Candidate LHS:") info(str(self.base.summary_default(candidate_lhs))) return self.encode_data(candidate_lhs)