Exemplo n.º 1
0
def consistent_score_mapped(exs, var_ids, m):
	max_score = 0
	max_exs = []
	max_rules = []
	subd_exs = sub_vars(exs, var_ids)  # examples been replaced variables

	mapped_subd_exs = []  # list of plterms
	inv_m = {v: k for k, v in m.items()}  # inverted map
	null_pos = []
	for e in subd_exs:
		e_symbs_n = apply_mapping(e, m)
		(e_symbs, n_pos) = remove_nulls(e_symbs_n)
		null_pos.append(n_pos)
		mapped_subd_exs.append(LL.PlTerm(e_symbs))
	mapped_subd_term = LL.PlTerm(mapped_subd_exs)
	con_sol = LL.abduceConInsts(mapped_subd_term)  # consistent solution

	if con_sol:
		max_rules = copy.deepcopy(con_sol.py())
		max_subd_exs = con_sol.py().copy()
		max_exs = []
		for k in range(0, len(max_subd_exs)):
			# add nulls back
			max_subd_exs_n = add_nulls(max_subd_exs[k], null_pos[k])
			# map back
			max_exs.append(apply_mapping(max_subd_exs_n, inv_m))
		abduced_exs = exs.copy()
		for i in range(0, len(max_exs)):
			abduced_exs[i] = max_exs[i]
		max_score = len(max_exs)
		re = consist_result(max_score, abduced_exs, m, max_rules, [])
		return re
	else:
		return None
Exemplo n.º 2
0
def consistent_score(exs, var_ids, maps):
	# for debug
	#print('vars: ', end = '\t')
	#print(var_ids)

	max_score = 0
	max_exs = []
	max_map = {}
	max_rules = []
	max_subd_exs_ids = []
	max_null_pos = []

	subd_exs_all = sub_vars(exs, var_ids)  # examples been replaced variables
	subd_exs_ids = []
	#count = 0
	t = time.time()
	for i in range(0, len(subd_exs_all)):
		subd_exs_ids.append(i)

		subd_exs = []
		for j in subd_exs_ids:
			subd_exs.append(subd_exs_all[j])

		got_con_sol = False
		# do mapping and evaluation, TODO: possible for multithread
		for m in maps:
			#LL.gc()
			#LL.trimStacks() # IMPORTANT!!
			mapped_subd_exs = []  # list of plterms

			null_pos = []
			for e in subd_exs:
				e_symbs_n = apply_mapping(e, m)
				(e_symbs, n_pos) = remove_nulls(e_symbs_n)
				null_pos.append(n_pos)
				mapped_subd_exs.append(LL.PlTerm(e_symbs))
			mapped_subd_term = LL.PlTerm(mapped_subd_exs)
			con_sol = LL.abduceConInsts(
				mapped_subd_term)  # consistent solution

			if con_sol:
				got_con_sol = True
			if con_sol and max_score < len(subd_exs):
				max_rules = copy.deepcopy(con_sol.py())
				max_score = len(subd_exs)
				max_subd_exs_ids = subd_exs_ids.copy()
				max_map = m.copy()
				max_null_pos = null_pos.copy()

				if max_score == len(mapped_subd_exs):
					break
		if not got_con_sol:
			subd_exs_ids.pop()

	abduced_exs = exs.copy()
	inv_m = {v: k for k, v in max_map.items()}  # inverted map
	#print(max_subd_exs_ids)
	for j in range(0, len(max_subd_exs_ids)):
		# add nulls back
		ex_n = add_nulls(max_rules[j].copy(), max_null_pos[j])
		mapped_ex = apply_mapping(ex_n, inv_m)
		abduced_exs[max_subd_exs_ids[j]] = mapped_ex
	'''
	print('elapsed time: ', end = '\t')
	print(time.time() - t, end = '\t')
	print('score:', end = '\t')
	print(max_score)
	'''
	re = consist_result(max_score, abduced_exs, max_map, max_rules,
						max_subd_exs_ids)
	return re
Exemplo n.º 3
0
def test_consistent_abduce():
    print('VII. Test consistent abduction')
    ex1_1 = LL.PlTerm([1, 1, '_', 1, '_', '_', 1, '_'])
    ex1_2 = LL.PlTerm([1, 1, '_', 1, '_', '_', 0, '_'])
    ex1_3 = LL.PlTerm([1, '_', '_', 0, '_', '_', '_', '_'])
    ex2_1 = LL.PlTerm(['_', '_', '_', '_', '_'])
    ex2_2 = LL.PlTerm([0, '_', 0, '_', '_', '_'])
    ex3 = LL.PlTerm([1, '_', '_', '_', 1, 0])
    ex4 = LL.PlTerm([1, '_', 1, 1, '_', 1, '_', '_'])
    ex5 = LL.PlTerm([1, '+', 0, '=', 1])
    ex6 = LL.PlTerm([1, 1, '+', 1, 1, '=', 1, 1, 0])
    ex7 = LL.PlTerm([0, '+', 1, '=', '_'])
    exs1 = LL.PlTerm([ex1_1, ex2_1, ex3, ex4, ex5, ex6, ex7])
    exs2 = LL.PlTerm([ex1_2, ex2_1, ex3, ex4, ex5, ex6, ex7])
    exs3 = LL.PlTerm([ex1_3, ex2_2, ex3, ex4, ex5, ex6, ex7])
    exs4 = LL.PlTerm([ex1_2, ex3, ex4])
    exs5 = LL.PlTerm([[1, 1, '+', 1, 1, '=', 1, 0], [0, '+', 0, '=', 0],
                      [1, '+', 1, '=', 1, 0], [1, '+', 1, 1, '=', 1, 0, 0],
                      [1, '+', 0, '=', 1]])
    t = time.time()
    re1 = LL.abduceConInsts(exs1)
    re2 = LL.abduceConInsts(exs2)
    re3 = LL.abduceConInsts(exs3)
    re4 = LL.abduceConInsts(exs4)
    re5 = LL.abduceConInsts(exs5)
    print(time.time() - t)
    print('*****ex1:')
    print(exs1)
    print('***result1:')
    if re1:
        print(re1.py())
    else:
        print(re1)
    print('*****ex2:')
    print(exs2)
    print('***result2:')
    if re2:
        print(re2.py())
    else:
        print(re2)
    print('*****ex3:')
    print(exs3)
    print('***result3:')
    if re3:
        print(re3.py())
    else:
        print(re3)
    print('*****ex4:')
    print(exs4)
    print('***result4:')
    if re4:
        print(re4.py())
    else:
        print(re4)
    print('*****ex5:')
    print(exs5)
    print('***result5:')
    if re5:
        print(re5.py())
    else:
        print(re5)

    print('----------END------------\n')