def test_should_decode_values(self): # given bits = 4 encoder = RealValueEncoder(bits) # then assert 0.0 == encoder.decode(0) assert abs(0.5 - encoder.decode(8)) < 0.05 assert 1.0 == encoder.decode(15)
def _mutate_attribute(ubr: UBR, encoder: RealValueEncoder, noise_max: float, mu: float): if np.random.random() < mu: noise = np.random.uniform(-noise_max, noise_max) x1p = encoder.decode(ubr.x1) ubr.x1 = encoder.encode(x1p, noise) if np.random.random() < mu: noise = np.random.uniform(-noise_max, noise_max) x2p = encoder.decode(ubr.x2) ubr.x2 = encoder.encode(x2p, noise)
def _widen_attribute(ubr: UBR, encoder: RealValueEncoder, noise_max: float, mu: float): # TODO: we should modify both condition and effect parts with the # same noise. if np.random.random() < mu: noise = np.random.uniform(-noise_max, noise_max) x1p = encoder.decode(ubr.x1) ubr.x1 = encoder.encode(x1p, noise) if np.random.random() < mu: noise = np.random.uniform(-noise_max, noise_max) x2p = encoder.decode(ubr.x2) ubr.x2 = encoder.encode(x2p, noise)
def test_should_deny_illegal_values_when_decoding(self): # given encoder = RealValueEncoder(2) # when with pytest.raises(ValueError) as e1: encoder.decode(-1) with pytest.raises(ValueError) as e2: encoder.decode(5) # then assert e1 is not None assert e2 is not None
def test_should_encode_and_decode_approximately(self): # given encoder = RealValueEncoder(8) epsilon = 0.01 observation = random.random() # when encoded = encoder.encode(observation) decoded = encoder.decode(encoded) # then assert abs(observation - decoded) < epsilon