Exemplo n.º 1
0
class TestNS_LJ(unittest.TestCase):
    def setUp(self):
        self.setUp1()

    def compute_cv(self, Tmin=.01, Tmax=3., nT=100):
        T = np.arange(Tmin, Tmax, (Tmax - Tmin) / nT)
        Cv = compute_cv_c(np.array(self.ns.max_energies), 
                          float(self.nproc), float(self.ndof), T.min(), T.max(), T.size, float(self.ndof), live=False)
        return T, Cv


    def set_up_system(self):
        self.natoms = 13
        self.gmin = -44.3269
        self.system = LJClusterSENS(self.natoms, 2.5)
        self.ndof = 3 * self.natoms - 6

    def setUp1(self, nproc=1):
        self.set_up_system()
        self.nreplicas = 10
        self.stepsize = 0.01
        self.nproc = nproc
        
        self.mc_runner = self.system.get_mc_walker(mciter=100)

        self.ns = NestedSampling(self.system, self.nreplicas, self.mc_runner, 
                                 stepsize=0.1, nproc=nproc, verbose=False)
        
        self.Emax0 = self.ns.replicas[-1].energy
        
        self.niter = 100
        for i in xrange(self.niter):
            self.ns.one_iteration()
        self.Emax = self.ns.replicas[-1].energy
        self.Emin = self.ns.replicas[0].energy
    
    def test1(self):
        self.assert_(len(self.ns.replicas) == self.nreplicas)
        self.assert_(self.Emax < self.Emax0)
        self.assert_(self.Emin < self.Emax)
        self.assert_(self.Emin < 0)
        self.assert_(self.Emin >= self.gmin)
        self.assert_(self.ns.stepsize != self.stepsize)
        self.assertEqual(len(self.ns.max_energies), self.niter * self.nproc)
        self.assertEqual(self.ns.failed_mc_walks, 0)

    def run_ns(self, max_iter=100, Etol=1e-4):
#        max_iter = 10000
#        self.Etol = .01
        self.Etol = Etol
        for i in xrange(int(max_iter)):
            self.ns.one_iteration()
            deltaE = self.ns.replicas[-1].energy - self.ns.replicas[0].energy
            if  deltaE < self.Etol:
                break
        self.niter = i + 1
        self.Emax = self.ns.replicas[-1].energy
        self.Emin = self.ns.replicas[0].energy
Exemplo n.º 2
0
def do_nested_sampling(nreplicas=10, niter=200, mciter=1000, stepsize=.8, estop=-.9,
                       x0=[1,1], r0=2,
                       xlim=None, ylim=None, circle=False
                       ):
    path = []
    def mc_record_position_event(coords=None, **kwargs):
        if len(path) == 0 or not np.all(path[-1] == coords):
            path.append(coords)

    p = Pot()
    print p.get_energy(np.array([1,2.]))
    mc_walker = MonteCarloWalker(p, mciter=mciter, events=[mc_record_position_event])
    
    # initialize the replicas with random positions
    replicas = []
    for i in xrange(nreplicas):
        # choose points uniformly in a circle
        if circle: 
            coords = vector_random_uniform_hypersphere(2) * r0 + x0
        else:
            coords = np.zeros(2)
            coords[0] = np.random.uniform(xlim[0], xlim[1])
            coords[1] = np.random.uniform(ylim[0], ylim[1])
#         coords = np.random.uniform(-1,3,size=2)
        r = Replica(coords, p.get_energy(coords))
        replicas.append(r)
    
        
    ns = NestedSampling(replicas, mc_walker, stepsize=stepsize)
    results = [Result()]
    results[0].replicas = [r.copy() for r in replicas]
    for i in xrange(niter):
        ns.one_iteration()
        new_res = Result()
        new_res.replicas = [r.copy() for r in replicas]
        new_res.starting_replica = ns.starting_replicas[0].copy()
        new_res.new_replica = ns.new_replicas[0].copy()
        path.insert(0, new_res.starting_replica.x)
        new_res.mc_path = path
        results.append(new_res)
        path = []
        
        if ns.replicas[-1].energy < estop:
            break
        
        
        
#    plt.plot(ns.max_energies)
#    plt.show()
    
    return ns, results
Exemplo n.º 3
0
class TestNS(unittest.TestCase):
    """to test distributed computing must start a dispatcher with --server-name test and --port 9090
    """
    def setUp(self):
        self.setUp1()

    def setUp1(self, nproc=1, multiproc=True):
        self.ndim = 3
        self.harmonic = Harmonic(self.ndim)
        self.nreplicas = 10
        self.stepsize = 0.1
        self.nproc = nproc

        self.mc_runner = MonteCarloWalker(self.harmonic, mciter=40)

        if multiproc == False:
            hostname = socket.gethostname()
            host = Pyro4.socketutil.getIpAddress(hostname, workaround127=True)
            self.dispatcher_URI = "PYRO:" + "test@" + host + ":9090"
        else:
            self.dispatcher_URI = None

        replicas = []
        for i in range(self.nreplicas):
            x = self.harmonic.get_random_configuration()
            replicas.append(Replica(x, self.harmonic.get_energy(x)))
        self.ns = NestedSampling(replicas,
                                 self.mc_runner,
                                 stepsize=0.1,
                                 nproc=nproc,
                                 verbose=False,
                                 dispatcher_URI=self.dispatcher_URI)

        self.Emax0 = self.ns.replicas[-1].energy

        self.niter = 100
        for i in range(self.niter):
            self.ns.one_iteration()
        self.Emax = self.ns.replicas[-1].energy
        self.Emin = self.ns.replicas[0].energy

    def test1(self):
        print("running TestNS")
        self.assert_(len(self.ns.replicas) == self.nreplicas)
        self.assert_(self.Emax < self.Emax0)
        self.assert_(self.Emin < self.Emax)
        self.assert_(self.Emin >= 0)
        self.assert_(self.ns.stepsize != self.stepsize)
        self.assertEqual(len(self.ns.max_energies), self.niter * self.nproc)
