mailr7732 - in /branches/multi_processor_merge: multi/commands.py specific_fns/model_free/mf_minimise.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on October 16, 2008 - 00:15:
Author: bugman
Date: Thu Oct 16 00:15:01 2008
New Revision: 7732

URL: http://svn.gna.org/viewcvs/relax?rev=7732&view=rev
Log:
Merged all that could be merged from r3266.

The 2 commands used were:
svn merge -r3265:3266 
svn+ssh://bugman@xxxxxxxxxxx/svn/relax/branches/multi_processor .
svn merge -r3265:3266 
svn+ssh://bugman@xxxxxxxxxxx/svn/relax/branches/multi_processor/specific_fns/model_free.py
 specific_fns/model_free/mf_minimise.py

The grid search code was skipped as it is in minfx 
(https://gna.org/projects/minfx/).

.....
  r3266 | varioustoxins | 2007-04-12 18:48:28 +0200 (Thu, 12 Apr 2007) | 2 
lines
  Changed paths:
     M /branches/multi_processor/minimise/grid.py
     M /branches/multi_processor/multi/commands.py
     M /branches/multi_processor/specific_fns/model_free.py

  partial integration of distributed grid code (everything broken)
.....


Modified:
    branches/multi_processor_merge/multi/commands.py
    branches/multi_processor_merge/specific_fns/model_free/mf_minimise.py

Modified: branches/multi_processor_merge/multi/commands.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_processor_merge/multi/commands.py?rev=7732&r1=7731&r2=7732&view=diff
==============================================================================
--- branches/multi_processor_merge/multi/commands.py (original)
+++ branches/multi_processor_merge/multi/commands.py Thu Oct 16 00:15:01 2008
@@ -50,6 +50,8 @@
         msg = processor.get_name()
         result = Result_string(msg,completed)
         processor.return_object(result)
+
+
 
 #not quite a momento so a memo
 class MF_memo(Memo):
@@ -63,10 +65,23 @@
         self.scaling=scaling
         self.scaling_matrix=scaling_matrix
 
+OFFSET_XK=0
+OFFSET_FK=1
+OFFSET_K=2
+OFFSET_F_COUNT=3
+OFFSET_G_COUNT=4
+OFFSET_H_COUNT=5
+OFFSET_WARNING=6
+
+OFFSET_SHORT_MIN_PARAMS=0
+OFFSET_SHORT_FK=1
+OFFSET_SHORT_K=2
+
+
 
 class MF_result_command(Result_command):
     def __init__(self,memo_id,param_vector, func, iter, fc, gc, hc, 
warning,completed):
-        
super(MF_result_command,self).__init__(completed=completed,memo_id=memo_id)
+        super(MF_result_command,self).__init__(completed=completed)
         self.memo_id=memo_id
         self.param_vector=param_vector
         self.func=func
@@ -87,6 +102,12 @@
                                gc=self.gc,hc=self.hc, warning=self.warning,
                                run=memo.run, index=memo.index, 
sim_index=memo.sim_index,
                                param_set=memo.param_set, 
scaling=memo.scaling, scaling_matrix=memo.scaling_matrix)
+
+
+
+
+
+
 
 
 class MF_minimise_command(Slave_command):
@@ -197,12 +218,20 @@
             if match('^[Gg]rid', m_m['min_algor']):
                 print "Unconstrained grid search size: " + 
`i_m['grid_size']` + " (constraints may decrease this size).\n"
 
+    def process_results(self,results,processor,completed):
+        param_vector, func, iter, fc, gc, hc, warning = results
+
+        result_string = sys.stdout.getvalue() + sys.stderr.getvalue()
+        processor.return_object(Result_string(result_string,completed=False))
+        processor.return_object(MF_result_command(self.memo_id,param_vector, 
func, iter, fc, gc, hc, warning,completed=completed))
+
     def run(self,processor, completed):
 
         #FIXME: move to processor startup
         save_stdout = sys.stdout
         save_stderr = sys.stderr
         pre_string = processor.rank_format_string() % processor.rank()
