Пример #1
0
 def cross_over(self):
     self.sons = []
     for i in range(self.pop_size):  # create empty sons
         ind = Individual(nvar=self.n_var,
                          nbits=self.bits_per_variable,
                          ncal=self.n_cal)
         self.sons.append(deep_copy(ind))
     for i in range(0, self.pop_size,
                    2):  # cross over and fill their binary code
         for j in range(self.n_var):
             r = random.randint(1, self.bits_per_variable)
             gray_code_father_1 = gc.bin_to_gray(
                 self.fathers[i].binary_code[j])
             gray_code_father_2 = gc.bin_to_gray(
                 self.fathers[i + 1].binary_code[j])
             gray_code_son_1 = [
                 gray_code_father_1[0:r], gray_code_father_2[r:]
             ]
             gray_code_son_1 = ''.join(gray_code_son_1)
             gray_code_son_2 = [
                 gray_code_father_2[0:r], gray_code_father_1[r:]
             ]
             gray_code_son_2 = ''.join(gray_code_son_2)
             self.sons[i].binary_code.append(
                 gc.gray_to_bin(gray_code_son_1))
             self.sons[i + 1].binary_code.append(
                 gc.gray_to_bin(gray_code_son_2))
Пример #2
0
def test_graycode():
    g = GrayCode(2)
    got = []
    for i in g.generate_gray():
        if i.startswith('0'):
            g.skip()
        got.append(i)
    assert got == '00 11 10'.split()
    a = GrayCode(6)
    assert a.current == '0'*6
    assert a.rank == 0
    assert len(list(a.generate_gray())) == 64
    codes = ['011001', '011011', '011010',
    '011110', '011111', '011101', '011100', '010100', '010101', '010111',
    '010110', '010010', '010011', '010001', '010000', '110000', '110001',
    '110011', '110010', '110110', '110111', '110101', '110100', '111100',
    '111101', '111111', '111110', '111010', '111011', '111001', '111000',
    '101000', '101001', '101011', '101010', '101110', '101111', '101101',
    '101100', '100100', '100101', '100111', '100110', '100010', '100011',
    '100001', '100000']
    assert list(a.generate_gray(start='011001')) == codes
    assert list(
        a.generate_gray(rank=GrayCode(6, start='011001').rank)) == codes
    assert a.next().current == '000001'
    assert a.next(2).current == '000011'
    assert a.next(-1).current == '100000'

    a = GrayCode(5, start='10010')
    assert a.rank == 28
    a = GrayCode(6, start='101000')
    assert a.rank == 48

    assert GrayCode(6, rank=4).current == '000110'
    assert GrayCode(6, rank=4).rank == 4
    assert [GrayCode(4, start=s).rank for s in
            GrayCode(4).generate_gray()] == [0, 1, 2, 3, 4, 5, 6, 7, 8,
                                             9, 10, 11, 12, 13, 14, 15]
    a = GrayCode(15, rank=15)
    assert a.current == '000000000001000'

    assert bin_to_gray('111') == '100'

    a = random_bitstring(5)
    assert type(a) is str
    assert len(a) == 5
    assert all(i in ['0', '1'] for i in a)

    assert get_subset_from_bitstring(
        ['a', 'b', 'c', 'd'], '0011') == ['c', 'd']
    assert get_subset_from_bitstring('abcd', '1001') == ['a', 'd']
    assert list(graycode_subsets(['a', 'b', 'c'])) == \
        [[], ['c'], ['b', 'c'], ['b'], ['a', 'b'], ['a', 'b', 'c'],
         ['a', 'c'], ['a']]

    raises(ValueError, lambda: GrayCode(0))
    raises(ValueError, lambda: GrayCode(2.2))
    raises(ValueError, lambda: GrayCode(2, start=[1, 1, 0]))
    raises(ValueError, lambda: GrayCode(2, rank=2.5))
    raises(ValueError, lambda: get_subset_from_bitstring(['c', 'a', 'c'], '1100'))
    raises(ValueError, lambda: list(GrayCode(3).generate_gray(start="1111")))
