예제 #1
0
    def decode(solution):
        """Convert solution into dict of hyperparameters."""
        # Start with out stationary (locked) paramaters
        hyperparameters = locked_values

        # Obtain moving hyperparameters from binary solution
        index = 0
        for name, parameters in meta_parameters.items():
            # Obtain binary for this hyperparameter
            binary_size = parameters['binary_size']
            binary = solution[index:index + binary_size]
            index += binary_size  # Just index to start of next hyperparameter

            # Decode binary
            if parameters['type'] == 'discrete':
                i = helpers.binary_to_int(
                    binary, upper_bound=len(parameters['values']) - 1)
                value = parameters['values'][i]
            elif parameters['type'] == 'int':
                value = helpers.binary_to_int(binary,
                                              offset=parameters['min'],
                                              upper_bound=parameters['max'])
            elif parameters['type'] == 'float':
                value = helpers.binary_to_float(binary,
                                                minimum=parameters['min'],
                                                maximum=parameters['max'])
            else:
                raise ValueError(
                    'Parameter type "{}" does not match known values'.format(
                        parameters['type']))

            # Store value
            hyperparameters[name] = value

        return hyperparameters
예제 #2
0
def test_binary_to_float_neg_lower_bound():
    assert helpers.binary_to_float([0], -1.0, 1.0) == -1.0
    assert helpers.binary_to_float([1], -1.0, 1.0) == 1.0

    assert helpers.binary_to_float([0, 0], -1.0, 1.0) == -1.0
    assert _approx_equal(helpers.binary_to_float([0, 1], -1.0, 1.0), -0.3333333333)
    assert _approx_equal(helpers.binary_to_float([1, 0], -1.0, 1.0), 0.3333333333)
    assert helpers.binary_to_float([1, 1], -1.0, 1.0) == 1.0
예제 #3
0
def test_binary_to_float_neg_lower_and_upper_bound():
    assert helpers.binary_to_float([0], -2.0, -1.0) == -2.0
    assert helpers.binary_to_float([1], -2.0, -1.0) == -1.0

    assert helpers.binary_to_float([0, 0], -2.0, -1.0) == -2.0
    assert _approx_equal(helpers.binary_to_float([0, 1], -2.0, -1.0), -1.6666666666)
    assert _approx_equal(helpers.binary_to_float([1, 0], -2.0, -1.0), -1.3333333333)
    assert helpers.binary_to_float([1, 1], -2.0, -1.0) == -1.0
예제 #4
0
def test_binary_to_float_neg_lower_and_upper_bound():
    assert helpers.binary_to_float([0], -2.0, -1.0) == -2.0
    assert helpers.binary_to_float([1], -2.0, -1.0) == -1.0

    assert helpers.binary_to_float([0, 0], -2.0, -1.0) == -2.0
    assert _approx_equal(helpers.binary_to_float([0, 1], -2.0, -1.0),
                         -1.6666666666)
    assert _approx_equal(helpers.binary_to_float([1, 0], -2.0, -1.0),
                         -1.3333333333)
    assert helpers.binary_to_float([1, 1], -2.0, -1.0) == -1.0
예제 #5
0
def test_binary_to_float_neg_lower_bound():
    assert helpers.binary_to_float([0], -1.0, 1.0) == -1.0
    assert helpers.binary_to_float([1], -1.0, 1.0) == 1.0

    assert helpers.binary_to_float([0, 0], -1.0, 1.0) == -1.0
    assert _approx_equal(helpers.binary_to_float([0, 1], -1.0, 1.0),
                         -0.3333333333)
    assert _approx_equal(helpers.binary_to_float([1, 0], -1.0, 1.0),
                         0.3333333333)
    assert helpers.binary_to_float([1, 1], -1.0, 1.0) == 1.0
예제 #6
0
    def decode(solution):
        """Convert solution into dict of hyperparameters."""
        # Start with out stationary (locked) paramaters
        hyperparameters = copy.deepcopy(locked_values)

        # Obtain moving hyperparameters from binary solution
        index = 0
        for name, parameters in meta_parameters.iteritems():
            # Obtain binary for this hyperparameter
            binary_size = parameters['binary_size']
            binary = solution[index:index + binary_size]
            index += binary_size  # Just index to start of next hyperparameter

            # Decode binary
            if parameters['type'] == 'discrete':
                i = helpers.binary_to_int(
                    binary, upper_bound=len(parameters['values']) - 1)
                value = parameters['values'][i]
            elif parameters['type'] == 'int':
                value = helpers.binary_to_int(
                    binary,
                    lower_bound=parameters['min'],
                    upper_bound=parameters['max'])
            elif parameters['type'] == 'float':
                value = helpers.binary_to_float(
                    binary,
                    lower_bound=parameters['min'],
                    upper_bound=parameters['max'])
            else:
                raise ValueError(
                    'Parameter type "{}" does not match known values'.format(
                        parameters['type']))

            # Store value
            hyperparameters[name] = value

        return hyperparameters
예제 #7
0
def decode_binary(binary, min_, max_):
    # Helpful functions from helpers are used to convert binary to floats
    x1 = helpers.binary_to_float(binary[0:16], min_, max_)
    x2 = helpers.binary_to_float(binary[16:32], min_, max_)
    return x1, x2
