public static void RunProportionExperiment(Excel.Application app, Excel.Workbook wbh, int nboots, double significance, double threshold, UserSimulation.Classification c, Random r, String outfile, long max_duration_in_ms, String logfile, ProgBar pb, bool ignore_parse_errors) { pb.setMax(5); // record intitial state of spreadsheet var prepdata = Prep.PrepSimulation(app, wbh, pb, ignore_parse_errors); // init error generator var eg = new ErrorGenerator(); // get inputs as an array of addresses to facilitate random selection // DATA INPUTS ONLY AST.Address[] inputs = prepdata.dag.terminalInputCells(); // sanity check: all of the inputs should also be in prepdata.original_inputs foreach (AST.Address addr in inputs) { if (!prepdata.original_inputs.ContainsKey(addr)) { throw new Exception("Missing address!"); } } for (int i = 0; i < 100; i++) { // randomly choose an input address AST.Address rand_addr = inputs[r.Next(inputs.Length)]; // get the value String input_value = prepdata.original_inputs[rand_addr]; // perturb it String erroneous_input = eg.GenerateErrorString(input_value, c); // create an error dictionary with this one perturbed value var errors = new CellDict(); errors.Add(rand_addr, erroneous_input); // run simulations; simulation code does insertion of errors and restore of originals RunSimulation(app, wbh, nboots, significance, threshold, c, r, outfile, max_duration_in_ms, logfile, pb, prepdata, errors); } }
public static bool RunSubletyExperiment(Excel.Application app, Excel.Workbook wbh, int nboots, double significance, double threshold, UserSimulation.Classification c, Random r, String outfile, long max_duration_in_ms, String logfile, ProgBar pb, bool ignore_parse_errors) { pb.setMax(5); // record intitial state of spreadsheet var prepdata = Prep.PrepSimulation(app, wbh, pb, ignore_parse_errors); // init error generator var eg = new ErrorGenerator(); // get inputs as an array of addresses to facilitate random selection // DATA INPUTS ONLY AST.Address[] inputs = prepdata.dag.terminalInputCells(); for (int i = 0; i < 100; i++) { // randomly choose a *numeric* input // TODO: use Fischer-Yates and take values until // either we have a satisfactory input value or none // remain var rnd_addrs = inputs.Shuffle().ToList(); bool num_found = false; String input_string; double input_value; AST.Address rand_addr; do { // randomly choose an address; if there are none left, fail if (rnd_addrs.Count == 0) { return false; } rand_addr = rnd_addrs.First(); rnd_addrs = rnd_addrs.Skip(1).ToList(); // get the value input_string = prepdata.original_inputs[rand_addr]; // try parsing it if (Double.TryParse(input_string, out input_value)) { num_found = true; } } while (!num_found); // perturb it String erroneous_input = eg.GenerateSubtleErrorString(input_value, c); // create an error dictionary with this one perturbed value var errors = new CellDict(); errors.Add(rand_addr, erroneous_input); // run simulations; simulation code does insertion of errors and restore of originals RunSimulation(app, wbh, nboots, significance, threshold, c, r, outfile, max_duration_in_ms, logfile, pb, prepdata, errors); } return true; }
// num_bootstraps: the number of bootstrap samples to get // inputs: a list of inputs; each TreeNode represents an entire input range // outputs: a list of outputs; each TreeNode represents a function public static TreeScore DataDebug(int num_bootstraps, DAG dag, Excel.Application app, bool weighted, bool all_outputs, long max_duration_in_ms, Stopwatch sw, double significance, ProgBar pb) { // this modifies the weights of each node PropagateWeights(dag); // filter out non-terminal functions var output_fns = dag.terminalFormulaNodes(all_outputs); // filter out non-terminal inputs var input_rngs = dag.terminalInputVectors(); // first idx: the index of the TreeNode in the "inputs" array // second idx: the ith bootstrap var resamples = new InputSample[input_rngs.Length][]; // RNG for sampling var rng = new Random(); // we save initial inputs and outputs here var initial_inputs = StoreInputs(input_rngs, dag); var initial_outputs = StoreOutputs(output_fns, dag); // Set progress bar max pb.setMax(input_rngs.Length * 2); #region RESAMPLE // populate bootstrap array // for each input range (a TreeNode) for (int i = 0; i < input_rngs.Length; i++) { // this TreeNode var t = input_rngs[i]; // resample resamples[i] = Resample(num_bootstraps, initial_inputs[t], rng); // update progress bar pb.IncrementProgress(); } #endregion RESAMPLE #region INFERENCE return Inference( num_bootstraps, resamples, initial_inputs, initial_outputs, input_rngs, output_fns, dag, weighted, significance, pb); #endregion INFERENCE }
public static void RunSimulationPaperMain(Excel.Application app, Excel.Workbook wbh, int nboots, double significance, double threshold, UserSimulation.Classification c, Random r, String outfile, long max_duration_in_ms, String logfile, ProgBar pb, bool ignore_parse_errors) { pb.setMax(5); // record intitial state of spreadsheet var prepdata = Prep.PrepSimulation(app, wbh, pb, ignore_parse_errors); // generate errors CellDict errors = UserSimulation.Utility.GenImportantErrors(prepdata.terminal_formula_nodes, prepdata.original_inputs, 5, prepdata.correct_outputs, app, wbh, c, prepdata.dag); // run paper simulations RunSimulation(app, wbh, nboots, significance, threshold, c, r, outfile, max_duration_in_ms, logfile, pb, prepdata, errors); }
// num_bootstraps: the number of bootstrap samples to get // inputs: a list of inputs; each TreeNode represents an entire input range // outputs: a list of outputs; each TreeNode represents a function public static TreeScore DataDebug(int num_bootstraps, DAG dag, Excel.Application app, bool weighted, bool all_outputs, long max_duration_in_ms, Stopwatch sw, double significance, ProgBar pb) { // this modifies the weights of each node PropagateWeights(dag); // filter out non-terminal functions var output_fns = dag.terminalFormulaNodes(all_outputs); // filter out non-terminal inputs var input_rngs = dag.terminalInputVectors(); // first idx: the index of the TreeNode in the "inputs" array // second idx: the ith bootstrap var resamples = new InputSample[input_rngs.Length][]; // RNG for sampling var rng = new Random(); // we save initial inputs and outputs here var initial_inputs = StoreInputs(input_rngs, dag); var initial_outputs = StoreOutputs(output_fns, dag); // Set progress bar max pb.setMax(input_rngs.Length * 2); #region RESAMPLE // populate bootstrap array // for each input range (a TreeNode) for (int i = 0; i < input_rngs.Length; i++) { // this TreeNode var t = input_rngs[i]; // resample resamples[i] = Resample(num_bootstraps, initial_inputs[t], rng); // update progress bar pb.IncrementProgress(); } #endregion RESAMPLE #region INFERENCE return(Inference( num_bootstraps, resamples, initial_inputs, initial_outputs, input_rngs, output_fns, dag, weighted, significance, pb)); #endregion INFERENCE }