Пример #3
0
def test_graycode():
    g = GrayCode(2)
    got = []
    for i in g.generate_gray():
        if i.startswith('0'):
            g.skip()
        got.append(i)
    assert got == '00 11 10'.split()
    a = GrayCode(6)
    assert a.current == '0'*6
    assert a.rank == 0
    assert len(list(a.generate_gray())) == 64
    codes = ['011001', '011011', '011010',
    '011110', '011111', '011101', '011100', '010100', '010101', '010111',
    '010110', '010010', '010011', '010001', '010000', '110000', '110001',
    '110011', '110010', '110110', '110111', '110101', '110100', '111100',
    '111101', '111111', '111110', '111010', '111011', '111001', '111000',
    '101000', '101001', '101011', '101010', '101110', '101111', '101101',
    '101100', '100100', '100101', '100111', '100110', '100010', '100011',
    '100001', '100000']
    assert list(a.generate_gray(start='011001')) == codes
    assert list(
        a.generate_gray(rank=GrayCode(6, start='011001').rank)) == codes
    assert a.next().current == '000001'
    assert a.next(2).current == '000011'
    assert a.next(-1).current == '100000'

    a = GrayCode(5, start='10010')
    assert a.rank == 28
    a = GrayCode(6, start='101000')
    assert a.rank == 48

    assert GrayCode(6, rank=4).current == '000110'
    assert GrayCode(6, rank=4).rank == 4
    assert [GrayCode(4, start=s).rank for s in
            GrayCode(4).generate_gray()] == [0, 1, 2, 3, 4, 5, 6, 7, 8,
                                             9, 10, 11, 12, 13, 14, 15]
    a = GrayCode(15, rank=15)
    assert a.current == '000000000001000'

    assert bin_to_gray('111') == '100'

    a = random_bitstring(5)
    assert type(a) is str
    assert len(a) == 5
    assert all(i in ['0', '1'] for i in a)

    assert get_subset_from_bitstring(
        ['a', 'b', 'c', 'd'], '0011') == ['c', 'd']
    assert get_subset_from_bitstring('abcd', '1001') == ['a', 'd']
    assert list(graycode_subsets(['a', 'b', 'c'])) == \
        [[], ['c'], ['b', 'c'], ['b'], ['a', 'b'], ['a', 'b', 'c'],
    ['a', 'c'], ['a']]
Пример #4
0
def encode(f, dim=None, coding=None):
    if dim == None:
        dim = parameters.ndim
    if coding == None:
        coding = parameters.coding

    if coding == 'bin':
        return double_to_bin(f)
    elif coding == 'gray':
        return bin_to_gray(double_to_bin(f))
    else:
        raise ValueError("Unknown number coding {}".format(coding))
Пример #5
0
 def mutation(self):
     for i in range(self.pop_size):
         for j in range(self.n_var):
             for k in range(self.bits_per_variable):
                 r = random.random()
                 if r <= self.mutation_rate:
                     gray_code_son = gc.bin_to_gray(self.sons[i].binary_code[j])
                     if gray_code_son[k] == '1':
                         gray_code_son = list(gray_code_son)
                         gray_code_son[k] = '0'
                         gray_code_son = ''.join(gray_code_son)
                     else:
                         gray_code_son = list(gray_code_son)
                         gray_code_son[k] = '1'
                         gray_code_son = ''.join(gray_code_son)
                     self.sons[i].binary_code[j] = gc.gray_to_bin(gray_code_son)
Пример #6
0
def test_graycode():
    a = GrayCode(6)
    assert a.current == '0' * 6
    assert a.rank == 0
    assert len(list(a.generate_gray())) == 64
    codes = [
        '011001', '011011', '011010', '011110', '011111', '011101', '011100',
        '010100', '010101', '010111', '010110', '010010', '010011', '010001',
        '010000', '110000', '110001', '110011', '110010', '110110', '110111',
        '110101', '110100', '111100', '111101', '111111', '111110', '111010',
        '111011', '111001', '111000', '101000', '101001', '101011', '101010',
        '101110', '101111', '101101', '101100', '100100', '100101', '100111',
        '100110', '100010', '100011', '100001', '100000'
    ]
    assert list(a.generate_gray(start='011001')) == codes
    assert list(
        a.generate_gray(rank=GrayCode(6, start='011001').rank)) == codes
    assert a.next().current == '000001'
    assert a.next(2).current == '000011'
    assert a.next(-1).current == '100000'

    a = GrayCode(5, start='10010')
    assert a.rank == 28
    a = GrayCode(6, start='101000')
    assert a.rank == 48

    assert GrayCode(6, rank=4).current == '000110'
    assert GrayCode(6, rank=4).rank == 4
    assert [GrayCode(4, start=s).rank for s in \
            GrayCode(4).generate_gray()] == [0, 1, 2, 3, 4, 5, 6, 7, 8, \
                                             9, 10, 11, 12, 13, 14, 15]
    a = GrayCode(15, rank=15)
    assert a.current == '000000000001000'

    assert bin_to_gray('111') == '100'

    a = random_bitstring(5)
    assert type(a) is str
    assert len(a) == 5
    assert all(i in ['0', '1'] for i in a)

    assert get_subset_from_bitstring(['a', 'b', 'c', 'd'],
                                     '0011') == ['c', 'd']
    assert get_subset_from_bitstring('abcd', '1001') == ['a', 'd']
    assert list(graycode_subsets(['a','b','c'])) == \
    [[], ['c'], ['b', 'c'], ['b'], ['a', 'b'], ['a', 'b', 'c'], \
    ['a', 'c'], ['a']]
