def test_hopfield_network_get_updated_state(self):
     node_number = 2
     weight_mat    = np.ones(( node_number, node_number))
     threshold_vec = np.array([[1, 1]])
     init_state    = np.array([[1, 1]])
     energy = HopfieldNetwork.get_energy_value(weight_mat, threshold_vec,init_state )
     assert energy == 0
 def test_hopfield_network_get_energy_value(self):
     node_number = 2
     weight_mat    = np.ones(( node_number, node_number))
     init_state    = np.array([[1, 1]])
     updated_state = HopfieldNetwork.get_updated_state(weight_mat, init_state)
     assert updated_state.tolist()[0][0] == 1
     assert updated_state.tolist()[0][1] == 1
    def test_hopfield_network_predict(self):
        node_number = 4
        threshold   = 0
        hn = HopfieldNetwork(node_number, threshold)

        train_data = [[1, 1, 1, -1], [-1, -1, 1, 1]]
        hn.train(train_data)


        # アソシアトロン
        assert hn.get_updated_state(hn.weight_mat , np.array([[1, 1, 1, -1]])).tolist()  == [[1, 1, 1, -1]]
        assert hn.get_updated_state(hn.weight_mat , np.array([[-1, -1, 1, 1]])).tolist() == [[-1, -1, 1, 1]]
        assert hn.get_updated_state(hn.weight_mat , np.array([[1, 1, -1, -1]])).tolist() == [[1, 1, 1, -1]]

        # hopfield
        assert hn.predict([1, 1, 1, -1])  == [[1, 1, 1, -1]]
        assert hn.predict([-1, -1, 1, 1]) == [[-1, -1, 1, 1]]
        assert hn.predict([1, 1, -1, -1]) == [[1, 1, 1, -1]]
    def test_hopfield_network_train(self):
        node_number = 2
        threshold   = 0


        hn = HopfieldNetwork(node_number, threshold)
        train_data = [[1, 1]]
        hn.train(train_data)
        assert hn.weight_mat.tolist() == [[0, 1], [1, 0]]

        hn = HopfieldNetwork(node_number, threshold)
        train_data = [[1, -1]]
        hn.train(train_data)
        assert hn.weight_mat.tolist() == [[0, -1], [-1, 0]]

        hn = HopfieldNetwork(node_number, threshold)
        train_data = [[-1, 1]]
        hn.train(train_data)
        assert hn.weight_mat.tolist() == [[0, -1], [-1, 0]]

        hn = HopfieldNetwork(node_number, threshold)
        train_data = [[-1, -1]]
        hn.train(train_data)
        assert hn.weight_mat.tolist() == [[0, 1], [1, 0]]