示例#1
0
    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)
示例#2
0
    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
示例#3
0
    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)