Пример #7
0
def test_graycode():
    a = GrayCode(6)
    assert a.current == '0'*6
    assert a.rank == 0
    assert len(list(a.generate_gray())) == 64
    codes = ['011001', '011011', '011010',
    '011110', '011111', '011101', '011100', '010100', '010101', '010111',
    '010110', '010010', '010011', '010001', '010000', '110000', '110001',
    '110011', '110010', '110110', '110111', '110101', '110100', '111100',
    '111101', '111111', '111110', '111010', '111011', '111001', '111000',
    '101000', '101001', '101011', '101010', '101110', '101111', '101101',
    '101100', '100100', '100101', '100111', '100110', '100010', '100011',
    '100001', '100000']
    assert list(a.generate_gray(start='011001')) == codes
    assert list(a.generate_gray(rank=GrayCode(6, start='011001').rank)) == codes
    assert a.next().current == '000001'
    assert a.next(2).current == '000011'
    assert a.next(-1).current == '100000'

    a = GrayCode(5, start='10010')
    assert a.rank == 28
    a = GrayCode(6, start='101000')
    assert a.rank == 48

    assert GrayCode(6, rank=4).current == '000110'
    assert GrayCode(6, rank=4).rank == 4
    assert [GrayCode(4, start=s).rank for s in \
            GrayCode(4).generate_gray()] == [0, 1, 2, 3, 4, 5, 6, 7, 8, \
                                             9, 10, 11, 12, 13, 14, 15]
    a = GrayCode(15, rank=15)
    assert a.current == '000000000001000'

    assert bin_to_gray('111') == '100'
    random.seed(0)
    assert [random_bitstring(5) for i in range(3)] == ['11001', '01001', '11011']
    assert get_subset_from_bitstring(['a','b','c','d'], '0011') == ['c', 'd']
    assert get_subset_from_bitstring('abcd','1001') == ['a', 'd']
    assert list(graycode_subsets(['a','b','c'])) == \
    [[], ['c'], ['b', 'c'], ['b'], ['a', 'b'], ['a', 'b', 'c'], \
    ['a', 'c'], ['a']]
    def __init__(self,
                 dim_percept,
                 n_action_units,
                 dim_hidden_=[32],
                 dropout_rate_=[0.]):
        super(DEBN, self).__init__()

        self.all_actions = [
            torch.from_numpy(
                np.array([
                    float(digit)
                    for digit in bin_to_gray(bin(i)[2:].zfill(n_action_units))
                ])).float() for i in range(2**n_action_units)
        ]

        #initialisation
        init_kaiman = True

        #input layer
        self.visible = nn.Linear(dim_percept + n_action_units, dim_hidden_[0])
        self.visible.apply(self._init_weights) if init_kaiman else None

        self.b_input = nn.Linear(dim_percept + n_action_units, 1)
        nn.init.constant_(self.b_input.bias, 0.)
        self.b_input.bias.requires_grad = False

        #hidden layers
        self.hidden = nn.ModuleList()
        for l in range(len(dim_hidden_) - 1):
            self.hidden.append(nn.Linear(dim_hidden_[l], dim_hidden_[l + 1]))

        for l in range(1, len(dim_hidden_) - 1):
            self.hidden[l].apply(self._init_weights) if init_kaiman else None

        #output layer
        self.output = nn.Linear(dim_hidden_[-1] + 1, 1)
Пример #9
0
 def test_gray_to_uint(self):
     gray_code = bin_to_gray(Bits(uint=23, length=13).bin)
     self.assertEqual(gray_to_uint(gray_code), 23)
