<｜begin▁of▁sentence｜>### Instruction:
Given a bipartite graph with two sets of nodes U = {'A', 'B', 'C', 'D', 'E'} and V = {1, 2, 3, 4}, along with weighted edges [('A', 1, 20), ('A', 2, 15), ('B', 1, 30), ('B', 3, 50), ('C', 2, 25), ('C', 3, 40), ('D', 4, 10), ('E', 4, 15)], how do we determine the minimum weight full matching, where each node in U is matched to one node in V such that the overall weight is minimized?
### Response:
import networkx as nx
from networkx.algorithms import bipartite

# Create a bipartite graph
B = nx.Graph()
B.add_nodes_from(['A', 'B', 'C', 'D', 'E'], bipartite=0)
B.add_nodes_from([1, 2, 3, 4], bipartite=1)
B.add_weighted_edges_from([('A', 1, 20), ('A', 2, 15), ('B', 1, 30), ('B', 3, 50), ('C', 2, 25), ('C', 3, 40), ('D', 4, 10), ('E', 4, 15)])

# Assign nodes to subsets U and V
U = {'A', 'B', 'C', 'D', 'E'}
V = {1, 2, 3, 4}

# Compute the minimum weight full matching
matching = bipartite.minimum_weight_full_matching(B, top_nodes=U)
print(matching)
<|EOT|>