+        # add debug flag or extra channels that output immediately
         sys.stdout = PrependStringIO(pre_string + ' S> ')
         sys.stderr = PrependStringIO(pre_string + ' E> ')
 
@@ -211,14 +240,110 @@
 
         self.do_feedback()
         results = generic_minimise(func=self.mf.func, dfunc=self.mf.dfunc, 
d2func=self.mf.d2func, **self.minimise_map)
-        param_vector, func, iter, fc, gc, hc, warning = results
-
-        result_string = sys.stdout.getvalue() + sys.stderr.getvalue()
-        processor.return_object(Result_string(result_string,completed=False))
-        processor.return_object(MF_result_command(self.memo_id,param_vector, 
func, iter, fc, gc, hc, warning,completed=completed))
+        self.process_results(results,processor,completed)
 
         #FIXME: move to processor startup
         sys.stdout.close()
         sys.stderr.close()
         sys.stdout = save_stdout
         sys.stderr = save_stderr
+
+class MF_grid_command(MF_minimise_command):
+    def __init__(self):
+        super(MF_grid_command,self).__init__()
+
+    def process_results(self,results,processor,completed):
+        param_vector, func, iter, fc, gc, hc, warning = results
+
+        result_string = sys.stdout.getvalue() + sys.stderr.getvalue()
+        processor.return_object(Result_string(result_string,completed=False))
+        
processor.return_object(MF_grid_result_command(self.memo_id,param_vector, 
func, iter, fc, gc, hc, warning,completed=completed))
+
+def MF_grid_memo(memo):
+    def __init__(self,super_grid_memo):
+        super(MF_grid_memo,self).__init__()
+        self.super_grid_memo = super_grid_memo
+
+
+    def add_results(self,results):
+        self.super_grid_memo.add_result(results)
+
+class MF_super_grid_memo(MF_memo):
+    def 
__init__(self,model_free,index,sim_index,run,param_set,scaling,scaling_matrix):
+        
super(MF_super_grid_memo,self).__init__(model_free,index,sim_index,run,param_set,scaling,scaling_matrix)
+        self.sub_memos = []
+        self.completed = False
+
+        # aggregated results
+        #             min_params, f_min, k
+        short_result=[None, None, 0]
+        self.xk = None
+        self.fk = None
+        self.k = 0
+        self.f_count = 0
+        self.g_count = 0
+        self.h_count = 0
+        self.warning = []
+
+
+
+
+    def add_sub_memo(self):
+        self.sub_memos.append(memo)
+
+    def add_result(self,sub_memo,results,full_output):
+        if full_output:
+            if results[OFFSET_FK] < self.fk:
+                self.xk = results[OFFSET_XK]
+                self.fk = results[OFFSET_FK]
+                self.k += results[OFFSET_K]
+                self.f_count += results[OFFSET_F_COUNT]
+                self.g_count += results[OFFSET_G_COUNT]
+                self.h_count += results[OFFSET_H_COUNT]
+                self.warning.append(results[WARNING_OFFSET])
+
+        else:
+            if results[OFFSET_SHORT_FK] < short_result[OFFSET_SHORT_FK]:
+                self.short_result[OFFSET_SHORT_MIN_PARAMS] = 
results[OFFSET_SHORT_MIN_PARAMS]
+                self.short_result[OFFSET_SHORT_FK] = results[OFFSET_SHORT_FK]
+                self.short_result[OFFSET_SHORT_K] += results[OFFSET_SHORT_K]
+        self.sub_memos.remove(sub_memo)
+
+        if len(self.sub_memos) < 1:
+            self.completed = True
+
+class MF_grid_result_command(Result_command):
+    def __init__(self,memo_id,param_vector, func, iter, fc, gc, hc, 
warning,completed):
+        super(MF_grid_result_command,self).__init__(completed=completed)
+        self.memo_id=memo_id
+        self.param_vector=param_vector
+        self.func=func
+        self.iter=iter
+        self.fc=fc
+        self.gc=gc
+        self.hc=hc
+        self.warning=warning
+
+    def run(self,relax,processor,memo):
+
+        # FIXME: Check against full result
+        # FIXME: names not consistent in memo
+        # FIXME too much repacking
+        results = 
(self.param_vector,self.func,self.iter,self.fc,self.gc,self.hc, self.warning)
+        memo.add_result(results,full_result=True)
+
+        sgm =  memo.super_grid_memo
+        if sgm.completed:
+
+
+
+            m_f=memo.model_free
+            m_f.iter_count = 0
+            m_f.f_count = 0
+            m_f.g_count = 0
+            m_f.h_count = 0
+            #raise Exception()
+            
m_f.disassemble_result(param_vector=sgm.xk,func=sgm.fk,iter=sgm.k,fc=sgm.fc,
+                                   gc=sgm.gc,hc=sgm.hc, warning=sgm.warning,
+                                   run=memo.run, index=memo.index, 
sim_index=memo.sim_index,
+                                   param_set=memo.param_set, 
scaling=memo.scaling, scaling_matrix=memo.scaling_matrix)