Пример #10
0
def test_live_issue_117():
    assert bin_to_gray('0100') == '0110'
    assert bin_to_gray('0101') == '0111'
    for bits in ('0100', '0101'):
        assert gray_to_bin(bin_to_gray(bits)) == bits
                                        debn.parameters()),
                                 lr=learning_rate,
                                 amsgrad=True)
 optimizer_dqn = optim.Adam(filter(lambda p: p.requires_grad,
                                   dqn.parameters()),
                            lr=learning_rate,
                            amsgrad=True)
 if not (dqn_only):
     full_losses_debn = []
 full_losses_dqn = []
 for j in range(5001):
     percepts = np.random.choice(num_percepts, size=batch_size)
     batch_percepts = torch.from_numpy(
         np.array([[
             float(digit)
             for digit in bin_to_gray(bin(i)[2:].zfill(dim_percept))
         ] for i in percepts])).float()
     target_m_values = torch.from_numpy(m_values[percepts]).float()
     m_values_dqn = dqn(batch_percepts)
     if not (dqn_only):
         m_values_debn = debn(batch_percepts)
     if sampling:
         sample_dqn = sample(m_values_dqn)
         if not (dqn_only):
             sample_debn = sample(m_values_debn)
         loss_dqn = F.smooth_l1_loss(
             select(m_values_dqn, sample_dqn, num_actions),
             select(target_m_values, sample_dqn, num_actions))
         if not (dqn_only):
             loss_debn = F.smooth_l1_loss(
                 select(m_values_debn, sample_dqn, num_actions),
Пример #12
0
def test_live_issue_117():
    assert bin_to_gray('0100') == '0110'
    assert bin_to_gray('0101') == '0111'
    for bits in ('0100', '0101'):
        assert gray_to_bin(bin_to_gray(bits)) == bits
Пример #13
0
def test_live_issue_117():
    assert bin_to_gray("0100") == "0110"
    assert bin_to_gray("0101") == "0111"
    for bits in ("0100", "0101"):
        assert gray_to_bin(bin_to_gray(bits)) == bits
Пример #14
0
def test_graycode():
    g = GrayCode(2)
    got = []
    for i in g.generate_gray():
        if i.startswith("0"):
            g.skip()
        got.append(i)
    assert got == "00 11 10".split()
    a = GrayCode(6)
    assert a.current == "0" * 6
    assert a.rank == 0
    assert len(list(a.generate_gray())) == 64
    codes = [
        "011001",
        "011011",
        "011010",
        "011110",
        "011111",
        "011101",
        "011100",
        "010100",
        "010101",
        "010111",
        "010110",
        "010010",
        "010011",
        "010001",
        "010000",
        "110000",
        "110001",
        "110011",
        "110010",
        "110110",
        "110111",
        "110101",
        "110100",
        "111100",
        "111101",
        "111111",
        "111110",
        "111010",
        "111011",
        "111001",
        "111000",
        "101000",
        "101001",
        "101011",
        "101010",
        "101110",
        "101111",
        "101101",
        "101100",
        "100100",
        "100101",
        "100111",
        "100110",
        "100010",
        "100011",
        "100001",
        "100000",
    ]
    assert list(a.generate_gray(start="011001")) == codes
    assert list(
        a.generate_gray(rank=GrayCode(6, start="011001").rank)) == codes
    assert a.next().current == "000001"
    assert a.next(2).current == "000011"
    assert a.next(-1).current == "100000"

    a = GrayCode(5, start="10010")
    assert a.rank == 28
    a = GrayCode(6, start="101000")
    assert a.rank == 48

    assert GrayCode(6, rank=4).current == "000110"
    assert GrayCode(6, rank=4).rank == 4
    assert [GrayCode(4, start=s).rank
            for s in GrayCode(4).generate_gray()] == [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
            ]
    a = GrayCode(15, rank=15)
    assert a.current == "000000000001000"

    assert bin_to_gray("111") == "100"

    a = random_bitstring(5)
    assert type(a) is str
    assert len(a) == 5
    assert all(i in ["0", "1"] for i in a)

    assert get_subset_from_bitstring(["a", "b", "c", "d"],
                                     "0011") == ["c", "d"]
    assert get_subset_from_bitstring("abcd", "1001") == ["a", "d"]
    assert list(graycode_subsets(["a", "b", "c"])) == [
        [],
        ["c"],
        ["b", "c"],
        ["b"],
        ["a", "b"],
        ["a", "b", "c"],
        ["a", "c"],
        ["a"],
    ]

    raises(ValueError, lambda: GrayCode(0))
    raises(ValueError, lambda: GrayCode(2.2))
    raises(ValueError, lambda: GrayCode(2, start=[1, 1, 0]))
    raises(ValueError, lambda: GrayCode(2, rank=2.5))
    raises(ValueError,
           lambda: get_subset_from_bitstring(["c", "a", "c"], "1100"))
    raises(ValueError, lambda: list(GrayCode(3).generate_gray(start="1111")))