Line data Source code
1 : /** 2 : Bojan Nikolic <bojan@bnikolic.co.uk> 3 : Initial version 2008 4 : 5 : This file is part of BNMin1 and is licensed under GNU General 6 : Public License version 2 7 : 8 : \file metro_propose.cxx 9 : Renamed to metro_propose.cc 10 : 11 : */ 12 : 13 : #include "metro_propose.h" 14 : 15 : namespace Minim { 16 : 17 0 : MetroPropose::MetroPropose(const std::vector<double> & sigmas, 18 0 : unsigned seed): 19 0 : sigmas(sigmas), 20 0 : norm_dist(0.,1.), 21 0 : uni_dist(0.,1.) 22 : { 23 0 : if(seed != 0){ 24 0 : generator.seed(seed); 25 : } 26 0 : } 27 : 28 0 : MetroPropose::~MetroPropose() 29 : { 30 0 : } 31 : 32 0 : double MetroPropose::norm(){ 33 0 : return norm_dist(generator); 34 : } 35 : 36 0 : double MetroPropose::uni(){ 37 0 : return uni_dist(generator); 38 : } 39 : 40 0 : void MetroPropose::displace( std::vector<double> &x) 41 : { 42 0 : for (size_t i =0 ; i < sigmas.size() ; ++i) 43 0 : x[i] += sigmas[i]* norm(); 44 0 : } 45 : 46 0 : size_t MetroPropose::nPars(void) 47 : { 48 0 : return sigmas.size(); 49 : } 50 : 51 0 : void MetroPropose::scaleSigma(double c) 52 : { 53 0 : for(size_t i=0; i<sigmas.size(); ++i) 54 0 : sigmas[i] *= c; 55 0 : } 56 : 57 0 : MetroProposeSeq::MetroProposeSeq(const std::vector<double> & sigmas, 58 0 : unsigned seed): 59 : MetroPropose(sigmas, seed), 60 0 : count(0), 61 0 : n(sigmas.size()) 62 : { 63 0 : } 64 : 65 0 : void MetroProposeSeq::displace( std::vector<double> &x) 66 : { 67 0 : const size_t i = count % n; 68 0 : x[i] += sigmas[i]* norm(); 69 0 : ++count; 70 0 : } 71 : 72 : 73 : } 74 :