예제 #8
0
def decode_ackley(binary):
    # Helpful functions from helpers are used to convert binary to float
    # x1 and x2 range from -5.0 to 5.0
    x1 = helpers.binary_to_float(binary[0:16], -5.0, 5.0)
    x2 = helpers.binary_to_float(binary[16:32], -5.0, 5.0)
    return x1, x2
예제 #9
0
def decode_param(binary):
    learning_rate = helpers.binary_to_float(binary[0:16], 0.4, 1.0)
    neuron = helpers.binary_to_int(binary[16:32], 10, 15)
    return learning_rate, neuron
예제 #10
0
def test_binary_to_float_zero_one_bounds():
    assert helpers.binary_to_float([0], 0.0, 1.0) == 0.0
    assert helpers.binary_to_float([1], 0.0, 1.0) == 1.0

    assert helpers.binary_to_float([0, 0], 0.0, 1.0) == 0.0
    assert _approx_equal(helpers.binary_to_float([0, 1], 0.0, 1.0),
                         0.3333333333)
    assert _approx_equal(helpers.binary_to_float([1, 0], 0.0, 1.0),
                         0.6666666666)
    assert helpers.binary_to_float([1, 1], 0.0, 1.0) == 1.0

    assert helpers.binary_to_float([0, 0, 0], 0.0, 1.0) == 0.0
    assert _approx_equal(helpers.binary_to_float([0, 0, 1], 0.0, 1.0),
                         0.14285714285714285)
    assert _approx_equal(helpers.binary_to_float([0, 1, 0], 0.0, 1.0),
                         0.2857142857142857)
    assert _approx_equal(helpers.binary_to_float([0, 1, 1], 0.0, 1.0),
                         0.42857142857142855)
    assert _approx_equal(helpers.binary_to_float([1, 0, 0], 0.0, 1.0),
                         0.5714285714285714)
    assert _approx_equal(helpers.binary_to_float([1, 0, 1], 0.0, 1.0),
                         0.7142857142857142)
    assert _approx_equal(helpers.binary_to_float([1, 1, 0], 0.0, 1.0),
                         0.8571428571428571)
    assert helpers.binary_to_float([1, 1, 1], 0.0, 1.0) == 1.0
예제 #11
0
def test_binary_to_float_empty_binary_list():
    """An empty list can represent one value, and defaults to lower_bound."""
    assert helpers.binary_to_float([], 0.0, 1.0) == 0.0
예제 #12
0
def test_binary_to_float_zero_one_bounds():
    assert helpers.binary_to_float([0], 0.0, 1.0) == 0.0
    assert helpers.binary_to_float([1], 0.0, 1.0) == 1.0

    assert helpers.binary_to_float([0, 0], 0.0, 1.0) == 0.0
    assert _approx_equal(
        helpers.binary_to_float([0, 1], 0.0, 1.0), 0.3333333333)
    assert _approx_equal(
        helpers.binary_to_float([1, 0], 0.0, 1.0), 0.6666666666)
    assert helpers.binary_to_float([1, 1], 0.0, 1.0) == 1.0

    assert helpers.binary_to_float([0, 0, 0], 0.0, 1.0) == 0.0
    assert _approx_equal(
        helpers.binary_to_float([0, 0, 1], 0.0, 1.0), 0.14285714285714285)
    assert _approx_equal(
        helpers.binary_to_float([0, 1, 0], 0.0, 1.0), 0.2857142857142857)
    assert _approx_equal(
        helpers.binary_to_float([0, 1, 1], 0.0, 1.0), 0.42857142857142855)
    assert _approx_equal(
        helpers.binary_to_float([1, 0, 0], 0.0, 1.0), 0.5714285714285714)
    assert _approx_equal(
        helpers.binary_to_float([1, 0, 1], 0.0, 1.0), 0.7142857142857142)
    assert _approx_equal(
        helpers.binary_to_float([1, 1, 0], 0.0, 1.0), 0.8571428571428571)
    assert helpers.binary_to_float([1, 1, 1], 0.0, 1.0) == 1.0
예제 #13
0
def test_binary_to_float_empty_binary_list():
    """An empty list can represent one value, and defaults to lower_bound."""
    assert helpers.binary_to_float([], 0.0, 1.0) == 0.0
예제 #14
0
def decode_anfisga_search_space(binary):
    sigma_lb = helpers.binary_to_float(binary[0:16], 0.25, 5)
    sigma_ub = helpers.binary_to_float(binary[16:32], 5, 10)
    return sigma_lb, sigma_ub
예제 #15
0
def decode_svmga_search_space(binary):
    c = helpers.binary_to_float(binary[0:16], 1, 20.0)
    epsilon = helpers.binary_to_float(binary[16:32], 0.001, 0.01)
    return c, epsilon
예제 #16
0
 def decode_small_binary(binary, min_, max_):
     x1 = helpers.binary_to_float(binary[0:6], min_, max_)
     x2 = helpers.binary_to_float(binary[6:12], min_, max_)
     return x1, x2