File: brute_force_parameter_optimizer.py

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (50 lines) | stat: -rw-r--r-- 2,223 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import logging

import gold_inexact_matching.iterative_parameter_optimizer\
    as iterative_optimizer
from gold_inexact_matching import parameter_set


class BruteForceParameterOptimizer(
    iterative_optimizer.IterativeParameterOptimizer):
  """A ParameterOptimizer for use with any number of changing parameters.

  VERY slow, but provides the most complete information when trying to
  optimize multiple parameters.
  """

  def _RunOptimizationImpl(self) -> None:
    # Look for the minimum max_delta that results in a successful comparison
    # for each possible edge_threshold/max_diff combination.
    #
    # range/xrange(x, y) returns the range in [x, y), so adjust by 1 to make the
    # range inclusive.
    # We go from max to min instead of min to max for edge_threshold, so
    # decrease the min by 1 instead of increasing the max by 1.
    for edge_threshold in range(self._args.max_edge_threshold,
                                self._args.min_edge_threshold - 1,
                                -1 * self._args.edge_threshold_step):
      should_continue = True
      for max_diff in range(self._args.min_max_diff,
                            self._args.max_max_diff + 1,
                            self._args.max_diff_step):
        for max_delta in range(self._args.min_delta_threshold,
                               self._args.max_delta_threshold + 1,
                               self._args.delta_threshold_step):
          parameters = parameter_set.ParameterSet(max_diff, max_delta,
                                                  edge_threshold)
          success, _, _ = self._RunComparisonForParameters(parameters)
          if success:
            print(f'Found good parameters {parameters}')
            should_continue = False
            break
          logging.info('Found bad parameters %s', parameters)
        # Increasing the max_diff for a given edge_threshold once we've found
        # a good max_delta won't give us any new information, so go on to the
        # next edge_threshold.
        if not should_continue:
          break