Exemplo n.º 4
0
class TestNS(unittest.TestCase):
    """to test distributed computing must start a dispatcher with --server-name test and --port 9090
    """
    def setUp(self):
        self.setUp1()

    def setUp1(self, nproc=1, multiproc=True):
        self.ndim = 3
        self.harmonic = Harmonic(self.ndim)
        self.nreplicas = 10
        self.stepsize = 0.1
        self.nproc = nproc
        
        self.mc_runner = MonteCarloWalker(self.harmonic, mciter=40)
        
        if multiproc == False:
            hostname=socket.gethostname()
            host = Pyro4.socketutil.getIpAddress(hostname, workaround127=True)
            self.dispatcher_URI = "PYRO:"+"test@"+host+":9090"
        else:
            self.dispatcher_URI = None
        
        replicas = []
        for i in xrange(self.nreplicas):
            x = self.harmonic.get_random_configuration()
            replicas.append(Replica(x, self.harmonic.get_energy(x)))
        self.ns = NestedSampling(replicas, self.mc_runner, 
                                 stepsize=0.1, nproc=nproc, verbose=False, dispatcher_URI=self.dispatcher_URI)
        
        self.Emax0 = self.ns.replicas[-1].energy
        
        self.niter = 100
        for i in xrange(self.niter):
            self.ns.one_iteration()
        self.Emax = self.ns.replicas[-1].energy
        self.Emin = self.ns.replicas[0].energy
    
    def test1(self):
        print "running TestNS"
        self.assert_(len(self.ns.replicas) == self.nreplicas)
        self.assert_(self.Emax < self.Emax0)
        self.assert_(self.Emin < self.Emax)
        self.assert_(self.Emin >= 0)
        self.assert_(self.ns.stepsize != self.stepsize)
        self.assertEqual(len(self.ns.max_energies), self.niter * self.nproc)
Exemplo n.º 5
0
class TestNS_LJ(unittest.TestCase):
    def setUp(self):
        self.setUp1()

    def compute_cv(self, Tmin=.01, Tmax=3., nT=100):
        T = np.arange(Tmin, Tmax, (Tmax - Tmin) / nT)
        Cv = compute_cv_c(np.array(self.ns.max_energies),
                          float(self.nproc),
                          float(self.ndof),
                          T.min(),
                          T.max(),
                          T.size,
                          float(self.ndof),
                          live=False)
        return T, Cv

    def set_up_system(self):
        self.natoms = 13
        self.gmin = -44.3269
        self.system = LJClusterSENS(self.natoms, 2.5)
        self.ndof = 3 * self.natoms - 6

    def setUp1(self, nproc=1):
        self.set_up_system()
        self.nreplicas = 10
        self.stepsize = 0.01
        self.nproc = nproc

        self.mc_runner = self.system.get_mc_walker(mciter=100)

        self.ns = NestedSampling(self.system,
                                 self.nreplicas,
                                 self.mc_runner,
                                 stepsize=0.1,
                                 nproc=nproc,
                                 verbose=False)

        self.Emax0 = self.ns.replicas[-1].energy

        self.niter = 100
        for i in xrange(self.niter):
            self.ns.one_iteration()
        self.Emax = self.ns.replicas[-1].energy
        self.Emin = self.ns.replicas[0].energy

    def test1(self):
        self.assert_(len(self.ns.replicas) == self.nreplicas)
        self.assert_(self.Emax < self.Emax0)
        self.assert_(self.Emin < self.Emax)
        self.assert_(self.Emin < 0)
        self.assert_(self.Emin >= self.gmin)
        self.assert_(self.ns.stepsize != self.stepsize)
        self.assertEqual(len(self.ns.max_energies), self.niter * self.nproc)
        self.assertEqual(self.ns.failed_mc_walks, 0)

    def run_ns(self, max_iter=100, Etol=1e-4):
        #        max_iter = 10000
        #        self.Etol = .01
        self.Etol = Etol
        for i in xrange(int(max_iter)):
            self.ns.one_iteration()
            deltaE = self.ns.replicas[-1].energy - self.ns.replicas[0].energy
            if deltaE < self.Etol:
                break
        self.niter = i + 1
        self.Emax = self.ns.replicas[-1].energy
        self.Emin = self.ns.replicas[0].energy