1
2 """Markov-Chain Monte-Carlo algorithms.
3
4 Here, we do MCMC when -log(p) is a sum of squares."""
5
6 import mcmcSQ
7 import die
8
9 import mcmc
10 import g_implements
11 import findleak
12
13 _s = None
14
16 global _s
17
18 findleak.vm('go_step start')
19 assert g_implements.impl(x.current(), mcmc.position_base), "Bad pseudoposition: %s" % g_implements.why(x.current(), mcmc.position_base)
20 if _s is None:
21 print "INITIALIZING mcmc"
22 _s = mcmc.bootstepper(None, x.current(), x.archive.mvn.cov, None)
23 findleak.vm('go_step initialize end')
24 print "SQ STEP"
25 accepted = x.step(showvec=showvec, atmisc={'stepper': 'SQ'})
26 findleak.vm('go_step accepted start')
27 if accepted:
28 cur = x.current()
29 print 'Cur from SQ:', cur.prms()
30 _s._set_current( cur )
31 findleak.vm('go_step accepted end')
32 findleak.vm('go_step Bootstep start')
33 if(len(_s.archive) > _s.np/_s.F):
34 print "BOOT STEP"
35 accepted = _s.step()
36 print 'Accepted:', accepted
37 cur = x.current()
38 print 'Cur from BOOT:', cur.prms()
39 SQpos = _s.current()
40 assert isinstance(SQpos, mcmcSQ.position)
41 x.archive.add( SQpos )
42 if accepted:
43 findleak.vm('go_step BOOTstep-set_current start')
44 x._set_current( SQpos )
45 findleak.vm('go_step BOOTstep-set_current end')
46 x.print_at( misc = {'stepper': 'Boot', 'BootScale': _s.a[0].vs()} )
47 findleak.vm('go_step BOOTstep end')
48
49 findleak.vm('go_step end')
50
51 mcmcSQ.go_step = go_step
52
53
54
55
56
57 if __name__ == '__main__':
58 import sys
59 if len(sys.argv) <= 1:
60 print __doc__
61 die.exit(0)
62 mcmcSQ.go(sys.argv)
63