1 import sys
2 from Numeric import Float64, ones, copy, zeros
3 from re import match
4
5 -def grid(func, grid_ops, args=(), print_flag=0):
6 """Grid search function.
7
8
9 Function options
10 ~~~~~~~~~~~~~~~~
11
12 func - The function to minimise.
13 grid_ops - Matrix of options for the grid search.
14 args - The tuple of arguments to supply to the function func.
15
16 The first dimension of grid_ops corresponds to the parameters of the function func, and the second dimension corresponds to:
17 0 - The number of increments.
18 1 - Lower limit.
19 2 - Upper limit.
20
21
22 Returned objects
23 ~~~~~~~~~~~~~~~~
24
25 The parameter vector corresponding to the minimum function value.
26 The minimum function value.
27
28 """
29
30
31 num_params = len(grid_ops)
32 total_steps = 1
33 step_num = ones((num_params))
34 step_size = zeros((num_params), Float64)
35 params = zeros((num_params), Float64)
36 min_params = zeros((num_params), Float64)
37 for k in range(num_params):
38 step_size[k] = (grid_ops[k][2] - grid_ops[k][1]) / (grid_ops[k][0] - 1)
39 params[k] = grid_ops[k][1]
40 min_params[k] = grid_ops[k][1]
41 total_steps = total_steps * grid_ops[k][0]
42
43
44 f = apply(func, (params,)+args)
45 f_min = f
46
47
48 if print_flag:
49 print "\n%-23s%-20i\n" % ("Total number of steps:", total_steps)
50 if print_flag == 2:
51 print "%-20s%-20s\n" % ("Step size:", `step_size`)
52 print "%-6s%-8i%-12s%-20s" % ("Step:", 1, "Min params:", `params`)
53 if print_flag == 2:
54 print "%-20s%-20i" % ("Step number:", 1)
55 print "%-20s%-20s" % ("Increment:", `step_num`)
56 print "%-20s%-20s" % ("Init params:", `params`)
57 print "%-20s%-20g\n" % ("Init f:", f)
58
59
60 for step in range(2, total_steps + 1):
61
62 for k in range(num_params):
63 if step_num[k] < grid_ops[k][0]:
64 step_num[k] = step_num[k] + 1
65 params[k] = params[k] + step_size[k]
66
67 break
68 else:
69 step_num[k] = 1
70 params[k] = grid_ops[k][1]
71
72
73 f = apply(func, (params,)+args)
74
75
76 if f < f_min:
77 f_min = f
78 min_params = copy.deepcopy(params)
79
80
81 if print_flag:
82 print "%-6s%-8i%-12s%-65s%-16s%-20s" % ("Step:", step, "Min params:", `min_params`, "Function value:", `f_min`)
83
84
85 if print_flag == 2:
86 print "%-20s%-20i" % ("Step number:", step)
87 print "%-20s%-20s" % ("Increment:", `step_num`)
88 print "%-20s%-20s" % ("Params:", `params`)
89 print "%-20s%-20g" % ("Function value:", f)
90 print "%-20s%-20s" % ("Min params:", `min_params`)
91 print "%-20s%-20g\n" % ("Min f:", f_min)
92
93 return min_params, f_min, total_steps
94