Identification

Functions for material parameter identification using optimization algorithms (genetic algorithms, gradient-based methods, etc.).

arma::mat doe_uniform(const int&, const int&, const std::vector<parameters>&)
arma::mat doe_uniform_limit(const int&, const int&, const std::vector<parameters>&)
arma::mat doe_random(const int&, const int&, const std::vector<parameters>&)
void gen_initialize(generation&, int&, int&, int&, const int&, const int&, const std::vector<parameters>&, const double&)
void run_identification(const std::string&, const int&, const int&, const int&, const int&, const int&, int&, int&, const int&, const int&, const int& = 6, const double& = 1.E-12, const std::string& = "data/", const std::string& = "keys/", const std::string& = "results/", const std::string& = "material.dat", const std::string& = "id_params.txt", const std::string& = "simul.txt", const double& = 5, const double& = 0.01, const double& = 0.001, const double& = 10, const double& = 0.01)
void genetic(generation&, generation&, int&, const double&, const double&, const std::vector<parameters>&)
void to_run(generation&, generation&, generation&, const double&, const std::vector<parameters>&)

Genrun creation.

void find_best(generation&, generation&, const generation&, const generation&, const generation&, const int&, const int&, int&)
void write_results(std::ofstream&, const std::string &outputfile, const generation&, const int&, const int&, const int&)
arma::vec calcV(const std::vector<opti_data>&, const std::vector<opti_data>&, const int&, const int&)

This function constructs the vector of exp/num.

void calcS(arma::mat&, const arma::vec&, const arma::vec&, const int&, const arma::vec&)

This function constructs the sensitivity matrix.

arma::Col<int> checkS(const arma::mat&)

This function checks the sensitivity matrix. This ensures that if a parameter didn’t modify at all the result, the sensibility matrix doesn’t have a column of “0” (inversion) issues

arma::mat reduce_S(const arma::mat&, const arma::Col<int>&)
double calcC(const arma::vec&, arma::vec&, const arma::vec&)

This function computes the Cost function (Square differnces) from the components of experimental values and numerically evaluated values.

arma::mat Hessian(const arma::mat&, const arma::vec&)
arma::mat diagJtJ(const arma::mat&)
arma::vec bound_min(const int&, const arma::vec&, const std::vector<parameters>&, const double&, const double&)
arma::vec bound_max(const int&, const arma::vec&, const std::vector<parameters>&, const double&, const double&)
arma::vec dbound_min(const int&, const arma::vec&, const std::vector<parameters>&, const double&, const double&)
arma::vec dbound_max(const int&, const arma::vec&, const std::vector<parameters>&, const double&, const double&)
arma::vec calcW(const int&, const int&, const arma::Col<int>&, const arma::vec&, const std::vector<arma::vec>&, const std::vector<opti_data>&, const std::vector<opti_data>&)
arma::vec G_cost(const arma::mat &S, const arma::vec &W, const arma::vec &Dv, const arma::vec &L_min, const arma::vec &L_max)
arma::mat LevMarq(const arma::mat &H, const double &lambdaLM, const arma::vec &L_min, const arma::vec &L_max)

Levenberg-Marquardt matrix, with bounds.

arma::vec calcDp(const arma::mat&, const arma::vec&, const arma::vec&, const arma::vec&, const arma::vec&, const std::vector<parameters>&, const double&, const double&, const double&, const int&, arma::Col<int>&)
void read_parameters(const int&, std::vector<parameters>&)
void read_constants(const int&, std::vector<constants>&, const int&)
void read_data_exp(const int&, std::vector<opti_data>&)
void read_data_weights(const int&, arma::Col<int>&, arma::vec&, std::vector<arma::vec>&, std::vector<opti_data>&, const std::vector<opti_data>&)
void read_data_num(const int&, const std::vector<opti_data>&, std::vector<opti_data>&)
void ident_essentials(int&, int&, int&, const std::string&, const std::string&)
void ident_control(int&, int&, int&, int&, int&, int&, int&, double&, double&, double&, double&, double&, double&, const std::string&, const std::string&)
void read_gen(int&, arma::mat&, const int&)
void copy_parameters(const std::vector<parameters>&, const std::string&, const std::string&)
void copy_constants(const std::vector<constants>&, const std::string&, const std::string&)
void apply_parameters(const std::vector<parameters>&, const std::string&)
void apply_constants(const std::vector<constants>&, const std::string&)
void launch_solver(const generation&, const int&, std::vector<parameters>&, std::vector<constants>&, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&)
void launch_odf(const generation&, std::vector<parameters>&, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&)
void launch_func_N(const generation&, const int&, std::vector<parameters>&, std::vector<constants>&, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&)
void run_simulation(const std::string&, const individual&, const int&, std::vector<parameters>&, std::vector<constants>&, std::vector<opti_data>&, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&)
double calc_cost(const arma::vec&, arma::vec&, const arma::vec&, const std::vector<opti_data>&, const std::vector<opti_data>&, const int&, const int&)
arma::mat calc_sensi(const individual&, generation&, const std::string&, const int&, const int&, std::vector<parameters>&, std::vector<constants>&, arma::vec&, std::vector<opti_data>&, std::vector<opti_data>&, const std::string&, const std::string&, const std::string&, const std::string&, const int&, const arma::vec&, const std::string&)
class constants
#include <constants.hpp>

