Exemplo n.º 1
0
class TestMinimizers(unittest.TestCase):
    def setUp(self):
        from pygmin.systems import LJCluster
        natoms = 31
        self.system = LJCluster(natoms)
        self.pot = self.system.get_potential()

        # get a partially minimized structure
        x0 = self.system.get_random_configuration()
        ret = lbfgs_py(x0, self.pot, tol=1e-1)
        self.x0 = ret.coords.copy()
        self.E0 = ret.energy

        ret = lbfgs_py(self.x0, self.pot, tol=1e-7)
        self.x = ret.coords.copy()
        self.E = ret.energy

    def check_attributes(self, res):
        self.assertTrue(hasattr(res, "energy"))
        self.assertTrue(hasattr(res, "coords"))
        self.assertTrue(hasattr(res, "nsteps"))
        self.assertTrue(hasattr(res, "nfev"))
        self.assertTrue(hasattr(res, "rms"))
        self.assertTrue(hasattr(res, "grad"))
        self.assertTrue(hasattr(res, "success"))

    def test_lbfgs_py(self):
        res = lbfgs_py(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)

    def test_mylbfgs(self):
        res = mylbfgs(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)

    def test_fire(self):
        res = fire(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)

    def test_lbfgs_scipy(self):
        res = lbfgs_scipy(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)

    def test_bfgs_scipy(self):
        res = bfgs_scipy(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)
Exemplo n.º 2
0
class TestMinimizers(unittest.TestCase):
    def setUp(self):
        from pygmin.systems import LJCluster
        natoms = 31
        self.system = LJCluster(natoms)
        self.pot = self.system.get_potential()
        
        # get a partially minimized structure
        x0 = self.system.get_random_configuration()
        ret = lbfgs_py(x0, self.pot, tol=1e-1)
        self.x0 = ret.coords.copy()
        self.E0 = ret.energy
        
        ret = lbfgs_py(self.x0, self.pot, tol=1e-7)
        self.x = ret.coords.copy()
        self.E = ret.energy
    
    def check_attributes(self, res):
        self.assertTrue(hasattr(res, "energy"))
        self.assertTrue(hasattr(res, "coords"))
        self.assertTrue(hasattr(res, "nsteps"))
        self.assertTrue(hasattr(res, "nfev"))
        self.assertTrue(hasattr(res, "rms"))
        self.assertTrue(hasattr(res, "grad"))
        self.assertTrue(hasattr(res, "success"))
    
    def test_lbfgs_py(self):
        res = lbfgs_py(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)
        
    def test_mylbfgs(self):
        res = mylbfgs(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)
    
    def test_fire(self):
        res = fire(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)
    
    def test_lbfgs_scipy(self):
        res = lbfgs_scipy(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)
    
    def test_bfgs_scipy(self):
        res = bfgs_scipy(self.x0, self.pot, tol=1e-7)
        self.assertTrue(res.success)
        self.assertAlmostEqual(self.E, res.energy, 4)
        self.check_attributes(res)
Exemplo n.º 3
0
def size_scaling_smallest_eig(natoms):
    from pygmin.systems import LJCluster
    import time, sys
    system = LJCluster(natoms)
    pot = system.get_potential()
    quencher = system.get_minimizer(tol=10.)

    time1 = 0.
    time2 = 0.
    time3 = 0.
    time4 = 0.
    for i in range(100):
        coords = system.get_random_configuration()
        #        print "len(coords)", len(coords)
        coords = quencher(coords)[0]
        e, g, h = pot.getEnergyGradientHessian(coords)

        t0 = time.time()
        w1, v1 = get_smallest_eig(h)
        t1 = time.time()
        w, v = get_smallest_eig_arpack(h)
        t2 = time.time()
        w2, v2 = get_smallest_eig_sparse(h)
        t3 = time.time()
        w3, v3 = get_smallest_eig_nohess(coords, system, tol=1e-3)
        t4 = time.time()

        time1 += t1 - t0
        time2 += t2 - t1
        time3 += t3 - t2
        time4 += t4 - t3

        wdiff = np.abs(w - w1) / np.max(np.abs([w, w1]))
        if wdiff > 5e-3:
            sys.stderr.write(
                "eigenvalues for dense  are different %g %g normalized diff %g\n"
                % (w1, w, wdiff))
        wdiff = np.abs(w - w2) / np.max(np.abs([w, w2]))
        if wdiff > 5e-2:
            sys.stderr.write(
                "eigenvalues for sparse are different %g %g normalized diff %g\n"
                % (w2, w, wdiff))
        wdiff = np.abs(w - w3) / np.max(np.abs([w, w3]))
        if wdiff > 5e-2:
            sys.stderr.write(
                "eigenvalues for nohess are different %g %g normalized diff %g\n"
                % (w3, w, wdiff))


