AutonLabTruth commited on
Commit
b6ed59b
1 Parent(s): c1807a5

Added multiprocessing experiment

Browse files
Files changed (1) hide show
  1. pysr/Problems.py +37 -6
pysr/Problems.py CHANGED
@@ -89,20 +89,51 @@ class FeynmanProblem(Problem):
89
  return ret
90
 
91
 
92
- def run_on_problem(problem, verbosity=0):
93
  """
94
  Takes in a problem and returns a tuple: (equations, best predicted equation, actual equation)
95
  """
96
  from time import time
97
  starting = time()
98
- equations = pysr(problem.X, problem.y, variable_names=problem.variable_names, verbosity=verbosity)
99
  timing = time()-starting
100
- others = {"equations": equations, "time": timing}
101
- return best(equations), problem.form, others
 
 
102
 
103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  def do_feynman_experiments(first=100, verbosity=0, dp=500, output_file_path="experiments/FeynmanExperiment.csv", data_dir="datasets/FeynmanEquations.csv"):
105
  from tqdm import tqdm
 
106
  problems = FeynmanProblem.mk_problems(first=first, gen=True, dp=dp, data_dir=data_dir)
107
  indx = range(len(problems))
108
  ids = []
@@ -116,7 +147,7 @@ def do_feynman_experiments(first=100, verbosity=0, dp=500, output_file_path="exp
116
  true_equations.append(true_equation)
117
  time_takens.append(others['time'])
118
  with open(output_file_path, 'a') as f:
119
- writer = csv.writer(outcsv, delimiter=',')
120
  writer.writerow(['ID', 'Predicted', 'True', 'Time'])
121
  for i in range(len(ids)):
122
  writer.writerow([ids[i], predictions[i], true_equations[i], time_takens[i]])
@@ -124,4 +155,4 @@ def do_feynman_experiments(first=100, verbosity=0, dp=500, output_file_path="exp
124
 
125
 
126
  if __name__ == "__main__":
127
- do_feynman_experiments(first=4)
 
89
  return ret
90
 
91
 
92
+ def run_on_problem(problem, verbosity=0, multiprocessing=True):
93
  """
94
  Takes in a problem and returns a tuple: (equations, best predicted equation, actual equation)
95
  """
96
  from time import time
97
  starting = time()
98
+ equations = pysr(problem.X, problem.y, variable_names=problem.variable_names, verbosity=verbosity,)
99
  timing = time()-starting
100
+ others = {"time": timing, "problem": problem}
101
+ if not multiprocessing:
102
+ others['equations'] = equations
103
+ return str(best(equations)), problem.form, others
104
 
105
 
106
+ def do_feynman_experiments_parallel(first=100, verbosity=0, dp=500, output_file_path="experiments/FeynmanExperiment.csv", data_dir="datasets/FeynmanEquations.csv"):
107
+ import multiprocessing as mp
108
+ from tqdm import tqdm
109
+ problems = FeynmanProblem.mk_problems(first=first, gen=True, dp=dp, data_dir=data_dir)
110
+ ids = []
111
+ predictions = []
112
+ true_equations = []
113
+ time_takens = []
114
+ pool = mp.Pool()
115
+ results = []
116
+ with tqdm(total=len(problems)) as pbar:
117
+ for i, res in enumerate(pool.imap(run_on_problem, problems)):
118
+ results.append(res)
119
+ pbar.update()
120
+ for res in results:
121
+ prediction, true_equation, others = res
122
+ problem = others['problem']
123
+ ids.append(problem.eq_id)
124
+ predictions.append(prediction)
125
+ true_equations.append(true_equation)
126
+ time_takens.append(others['time'])
127
+ with open(output_file_path, 'a') as f:
128
+ writer = csv.writer(f, delimiter=',')
129
+ writer.writerow(['ID', 'Predicted', 'True', 'Time'])
130
+ for i in range(len(ids)):
131
+ writer.writerow([ids[i], predictions[i], true_equations[i], time_takens[i]])
132
+ return
133
+
134
  def do_feynman_experiments(first=100, verbosity=0, dp=500, output_file_path="experiments/FeynmanExperiment.csv", data_dir="datasets/FeynmanEquations.csv"):
135
  from tqdm import tqdm
136
+
137
  problems = FeynmanProblem.mk_problems(first=first, gen=True, dp=dp, data_dir=data_dir)
138
  indx = range(len(problems))
139
  ids = []
 
147
  true_equations.append(true_equation)
148
  time_takens.append(others['time'])
149
  with open(output_file_path, 'a') as f:
150
+ writer = csv.writer(f, delimiter=',')
151
  writer.writerow(['ID', 'Predicted', 'True', 'Time'])
152
  for i in range(len(ids)):
153
  writer.writerow([ids[i], predictions[i], true_equations[i], time_takens[i]])
 
155
 
156
 
157
  if __name__ == "__main__":
158
+ do_feynman_experiments_parallel(first=10)