def __init__(self, natoms, minimiser, composition="default", labels=("X", ), pop_size=10, max_generation=10, selector=TournamentSelector(3), offspring=8, mutant_rate=0.1, remove_duplicates=False, mutator=MutateReplace(), crossover=DeavenHo()): #Parameters self.max_generation = max_generation self.mutant_rate = mutant_rate self.offspring = offspring self.pop_size = pop_size self.remove_duplicates = remove_duplicates self.selector = selector self.mutator = mutator self.crossover = crossover #Factory self.factory = ClusterFactory(natoms, minimiser, composition, labels) #PopulationList self.population = PopulationList(natoms, self.factory, pop_size) #Evolutionary progress self.mean_energy_series = [] self.min_energy_series = [] self.db = Database(db="mydatabase.sqlite") self.storage = self.db.minimum_adder()
def main(): parser = argparse.ArgumentParser(description="print information about the database") parser.add_argument("database", type=str, help="Database file name") parser.add_argument("--write-disconnect", dest="writeDPS", action="store_true", help="generate min.dat and ts.dat to use with disconnectDPS") parser.add_argument("-m", dest="writeMinima", action="store_true", help="dump minima to screen") parser.add_argument("-t", dest="writeTS", action="store_true", help="dump transition states to screen") parser.add_argument("-p", dest="properties", action="store_true", help="print system properties") parser.add_argument("-s", dest="summary", action="store_true", help="print summary") parser.add_argument("-S", dest="summary_long", action="store_true", help="print long summary") args = parser.parse_args() if args.summary_long: args.summary = True db = Database(db=args.database, createdb=False) if args.properties or args.summary: print_system_properties(db) if args.summary: print "number of minima:", db.number_of_minima() print "number of transition states:", db.number_of_transition_states() if args.summary_long: long_summary(db) if args.writeMinima: print "List of minima: energy id fvib pgorder" print "---------------" for m in db.minima(): print "%f\t\tid %d %s %s" % (m.energy, m._id, str(m.fvib), str(m.pgorder)) print "END\n" if args.writeTS: print "List of transition states:" print "--------------------------" for ts in db.transition_states(): print "%d\t<->\t%d\tid %d\tenergies %f %f %f" % \ (ts.minimum1._id, ts.minimum2._id, ts._id, ts.minimum1.energy, ts.energy, ts.minimum2.energy) print "END\n" if args.writeDPS: writeDPS(db)
def main(): # add some program options parser = OptionParser(usage = "usage: %prog [options] storage") parser.add_option("--write-disconnect", dest="writeDPS", action="store_true", help="generate min.dat and ts.dat to use with disconnectDPS") parser.add_option("-m", dest="writeMinima", action="store_true", help="dump minima to screen") parser.add_option("-t", dest="writeTS", action="store_true", help="dump transition states to screen") parser.add_option("--cif", dest="writeCIF", action="store_true", help="export cif files") parser.add_option("--cif-dir", dest="cifDir", default=".", action="store",type="string", help="directory to write cifs to") (options, args) = parser.parse_args() # print help if no input file is given if(len(args) != 1): parser.print_help() exit(-1) db = Database(db=args[0]) if(options.writeMinima): print "List of minima:" print "---------------" for m in db.minima(): print "%f\t\tid %d"%(m.energy, m._id) print "END\n" if(options.writeTS): print "List of transition states:" print "--------------------------" for ts in db.transition_states(): print "%d\t<->\t%d\tid %d\tenergies %f %f %f"%\ (ts.minimum1._id, ts.minimum2._id, ts._id, ts.minimum1.energy, ts.energy, ts.minimum2.energy) print "END\n" if(options.writeDPS): writeDPS(db) if(options.writeCIF): GMIN.initialize() i=0 for m in db.minima(): i+=1 filename = options.cifDir+"/lowest%03d.cif"%(i) print "minimum",i, "energy",m.energy,"to",filename GMIN.writeCIF(filename, m.coords, "E"+str(m.energy))
Input: coords.prmtop ( for number of atoms ) min.data, ts.data, extractedmin, extractedts Output: storage.sqlite """ # determine number of atoms from prmtop prmtop = AmberPrmtopFile( 'coords.prmtop' ) # TOSET natoms = prmtop.topology._numAtoms # open database db = Database(db="storage.sqlite") # TOSET def read_coords(filee): coords = np.zeros(3*natoms) for i in range(natoms): x = filee.readline().split() coords[i*3:i*3+3] = [float(y) for y in x] return coords # counter to keep track of added minima mini=1 minima={} # for timing tt = t0 = time.time()
# print help if no input file is given if(len(args) != 1): parser.print_help() exit(-1) infile = args[0] outfile = infile # initialize GMIN GMIN.initialize() pot = gminpotential.GMINPotential(GMIN) crystals.GMIN = GMIN # open the storage class db_in = Database(db=infile) if(options.out!=None): outfile = options.out db_out = Database(db=outfile) print("Start to reoptimize minima") for m in db_in.minima(): print("optimizing minima",m._id,", energy", m.energy) ret = dmagmin.quenchCrystal(m.coords, pot.getEnergyGradient, tol=options.tol, maxErise=options.maxErise) print("new energy",ret[1],"(difference %f)"%(ret[1] - m.energy)) print() if(options.out!=None): db_out.addMinimum(ret[1], ret[0]) else: m.energy = ret[1] m.coords = ret[0]
import numpy as np import oxdnagmin_ as GMIN from pele.potentials.gminpotential import GMINPotential import pele.basinhopping as bh from pele.takestep import displace from pele.storage.database import Database # initialize GMIN GMIN.initialize() # create a potential which calls GMIN potential = GMINPotential(GMIN) # get the initial coorinates coords = potential.getCoords() coords = np.random.random(coords.shape) # create takestep routine step = displace.RandomDisplacement(stepsize=1.) # store all minima in a database db = Database(db="storage.sqlite", accuracy=1e-2) # create Basinhopping object opt = bh.BasinHopping(coords, potential, step, db.minimum_adder()) # run for 100 steps opt.run(1000) # now dump all the minima i = 0 for m in db.minima(): i += 1 GMIN.userpot_dump("lowest_%03d.dat" % (i), m.coords)
def main(): # add some program options parser = OptionParser(usage="usage: %prog [options] storage") parser.add_option( "--write-disconnect", dest="writeDPS", action="store_true", help="generate min.dat and ts.dat to use with disconnectDPS") parser.add_option("-m", dest="writeMinima", action="store_true", help="dump minima to screen") parser.add_option("-t", dest="writeTS", action="store_true", help="dump transition states to screen") parser.add_option("--coords", dest="writeCoords", action="store_true", help="export coordinates files") parser.add_option("--xyz", dest="writeXYZ", action="store_true", help="export xyz files") (options, args) = parser.parse_args() # print help if no input file is given if (len(args) != 1): parser.print_help() exit(-1) db = Database(db=args[0]) if (options.writeMinima): print "List of minima:" print "---------------" for m in db.minima(): print "%f\t\tid %d" % (m.energy, m._id) print "END\n" if (options.writeTS): print "List of transition states:" print "--------------------------" for ts in db.transition_states(): print "%d\t<->\t%d\tid %d\tenergies %f %f %f"%\ (ts.minimum1._id, ts.minimum2._id, ts._id, ts.minimum1.energy, ts.energy, ts.minimum2.energy) print "END\n" if (options.writeDPS): writeDPS(db) if (options.writeCoords): GMIN.initialize() i = 0 for m in db.minima(): i += 1 filename = "lowest/lowest%03d.cif" % (i) print "minimum", i, "energy", m.energy, "to", filename GMIN.userpot_dump(filename, m.coords) if (not TO_PDB is None): os.system(TO_PDB % filename) np.savetxt("lowest/coords_%03d.txt" % (i), m.coords) if (options.writeXYZ): traj = open("lowest/traj.xyz", "w") i = 0 for m in db.minima(): i += 1 filename = "lowest/lowest%03d.xyz" % (i) print "minimum", i, "energy", m.energy, "to", filename export_xyz(open(filename, "w"), m.coords) export_xyz(traj, m.coords) traj.close()
''' Read structures from the database generated by the batch GA. Run the run_batch.py script to generate a database. @author: Mark Oakley ''' import numpy as np from pele.storage.database import Database db = Database(db="mydatabase.sqlite") minima = db.minima() print(db.number_of_minima()) for i in minima: print(i.energy) print(np.reshape(i.coords, (-1, 3)))