Public Functions

constants()
constants(const int&, const int&)
constants(const int&, const double&, const arma::vec&, const std::string&, const int&, const std::vector<std::string>&)
constants(const constants&)
~constants()
inline int dimfiles() const
void update(const int&)
void resize(const int&, const int&)
virtual constants &operator=(const constants&)

Public Members

int number
double value
arma::vec input_values
std::string key
int ninput_files
std::vector<std::string> input_files

Friends

friend std::ostream &operator<<(std::ostream&, const constants&)
class generation
#include <generation.hpp>

Public Functions

generation()

Default constructor.

generation(const int &npop, const int &nparam, int &id_start, const double &lambda = 0.)

Constructor with population size and parameter count.

Parameters:
  • npop – Number of individuals

  • nparam – Number of parameters per individual

  • id_start – Starting id for individuals

  • lambda – Initial lambda value (default: 0.0)

generation(const generation &gen)

Copy constructor.

Parameters:

gen – Generation to copy

~generation()

Destructor.

inline int size() const

Get the number of individuals in the population.

Returns:

Population size

void construct(const int &npop, const int &nparam, int &id_start, const double &lambda = 0.)

Construct the population with given size and parameters.

Parameters:
  • npop – Number of individuals

  • nparam – Number of parameters

  • id_start – Starting id

  • lambda – Initial lambda value

void classify()

Classify individuals by cost (fitness).

void newid(int &id_start)

Assign new unique ids to individuals.

Parameters:

id_start – Starting id

void destruct()

Destroy the population (clear individuals).

virtual generation &operator=(const generation &gen)

Assignment operator.

Parameters:

gen – Generation to assign

Returns:

Reference to this object

Public Members

std::vector<individual> pop

Population of individuals.

Friends

friend std::ostream &operator<<(std::ostream &os, const generation &gen)

Stream output operator.

Parameters:
  • os – Output stream

  • gen – Generation to output

Returns:

Output stream

class individual
#include <individual.hpp>

Class representing an individual in a genetic algorithm for parameter identification.

An individual encodes a candidate solution (set of parameters) and its associated cost (fitness). Used in evolutionary algorithms for model calibration or optimization.

The class stores:

  • Parameter vector (p)

  • Cost function value (cout)

  • Unique identifier (id) and rank in the population

  • Lambda: step size or regularization parameter

Public Functions

individual()

Default constructor.

individual(const int &np, const int &id, const double &lambda)

Constructor with number of parameters, id, and lambda.

Parameters:
  • np – Number of parameters

  • id – Unique identifier

  • lambda – Step or regularization parameter

individual(const individual &ind)

Copy constructor.

Parameters:

ind – Individual to copy

~individual()

Destructor.

void construct()

Allocate and initialize parameter vector.

virtual individual &operator=(const individual &ind)

Assignment operator.

Parameters:

ind – Individual to assign

Returns:

Reference to this object

Public Members

int np

Number of parameters.

double cout

Cost function value (fitness)

int id

Unique identifier.

int rank

Rank in the population.

arma::vec p

Parameter vector.

double lambda

Step or regularization parameter.

Friends

friend std::ostream &operator<<(std::ostream &os, const individual &ind)

Stream output operator.

Parameters:
  • os – Output stream

  • ind – Individual to output

Returns:

Output stream

class opti_data
#include <opti_data.hpp>

Public Functions

opti_data()
opti_data(int, int)
opti_data(std::string, int, int, int, int, int)
opti_data(const opti_data&)
virtual ~opti_data()
inline int dimdata() const
inline int diminfo() const
void constructc_data()
void constructdata()
void import(std::string, int = 0)
virtual opti_data &operator=(const opti_data&)

Public Members

std::string name
int number
int ndata
int ninfo
int ncolumns
arma::Col<int> c_data
arma::mat data
int skiplines

Friends

friend std::ostream &operator<<(std::ostream&, const opti_data&)
class parameters
#include <parameters.hpp>

Public Functions

parameters()
parameters(const int&, const double&, const double&)
parameters(const int&, const double&, const double&, const std::string&, const int&, const std::vector<std::string>&)
parameters(const parameters&)
~parameters()
inline int dimfiles() const
void update(const double&)
void resize(const int&)
virtual parameters &operator=(const parameters&)

Public Members

int number
double value
double min_value
double max_value
std::string key
int ninput_files
std::vector<std::string> input_files

Friends

friend std::ostream &operator<<(std::ostream&, const parameters&)