def testBLJ(self): import pele.defaults as defaults X1 = np.copy(self.X1) X2 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2 #run a quench so the structure is not crazy ret = defaults.quenchRoutine(X2, self.pot.getEnergyGradient) X2 = ret[0] self.runtest(X1, X2, findBestPermutation)
def testLJ_hungarian(self): """test findBestPermutationListOPTIM""" import pele.defaults as defaults X1 = np.copy(self.X1) X2 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2 #run a quench so the structure is not crazy ret = defaults.quenchRoutine(X2, self.pot.getEnergyGradient) X2 = ret[0] self.runtest(X1, X2, findBestPermutationListHungarian, atomlist=self.permlist[0])
def setUp(self): from pele.potentials.ljpshiftfast import LJpshift as BLJ from pele import defaults self.natoms = 15 self.ntypeA = int(self.natoms * .8) self.pot = BLJ(self.natoms, self.ntypeA) self.permlist = [range(self.ntypeA), range(self.ntypeA, self.natoms)] self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2 ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, tol=.1) self.X1 = ret[0]
def setUp(self): from pele.potentials import LJ from pele import defaults from pele.mindist import CoMToOrigin self.natoms = 15 self.pot = LJ(self.natoms) self.permlist = [range(self.natoms)] self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2 ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, tol=.1) self.X1 = ret[0] self.X1 = CoMToOrigin(self.X1)
def setUp(self): from pele.potentials.ljpshiftfast import LJpshift as BLJ from pele import defaults self.natoms = 25 self.ntypeA = int(self.natoms * .8) self.pot = BLJ(self.natoms, self.ntypeA) self.permlist = [range(self.ntypeA), range(self.ntypeA, self.natoms)] self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2 #run a quench so the structure is not crazy ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, **defaults.quenchParams) self.X1 = ret[0]
def _optimizePermRot(X1, X2, niter, permlist, verbose=False, use_quench=True): if use_quench: pot = MinPermDistPotential(X1, X2.copy(), permlist=permlist) distbest = getDistxyz(X1, X2) mxbest = np.identity(3) X20 = X2.copy() for i in range(niter): #get and apply a random rotation aa = random_aa() if not use_quench: mx = aa2mx(aa) mxtot = mx #print "X2.shape", X2.shape else: #optimize the rotation using a permutationally invariand distance metric ret = defaults.quenchRoutine(aa, pot.getEnergyGradient, tol=0.01) aa1 = ret[0] mx1 = aa2mx(aa1) mxtot = mx1 X2 = applyRotation(mxtot, X20) #optimize the permutations dist, X1, X2 = findBestPermutation(X1, X2, permlist) if verbose: print "dist", dist, "distbest", distbest #print "X2.shape", X2.shape #optimize the rotation dist, Q2 = getAlignRotation(X1, X2) # print "dist", dist, "Q2", Q2 mx2 = q2mx(Q2) mxtot = np.dot(mx2, mxtot) if dist < distbest: distbest = dist mxbest = mxtot return distbest, mxbest