Changeset 962
- Timestamp:
- Jun 20, 2013 4:05:55 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIgrid.py
r951 r962 59 59 [ wxID_FOURCALC, wxID_FOURSEARCH, wxID_FOURCLEAR, wxID_PEAKSMOVE, wxID_PEAKSCLEAR, 60 60 wxID_CHARGEFLIP, wxID_PEAKSUNIQUE, wxID_PEAKSDELETE, wxID_PEAKSDA, 61 wxID_PEAKSDISTVP, wxID_PEAKSVIEWPT, wxID_FINDEQVPEAKS,wxID_SHOWBONDS,wxID_RUNMCSA, 62 ] = [wx.NewId() for item in range(14)] 61 wxID_PEAKSDISTVP, wxID_PEAKSVIEWPT, wxID_FINDEQVPEAKS,wxID_SHOWBONDS,wxID_MULTIMCSA, 62 wxID_SINGLEMCSA 63 ] = [wx.NewId() for item in range(15)] 63 64 64 65 [ wxID_PWDRADD, wxID_HKLFADD,wxID_PWDANALYSIS,wxID_DATADELETE, … … 1741 1742 self.GeneralCalc.Append(help='Clear map',id=wxID_FOURCLEAR, kind=wx.ITEM_NORMAL, 1742 1743 text='Clear map') 1743 self.GeneralCalc.Append(help='Run Monte Carlo - Simulated Annealing',id=wxID_RUNMCSA, kind=wx.ITEM_NORMAL, 1744 text='MC/SA') 1744 self.GeneralCalc.Append(help='Run Monte Carlo - Simulated Annealing on single processor',id=wxID_SINGLEMCSA, kind=wx.ITEM_NORMAL, 1745 text='Single MC/SA') 1746 self.GeneralCalc.Append(help='Run Monte Carlo - Simulated Annealing on multiprocessors',id=wxID_MULTIMCSA, kind=wx.ITEM_NORMAL, 1747 text='Multi MC/SA') 1745 1748 self.PostfillDataMenu() 1746 1749 -
trunk/GSASIImath.py
r961 r962 2317 2317 x0 = schedule.getstart_temp(best_state) 2318 2318 else: 2319 x0 = random.uniform(size=len(x0))*(upper-lower) + lower 2319 2320 best_state.x = None 2320 2321 best_state.cost = numpy.Inf … … 2347 2348 newmsg='%s%8.5f\n%s%8.4f%s'%('Temperature =',schedule.T,'MC/SA Residual =',best_state.cost*100,'%'))[0] 2348 2349 if not GoOn: 2350 best_state.x = last_state.x.copy() 2351 best_state.cost = last_state.cost 2349 2352 break 2350 2353 schedule.update_temp() … … 2389 2392 return best_state.x, retval 2390 2393 2394 def worker(iCyc,data,RBdata,reflType,reflData,covData,out_q): 2395 outlist = [] 2396 for n in range(iCyc): 2397 result = mcsaSearch(data,RBdata,reflType,reflData,covData,None) 2398 outlist.append(result[0]) 2399 print ' MC/SA residual: %.3f%% structure factor time: %.3f'%(100*result[0][2],result[1]) 2400 out_q.put(outlist) 2401 2402 def MPmcsaSearch(nCyc,data,RBdata,reflType,reflData,covData): 2403 import multiprocessing as mp 2404 2405 nprocs = mp.cpu_count() 2406 out_q = mp.Queue() 2407 procs = [] 2408 iCyc = np.zeros(nprocs) 2409 for i in range(nCyc): 2410 iCyc[i%nprocs] += 1 2411 for i in range(nprocs): 2412 p = mp.Process(target=worker,args=(int(iCyc[i]),data,RBdata,reflType,reflData,covData,out_q)) 2413 procs.append(p) 2414 p.start() 2415 resultlist = [] 2416 for i in range(nprocs): 2417 resultlist += out_q.get() 2418 for p in procs: 2419 p.join() 2420 2421 return resultlist 2422 2391 2423 2392 2424 def mcsaSearch(data,RBdata,reflType,reflData,covData,pgbar): -
trunk/GSASIIphsGUI.py
r961 r962 726 726 line2Sizer = wx.BoxSizer(wx.HORIZONTAL) 727 727 line2Sizer.Add(wx.StaticText(General,label=' MC/SA runs: '),0,wx.ALIGN_CENTER_VERTICAL) 728 Cchoice = ['1','2','3',' 5','10','15','20','30']728 Cchoice = ['1','2','3','4','8','12','20','32','64','128'] 729 729 cycles = wx.ComboBox(General,-1,value=str(MCSA.get('Cycles',1)),choices=Cchoice, 730 730 style=wx.CB_READONLY|wx.CB_DROPDOWN) 731 731 cycles.Bind(wx.EVT_COMBOBOX,OnCycles) 732 732 line2Sizer.Add(cycles,0,wx.ALIGN_CENTER_VERTICAL) 733 Achoice = ['log','fast','cauchy','boltzmann','Tremayne'] 733 Achoice = ['log','fast'] #these work 734 # Achoice = ['log','fast','cauchy','boltzmann','Tremayne'] 734 735 line2Sizer.Add(wx.StaticText(General,label=' MC/SA schedule: '),0,wx.ALIGN_CENTER_VERTICAL) 735 736 Alist = wx.ComboBox(General,-1,value=MCSA['Algorithm'],choices=Achoice, … … 4326 4327 MCSA.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1) 4327 4328 G2frame.dataFrame.Update() 4328 4329 def OnRunMCSA(event): 4329 4330 def OnRunMultiMCSA(event): 4331 RunMCSA('multi') 4332 4333 def OnRunSingleMCSA(event): 4334 RunMCSA('single') 4335 4336 def RunMCSA(process): 4330 4337 generalData = data['General'] 4331 4338 mcsaControls = generalData['MCSA controls'] … … 4361 4368 print '**** ERROR - no models defined for MC/SA run****' 4362 4369 return 4363 pgbar = wx.ProgressDialog('MC/SA','Residual Rcf =',101.0, 4364 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_CAN_ABORT) 4365 screenSize = wx.ClientDisplayRect() 4366 Size = pgbar.GetSize() 4367 Size = (int(Size[0]*1.2),Size[1]) # increase size a bit along x 4368 pgbar.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5)) 4369 pgbar.SetSize(Size) 4370 if process == 'single': 4371 pgbar = wx.ProgressDialog('MC/SA','Residual Rcf =',101.0, 4372 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_CAN_ABORT) 4373 screenSize = wx.ClientDisplayRect() 4374 Size = pgbar.GetSize() 4375 Size = (int(Size[0]*1.2),Size[1]) # increase size a bit along x 4376 pgbar.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5)) 4377 pgbar.SetSize(Size) 4378 else: 4379 pgbar = None 4370 4380 time1 = time.time() 4371 4381 try: 4372 4382 tsf = 0. 4373 for i in range(mcsaControls['Cycles']): 4374 Result,tsum = G2mth.mcsaSearch(data,RBdata,reflType,reflData,covData,pgbar) 4375 MCSAdata['Results'].append(Result) 4376 print ' MC/SA runs completed: %d residual: %.3f%%'%(i,100*Result[2]) 4377 tsf += tsum 4383 nCyc = mcsaControls['Cycles'] 4384 if process == 'single': 4385 for i in range(nCyc): 4386 Result,tsum = G2mth.mcsaSearch(data,RBdata,reflType,reflData,covData,pgbar) 4387 MCSAdata['Results'].append(Result) 4388 print ' MC/SA run completed: %d residual: %.3f%%'%(i,100*Result[2]) 4389 tsf += tsum 4390 print ' Structure factor time: %.2f'%(tsf) 4391 else: 4392 MCSAdata['Results'] = G2mth.MPmcsaSearch(nCyc,data,RBdata,reflType,reflData,covData) 4378 4393 print ' MC/SA run time: %.2f'%(time.time()-time1) 4379 print ' Structure factor time: %.2f'%(tsf)4380 4394 finally: 4381 pgbar.Destroy() 4395 if process == 'single': 4396 pgbar.Destroy() 4382 4397 MCSAdata['Results'] = G2mth.sortArray(MCSAdata['Results'],2,reverse=False) 4383 4398 UpdateMCSA() … … 5078 5093 G2frame.dataFrame.Bind(wx.EVT_MENU, OnChargeFlip, id=G2gd.wxID_CHARGEFLIP) 5079 5094 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFourClear, id=G2gd.wxID_FOURCLEAR) 5080 G2frame.dataFrame.Bind(wx.EVT_MENU, OnRunMCSA, id=G2gd.wxID_RUNMCSA) 5095 G2frame.dataFrame.Bind(wx.EVT_MENU, OnRunSingleMCSA, id=G2gd.wxID_SINGLEMCSA) 5096 G2frame.dataFrame.Bind(wx.EVT_MENU, OnRunMultiMCSA, id=G2gd.wxID_MULTIMCSA) 5081 5097 G2frame.dataDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged) 5082 5098
Note: See TracChangeset
for help on using the changeset viewer.