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()