mirror of
https://github.com/nasa/trick.git
synced 2024-12-18 20:57:55 +00:00
MonteCarloGenerate: Provide more metadata on dispersions (#1608)
* Add type, dispersion, min_value, max_value and other relevant internal members of MonteCarloVariable* classes to the output of MonteCarlo_Meta_data_output. Motivation is for users wanting to post-process dispersion parameters used during generation of runs * Protect against invalid memory access when length of values is zero in MonteCarloVariableRandomStringSet::generate_assignment(). Add a new verif sim warning case to cover these new lines * Update new verif data for SIM_mc_generation to support these changes Closes #1574 Co-authored-by: Dan Jordan <daniel.d.jordan@nasa.gov>
This commit is contained in:
parent
9ead0a28be
commit
483cacfafd
@ -65,8 +65,10 @@ class MonteCarloVariable
|
|||||||
const std::string & get_command() const {return command;}
|
const std::string & get_command() const {return command;}
|
||||||
const std::string & get_variable_name() const {return variable_name;}
|
const std::string & get_variable_name() const {return variable_name;}
|
||||||
const std::string & get_assignment() const {return assignment;}
|
const std::string & get_assignment() const {return assignment;}
|
||||||
MonteCarloVariableType get_type() const {return type;}
|
virtual MonteCarloVariableType get_type() const {return type;}
|
||||||
|
virtual std::string get_type_str() const;
|
||||||
virtual unsigned int get_seed() const {return 0;}
|
virtual unsigned int get_seed() const {return 0;}
|
||||||
|
virtual std::string summarize_variable() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void insert_units();
|
void insert_units();
|
||||||
|
@ -68,6 +68,8 @@ class MonteCarloVariableFile : public MonteCarloVariable
|
|||||||
virtual ~MonteCarloVariableFile(){};
|
virtual ~MonteCarloVariableFile(){};
|
||||||
void initialize_file();
|
void initialize_file();
|
||||||
void generate_assignment();
|
void generate_assignment();
|
||||||
|
virtual std::string summarize_variable() const;
|
||||||
|
|
||||||
void register_dependent( MonteCarloVariableFile *);
|
void register_dependent( MonteCarloVariableFile *);
|
||||||
virtual void shutdown() {file.close();}
|
virtual void shutdown() {file.close();}
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ class MonteCarloVariableRandom : public MonteCarloVariable
|
|||||||
virtual ~MonteCarloVariableRandom(){};
|
virtual ~MonteCarloVariableRandom(){};
|
||||||
unsigned int get_seed() const {return seed_m;} // override but SWIG cannot process the
|
unsigned int get_seed() const {return seed_m;} // override but SWIG cannot process the
|
||||||
// override keyword
|
// override keyword
|
||||||
|
|
||||||
private: // and undefined:
|
private: // and undefined:
|
||||||
MonteCarloVariableRandom( const MonteCarloVariableRandom & );
|
MonteCarloVariableRandom( const MonteCarloVariableRandom & );
|
||||||
MonteCarloVariableRandom& operator = (const MonteCarloVariableRandom&);
|
MonteCarloVariableRandom& operator = (const MonteCarloVariableRandom&);
|
||||||
|
@ -44,6 +44,7 @@ class MonteCarloVariableRandomNormal : public MonteCarloVariableRandom
|
|||||||
|
|
||||||
virtual ~MonteCarloVariableRandomNormal(){};
|
virtual ~MonteCarloVariableRandomNormal(){};
|
||||||
virtual void generate_assignment();
|
virtual void generate_assignment();
|
||||||
|
virtual std::string summarize_variable() const;
|
||||||
void truncate(double limit, TruncationType type = StandardDeviation);
|
void truncate(double limit, TruncationType type = StandardDeviation);
|
||||||
void truncate(double min, double max, TruncationType type = StandardDeviation);
|
void truncate(double min, double max, TruncationType type = StandardDeviation);
|
||||||
void truncate_low(double limit, TruncationType type = StandardDeviation);
|
void truncate_low(double limit, TruncationType type = StandardDeviation);
|
||||||
|
@ -43,6 +43,7 @@ class MonteCarloVariableRandomStringSet : public MonteCarloVariableRandomUniform
|
|||||||
|
|
||||||
virtual ~MonteCarloVariableRandomStringSet(){};
|
virtual ~MonteCarloVariableRandomStringSet(){};
|
||||||
virtual void generate_assignment();
|
virtual void generate_assignment();
|
||||||
|
virtual std::string summarize_variable() const;
|
||||||
void add_string(std::string);
|
void add_string(std::string);
|
||||||
private: // and undefined:
|
private: // and undefined:
|
||||||
MonteCarloVariableRandomStringSet(const MonteCarloVariableRandomStringSet&);
|
MonteCarloVariableRandomStringSet(const MonteCarloVariableRandomStringSet&);
|
||||||
|
@ -35,6 +35,7 @@ class MonteCarloVariableRandomUniform : public MonteCarloVariableRandom
|
|||||||
double upper_bound = 1.0);
|
double upper_bound = 1.0);
|
||||||
virtual ~MonteCarloVariableRandomUniform(){};
|
virtual ~MonteCarloVariableRandomUniform(){};
|
||||||
virtual void generate_assignment();
|
virtual void generate_assignment();
|
||||||
|
virtual std::string summarize_variable() const;
|
||||||
private: // and undefined:
|
private: // and undefined:
|
||||||
MonteCarloVariableRandomUniform( const MonteCarloVariableRandomUniform & );
|
MonteCarloVariableRandomUniform( const MonteCarloVariableRandomUniform & );
|
||||||
MonteCarloVariableRandomUniform& operator = (
|
MonteCarloVariableRandomUniform& operator = (
|
||||||
@ -59,6 +60,7 @@ class MonteCarloVariableRandomUniformInt : public MonteCarloVariableRandom
|
|||||||
double upper_bound = 1);
|
double upper_bound = 1);
|
||||||
virtual ~MonteCarloVariableRandomUniformInt(){};
|
virtual ~MonteCarloVariableRandomUniformInt(){};
|
||||||
virtual void generate_assignment();
|
virtual void generate_assignment();
|
||||||
|
virtual std::string summarize_variable() const;
|
||||||
private: // and undefined:
|
private: // and undefined:
|
||||||
MonteCarloVariableRandomUniformInt(const MonteCarloVariableRandomUniformInt&);
|
MonteCarloVariableRandomUniformInt(const MonteCarloVariableRandomUniformInt&);
|
||||||
MonteCarloVariableRandomUniformInt& operator = (
|
MonteCarloVariableRandomUniformInt& operator = (
|
||||||
|
19
test/SIM_mc_generation/RUN_WARN_no_string_values/input.py
Normal file
19
test/SIM_mc_generation/RUN_WARN_no_string_values/input.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
monte_carlo.mc_master.activate("RUN_WARN_no_string_values")
|
||||||
|
monte_carlo.mc_master.set_num_runs(1)
|
||||||
|
|
||||||
|
print('*********************************************************************************')
|
||||||
|
print('this message is expected:')
|
||||||
|
print('No values for MonteCarloVariableRandomStringSet')
|
||||||
|
print('Length of values vector is zero for variable: test.x_string, Did you forget to call add_string()?')
|
||||||
|
print('*********************************************************************************')
|
||||||
|
|
||||||
|
|
||||||
|
# add a string variable but forget to give it options to randomize
|
||||||
|
mc_var = trick.MonteCarloVariableRandomStringSet( "test.x_string", 3)
|
||||||
|
#mc_var.add_string("\"ABC\"")
|
||||||
|
#mc_var.add_string("\"DEF\"")
|
||||||
|
#mc_var.add_string("'GHIJKL'")
|
||||||
|
mc_var.thisown = False
|
||||||
|
monte_carlo.mc_master.add_variable(mc_var)
|
||||||
|
monte_carlo.mc_master.generate_meta_data = True
|
||||||
|
|
@ -10,32 +10,32 @@
|
|||||||
- 0 variables of undefined type
|
- 0 variables of undefined type
|
||||||
|
|
||||||
********************* LIST OF VARIABLES, TYPES****************
|
********************* LIST OF VARIABLES, TYPES****************
|
||||||
test.x_boolean, Random
|
test.x_boolean: type=Random, dispersion=Uniform, min_value=0, max_value=1, seed=4, values=[False,True,]
|
||||||
test.x_file_lookup[0], Prescribed
|
test.x_file_lookup[0]: type=Prescribed, max_skip=0, is_dependent=0, filename=Modified_data/datafile.txt, column_number=3, first_column_number=1
|
||||||
test.x_file_lookup[1], Prescribed
|
test.x_file_lookup[1]: type=Prescribed, max_skip=0, is_dependent=1, filename=Modified_data/datafile.txt, column_number=2, first_column_number=1
|
||||||
test.x_file_lookup[2], Prescribed
|
test.x_file_lookup[2]: type=Prescribed, max_skip=0, is_dependent=1, filename=Modified_data/datafile.txt, column_number=1, first_column_number=1
|
||||||
test.x_fixed_value_double, Constant
|
test.x_fixed_value_double: type=Constant
|
||||||
test.x_fixed_value_int, Constant
|
test.x_fixed_value_int: type=Constant
|
||||||
test.x_fixed_value_string, Constant
|
test.x_fixed_value_string: type=Constant
|
||||||
test.x_integer, Random
|
test.x_integer: type=Random dispersion=Uniform, min_value=0, max_value=2, seed=1
|
||||||
test.x_line_command, Calculated
|
test.x_line_command: type=Calculated
|
||||||
test.x_normal, Random
|
test.x_normal: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=0, max_value=0, seed=2
|
||||||
test.x_normal_length, Random
|
test.x_normal_length: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=0, max_value=0, seed=2
|
||||||
test.x_normal_trunc[0], Random
|
test.x_normal_trunc[0]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9, max_value=11, seed=2
|
||||||
test.x_normal_trunc[1], Random
|
test.x_normal_trunc[1]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9.5, max_value=10.7, seed=2
|
||||||
test.x_normal_trunc[2], Random
|
test.x_normal_trunc[2]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9.9, max_value=11, seed=2
|
||||||
test.x_normal_trunc[3], Random
|
test.x_normal_trunc[3]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9.9, max_value=0, seed=2
|
||||||
test.x_normal_trunc[4], Random
|
test.x_normal_trunc[4]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=0, max_value=4, seed=2
|
||||||
test.x_semi_fixed_value, Constant
|
test.x_semi_fixed_value: type=Constant
|
||||||
test.x_string, Random
|
test.x_string: type=Random, dispersion=Uniform, min_value=0, max_value=1, seed=3, values=["ABC","DEF",'GHIJKL',]
|
||||||
test.x_uniform, Random
|
test.x_uniform: type=Random, dispersion=Uniform, min_value=10, max_value=20, seed=0
|
||||||
**************************************************************
|
**************************************************************
|
||||||
|
|
||||||
|
|
||||||
*********** LIST OF EXECUTABLE FILES AND FUNCTIONS ***********
|
*********** LIST OF EXECUTABLE FILES AND FUNCTIONS ***********
|
||||||
test.standalone_function( test.x_normal)
|
test.standalone_function( test.x_normal): type=Execute
|
||||||
***
|
***
|
||||||
Modified_data/sample.py
|
Modified_data/sample.py: type=Execute
|
||||||
***
|
***
|
||||||
**************************************************************
|
**************************************************************
|
||||||
|
|
||||||
|
@ -14,32 +14,32 @@ Sending meta-data to top-level directory.
|
|||||||
- 0 variables of undefined type
|
- 0 variables of undefined type
|
||||||
|
|
||||||
********************* LIST OF VARIABLES, TYPES****************
|
********************* LIST OF VARIABLES, TYPES****************
|
||||||
test.x_boolean, Random
|
test.x_boolean: type=Random, dispersion=Uniform, min_value=0, max_value=1, seed=4, values=[False,True,]
|
||||||
test.x_file_lookup[0], Prescribed
|
test.x_file_lookup[0]: type=Prescribed, max_skip=0, is_dependent=0, filename=Modified_data/datafile.txt, column_number=3, first_column_number=1
|
||||||
test.x_file_lookup[1], Prescribed
|
test.x_file_lookup[1]: type=Prescribed, max_skip=0, is_dependent=1, filename=Modified_data/datafile.txt, column_number=2, first_column_number=1
|
||||||
test.x_file_lookup[2], Prescribed
|
test.x_file_lookup[2]: type=Prescribed, max_skip=0, is_dependent=1, filename=Modified_data/datafile.txt, column_number=1, first_column_number=1
|
||||||
test.x_fixed_value_double, Constant
|
test.x_fixed_value_double: type=Constant
|
||||||
test.x_fixed_value_int, Constant
|
test.x_fixed_value_int: type=Constant
|
||||||
test.x_fixed_value_string, Constant
|
test.x_fixed_value_string: type=Constant
|
||||||
test.x_integer, Random
|
test.x_integer: type=Random dispersion=Uniform, min_value=0, max_value=2, seed=1
|
||||||
test.x_line_command, Calculated
|
test.x_line_command: type=Calculated
|
||||||
test.x_normal, Random
|
test.x_normal: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=0, max_value=0, seed=2
|
||||||
test.x_normal_length, Random
|
test.x_normal_length: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=0, max_value=0, seed=2
|
||||||
test.x_normal_trunc[0], Random
|
test.x_normal_trunc[0]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9, max_value=11, seed=2
|
||||||
test.x_normal_trunc[1], Random
|
test.x_normal_trunc[1]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9.5, max_value=10.7, seed=2
|
||||||
test.x_normal_trunc[2], Random
|
test.x_normal_trunc[2]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9.9, max_value=11, seed=2
|
||||||
test.x_normal_trunc[3], Random
|
test.x_normal_trunc[3]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=9.9, max_value=0, seed=2
|
||||||
test.x_normal_trunc[4], Random
|
test.x_normal_trunc[4]: type=Random, dispersion=Normal, mean=10, stddev=2, min_value=0, max_value=4, seed=2
|
||||||
test.x_semi_fixed_value, Constant
|
test.x_semi_fixed_value: type=Constant
|
||||||
test.x_string, Random
|
test.x_string: type=Random, dispersion=Uniform, min_value=0, max_value=1, seed=3, values=["ABC","DEF",'GHIJKL',]
|
||||||
test.x_uniform, Random
|
test.x_uniform: type=Random, dispersion=Uniform, min_value=10, max_value=20, seed=0
|
||||||
**************************************************************
|
**************************************************************
|
||||||
|
|
||||||
|
|
||||||
*********** LIST OF EXECUTABLE FILES AND FUNCTIONS ***********
|
*********** LIST OF EXECUTABLE FILES AND FUNCTIONS ***********
|
||||||
test.standalone_function( test.x_normal)
|
test.standalone_function( test.x_normal): type=Execute
|
||||||
***
|
***
|
||||||
Modified_data/sample.py
|
Modified_data/sample.py: type=Execute
|
||||||
***
|
***
|
||||||
**************************************************************
|
**************************************************************
|
||||||
|
|
||||||
|
@ -447,6 +447,9 @@ SIM_mc_generation:
|
|||||||
RUN_WARN_overconstrained_config/input.py:
|
RUN_WARN_overconstrained_config/input.py:
|
||||||
compare:
|
compare:
|
||||||
phase: -1
|
phase: -1
|
||||||
|
RUN_WARN_no_string_values/input.py:
|
||||||
|
compare:
|
||||||
|
phase: -1
|
||||||
MONTE_RUN_WARN_overconstrained_config/RUN_0/monte_input.py:
|
MONTE_RUN_WARN_overconstrained_config/RUN_0/monte_input.py:
|
||||||
FAIL_config_error/input.py:
|
FAIL_config_error/input.py:
|
||||||
returns: 1
|
returns: 1
|
||||||
|
@ -441,7 +441,7 @@ MonteCarloMaster::collate_meta_data()
|
|||||||
|
|
||||||
// Capture and alphabetize all variable names with their respective variable
|
// Capture and alphabetize all variable names with their respective variable
|
||||||
// type; count the number of each type.
|
// type; count the number of each type.
|
||||||
std::list< std::string > variable_names;
|
std::list< std::string > variable_details;
|
||||||
std::list< std::string > exec_file_names;
|
std::list< std::string > exec_file_names;
|
||||||
std::list< std::pair < unsigned int, std::string> > random_variables;
|
std::list< std::pair < unsigned int, std::string> > random_variables;
|
||||||
unsigned int count_calc = 0;
|
unsigned int count_calc = 0;
|
||||||
@ -456,27 +456,27 @@ MonteCarloMaster::collate_meta_data()
|
|||||||
// Unreachable case in current implementation.
|
// Unreachable case in current implementation.
|
||||||
// All current variable classes have been given a "type"
|
// All current variable classes have been given a "type"
|
||||||
default:
|
default:
|
||||||
variable_names.push_back (var_it->get_variable_name() + ", Undefined_type");
|
variable_details.push_back(var_it->summarize_variable());
|
||||||
count_undef++;
|
count_undef++;
|
||||||
break;
|
break;
|
||||||
case MonteCarloVariable::Calculated:
|
case MonteCarloVariable::Calculated:
|
||||||
variable_names.push_back (var_it->get_variable_name() + ", Calculated");
|
variable_details.push_back (var_it->summarize_variable());
|
||||||
count_calc++;
|
count_calc++;
|
||||||
break;
|
break;
|
||||||
case MonteCarloVariable::Constant:
|
case MonteCarloVariable::Constant:
|
||||||
variable_names.push_back (var_it->get_variable_name() + ", Constant");
|
variable_details.push_back (var_it->summarize_variable());
|
||||||
count_const++;
|
count_const++;
|
||||||
break;
|
break;
|
||||||
case MonteCarloVariable::Execute:
|
case MonteCarloVariable::Execute:
|
||||||
exec_file_names.push_back (var_it->get_variable_name());
|
exec_file_names.push_back (var_it->summarize_variable());
|
||||||
count_exec++;
|
count_exec++;
|
||||||
break;
|
break;
|
||||||
case MonteCarloVariable::Prescribed:
|
case MonteCarloVariable::Prescribed:
|
||||||
variable_names.push_back (var_it->get_variable_name() + ", Prescribed");
|
variable_details.push_back (var_it->summarize_variable());
|
||||||
count_presc++;
|
count_presc++;
|
||||||
break;
|
break;
|
||||||
case MonteCarloVariable::Random:
|
case MonteCarloVariable::Random:
|
||||||
variable_names.push_back (var_it->get_variable_name() + ", Random");
|
variable_details.push_back (var_it->summarize_variable());
|
||||||
count_rand++;
|
count_rand++;
|
||||||
std::pair< unsigned int, std::string> var(var_it->get_seed(),
|
std::pair< unsigned int, std::string> var(var_it->get_seed(),
|
||||||
var_it->get_variable_name());
|
var_it->get_variable_name());
|
||||||
@ -484,7 +484,7 @@ MonteCarloMaster::collate_meta_data()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
variable_names.sort();
|
variable_details.sort();
|
||||||
|
|
||||||
meta_data <<
|
meta_data <<
|
||||||
"\n\n*************************** SUMMARY **************************\n" <<
|
"\n\n*************************** SUMMARY **************************\n" <<
|
||||||
@ -497,8 +497,8 @@ MonteCarloMaster::collate_meta_data()
|
|||||||
count_undef << " variables of undefined type" <<
|
count_undef << " variables of undefined type" <<
|
||||||
"\n\n********************* LIST OF VARIABLES, TYPES****************\n";
|
"\n\n********************* LIST OF VARIABLES, TYPES****************\n";
|
||||||
|
|
||||||
std::list< std::string >::iterator var_name_it = variable_names.begin();
|
std::list< std::string >::iterator var_name_it = variable_details.begin();
|
||||||
for (; var_name_it != variable_names.end(); ++var_name_it) {
|
for (; var_name_it != variable_details.end(); ++var_name_it) {
|
||||||
meta_data << (*var_name_it) << "\n";
|
meta_data << (*var_name_it) << "\n";
|
||||||
}
|
}
|
||||||
meta_data <<
|
meta_data <<
|
||||||
|
@ -116,3 +116,48 @@ MonteCarloVariable::generate_command()
|
|||||||
{
|
{
|
||||||
command = "\n" + variable_name + " = " + assignment;
|
command = "\n" + variable_name + " = " + assignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
get_type_str
|
||||||
|
Purpose:(Return the type of this variable as string. Meant to be overridden
|
||||||
|
by derived classes)
|
||||||
|
*****************************************************************************/
|
||||||
|
std::string MonteCarloVariable::get_type_str() const
|
||||||
|
{
|
||||||
|
switch (get_type()) {
|
||||||
|
// Unreachable case in current implementation.
|
||||||
|
// All current variable classes have been given a "type"
|
||||||
|
default:
|
||||||
|
return(std::string("Undefined_type"));
|
||||||
|
break;
|
||||||
|
case MonteCarloVariable::Calculated:
|
||||||
|
return(std::string("Calculated"));
|
||||||
|
break;
|
||||||
|
case MonteCarloVariable::Constant:
|
||||||
|
return(std::string("Constant"));
|
||||||
|
break;
|
||||||
|
case MonteCarloVariable::Execute:
|
||||||
|
return(std::string("Execute"));
|
||||||
|
break;
|
||||||
|
case MonteCarloVariable::Prescribed:
|
||||||
|
return(std::string("Prescribed"));
|
||||||
|
break;
|
||||||
|
case MonteCarloVariable::Random:
|
||||||
|
return(std::string("Random"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
summarize_variable
|
||||||
|
Purpose:(Provide a string summarizing the attributes of this MonteCarloVariable)
|
||||||
|
*****************************************************************************/
|
||||||
|
std::string MonteCarloVariable::summarize_variable() const
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << variable_name << std::string(": type=") << get_type_str();
|
||||||
|
return (ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -271,3 +271,17 @@ bool MonteCarloVariableFile::sort_by_col_num(
|
|||||||
{
|
{
|
||||||
return left->get_column_number() < right->get_column_number();
|
return left->get_column_number() < right->get_column_number();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
summarize_variable
|
||||||
|
Purpose:(Provide a string summarizing the attributes of this MonteCarloVariable)
|
||||||
|
*****************************************************************************/
|
||||||
|
std::string MonteCarloVariableFile::summarize_variable() const
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << MonteCarloVariable::summarize_variable()
|
||||||
|
<< ", max_skip=" << max_skip << ", is_dependent=" << is_dependent
|
||||||
|
<< ", filename=" << filename << ", column_number=" << column_number
|
||||||
|
<< ", first_column_number=" << first_column_number;
|
||||||
|
return (ss.str());
|
||||||
|
}
|
||||||
|
@ -16,6 +16,7 @@ PROGRAMMERS:
|
|||||||
#include <limits>
|
#include <limits>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <sstream> // ostringstream
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
Constructor
|
Constructor
|
||||||
@ -105,6 +106,19 @@ MonteCarloVariableRandomNormal::generate_assignment()
|
|||||||
assign_double(assignment_d);
|
assign_double(assignment_d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
summarize_variable
|
||||||
|
Purpose:(Provide a string summarizing the attributes of this MonteCarloVariable)
|
||||||
|
*****************************************************************************/
|
||||||
|
std::string MonteCarloVariableRandomNormal::summarize_variable() const
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << MonteCarloVariable::summarize_variable() << std::string(", dispersion=Normal")
|
||||||
|
<< ", mean=" << distribution.mean() << ", stddev=" << distribution.stddev()
|
||||||
|
<< ", min_value=" << min_value << ", max_value=" << max_value
|
||||||
|
<< ", seed=" << seed_m;
|
||||||
|
return (ss.str());
|
||||||
|
}
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
truncate
|
truncate
|
||||||
Purpose:(Truncates the normal distribution to be within +- limit.)
|
Purpose:(Truncates the normal distribution to be within +- limit.)
|
||||||
|
@ -8,6 +8,10 @@ PROGRAMMERS:
|
|||||||
(((Gary Turner) (OSR) (October 2019) (Antares) (Initial)))
|
(((Gary Turner) (OSR) (October 2019) (Antares) (Initial)))
|
||||||
(((Isaac Reaves) (NASA) (November 2022) (Integration into Trick Core)))
|
(((Isaac Reaves) (NASA) (November 2022) (Integration into Trick Core)))
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
#include <sstream> // ostringstream
|
||||||
|
#include "trick/message_type.h"
|
||||||
|
#include "trick/message_proto.h"
|
||||||
|
#include "trick/exec_proto.h"
|
||||||
#include "trick/mc_variable_random_string.hh"
|
#include "trick/mc_variable_random_string.hh"
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
@ -32,14 +36,47 @@ Purpose:(pick one string at random)
|
|||||||
void
|
void
|
||||||
MonteCarloVariableRandomStringSet::generate_assignment()
|
MonteCarloVariableRandomStringSet::generate_assignment()
|
||||||
{
|
{
|
||||||
// generate a random number on the interval [0,1)
|
// Protect against accessing 0th index of an empty list. In this case,
|
||||||
double pre_ix = distribution(random_generator);
|
// generate_command() is never called
|
||||||
// convert to an integer between 0 and max-index of the "values" vector.
|
if (values.size() > 0) {
|
||||||
size_t ix = static_cast<size_t> (pre_ix * values.size());
|
// generate a random number on the interval [0,1)
|
||||||
// send the string at that index to the command-generation.
|
double pre_ix = distribution(random_generator);
|
||||||
assignment = values[ix];
|
// convert to an integer between 0 and max-index of the "values" vector.
|
||||||
generate_command();
|
size_t ix = static_cast<size_t> (pre_ix * values.size());
|
||||||
|
// send the string at that index to the command-generation.
|
||||||
|
// TODO: This fales if values.size() is zero!!!
|
||||||
|
assignment = values[ix];
|
||||||
|
generate_command();
|
||||||
|
} else {
|
||||||
|
std::string message =
|
||||||
|
std::string("File: ") + __FILE__ + ", Line: " +
|
||||||
|
std::to_string(__LINE__) + ", No values for MonteCarloVariableRandomStringSet\n"
|
||||||
|
"Length of values vector is zero for variable: " + variable_name + ", Did " +
|
||||||
|
"you forget to call add_string()?\n";
|
||||||
|
message_publish(MSG_WARNING, message.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
/*****************************************************************************
|
||||||
|
summarize_variable
|
||||||
|
Purpose:(Provide a string summarizing the attributes of this MonteCarloVariable)
|
||||||
|
*****************************************************************************/
|
||||||
|
std::string MonteCarloVariableRandomStringSet::summarize_variable() const
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
// TODO: Here we create a string in [val1, val2, ... ] form, but this is
|
||||||
|
// ambigious because if there's a comma in any value, parsing the resultant
|
||||||
|
// string from the MonteCarlo_Meta_data_output file could fail. What delimter
|
||||||
|
// or approach would be better? -Jordan 10/2023
|
||||||
|
ss << MonteCarloVariableRandomUniform::summarize_variable() << ", values=[";
|
||||||
|
if (values.size() > 0) {
|
||||||
|
for (auto val_it : values) {
|
||||||
|
ss << val_it << ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ss << "]";
|
||||||
|
return (ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
add_string
|
add_string
|
||||||
Purpose:(Adds an option to the set of strings)
|
Purpose:(Adds an option to the set of strings)
|
||||||
@ -64,3 +101,4 @@ MonteCarloVariableRandomStringSet::add_string( std::string new_string)
|
|||||||
{
|
{
|
||||||
values.push_back(new_string);
|
values.push_back(new_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ PROGRAMMERS:
|
|||||||
(((Gary Turner) (OSR) (October 2019) (Antares) (Initial)))
|
(((Gary Turner) (OSR) (October 2019) (Antares) (Initial)))
|
||||||
(((Isaac Reaves) (NASA) (November 2022) (Integration into Trick Core)))
|
(((Isaac Reaves) (NASA) (November 2022) (Integration into Trick Core)))
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
#include <sstream> // ostringstream
|
||||||
#include "trick/mc_variable_random_uniform.hh"
|
#include "trick/mc_variable_random_uniform.hh"
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
@ -33,6 +34,18 @@ MonteCarloVariableRandomUniform::generate_assignment()
|
|||||||
assign_double(distribution(random_generator));
|
assign_double(distribution(random_generator));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
summarize_variable
|
||||||
|
Purpose:(Provide a string summarizing the attributes of this MonteCarloVariable)
|
||||||
|
*****************************************************************************/
|
||||||
|
std::string MonteCarloVariableRandomUniform::summarize_variable() const
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << MonteCarloVariable::summarize_variable() << std::string(", dispersion=Uniform")
|
||||||
|
<< ", min_value=" << distribution.min() << ", max_value=" << distribution.max()
|
||||||
|
<< ", seed=" << seed_m;
|
||||||
|
return (ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -59,3 +72,15 @@ MonteCarloVariableRandomUniformInt::generate_assignment()
|
|||||||
{
|
{
|
||||||
assign_int(distribution(random_generator));
|
assign_int(distribution(random_generator));
|
||||||
}
|
}
|
||||||
|
/*****************************************************************************
|
||||||
|
summarize_variable
|
||||||
|
Purpose:(Provide a string summarizing the attributes of this MonteCarloVariable)
|
||||||
|
*****************************************************************************/
|
||||||
|
std::string MonteCarloVariableRandomUniformInt::summarize_variable() const
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << MonteCarloVariable::summarize_variable() << std::string(" dispersion=Uniform,")
|
||||||
|
<< " min_value=" << distribution.min() << ", max_value=" << distribution.max()
|
||||||
|
<< ", seed=" << seed_m;
|
||||||
|
return (ss.str());
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user