本文整理汇总了C++中ParameterList::addParameters方法的典型用法代码示例。如果您正苦于以下问题:C++ ParameterList::addParameters方法的具体用法?C++ ParameterList::addParameters怎么用?C++ ParameterList::addParameters使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ParameterList
的用法示例。
在下文中一共展示了ParameterList::addParameters方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: get_number_of_free_parameters
size_t Alignment::get_number_of_free_parameters() {
if (!likelihood) throw Exception("Likelihood model not initialised");
ParameterList pl = likelihood->getBranchLengthsParameters();
pl.addParameters(model->getIndependentParameters());
if (rates->getName() == "Gamma") pl.addParameters(rates->getIndependentParameters());
return pl.size();
}
示例2: optimise_topology
void Alignment::optimise_topology(bool fix_model_params) {
if (!likelihood) {
cerr << "Likelihood calculator not set - call initialise_likelihood" << endl;
throw Exception("Uninitialised likelihood error");
}
ParameterList pl = likelihood->getBranchLengthsParameters();
if (!fix_model_params) {
pl.addParameters(model->getIndependentParameters());
if (rates->getName() == "Gamma") pl.addParameters(rates->getIndependentParameters());
}
likelihood = make_shared<NNIHomogeneousTreeLikelihood>(*OptimizationTools::optimizeTreeNNI2(likelihood.get(), pl, true, 0.001, 0.1, 1000000, 1, NULL, NULL, false, 10));
}
示例3: estimateDistanceMatrix
DistanceMatrix* OptimizationTools::estimateDistanceMatrix(
DistanceEstimation& estimationMethod,
const ParameterList& parametersToIgnore,
const std::string& param,
unsigned int verbose) throw (Exception)
{
if (param != DISTANCEMETHOD_PAIRWISE && param != DISTANCEMETHOD_INIT)
throw Exception("OptimizationTools::estimateDistanceMatrix. Invalid option param=" + param + ".");
estimationMethod.resetAdditionalParameters();
estimationMethod.setVerbose(verbose);
if (param == DISTANCEMETHOD_PAIRWISE)
{
ParameterList tmp = estimationMethod.getSubstitutionModel().getIndependentParameters();
tmp.addParameters(estimationMethod.getRateDistribution().getIndependentParameters());
tmp.deleteParameters(parametersToIgnore.getParameterNames());
estimationMethod.setAdditionalParameters(tmp);
}
// Compute matrice:
if (verbose > 0)
ApplicationTools::displayTask("Estimating distance matrix", true);
estimationMethod.computeMatrix();
auto_ptr<DistanceMatrix> matrix(estimationMethod.getMatrix());
if (verbose > 0)
ApplicationTools::displayTaskDone();
return matrix.release();
}
示例4: getNonDerivableParameters
ParameterList AbstractDiscreteRatesAcrossSitesTreeLikelihood::getNonDerivableParameters() const
{
if(!_initialized) throw Exception("AbstractDiscreteRatesAcrossSitesTreeLikelihood::getNonDerivableParameters(). Object is not initialized.");
ParameterList tmp = getSubstitutionModelParameters();
tmp.addParameters(getRateDistributionParameters());
return tmp;
}
示例5: _print_params
void Alignment::_print_params() {
if (likelihood) {
ParameterList pl = likelihood->getParameters();
pl.printParameters(cout);
}
else if (rates && model) {
ParameterList pl = rates->getIndependentParameters();
pl.addParameters(model->getIndependentParameters());
pl.printParameters(cout);
cout << "----------" << endl;
}
}
示例6: optimise_parameters
void Alignment::optimise_parameters(bool fix_branch_lengths) {
if (!likelihood) {
cerr << "Likelihood calculator not set - call initialise_likelihood" << endl;
throw Exception("Uninitialised likelihood error");
}
ParameterList pl;
if (fix_branch_lengths) {
pl = likelihood->getSubstitutionModelParameters();
pl.addParameters(likelihood->getRateDistributionParameters());
}
else {
pl = likelihood->getParameters();
}
OptimizationTools::optimizeNumericalParameters2(likelihood.get(), pl, 0, 0.001, 1000000, NULL, NULL, false, false, 10);
}
示例7: tl
TreeTemplate<Node>* OptimizationTools::buildDistanceTree(
DistanceEstimation& estimationMethod,
AgglomerativeDistanceMethod& reconstructionMethod,
const ParameterList& parametersToIgnore,
bool optimizeBrLen,
const std::string& param,
double tolerance,
unsigned int tlEvalMax,
OutputStream* profiler,
OutputStream* messenger,
unsigned int verbose) throw (Exception)
{
estimationMethod.resetAdditionalParameters();
estimationMethod.setVerbose(verbose);
if (param == DISTANCEMETHOD_PAIRWISE)
{
ParameterList tmp = estimationMethod.getSubstitutionModel().getIndependentParameters();
tmp.addParameters(estimationMethod.getRateDistribution().getIndependentParameters());
tmp.deleteParameters(parametersToIgnore.getParameterNames());
estimationMethod.setAdditionalParameters(tmp);
}
TreeTemplate<Node>* tree = NULL;
TreeTemplate<Node>* previousTree = NULL;
bool test = true;
while (test)
{
// Compute matrice:
if (verbose > 0)
ApplicationTools::displayTask("Estimating distance matrix", true);
estimationMethod.computeMatrix();
DistanceMatrix* matrix = estimationMethod.getMatrix();
if (verbose > 0)
ApplicationTools::displayTaskDone();
// Compute tree:
if (matrix->size() == 2) {
//Special case, there is only one possible tree:
Node* n1 = new Node(0);
Node* n2 = new Node(1, matrix->getName(0));
n2->setDistanceToFather((*matrix)(0,0) / 2.);
Node* n3 = new Node(2, matrix->getName(1));
n3->setDistanceToFather((*matrix)(0,0) / 2.);
n1->addSon(n2);
n1->addSon(n3);
tree = new TreeTemplate<Node>(n1);
break;
}
if (verbose > 0)
ApplicationTools::displayTask("Building tree");
reconstructionMethod.setDistanceMatrix(*matrix);
reconstructionMethod.computeTree();
previousTree = tree;
delete matrix;
tree = dynamic_cast<TreeTemplate<Node>*>(reconstructionMethod.getTree());
if (verbose > 0)
ApplicationTools::displayTaskDone();
if (previousTree && verbose > 0)
{
int rf = TreeTools::robinsonFouldsDistance(*previousTree, *tree, false);
ApplicationTools::displayResult("Topo. distance with previous iteration", TextTools::toString(rf));
test = (rf == 0);
delete previousTree;
}
if (param != DISTANCEMETHOD_ITERATIONS)
break; // Ends here.
// Now, re-estimate parameters:
auto_ptr<SubstitutionModel> model(estimationMethod.getSubstitutionModel().clone());
auto_ptr<DiscreteDistribution> rdist(estimationMethod.getRateDistribution().clone());
DRHomogeneousTreeLikelihood tl(*tree,
*estimationMethod.getData(),
model.get(),
rdist.get(),
true, verbose > 1);
tl.initialize();
ParameterList parameters = tl.getParameters();
if (!optimizeBrLen)
{
vector<string> vs = tl.getBranchLengthsParameters().getParameterNames();
parameters.deleteParameters(vs);
}
parameters.deleteParameters(parametersToIgnore.getParameterNames());
optimizeNumericalParameters(&tl, parameters, NULL, 0, tolerance, tlEvalMax, messenger, profiler, verbose > 0 ? verbose - 1 : 0);
if (verbose > 0)
{
ParameterList tmp = tl.getSubstitutionModelParameters();
for (unsigned int i = 0; i < tmp.size(); i++)
{
ApplicationTools::displayResult(tmp[i].getName(), TextTools::toString(tmp[i].getValue()));
}
tmp = tl.getRateDistributionParameters();
for (unsigned int i = 0; i < tmp.size(); i++)
{
ApplicationTools::displayResult(tmp[i].getName(), TextTools::toString(tmp[i].getValue()));
}
}
}
return tree;
}
示例8: if
unsigned int OptimizationTools::optimizeNumericalParameters2(
DiscreteRatesAcrossSitesTreeLikelihood* tl,
const ParameterList& parameters,
OptimizationListener* listener,
double tolerance,
unsigned int tlEvalMax,
OutputStream* messageHandler,
OutputStream* profiler,
bool reparametrization,
bool useClock,
unsigned int verbose,
const std::string& optMethodDeriv)
throw (Exception)
{
DerivableSecondOrder* f = tl;
ParameterList pl = parameters;
// Shall we use a molecular clock constraint on branch lengths?
auto_ptr<GlobalClockTreeLikelihoodFunctionWrapper> fclock;
if (useClock)
{
fclock.reset(new GlobalClockTreeLikelihoodFunctionWrapper(tl));
f = fclock.get();
if (verbose > 0)
ApplicationTools::displayResult("Log-likelihood after adding clock", -tl->getLogLikelihood());
// Reset parameters to use new branch lengths. WARNING! 'old' branch parameters do not exist anymore and have been replaced by heights
pl = fclock->getParameters().getCommonParametersWith(parameters);
pl.addParameters(fclock->getHeightParameters());
}
// Shall we reparametrize the function to remove constraints?
auto_ptr<DerivableSecondOrder> frep;
if (reparametrization)
{
frep.reset(new ReparametrizationDerivableSecondOrderWrapper(f, pl));
f = frep.get();
// Reset parameters to remove constraints:
pl = f->getParameters().subList(pl.getParameterNames());
}
auto_ptr<AbstractNumericalDerivative> fnum;
// Build optimizer:
auto_ptr<Optimizer> optimizer;
if (optMethodDeriv == OPTIMIZATION_GRADIENT)
{
fnum.reset(new TwoPointsNumericalDerivative(f));
fnum->setInterval(0.0000001);
optimizer.reset(new ConjugateGradientMultiDimensions(fnum.get()));
}
else if (optMethodDeriv == OPTIMIZATION_NEWTON)
{
fnum.reset(new ThreePointsNumericalDerivative(f));
fnum->setInterval(0.0001);
optimizer.reset(new PseudoNewtonOptimizer(fnum.get()));
}
else if (optMethodDeriv == OPTIMIZATION_BFGS)
{
fnum.reset(new TwoPointsNumericalDerivative(f));
fnum->setInterval(0.0001);
optimizer.reset(new BfgsMultiDimensions(fnum.get()));
}
else
throw Exception("OptimizationTools::optimizeNumericalParameters2. Unknown optimization method: " + optMethodDeriv);
// Numerical derivatives:
ParameterList tmp = tl->getNonDerivableParameters();
if (useClock)
tmp.addParameters(fclock->getHeightParameters());
fnum->setParametersToDerivate(tmp.getParameterNames());
optimizer->setVerbose(verbose);
optimizer->setProfiler(profiler);
optimizer->setMessageHandler(messageHandler);
optimizer->setMaximumNumberOfEvaluations(tlEvalMax);
optimizer->getStopCondition()->setTolerance(tolerance);
// Optimize TreeLikelihood function:
optimizer->setConstraintPolicy(AutoParameter::CONSTRAINTS_AUTO);
NaNListener* nanListener = new NaNListener(optimizer.get(), tl);
optimizer->addOptimizationListener(nanListener);
if (listener)
optimizer->addOptimizationListener(listener);
optimizer->init(pl);
optimizer->optimize();
if (verbose > 0)
ApplicationTools::displayMessage("\n");
// We're done.
return optimizer->getNumberOfEvaluations();
}
示例9: main
//.........这里部分代码省略.........
{
BioNJ* bionj = new BioNJ();
bionj->outputPositiveLengths(true);
distMethod = bionj;
}
else throw Exception("Unknown tree reconstruction method.");
string type = ApplicationTools::getStringParameter("optimization.method", bppdist.getParams(), "init");
ApplicationTools::displayResult("Model parameters estimation method", type);
if (type == "init") type = OptimizationTools::DISTANCEMETHOD_INIT;
else if (type == "pairwise") type = OptimizationTools::DISTANCEMETHOD_PAIRWISE;
else if (type == "iterations") type = OptimizationTools::DISTANCEMETHOD_ITERATIONS;
else throw Exception("Unknown parameter estimation procedure '" + type + "'.");
unsigned int optVerbose = ApplicationTools::getParameter<unsigned int>("optimization.verbose", bppdist.getParams(), 2);
string mhPath = ApplicationTools::getAFilePath("optimization.message_handler", bppdist.getParams(), false, false);
OutputStream* messenger =
(mhPath == "none") ? 0 :
(mhPath == "std") ? ApplicationTools::message :
new StlOutputStream(new ofstream(mhPath.c_str(), ios::out));
ApplicationTools::displayResult("Message handler", mhPath);
string prPath = ApplicationTools::getAFilePath("optimization.profiler", bppdist.getParams(), false, false);
OutputStream* profiler =
(prPath == "none") ? 0 :
(prPath == "std") ? ApplicationTools::message :
new StlOutputStream(new ofstream(prPath.c_str(), ios::out));
if(profiler) profiler->setPrecision(20);
ApplicationTools::displayResult("Profiler", prPath);
// Should I ignore some parameters?
ParameterList allParameters = model->getParameters();
allParameters.addParameters(rDist->getParameters());
ParameterList parametersToIgnore;
string paramListDesc = ApplicationTools::getStringParameter("optimization.ignore_parameter", bppdist.getParams(), "", "", true, false);
bool ignoreBrLen = false;
StringTokenizer st(paramListDesc, ",");
while (st.hasMoreToken())
{
try
{
string param = st.nextToken();
if (param == "BrLen")
ignoreBrLen = true;
else
{
if (allParameters.hasParameter(param))
{
Parameter* p = &allParameters.getParameter(param);
parametersToIgnore.addParameter(*p);
}
else ApplicationTools::displayWarning("Parameter '" + param + "' not found.");
}
}
catch (ParameterNotFoundException& pnfe)
{
ApplicationTools::displayError("Parameter '" + pnfe.getParameter() + "' not found, and so can't be ignored!");
}
}
unsigned int nbEvalMax = ApplicationTools::getParameter<unsigned int>("optimization.max_number_f_eval", bppdist.getParams(), 1000000);
ApplicationTools::displayResult("Max # ML evaluations", TextTools::toString(nbEvalMax));
double tolerance = ApplicationTools::getDoubleParameter("optimization.tolerance", bppdist.getParams(), .000001);
ApplicationTools::displayResult("Tolerance", TextTools::toString(tolerance));