Modified: 
branches/multi_processor_merge/specific_fns/model_free/mf_minimise.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_processor_merge/specific_fns/model_free/mf_minimise.py?rev=7732&r1=7731&r2=7732&view=diff
==============================================================================
--- branches/multi_processor_merge/specific_fns/model_free/mf_minimise.py 
(original)
+++ branches/multi_processor_merge/specific_fns/model_free/mf_minimise.py Thu 
Oct 16 00:15:01 2008
@@ -33,7 +33,7 @@
 from generic_fns.mol_res_spin import count_spins, exists_mol_res_spin_data, 
return_spin_from_index, spin_loop
 from maths_fns.mf import Mf
 from minfx.generic import generic_minimise
-from multi.commands import  MF_minimise_command,MF_memo
+from multi.commands import  MF_grid_command,MF_super_grid_memo,MF_grid_memo
 from physical_constants import h_bar, mu0, return_gyromagnetic_ratio
 from relax_errors import RelaxError, RelaxInfError, RelaxLenError, 
RelaxNaNError, RelaxNoModelError, RelaxNoPdbError, RelaxNoResError, 
RelaxNoSequenceError, RelaxNoTensorError, RelaxNoValueError, 
RelaxNoVectorsError, RelaxNucleusError, RelaxProtonTypeError, 
RelaxSpinTypeError
 
@@ -940,8 +940,6 @@
             relax_data, relax_error, equations, param_types, param_values, 
r, csa, num_frq, frq, num_ri, remap_table, noe_r1_table, ri_labels, gx, gh, 
num_params, xh_unit_vectors, diff_type, diff_params = 
self.minimise_data_setup(model_type, min_algor, num_data_sets, min_options, 
spin=spin, sim_index=sim_index)
 
 
-            command=MF_minimise_command()
-            command.set_mf(init_params=param_vector, model_type=model_type, 
diff_type=diff_type, diff_params=diff_params, scaling_matrix=scaling_matrix, 
num_spins=num_spins, equations=equations, param_types=param_types, 
param_values=param_values, relax_data=relax_data, errors=relax_error, 
bond_length=r, csa=csa, num_frq=num_frq, frq=frq, num_ri=num_ri, 
remap_table=remap_table, noe_r1_table=noe_r1_table, ri_labels=ri_labels, 
gx=gx, gh=gh, h_bar=h_bar, mu0=mu0, num_params=num_params, 
vectors=xh_unit_vectors)
             #test.assert_mf_equivalent(self.mf)
             ##self.mf=test.mf
             # Setup the minimisation algorithm when constraints are present.
@@ -983,14 +981,37 @@
             # Minimisation.
             ###############
             #FIXME??? strange contraints