#    print "times", n, t1-t0, t2-t1, w1, w
    print "times", n, time1, time2, time3, time4
    sys.stdout.flush()
Exemplo n.º 4
0
def size_scaling_smallest_eig(natoms):
    from pygmin.systems import LJCluster
    import time, sys
    system = LJCluster(natoms)
    pot = system.get_potential()
    quencher = system.get_minimizer(tol=10.)
    
    time1 = 0.
    time2 = 0.
    time3 = 0.
    time4 = 0.
    for i in range(100):
        coords = system.get_random_configuration()
#        print "len(coords)", len(coords)
        coords = quencher(coords)[0]
        e, g, h = pot.getEnergyGradientHessian(coords)
        
        t0 = time.time()
        w1, v1 = get_smallest_eig(h)
        t1 = time.time()
        w, v = get_smallest_eig_arpack(h)
        t2 = time.time()
        w2, v2 = get_smallest_eig_sparse(h)
        t3 = time.time()
        w3, v3 = get_smallest_eig_nohess(coords, system, tol=1e-3)
        t4 = time.time()
        
        time1 += t1-t0
        time2 += t2-t1
        time3 += t3-t2
        time4 += t4-t3
        
        wdiff = np.abs(w-w1) / np.max(np.abs([w,w1]))
        if wdiff > 5e-3:
            sys.stderr.write("eigenvalues for dense  are different %g %g normalized diff %g\n" % (w1, w, wdiff))
        wdiff = np.abs(w-w2) / np.max(np.abs([w,w2]))
        if wdiff > 5e-2:
            sys.stderr.write("eigenvalues for sparse are different %g %g normalized diff %g\n" % (w2, w, wdiff))
        wdiff = np.abs(w-w3) / np.max(np.abs([w,w3]))
        if wdiff > 5e-2:
            sys.stderr.write("eigenvalues for nohess are different %g %g normalized diff %g\n" % (w3, w, wdiff))
#    print "times", n, t1-t0, t2-t1, w1, w
    print "times", n, time1, time2, time3, time4
    sys.stdout.flush()
