Changeset 0932c2 for src


Ignore:
Timestamp:
Jun 27, 2014, 11:43:27 AM (11 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
1dbbeb
Parents:
7e3e41
git-author:
Frederik Heber <heber@…> (06/26/14 07:41:59)
git-committer:
Frederik Heber <heber@…> (06/27/14 11:43:27)
Message:

FIX: RandomNumberEngine_Encapsulation::clone() did not set the seed obtained from its prototype.

  • this caused all engines to always start with default seed of 1, irrespective of the set parameter. The engine is always cloned from prototypes in the factory that can be manipulated to change their parameters. Hence, clone needs to set the seed (the engine's only parameter).
  • EmpiricalPotentials now use RandomNumberGenerator to obtain random starting values.
  • TESTFIX: fit-potential regression tests now use fixed seed in order to always take the same amount of time (some test runs in debug mode take very long because of ill-chosen random values).
Location:
src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • src/Potentials/Specifics/FourBodyPotential_Torsion.cpp

    r7e3e41 r0932c2  
    5151#include "Potentials/InternalCoordinates/FourBody_TorsionAngle.hpp"
    5252#include "Potentials/ParticleTypeCheckers.hpp"
     53#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
     54#include "RandomNumbers/RandomNumberGenerator.hpp"
    5355
    5456class Fragment;
    5557
    56 // static definitions
     58// static definitions1
    5759const FourBodyPotential_Torsion::ParameterNames_t
    5860FourBodyPotential_Torsion::ParameterNames =
     
    254256    const TrainingData &data)
    255257{
    256   params[FourBodyPotential_Torsion::spring_constant] = 2.*rand()/(double)RAND_MAX;
    257   params[FourBodyPotential_Torsion::equilibrium_distance] = -.5+1.*rand()/(double)RAND_MAX;
    258 }
    259 
     258  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
     259  const double rng_min = random.min();
     260  const double rng_max = random.max();
     261  params[FourBodyPotential_Torsion::spring_constant] = 2.*(random()/(rng_max-rng_min));
     262  params[FourBodyPotential_Torsion::equilibrium_distance] = 2.*(random()/(rng_max-rng_min));
     263}
     264
  • src/Potentials/Specifics/ManyBodyPotential_Tersoff.cpp

    r7e3e41 r0932c2  
    5454#include "Potentials/InternalCoordinates/OneBody_Constant.hpp"
    5555#include "Potentials/ParticleTypeCheckers.hpp"
     56#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
     57#include "RandomNumbers/RandomNumberGenerator.hpp"
    5658
    5759class Fragment;
     
    713715    const TrainingData &data)
    714716{
     717  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
     718  const double rng_min = random.min();
     719  const double rng_max = random.max();
    715720//  params[ManyBodyPotential_Tersoff::R] = 1./AtomicLengthToAngstroem;
    716721//  params[ManyBodyPotential_Tersoff::S] = 2./AtomicLengthToAngstroem;
    717   params[ManyBodyPotential_Tersoff::A] = 1e+4*rand()/(double)RAND_MAX;//1.393600e+03;
    718   params[ManyBodyPotential_Tersoff::B] = 1e+4*rand()/(double)RAND_MAX;//3.467000e+02;
    719   params[ManyBodyPotential_Tersoff::lambda] = 1e+1*rand()/(double)RAND_MAX;//3.487900e+00;
    720   params[ManyBodyPotential_Tersoff::mu] = 1e+1*rand()/(double)RAND_MAX;//2.211900e+00;
     722  params[ManyBodyPotential_Tersoff::A] = 1e+4*(random()/(rng_max-rng_min));//1.393600e+03;
     723  params[ManyBodyPotential_Tersoff::B] = 1e+4*(random()/(rng_max-rng_min));//3.467000e+02;
     724  params[ManyBodyPotential_Tersoff::lambda] = 1e+1*(random()/(rng_max-rng_min));//3.487900e+00;
     725  params[ManyBodyPotential_Tersoff::mu] = 1e+1*(random()/(rng_max-rng_min));//2.211900e+00;
    721726  //  params[ManyBodyPotential_Tersoff::lambda3] = 0.;
    722727  //  params[ManyBodyPotential_Tersoff::alpha] = 0.;
    723   params[ManyBodyPotential_Tersoff::beta] = 1e-1*rand()/(double)RAND_MAX;//1.572400e-07;
     728  params[ManyBodyPotential_Tersoff::beta] = 1e-1*(random()/(rng_max-rng_min));//1.572400e-07;
    724729  //  params[ManyBodyPotential_Tersoff::chi] = 1.;
    725730  //  params[ManyBodyPotential_Tersoff::omega] = 1.;
    726   params[ManyBodyPotential_Tersoff::n] = 1e+1*rand()/(double)RAND_MAX;//7.275100e-01;
    727   params[ManyBodyPotential_Tersoff::c] = 1e+1*rand()/(double)RAND_MAX;//3.804900e+04;
    728   params[ManyBodyPotential_Tersoff::d] = 1e+1*rand()/(double)RAND_MAX;//4.384000e+00;
    729   params[ManyBodyPotential_Tersoff::h] = 1e+1*rand()/(double)RAND_MAX;//-5.705800e-01;
    730 }
    731 
     731  params[ManyBodyPotential_Tersoff::n] = 1e+1*(random()/(rng_max-rng_min));//7.275100e-01;
     732  params[ManyBodyPotential_Tersoff::c] = 1e+1*(random()/(rng_max-rng_min));//3.804900e+04;
     733  params[ManyBodyPotential_Tersoff::d] = 1e+1*(random()/(rng_max-rng_min));//4.384000e+00;
     734  params[ManyBodyPotential_Tersoff::h] = 1e+1*(random()/(rng_max-rng_min));//-5.705800e-01;
     735}
     736
  • src/Potentials/Specifics/PairPotential_Harmonic.cpp

    r7e3e41 r0932c2  
    5252#include "Potentials/InternalCoordinates/TwoBody_Length.hpp"
    5353#include "Potentials/ParticleTypeCheckers.hpp"
     54#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
     55#include "RandomNumbers/RandomNumberGenerator.hpp"
    5456
    5557class Fragment;
     
    213215    const TrainingData &data)
    214216{
    215   params[PairPotential_Harmonic::equilibrium_distance] = 3e+0*rand()/(double)RAND_MAX + .5;// 1.;
    216   params[PairPotential_Harmonic::spring_constant] = 1e+0*rand()/(double)RAND_MAX;// 0.2;
    217 }
    218 
     217  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
     218  const double rng_min = random.min();
     219  const double rng_max = random.max();
     220  params[PairPotential_Harmonic::equilibrium_distance] = 3e+0*(random()/(rng_max-rng_min)) + .5;// 1.;
     221  params[PairPotential_Harmonic::spring_constant] = 1e+0*(random()/(rng_max-rng_min));// 0.2;
     222}
     223
  • src/Potentials/Specifics/PairPotential_LennardJones.cpp

    r7e3e41 r0932c2  
    5252#include "Potentials/InternalCoordinates/TwoBody_Length.hpp"
    5353#include "Potentials/ParticleTypeCheckers.hpp"
     54#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
     55#include "RandomNumbers/RandomNumberGenerator.hpp"
    5456
    5557class Fragment;
     
    222224    const TrainingData &data)
    223225{
    224   params[PairPotential_LennardJones::epsilon] = 1e-2*rand()/(double)RAND_MAX;
    225   params[PairPotential_LennardJones::sigma] = (3.+10.*rand()/(double)RAND_MAX);// 0.5;
    226 }
    227 
     226  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
     227  const double rng_min = random.min();
     228  const double rng_max = random.max();
     229  params[PairPotential_LennardJones::epsilon] = 1e-2*(random()/(rng_max-rng_min));
     230  params[PairPotential_LennardJones::sigma] = (3.+10.*(random()/(rng_max-rng_min)));// 0.5;
     231}
     232
  • src/Potentials/Specifics/PairPotential_Morse.cpp

    r7e3e41 r0932c2  
    5353#include "Potentials/InternalCoordinates/TwoBody_Length.hpp"
    5454#include "Potentials/ParticleTypeCheckers.hpp"
     55#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
     56#include "RandomNumbers/RandomNumberGenerator.hpp"
    5557
    5658class Fragment;
     
    242244    const TrainingData &data)
    243245{
    244   params[PairPotential_Morse::dissociation_energy] = 1e+0*rand()/(double)RAND_MAX;// 0.5;
    245   params[PairPotential_Morse::spring_constant] = 1e+0*rand()/(double)RAND_MAX;// 1.;
    246   params[PairPotential_Morse::equilibrium_distance] =  3e+0*rand()/(double)RAND_MAX;//2.9;
    247 }
    248 
     246  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
     247  const double rng_min = random.min();
     248  const double rng_max = random.max();
     249  params[PairPotential_Morse::dissociation_energy] = 1e+0*(random()/(rng_max-rng_min));// 0.5;
     250  params[PairPotential_Morse::spring_constant] = 1e+0*(random()/(rng_max-rng_min));// 1.;
     251  params[PairPotential_Morse::equilibrium_distance] =  3e+0*(random()/(rng_max-rng_min));//2.9;
     252}
     253
  • src/Potentials/Specifics/ThreeBodyPotential_Angle.cpp

    r7e3e41 r0932c2  
    5252#include "Potentials/InternalCoordinates/ThreeBody_Angle.hpp"
    5353#include "Potentials/ParticleTypeCheckers.hpp"
     54#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
     55#include "RandomNumbers/RandomNumberGenerator.hpp"
    5456
    5557class Fragment;
     
    240242    const TrainingData &data)
    241243{
    242   params[ThreeBodyPotential_Angle::spring_constant] = 1e+0*rand()/(double)RAND_MAX;// 0.2;
    243   params[ThreeBodyPotential_Angle::equilibrium_distance] = -0.3;//2e+0*rand()/(double)RAND_MAX - 1.;// 1.;
    244 }
    245 
     244  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
     245  const double rng_min = random.min();
     246  const double rng_max = random.max();
     247  params[ThreeBodyPotential_Angle::spring_constant] = 1e+0*(random()/(rng_max-rng_min));// 0.2;
     248  params[ThreeBodyPotential_Angle::equilibrium_distance] = -0.3;//2e+0*(random()/(rng_max-rng_min)) - 1.;// 1.;
     249}
     250
  • src/Potentials/Specifics/unittests/Makefile.am

    r7e3e41 r0932c2  
    4141        ../libMolecuilderFragmentation.la \
    4242        ../libMolecuilderFunctionApproximation.la \
     43        ../libMolecuilderRandomNumbers.la \
    4344        $(top_builddir)/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
    4445        ${CodePatterns_LIBS} \
  • src/Potentials/unittests/Makefile.am

    r7e3e41 r0932c2  
    3737        ../libMolecuilderFunctionApproximation.la \
    3838        ../libMolecuilderFragmentation_getFromKeysetStub.la \
     39        ../libMolecuilderRandomNumbers.la \
    3940        $(top_builddir)/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
    4041        ${CodePatterns_LIBS} \
  • src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp

    r7e3e41 r0932c2  
    126126    RandomNumberEngine* MyClone = new RandomNumberEngine_Encapsulation<engine>(*params);
    127127    delete params;
    128     //MyClone->seed(getseed());
     128    MyClone->seed(getseed());
    129129    return MyClone;
    130130  }
  • src/documentation/constructs/potentials.dox

    r7e3e41 r0932c2  
    132132 *
    133133 *  As we always start from random initial parameters (within a certain sensible
    134  *  range at least), the non-linear fit does not always converge. For this case
    135  *  the FragmentationFitPotentialAction has the option "take-best-of" to allow
    136  *  for multiple fits where the best (in terms of l2 error) is taken eventually.
     134 *  range at least), the non-linear fit does not always converge. Note that the
     135 *  random values are drawn from the defined distribution and the uniform distributionm
     136 *  engine is obtained from the currently set, see \ref randomnumbers. Hence, you
     137 *  can manipulate both in order to get different results or to set the seed such that
     138 *  some "randomly" drawn value always work well (e.g. for testing).
     139 * 
     140 *  In any case, For this case the FragmentationFitPotentialAction has the option
     141 *  "take-best-of" to allow for multiple fits where the best (in terms of l2 error)
     142 *  is taken eventually. Furthermore, you can use the "set-threshold" option to
     143 *  stop restarting the fit procedure first when the L2 error has dropped below the
     144 *  given threshold.
    137145 *
    138146 * \section potentials-howto-add Howto add new potentials
     
    145153 *  -# Add the potential name as case to PotentialFactory such that it knows
    146154 *     how to instantiate your new potential when requested.
     155 *  -# Remember to use the the RandomNumberGenerator for getting random starting
     156 *     values!
    147157 *
    148158 * PotentialTypes.def contains a boost::preprocessor sequence of all
Note: See TracChangeset for help on using the changeset viewer.