-            if constraints:
-                command.set_minimise(args=(), x0=param_vector, 
min_algor=min_algor, min_options=min_options, func_tol=func_tol, 
grad_tol=grad_tol, maxiter=max_iterations, A=A, b=b, full_output=1, 
print_flag=verbosity)
-            else:
-                command.set_minimise(args=(), x0=self.param_vector, 
min_algor=min_algor, min_options=min_options, func_tol=func_tol, 
grad_tol=grad_tol, maxiter=max_iterations, full_output=1, 
print_flag=verbosity)
-
-            memo = 
MF_memo(model_free=self,index=index,sim_index=sim_index,run=self.run,param_set=self.param_set,scaling=scaling,
 scaling_matrix=scaling_matrix)
-
-            self.relax.processor.add_to_queue(command,memo)
+            if match('^[Gg]rid', min_algor):
+                processors = self.relax.processor.processor_size()
+                full_grid_info = Grid_info(min_options)
+                sub_grid_list = 
full_grid_info.sub_divide(self.relax.processor.processor_size())
+                super_grid_memo = 
MF_super_grid_memo(model_free=self,index=index,sim_index=sim_index,run=self.run,param_set=self.param_set,
+                                          
scaling=scaling,scaling_matrix=self.scaling_matrix)
+
+                for sub_grid_index,sub_grid_info in enumerate(sub_grid_list):
+
+                    command=MF_grid_command()
+                    command.set_mf(init_params=param_vector, 
model_type=model_type, diff_type=diff_type, diff_params=diff_params, 
scaling_matrix=scaling_matrix, num_spins=num_spins, equations=equations, 
param_types=param_types, param_values=param_values, relax_data=relax_data, 
errors=relax_error, bond_length=r, csa=csa, num_frq=num_frq, frq=frq, 
num_ri=num_ri, remap_table=remap_table, noe_r1_table=noe_r1_table, 
ri_labels=ri_labels, gx=gx, gh=gh, h_bar=h_bar, mu0=mu0, 
num_params=num_params, vectors=xh_unit_vectors)
+                    if constraints:
+                        command.set_minimise(args=(), x0=param_vector, 
min_algor=min_algor, min_options=min_options, func_tol=func_tol, 
grad_tol=grad_tol, maxiter=max_iterations, A=A, b=b, full_output=1, 
print_flag=verbosity)
+                    else:
+                        command.set_minimise(args=(), x0=self.param_vector, 
min_algor=min_algor, min_options=min_options, func_tol=func_tol, 
grad_tol=grad_tol, maxiter=max_iterations, full_output=1, 
print_flag=verbosity)
+
+
+                memo = MF_grid_memo(super_grid_memo)
+                self.relax.processor.add_to_queue(command,memo)
+
+            else:
+                command=MF_minimise_command()
+                command.set_mf(init_params=param_vector, 
model_type=model_type, diff_type=diff_type, diff_params=diff_params, 
scaling_matrix=scaling_matrix, num_spins=num_spins, equations=equations, 
param_types=param_types, param_values=param_values, relax_data=relax_data, 
errors=relax_error, bond_length=r, csa=csa, num_frq=num_frq, frq=frq, 
num_ri=num_ri, remap_table=remap_table, noe_r1_table=noe_r1_table, 
ri_labels=ri_labels, gx=gx, gh=gh, h_bar=h_bar, mu0=mu0, 
num_params=num_params, vectors=xh_unit_vectors)
+                if constraints:
+                    command.set_minimise(args=(), x0=param_vector, 
min_algor=min_algor, min_options=min_options, func_tol=func_tol, 
grad_tol=grad_tol, maxiter=max_iterations, A=A, b=b, full_output=1, 
print_flag=verbosity)
+                else:
+                    command.set_minimise(args=(), x0=self.param_vector, 
min_algor=min_algor, min_options=min_options, func_tol=func_tol, 
grad_tol=grad_tol, maxiter=max_iterations, full_output=1, 
print_flag=verbosity)
+
+                memo = 
MF_memo(model_free=self,index=index,sim_index=sim_index,run=self.run,param_set=self.param_set,scaling=scaling,
 scaling_matrix=scaling_matrix)
+
+                self.relax.processor.add_to_queue(command,memo)
 
         #raise Exception('test')
         #self.relax.processor.run_queue()




Related Messages


Powered by MHonArc, Updated Thu Oct 16 00:20:04 2008