Exemplo n.º 5
0
class TestMinimizers(unittest.TestCase):
    def setUp(self):
        from pygmin.systems import LJCluster
        natoms = 31
        self.system = LJCluster(natoms)
        self.pot = self.system.get_potential()

        # get a partially minimized structure
        x0 = self.system.get_random_configuration()
        ret = lbfgs_py(x0, self.pot.getEnergyGradient, tol=1.e-1)
        self.x0 = ret[0]
        self.E0 = ret[1]

        ret = lbfgs_py(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.x = ret[0]
        self.E = ret[1]

    def test_lbfgs_py(self):
        res = lbfgs_py(self.x0, self.pot.getEnergyGradient)
        self.assertAlmostEqual(self.E, res[1], 4)

    def test_mylbfgs(self):
        res = mylbfgs(self.x0, self.pot.getEnergyGradient)
        self.assertAlmostEqual(self.E, res[1], 4)

    def test_fire(self):
        res = fire(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.assertAlmostEqual(self.E, res[1], 4)

    def test_lbfgs_scipy(self):
        res = lbfgs_scipy(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.assertAlmostEqual(self.E, res[1], 4)

    def test_bfgs_scipy(self):
        res = bfgs(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.assertAlmostEqual(self.E, res[1], 4)
Exemplo n.º 6
0
class TestMinimizers(unittest.TestCase):
    def setUp(self):
        from pygmin.systems import LJCluster
        natoms = 31
        self.system = LJCluster(natoms)
        self.pot = self.system.get_potential()
        
        # get a partially minimized structure
        x0 = self.system.get_random_configuration()
        ret = lbfgs_py(x0, self.pot.getEnergyGradient, tol=1.e-1)
        self.x0 = ret[0]
        self.E0 = ret[1]
        
        ret = lbfgs_py(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.x = ret[0]
        self.E = ret[1]
    
    def test_lbfgs_py(self):
        res = lbfgs_py(self.x0, self.pot.getEnergyGradient)
        self.assertAlmostEqual(self.E, res[1], 4)
        
    def test_mylbfgs(self):
        res = mylbfgs(self.x0, self.pot.getEnergyGradient)
        self.assertAlmostEqual(self.E, res[1], 4)
    
    def test_fire(self):
        res = fire(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.assertAlmostEqual(self.E, res[1], 4)
    
    def test_lbfgs_scipy(self):
        res = lbfgs_scipy(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.assertAlmostEqual(self.E, res[1], 4)
    
    def test_bfgs_scipy(self):
        res = bfgs(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.assertAlmostEqual(self.E, res[1], 4)
Exemplo n.º 7
0
    print "times", n, time1, time2, time3, time4
    sys.stdout.flush()


def plot_hist(hess):
    import pylab as pl
    pl.hist(np.log10(np.abs(hess.reshape(-1))))
    pl.show()


if __name__ == "__main__":
    from pygmin.systems import LJCluster
    natoms = 30
    system = LJCluster(natoms)
    pot = system.get_potential()
    coords = system.get_random_configuration()

    xmin = system.get_random_minimized_configuration()[0]
    e, g, h = pot.getEnergyGradientHessian(xmin)
    evals = get_eigvals(h)
    print evals

    quencher = system.get_minimizer(tol=10.)
    coords = quencher(coords)[0]
    e, g, h = pot.getEnergyGradientHessian(coords)
    w1, v1 = get_smallest_eig(h)
    print w1
    w, v = get_smallest_eig_arpack(h)
    print w
    w2, v2 = get_smallest_eig_sparse(h)
    print w2, w2 / w1
Exemplo n.º 8
0
    
if __name__ == '__main__':
    unittest.main()
        
if __name__ == "__main__":
    from pygmin.systems import LJCluster
    natoms = 20
    rho = .5
    boxl = (float(natoms) / rho)**(1./3)
    boxlengths = np.ones(3) * boxl
    
    permlist = [range(natoms)]
    measure = MeasurePeriodic(boxlengths, permlist)
    
    system = LJCluster(natoms)

    x1 = system.get_random_configuration()
    x2 = x1.copy()
    x2 = randomly_permute(x2, permlist)
    
    exact_match = ExactMatchPeriodic(measure)
    em = exact_match.are_exact(x1, x2)
    print em
    
    unittest.main()
    
    
    
    
    
Exemplo n.º 9
0
        else:
            faccept = float(ndiff_accept) / ndiff
        if faccept > self.target_new_min_accept_prob:
            driver.acceptTest.temperature *= self.Tfactor
        else:
            driver.acceptTest.temperature /= self.Tfactor
        if self.verbose:
            print "    temperature is now %.4g ratio %.4g target %.4g" % (driver.acceptTest.temperature,
                                                         faccept, self.target_new_min_accept_prob)

if __name__ == "__main__":
    import numpy as np
    from pygmin.takestep import displace
    from pygmin.systems import LJCluster
    #from pygmin.takestep import adaptive
    
    natoms = 38
    sys = LJCluster(natoms=38)
    
    
    # random initial coordinates
    coords = sys.get_random_configuration()
    
    takeStep = displace.RandomDisplacement( stepsize=0.4 )
    tsAdaptive = AdaptiveStepsizeTemperature(takeStep, interval=300, verbose=True)
    
    db = sys.create_database()
    opt = sys.get_basinhopping(database=db, takestep=tsAdaptive, coords=coords)
    opt.printfrq = 50
    opt.run(5000)