Example #1
0
def adjacent(path,nd):
	edges = {}
	nodes = []
	file = open(path.value()[1:len(path.value())-1])

	for node in file:
		nodes.append(node)

	for i in range(0,len(nodes)/2):
		first = nodes.pop()
		second = nodes.pop()
		if first[:-1] not in edges:
			edges[first[:-1]] = [second[:-1]]
		else:
			edges[first[:-1]].append(second[:-1])

	true_nodes = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == nd and x.isTrue():
			if x.tuple()[1].value() in edges:
				for nd2 in edges[x.tuple()[1].value()]:
					dlvhex.output( (nd2,) )
					true_nodes.append(nd2)

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == nd and not x.isFalse() and not x.isTrue():
			if x.tuple()[1].value() in edges:
				for nd2 in edges[x.tuple()[1].value()]:
					if nd2 not in true_nodes:
						dlvhex.outputUnknown( (nd2,) )
Example #2
0
def strategic(strategic, controlled_by):
    trueStrategic = []
    falseStrategic = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            trueStrategic.append(x.tuple()[1].value())
        elif x.tuple()[0] == strategic and x.isFalse():
            falseStrategic.append(x.tuple()[1].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == controlled_by and x.isTrue():
            if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value(
            ) in trueStrategic and x.tuple()[4].value(
            ) in trueStrategic and x.tuple()[5].value() in trueStrategic:
                dlvhex.output((x.tuple()[1].value(), ))
            elif x.tuple()[2].value() not in falseStrategic and x.tuple(
            )[3].value() not in falseStrategic and x.tuple()[4].value(
            ) not in falseStrategic and x.tuple()[5].value(
            ) not in falseStrategic:
                dlvhex.outputUnknown((x.tuple()[1].value(), ))
        elif x.tuple()[0] == controlled_by and not x.isFalse():
            if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value(
            ) in trueStrategic and x.tuple()[4].value(
            ) in trueStrategic and x.tuple()[5].value() in trueStrategic:
                dlvhex.outputUnknown((x.tuple()[1].value(), ))
            elif x.tuple()[2].value() not in falseStrategic and x.tuple(
            )[3].value() not in falseStrategic and x.tuple()[4].value(
            ) not in falseStrategic and x.tuple()[5].value(
            ) not in falseStrategic:
                dlvhex.outputUnknown((x.tuple()[1].value(), ))
Example #3
0
def preferences(selected, p):
    trueGroups = []
    unknownGroups = []
    falseGroups = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == selected and x.isTrue():
            trueGroups.append(x.tuple()[1].value())
        elif x.tuple()[0] == selected and not x.isFalse():
            unknownGroups.append(x.tuple()[1].value())
        elif x.tuple()[0] == selected:
            falseGroups.append(x.tuple()[1].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == p and x.isTrue():
            if x.tuple()[1].value() in trueGroups:
                dlvhex.output((x.tuple()[2].value(), x.tuple()[3].value()))
            elif x.tuple()[1].value() not in falseGroups:
                dlvhex.outputUnknown(
                    (x.tuple()[2].value(), x.tuple()[3].value()))
        elif x.tuple()[0] == p and not x.isFalse():
            if x.tuple()[1].value() in trueGroups:
                dlvhex.outputUnknown(
                    (x.tuple()[2].value(), x.tuple()[3].value()))
            elif x.tuple()[1].value() not in falseGroups:
                dlvhex.outputUnknown(
                    (x.tuple()[2].value(), x.tuple()[3].value()))
Example #4
0
def controlsMajorityWithMax(strategic,owns):
	controlDict = dict()
	unknownControlDict = dict()

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in controlDict:
						newval = str(int(controlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:]))
						controlDict[y.tuple()[2].value()] = newval
					else:
						controlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:]
					if y.tuple()[2].value() in unknownControlDict:
						newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:]))
						unknownControlDict[y.tuple()[2].value()] = newval
					else:
						unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:]
		elif x.tuple()[0] == strategic and not x.isFalse():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in unknownControlDict:
						newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:]))
						unknownControlDict[y.tuple()[2].value()] = newval
					else:
						unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:]

		for c in unknownControlDict:
			if c in controlDict and int(controlDict[c]) > 5000000 and int(unknownControlDict[c]) + 400 < 10000000:
				dlvhex.output((c, ))
			elif int(unknownControlDict[c]) > 5000000 and (c not in controlDict or int(controlDict[c]) + 400 < 10000000):
				dlvhex.outputUnknown((c, ))
Example #5
0
def adjacent(path, nd):
    edges = {}
    nodes = []
    file = open(path.value()[1:len(path.value()) - 1])

    for node in file:
        nodes.append(node)

    for i in range(0, len(nodes) / 2):
        first = nodes.pop()
        second = nodes.pop()
        if first[:-1] not in edges:
            edges[first[:-1]] = [second[:-1]]
        else:
            edges[first[:-1]].append(second[:-1])

    true_nodes = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == nd and x.isTrue():
            if x.tuple()[1].value() in edges:
                for nd2 in edges[x.tuple()[1].value()]:
                    dlvhex.output((nd2, ))
                    true_nodes.append(nd2)

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == nd and not x.isFalse() and not x.isTrue():
            if x.tuple()[1].value() in edges:
                for nd2 in edges[x.tuple()[1].value()]:
                    if nd2 not in true_nodes:
                        dlvhex.outputUnknown((nd2, ))
Example #6
0
def subgraph(vertices, edge):
    trueVertices = []
    unknownVertices = []
    falseVertices = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == vertices and x.isTrue():
            trueVertices.append(x.tuple()[1].value())
        elif x.tuple()[0] == vertices and not x.isFalse():
            unknownVertices.append(x.tuple()[1].value())
        else:
            falseVertices.append(x.tuple()[1].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == edge and x.isTrue():
            if x.tuple()[1].value() in trueVertices and x.tuple()[2].value(
            ) in trueVertices:
                dlvhex.output((x.tuple()[1].value(), x.tuple()[2].value()))
            elif x.tuple()[1].value() not in falseVertices and x.tuple(
            )[2].value() not in falseVertices:
                dlvhex.outputUnknown(
                    (x.tuple()[1].value(), x.tuple()[2].value()))
        elif x.tuple()[0] == edge and not x.isFalse():
            if x.tuple()[1].value() in trueVertices and x.tuple()[2].value(
            ) in trueVertices:
                dlvhex.outputUnknown(
                    (x.tuple()[1].value(), x.tuple()[2].value()))
            elif x.tuple()[1].value() not in falseVertices and x.tuple(
            )[2].value() not in falseVertices:
                dlvhex.outputUnknown(
                    (x.tuple()[1].value(), x.tuple()[2].value()))
Example #7
0
def controlsMajorityNonmonotonic(strategic, owns):
    controlDict = dict()
    unknownControlDict = dict()

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and y.isTrue() and x.tuple(
                )[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in controlDict:
                        newval = str(
                            int(controlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:-1]))
                        controlDict[y.tuple()[2].value()] = newval
                    else:
                        controlDict[y.tuple()
                                    [2].value()] = y.tuple()[3].value()[1:-1]
                    if y.tuple()[2].value() in unknownControlDict:
                        newval = str(
                            int(unknownControlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:-1]))
                        unknownControlDict[y.tuple()[2].value()] = newval
                    else:
                        unknownControlDict[
                            y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]
        elif x.tuple()[0] == strategic and not x.isFalse():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and not y.isFalse() and x.tuple(
                )[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in unknownControlDict:
                        if int(y.tuple()[3].value()[1:-1]) > 0:
                            newval = str(
                                int(unknownControlDict[y.tuple()[2].value()]) +
                                int(y.tuple()[3].value()[1:-1]))
                            unknownControlDict[y.tuple()[2].value()] = newval
                        else:
                            if y.tuple()[2].value() in controlDict:
                                newval = str(
                                    int(controlDict[y.tuple()[2].value()]) +
                                    int(y.tuple()[3].value()[1:-1]))
                                controlDict[y.tuple()[2].value()] = newval
                    else:
                        if int(y.tuple()[3].value()[1:-1]) > 0:
                            unknownControlDict[y.tuple()[2].value()] = y.tuple(
                            )[3].value()[1:-1]

        for c in unknownControlDict:
            if c in controlDict and int(controlDict[c]) > 50:
                dlvhex.output((c, ))
            elif int(unknownControlDict[c]) > 50:
                dlvhex.outputUnknown((c, ))
Example #8
0
def testSetMinusPartial(p, q):

    # compute the set difference of the extension of p minus the one of q
    input = dlvhex.getInputAtoms()
    for x in input:
        tup = x.tuple()

        # for each possible input atom p(x) (according to the grouding, it is not necessarily true in the current input)
        if tup[0].value() == p.value():

            qAtom = dlvhex.storeAtom((q, tup[1]))

            # if p(x) is true and the corresponding atom q(x) is not true (i.e., false or undefined)
            if dlvhex.isTrue(x) and not dlvhex.isTrue(qAtom):
                # if q(x) is false, then x is definitely in the output
                if not dlvhex.isInputAtom(qAtom) or dlvhex.isFalse(qAtom):
                    #					print "Definitely true: " + tup[1].value()
                    dlvhex.output((tup[1], ))

                # if q(x) is undefined, then x might be in the output
                else:
                    #					print "Could be true: " + tup[1].value()
                    dlvhex.outputUnknown((tup[1], ))
                    v = 0

            # if p(x) is undefined and q(x) is not true (i.e., false or undefined), then x might be in the output
            if not dlvhex.isTrue(x) and not dlvhex.isFalse(
                    x) and not dlvhex.isTrue(qAtom):
                #				print "Could be true: " + tup[1].value()
                dlvhex.outputUnknown((tup[1], ))
                v = 0
Example #9
0
def testSetMinus(p, q):

	premisse = ()
	outputatoms = ()

	input = dlvhex.getInputAtoms()
	for x in input:
		tup = x.tuple()
		if tup[0].value() == p.value():
			# keep true monotonic input atoms
			if dlvhex.isTrue(x):
				premisse = (x, ) + premisse

			if x.isTrue() and not dlvhex.isTrue(dlvhex.storeAtom((q, tup[1]))):
				outputatoms = (dlvhex.storeOutputAtom((tup[1], )), ) + outputatoms
				dlvhex.output((tup[1], ))

		if tup[0].value() == q.value():
			# keep false antimonotonic input atoms
			if not dlvhex.isTrue(x):
				premisse = (x.negate(), ) + premisse

	# learn one nogood for each output atom
	for x in outputatoms:
		dlvhex.learn((x.negate(), ) + premisse)
Example #10
0
def getPredec(idx, visit):
	for x in dlvhex.getInputAtoms():
		t = x.tuple()
		if x.isTrue() and t[0].value() == visit.value():
			if t[2].intValue() == idx - 1:
				return t[1]
	return 0
Example #11
0
def numberOfBallsGE(assignment, min):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
        elif x.isFalse():
            false = false + 1
        else:
            unknown = unknown + 1
            v = 0

    if true >= min.intValue():
        # external atom is true
        dlvhex.output(())
    elif (true + unknown) >= min.intValue():
        # external atom can be true
        dlvhex.outputUnknown(())
    else:
        # else case applies: if (true + unknown) < min.intValue()
        #
        # external
        v = 0
Example #12
0
def numberOfBalls(assignment, min, max):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
        elif x.isFalse():
            false = false + 1
        else:
            unknown = unknown + 1
            v = 0

    if true >= min.intValue() and (true + unknown) <= max.intValue():
        # external atom is true
        dlvhex.output(())
    elif (true + unknown) >= min.intValue() and true <= max.intValue():
        # external atom can be true
        dlvhex.outputUnknown(())
    else:
        # else case applies: (true + unknown) < min.intValue() or true > max.intValue()
        #
        # external atom is certainly not true
        v = 0
Example #13
0
def testSetMinus(p, q):

	premisse = ()
	outputatoms = ()

	input = dlvhex.getInputAtoms()
	for x in input:
		tup = x.tuple()
		if tup[0].value() == p.value():
			# keep true monotonic input atoms
			if dlvhex.isTrue(x):
				premisse = (x, ) + premisse

			if not dlvhex.isTrue(dlvhex.storeAtom((q, tup[1]))):
				outputatoms = (dlvhex.storeOutputAtom((tup[1], )), ) + outputatoms
				dlvhex.output((tup[1], ))

		if tup[0].value() == q.value():
			# keep false antimonotonic input atoms
			if not dlvhex.isTrue(x):
				premisse = (x.negate(), ) + premisse

	# learn one nogood for each output atom
	for x in outputatoms:
		dlvhex.learn((x.negate(), ) + premisse)
Example #14
0
def partialTest(assignment):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
#			premisse = premisse + (x, )
#			print "true input atom:", x.value()
        elif x.isFalse():
            false = false + 1


#			premisse = premisse + (x.negate(), )
#			print "false input atom:", x.value()
        else:
            unknown = unknown + 1
            #			print "unknown input atom:", x.value()
            v = 0

    if true > 1:
        #		dlvhex.learn(premisse + (dlvhex.storeOutputAtom((), False).negate(), ))
        dlvhex.output(())
    elif true + unknown > 1:
        dlvhex.outputUnknown(())
Example #15
0
def numberOfBallsGE(assignment, min):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
		elif x.isFalse():
			false = false + 1
		else:
			unknown = unknown + 1
			v = 0

	if true >= min.intValue():
		# external atom is true
		dlvhex.output(())
	elif (true + unknown) >= min.intValue():
		# external atom can be true
		dlvhex.outputUnknown(())
	else:
		# else case applies: if (true + unknown) < min.intValue()
		#
		# external
		v = 0
Example #16
0
def partialTest(assignment):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
#			premisse = premisse + (x, )
#			print "true input atom:", x.value()
		elif x.isFalse():
			false = false + 1
#			premisse = premisse + (x.negate(), )
#			print "false input atom:", x.value()
		else:
			unknown = unknown + 1
#			print "unknown input atom:", x.value()
			v = 0

	if true > 1:
#		dlvhex.learn(premisse + (dlvhex.storeOutputAtom((), False).negate(), ))
		dlvhex.output(())
	elif true + unknown > 1:
		dlvhex.outputUnknown(())
Example #17
0
def numberOfBalls(assignment, min, max):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
		elif x.isFalse():
			false = false + 1
		else:
			unknown = unknown + 1
			v = 0

	if true >= min.intValue() and (true + unknown) <= max.intValue():
		# external atom is true
		dlvhex.output(())
	elif (true + unknown) >= min.intValue() and true <= max.intValue():
		# external atom can be true
		dlvhex.outputUnknown(())
	else:
		# else case applies: (true + unknown) < min.intValue() or true > max.intValue()
		#
		# external atom is certainly not true
		v = 0
Example #18
0
def isEmpty(assignment):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
		elif x.isFalse():
			false = false + 1
		else:
			unknown = unknown + 1

	if true > 0:
		# external atom is true
		dlvhex.output(())
	elif (true + unknown) > 0:
		# external atom can be true
		dlvhex.outputUnknown(())
	else:
		# else case applies: (true + unknown) < min.intValue() or true > max.intValue()
		#
		# external atom is certainly not true
		v = 0
Example #19
0
def testSetMinusPartial(p, q):

	# compute the set difference of the extension of p minus the one of q
	input = dlvhex.getInputAtoms()
	for x in input:
		tup = x.tuple()

		# for each possible input atom p(x) (according to the grouding, it is not necessarily true in the current input)
		if tup[0].value() == p.value():

			qAtom = dlvhex.storeAtom((q, tup[1]))

			# if p(x) is true and the corresponding atom q(x) is not true (i.e., false or undefined)
			if dlvhex.isTrue(x) and not dlvhex.isTrue(qAtom):
				# if q(x) is false, then x is definitely in the output
				if not dlvhex.isInputAtom(qAtom) or dlvhex.isFalse(qAtom):
#					print "Definitely true: " + tup[1].value()
					dlvhex.output((tup[1], ))

				# if q(x) is undefined, then x might be in the output
				else:
#					print "Could be true: " + tup[1].value()
					dlvhex.outputUnknown((tup[1], ))
					v=0

			# if p(x) is undefined and q(x) is not true (i.e., false or undefined), then x might be in the output
			if not dlvhex.isTrue(x) and not dlvhex.isFalse(x) and not dlvhex.isTrue(qAtom):
#				print "Could be true: " + tup[1].value()
				dlvhex.outputUnknown((tup[1], ))
				v=0
Example #20
0
def getCost(prev, cur, edge):
	for x in dlvhex.getInputAtoms():
		t = x.tuple()
		if t[0].value() == edge.value():
			if t[1].value() == prev.value() and t[2].value() == cur.value():
				return t[3].intValue()
	return 0
Example #21
0
def isEmpty(assignment):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
        elif x.isFalse():
            false = false + 1
        else:
            unknown = unknown + 1

    if true > 0:
        # external atom is true
        dlvhex.output(())
    elif (true + unknown) > 0:
        # external atom can be true
        dlvhex.outputUnknown(())
    else:
        # else case applies: (true + unknown) < min.intValue() or true > max.intValue()
        #
        # external atom is certainly not true
        v = 0
Example #22
0
def needRestaurant(trip,limit):
	tripLength = 0
	maxTripLength = 0

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == trip and x.isTrue():
			tripLength += int(x.tuple()[4].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == trip and not x.isFalse():
			maxTripLength += int(x.tuple()[4].value())

	if tripLength > int(limit.value()):
		dlvhex.output(())

	if tripLength <= int(limit.value()) and maxTripLength > int(limit.value()):
		dlvhex.outputUnknown(())
Example #23
0
def sizeDist(assign, distance, maxdist):
    trueAssigned = []
    unknownAssigned = []
    falseAssigned = []
    regions = set()

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == assign and x.isTrue():
            trueAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
        elif x.tuple()[0] == assign and not x.isFalse():
            unknownAssigned.append(
                (x.tuple()[1].value(), x.tuple()[2].value()))
        else:
            falseAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
        regions.add(x.tuple()[2].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == distance:
            if (x.tuple()[1].value(),
                    x.tuple()[2].value()) in trueAssigned and int(
                        x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
                dlvhex.output(("bad", "bad"))
            elif (x.tuple()[1].value(),
                  x.tuple()[2].value()) not in falseAssigned and int(
                      x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
                dlvhex.outputUnknown(('bad', 'bad'))

    for r in regions:
        unknowncount = 0
        truecount = 0
        unknown = False
        for x in unknownAssigned:
            if x[1] == r:
                unknowncount += 1
                unknown = True
        for x in trueAssigned:
            if x[1] == r:
                truecount += 1

        if not unknown:
            dlvhex.output((str(r), 'i' + str(unknowncount + truecount)))
        else:
            for i in range(truecount, unknowncount + truecount + 1):
                dlvhex.outputUnknown((str(r), 'i' + str(i)))
Example #24
0
def controlsMajorityWithMax(strategic, owns):
    controlDict = dict()
    unknownControlDict = dict()

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in controlDict:
                        newval = str(
                            int(controlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:]))
                        controlDict[y.tuple()[2].value()] = newval
                    else:
                        controlDict[y.tuple()
                                    [2].value()] = y.tuple()[3].value()[1:]
                    if y.tuple()[2].value() in unknownControlDict:
                        newval = str(
                            int(unknownControlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:]))
                        unknownControlDict[y.tuple()[2].value()] = newval
                    else:
                        unknownControlDict[
                            y.tuple()[2].value()] = y.tuple()[3].value()[1:]
        elif x.tuple()[0] == strategic and not x.isFalse():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in unknownControlDict:
                        newval = str(
                            int(unknownControlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:]))
                        unknownControlDict[y.tuple()[2].value()] = newval
                    else:
                        unknownControlDict[
                            y.tuple()[2].value()] = y.tuple()[3].value()[1:]

        for c in unknownControlDict:
            if c in controlDict and int(controlDict[c]) > 5000000 and int(
                    unknownControlDict[c]) + 400 < 10000000:
                dlvhex.output((c, ))
            elif int(unknownControlDict[c]) > 5000000 and (
                    c not in controlDict
                    or int(controlDict[c]) + 400 < 10000000):
                dlvhex.outputUnknown((c, ))
Example #25
0
def someSelectedPartial(selected):
    unknown = False
    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == selected and x.isTrue():
            dlvhex.output(())
            return
        elif not x.isFalse():
            unknown = True
    if unknown:
        dlvhex.outputUnknown(())
Example #26
0
def needFuel(visit, edge):
	d = 0
	for x in dlvhex.getInputAtoms():
		if x.isTrue() and x.tuple()[0].value() == visit.value():
			cur = x.tuple()[1]
			prev = getPredec(x.tuple()[2].intValue(), visit)
			if prev != 0:
				d = d + getCost(prev, cur, edge)
	if d > 10:
		dlvhex.output(())
Example #27
0
def strategic(strategic, controlled_by):
	trueStrategic = []
	falseStrategic = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			trueStrategic.append(x.tuple()[1].value())
		elif x.tuple()[0] == strategic and x.isFalse():
			falseStrategic.append(x.tuple()[1].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == controlled_by and x.isTrue():
			if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value() in trueStrategic and x.tuple()[4].value() in trueStrategic and x.tuple()[5].value() in trueStrategic:
				dlvhex.output( (x.tuple()[1].value(),) )
			elif x.tuple()[2].value() not in falseStrategic and x.tuple()[3].value() not in falseStrategic and x.tuple()[4].value() not in falseStrategic and x.tuple()[5].value() not in falseStrategic:
				dlvhex.outputUnknown( (x.tuple()[1].value(),) )
		elif x.tuple()[0] == controlled_by and not x.isFalse():
			if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value() in trueStrategic and x.tuple()[4].value() in trueStrategic and x.tuple()[5].value() in trueStrategic:
				dlvhex.outputUnknown( (x.tuple()[1].value(),) )
			elif x.tuple()[2].value() not in falseStrategic and x.tuple()[3].value() not in falseStrategic and x.tuple()[4].value() not in falseStrategic and x.tuple()[5].value() not in falseStrategic:
				dlvhex.outputUnknown( (x.tuple()[1].value(),) )
Example #28
0
def controls(controlsStk):
    controlDict = dict()

    for x in dlvhex.getTrueInputAtoms():
        if x.tuple()[1].value() in controlDict:
            if x.tuple()[3].value() in controlDict[x.tuple()[1].value()]:
                newval = str(
                    int(controlDict[x.tuple()[1].value()][
                        x.tuple()[3].value()]) + int(x.tuple()[4].value()))
                controlDict[x.tuple()[1].value()][x.tuple()
                                                  [3].value()] = newval
            else:
                controlDict[x.tuple()[1].value()][
                    x.tuple()[3].value()] = x.tuple()[4].value()
        else:
            controlDict[x.tuple()[1].value()] = dict()
            controlDict[x.tuple()[1].value()][
                x.tuple()[3].value()] = x.tuple()[4].value()

    unknownControlDict = dict()

    for x in dlvhex.getInputAtoms():
        if x not in dlvhex.getTrueInputAtoms():
            if x.tuple()[1].value() in unknownControlDict:
                if x.tuple()[3].value() in unknownControlDict[x.tuple()
                                                              [1].value()]:
                    newval = str(
                        int(unknownControlDict[x.tuple()[1].value()][
                            x.tuple()[3].value()]) + int(x.tuple()[4].value()))
                    unknownControlDict[x.tuple()[1].value()][
                        x.tuple()[3].value()] = newval
                else:
                    unknownControlDict[x.tuple()[1].value()][
                        x.tuple()[3].value()] = x.tuple()[4].value()
            else:
                unknownControlDict[x.tuple()[1].value()] = dict()
                unknownControlDict[x.tuple()[1].value()][
                    x.tuple()[3].value()] = x.tuple()[4].value()

    for company1 in controlDict:
        for company2 in controlDict[company1]:
            if int(controlDict[company1][company2]) > 50:
                dlvhex.output((company1, company2))

    for company1 in unknownControlDict:
        for company2 in unknownControlDict[company1]:
            if company1 in controlDict and company2 in controlDict[company1]:
                if int(unknownControlDict[company1][company2] +
                       controlDict[company1][company2]) > 50:
                    dlvhex.outputUnknown((company1, company2))
            else:
                if int(unknownControlDict[company1][company2]) > 50:
                    dlvhex.outputUnknown((company1, company2))
Example #29
0
def sizeDist(assign,distance,maxdist):
	trueAssigned = []
	unknownAssigned = []
	falseAssigned = []
	regions = set()

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == assign and x.isTrue():
			trueAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
		elif x.tuple()[0] == assign and not x.isFalse():
			unknownAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
		else:
			falseAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
		regions.add(x.tuple()[2].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == distance:
			if (x.tuple()[1].value(), x.tuple()[2].value()) in trueAssigned and int(x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
				dlvhex.output( ("bad","bad") )
			elif (x.tuple()[1].value(), x.tuple()[2].value()) not in falseAssigned and int(x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
				dlvhex.outputUnknown( ('bad','bad') )

	for r in regions:
		unknowncount = 0
		truecount = 0
		unknown = False
		for x in unknownAssigned:
			if x[1] == r:
				unknowncount += 1
				unknown = True
		for x in trueAssigned:
			if x[1] == r:
				truecount += 1

		if not unknown:
			dlvhex.output( (str(r),'i'+str(unknowncount + truecount)) )
		else:
			for i in range(truecount, unknowncount + truecount + 1):
				dlvhex.outputUnknown( (str(r),'i'+str(i)) )
Example #30
0
def controlsMajorityNonmonotonic(strategic,owns):
	controlDict = dict()
	unknownControlDict = dict()

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and y.isTrue() and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in controlDict:
						newval = str(int(controlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
						controlDict[y.tuple()[2].value()] = newval
					else:
						controlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]
					if y.tuple()[2].value() in unknownControlDict:
						newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
						unknownControlDict[y.tuple()[2].value()] = newval
					else:
						unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]
		elif x.tuple()[0] == strategic and not x.isFalse():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and not y.isFalse() and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in unknownControlDict:
						if int(y.tuple()[3].value()[1:-1]) > 0:
							newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
							unknownControlDict[y.tuple()[2].value()] = newval
						else:
							if y.tuple()[2].value() in controlDict:
								newval = str(int(controlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
								controlDict[y.tuple()[2].value()] = newval
					else:
						if int(y.tuple()[3].value()[1:-1]) > 0:
							unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]

		for c in unknownControlDict:
			if c in controlDict and int(controlDict[c]) > 50:
				dlvhex.output((c, ))
			elif int(unknownControlDict[c]) > 50:
				dlvhex.outputUnknown((c, ))
Example #31
0
def preferences(selected,p):
	trueGroups = []
	unknownGroups = []
	falseGroups = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == selected and x.isTrue():
			trueGroups.append(x.tuple()[1].value())
		elif x.tuple()[0] == selected and not x.isFalse():
			unknownGroups.append(x.tuple()[1].value())
		elif x.tuple()[0] == selected:
			falseGroups.append(x.tuple()[1].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == p and x.isTrue():
			if x.tuple()[1].value() in trueGroups:
				dlvhex.output( (x.tuple()[2].value(),x.tuple()[3].value()) )
			elif x.tuple()[1].value() not in falseGroups:
				dlvhex.outputUnknown( (x.tuple()[2].value(),x.tuple()[3].value()) )
		elif x.tuple()[0] == p and not x.isFalse():
			if x.tuple()[1].value() in trueGroups:
				dlvhex.outputUnknown( (x.tuple()[2].value(),x.tuple()[3].value()) )
			elif x.tuple()[1].value() not in falseGroups:
				dlvhex.outputUnknown( (x.tuple()[2].value(),x.tuple()[3].value()) )
Example #32
0
def subgraph(vertices,edge):
	trueVertices = []
	unknownVertices = []
	falseVertices = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == vertices and x.isTrue():
			trueVertices.append(x.tuple()[1].value())
		elif x.tuple()[0] == vertices and not x.isFalse():
			unknownVertices.append(x.tuple()[1].value())
		else:
			falseVertices.append(x.tuple()[1].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == edge and x.isTrue():
			if x.tuple()[1].value() in trueVertices and x.tuple()[2].value() in trueVertices:
				dlvhex.output( (x.tuple()[1].value(),x.tuple()[2].value()) )
			elif x.tuple()[1].value() not in falseVertices and x.tuple()[2].value() not in falseVertices:
				dlvhex.outputUnknown( (x.tuple()[1].value(),x.tuple()[2].value()) )
		elif x.tuple()[0] == edge and not x.isFalse():
			if x.tuple()[1].value() in trueVertices and x.tuple()[2].value() in trueVertices:
				dlvhex.outputUnknown( (x.tuple()[1].value(),x.tuple()[2].value()) )
			elif x.tuple()[1].value() not in falseVertices and x.tuple()[2].value() not in falseVertices:
				dlvhex.outputUnknown( (x.tuple()[1].value(),x.tuple()[2].value()) )
Example #33
0
def strategicConflict(conflicting,strategic):
	trueList = []
	falseList = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			trueList.append(x.tuple()[1])
		elif x.tuple()[0] == strategic and x.isFalse():
			falseList.append(x.tuple()[1])

	for x in dlvhex.getTrueInputAtoms():
		if x.tuple()[0] == conflicting:
			if (x.tuple()[1] in trueList) and (x.tuple()[2] in trueList):
				dlvhex.output(())
			elif (x.tuple()[1] not in falseList) and (x.tuple()[2] not in falseList):
				dlvhex.outputUnknown(())
Example #34
0
def cost(query):
	sorted = []
	for stop in dlvhex.getInputAtoms():
		if (stop.isTrue()):
			index = stop.tuple()[1].intValue()
			while(len(sorted) <= index):
				sorted.append(0)
			sorted[index] = stop
	t = ()
	for stop in sorted:
		t = t + ( (stop.tuple()[2].value(), stop.tuple()[3].value(), datetime(stop.tuple()[4].intValue(), stop.tuple()[5].intValue(), stop.tuple()[6].intValue())), )
	price = getPrice(t)
	if price == -1:
		dlvhex.output(("error", ))
	else:
		dlvhex.output((price, ))
Example #35
0
def generalizedSubsetSum(x, y, b):
    true = 0
    false = 0
    unknown = 0

    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + int(x.tuple()[2].value())
        elif x.isFalse():
            false = false + int(x.tuple()[2].value())
        else:
            unknown = unknown + int(x.tuple()[2].value())

    if true > b.intValue() or true + unknown < b.intValue():
        dlvhex.output(())
    elif true != b.intValue() or unknown != 0:
        dlvhex.outputUnknown(())
Example #36
0
def generalizedSubsetSum(x,y,b):
	true = 0
	false = 0
	unknown = 0

	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + int(x.tuple()[2].value())
		elif x.isFalse():
			false = false + int(x.tuple()[2].value())
		else:
			unknown = unknown + int(x.tuple()[2].value())

	if true > b.intValue() or true + unknown < b.intValue():
		dlvhex.output(())
	elif true != b.intValue() or unknown != 0:
		dlvhex.outputUnknown(())
Example #37
0
def contains(pred,elem):
#	if False:
#		dlvhex.output(())
	outputFalse = False
	outputTrue = False
	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == pred and x.tuple()[1].value() == elem.value() and x.isTrue():
			print("true")
			outputTrue = True	
			dlvhex.output(())
		elif x.tuple()[0] == pred and x.tuple()[1].value() == elem.value() and x.isFalse():
			print("false")			
			outputFalse = True

	if not outputFalse and not outputTrue:
		print("unknown")
		dlvhex.outputUnknown(())
Example #38
0
def strategicConflict(conflicting, strategic):
    trueList = []
    falseList = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            trueList.append(x.tuple()[1])
        elif x.tuple()[0] == strategic and x.isFalse():
            falseList.append(x.tuple()[1])

    for x in dlvhex.getTrueInputAtoms():
        if x.tuple()[0] == conflicting:
            if (x.tuple()[1] in trueList) and (x.tuple()[2] in trueList):
                dlvhex.output(())
            elif (x.tuple()[1] not in falseList) and (x.tuple()[2]
                                                      not in falseList):
                dlvhex.outputUnknown(())
Example #39
0
def parity(p):

	if dlvhex.learnSupportSets():
		pos = ()
		for x in dlvhex.getInputAtoms():
			pos = pos + (False, )

		# special case: no input
		if pos == ():
			# always true
			dlvhex.learn(dlvhex.storeOutputAtom(()).negate(), )

		else:
			pos = pos[:-1]
			pos = list(pos)
			overflow = False 
			while not overflow:
				ng = ()
				# enumerate all combinations except for the last element (which is then definite)
				last = False
				for i in range(0, len(pos)):
					if pos[i] == True:
						ng = ng + (dlvhex.getInputAtoms()[i], )
						last = not last
					else:
						ng = ng + (dlvhex.getInputAtoms()[i].negate(), )

				# add last element with a sign such that the partiy is even
				if last:
					ng = ng + (dlvhex.getInputAtoms()[-1], )
				else:
        	                        ng = ng + (dlvhex.getInputAtoms()[-1].negate(), )

				# generate nogood which implies that the external atom is true
				supset = ng + (dlvhex.storeOutputAtom(()).negate(), )
				dlvhex.learn(supset)

				# go to next combination and check if we have an overflow, i.e., all combinations have been enumerated
				inc=0
				pos[inc] = not pos[inc]
				while not overflow and not pos[inc]:
					inc = inc + 1
                                        if inc >= len(pos):
                                                overflow = True
					else:
						pos[inc] = not pos[inc]

	even = True
	for atom in dlvhex.getInputAtoms():
		if atom.isTrue():
			even = not even
	if even:
		dlvhex.output(())
Example #40
0
def parity(p):

	if dlvhex.learnSupportSets():
		pos = ()
		for x in dlvhex.getInputAtoms():
			pos = pos + (False, )

		# special case: no input
		if pos == ():
			# always true
			dlvhex.learn(dlvhex.storeOutputAtom(()).negate(), )

		else:
			pos = pos[:-1]
			pos = list(pos)
			overflow = False 
			while not overflow:
				ng = ()
				# enumerate all combinations except for the last element (which is then definite)
				last = False
				for i in range(0, len(pos)):
					if pos[i] == True:
						ng = ng + (dlvhex.getInputAtoms()[i], )
						last = not last
					else:
						ng = ng + (dlvhex.getInputAtoms()[i].negate(), )

				# add last element with a sign such that the partiy is even
				if last:
					ng = ng + (dlvhex.getInputAtoms()[-1], )
				else:
        	                        ng = ng + (dlvhex.getInputAtoms()[-1].negate(), )

				# generate nogood which implies that the external atom is true
				supset = ng + (dlvhex.storeOutputAtom(()).negate(), )
				dlvhex.learn(supset)

				# go to next combination and check if we have an overflow, i.e., all combinations have been enumerated
				inc=0
				pos[inc] = not pos[inc]
				while not overflow and not pos[inc]:
					inc = inc + 1
                                        if inc >= len(pos):
                                                overflow = True
					else:
						pos[inc] = not pos[inc]

	even = True
	for atom in dlvhex.getInputAtoms():
		if atom.isTrue():
			even = not even
	if even:
		dlvhex.output(())
Example #41
0
def contains(pred, elem):
    #	if False:
    #		dlvhex.output(())
    outputFalse = False
    outputTrue = False
    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == pred and x.tuple()[1].value() == elem.value(
        ) and x.isTrue():
            print("true")
            outputTrue = True
            dlvhex.output(())
        elif x.tuple()[0] == pred and x.tuple()[1].value() == elem.value(
        ) and x.isFalse():
            print("false")
            outputFalse = True

    if not outputFalse and not outputTrue:
        print("unknown")
        dlvhex.outputUnknown(())
Example #42
0
def cost(query):
    sorted = []
    for stop in dlvhex.getInputAtoms():
        if (stop.isTrue()):
            index = stop.tuple()[1].intValue()
            while (len(sorted) <= index):
                sorted.append(0)
            sorted[index] = stop
    t = ()
    for stop in sorted:
        t = t + ((stop.tuple()[2].value(), stop.tuple()[3].value(),
                  datetime(stop.tuple()[4].intValue(),
                           stop.tuple()[5].intValue(),
                           stop.tuple()[6].intValue())), )
    price = getPrice(t)
    if price == -1:
        dlvhex.output(("error", ))
    else:
        dlvhex.output((price, ))
Example #43
0
def fair(pref_file,picked):

	f = open(pref_file.value()[1:-1],'r')

	prefs = [[],[]]

	goods_num = int(f.readline())

	assigned = [[],[]]

	for i in range(0,goods_num):
		prefs[0].append(int(f.readline()))

	for i in range(0,goods_num):
		prefs[1].append(int(f.readline()))

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == picked and not x.isTrue() and not x.isFalse():
			dlvhex.outputUnknown(())
			return
		if x.tuple()[0] == picked and x.isTrue():
			assigned[int(x.tuple()[1].value()[1:])].append(int(x.tuple()[3].value()[1:]))


	value_own1 = 0
	for i in assigned[0]:
		value_own1 += prefs[0].index(i)

	value_own2 = 0
	for i in assigned[1]:
		value_own2 += prefs[1].index(i)

	value_other2 = 0
	for i in assigned[0]:
		value_other2 += prefs[1].index(i)

	value_other1 = 0
	for i in assigned[1]:
		value_other1 += prefs[0].index(i)

	if value_own1 >= value_other1 and value_own2 >= value_other2:
		dlvhex.output(())
Example #44
0
def controls(controlsStk):
	controlDict = dict()

	for x in dlvhex.getTrueInputAtoms():
		if x.tuple()[1].value() in controlDict:
			if x.tuple()[3].value() in controlDict[x.tuple()[1].value()]:
				newval = str(int(controlDict[x.tuple()[1].value()][x.tuple()[3].value()]) + int(x.tuple()[4].value()))
				controlDict[x.tuple()[1].value()][x.tuple()[3].value()] = newval
			else:
				controlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()
		else:
			controlDict[x.tuple()[1].value()] = dict()
			controlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()

	unknownControlDict = dict()

	for x in dlvhex.getInputAtoms():
		if x not in dlvhex.getTrueInputAtoms():
			if x.tuple()[1].value() in unknownControlDict:
				if x.tuple()[3].value() in unknownControlDict[x.tuple()[1].value()]:
					newval = str(int(unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()]) + int(x.tuple()[4].value()))
					unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()] = newval
				else:
					unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()
			else:
				unknownControlDict[x.tuple()[1].value()] = dict()
				unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()


	for company1 in controlDict:
		for company2 in controlDict[company1]:
			if int(controlDict[company1][company2]) > 50:
				dlvhex.output((company1,company2))

	for company1 in unknownControlDict:
		for company2 in unknownControlDict[company1]:
			if company1 in controlDict and company2 in controlDict[company1]:
				if int(unknownControlDict[company1][company2] + controlDict[company1][company2]) > 50:
					dlvhex.outputUnknown((company1,company2))
			else:
				if int(unknownControlDict[company1][company2]) > 50:
					dlvhex.outputUnknown((company1,company2))
Example #45
0
def fair(pref_file, picked):

    f = open(pref_file.value()[1:-1], 'r')

    prefs = [[], []]

    goods_num = int(f.readline())

    assigned = [[], []]

    for i in range(0, goods_num):
        prefs[0].append(int(f.readline()))

    for i in range(0, goods_num):
        prefs[1].append(int(f.readline()))

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == picked and not x.isTrue() and not x.isFalse():
            dlvhex.outputUnknown(())
            return
        if x.tuple()[0] == picked and x.isTrue():
            assigned[int(x.tuple()[1].value()[1:])].append(
                int(x.tuple()[3].value()[1:]))

    value_own1 = 0
    for i in assigned[0]:
        value_own1 += prefs[0].index(i)

    value_own2 = 0
    for i in assigned[1]:
        value_own2 += prefs[1].index(i)

    value_other2 = 0
    for i in assigned[0]:
        value_other2 += prefs[1].index(i)

    value_other1 = 0
    for i in assigned[1]:
        value_other1 += prefs[0].index(i)

    if value_own1 >= value_other1 and value_own2 >= value_other2:
        dlvhex.output(())
Example #46
0
def pos(p,x):
	min = 0 
	max = 0
	for a in dlvhex.getInputAtoms():
		if a.tuple()[1] == x:
			if a.isTrue():
				if (a.tuple()[1].value() == "m"):
					min -= 1
					max -= 1
				else:
					min += a.tuple()[1].intValue()
					max += a.tuple()[1].intValue()
			elif not a.isAssigned():
				if (a.tuple()[1].value() == "m"):
					min -= 1
				else:
					max += a.tuple()[1].intValue()
	if (min >= 0):
		dlvhex.output(())
	elif (max >= 0):
		dlvhex.outputUnknown(())
Example #47
0
def pos(p, x):
    min = 0
    max = 0
    for a in dlvhex.getInputAtoms():
        if a.tuple()[3] == x:
            if a.isTrue():
                if (a.tuple()[1].value() == "m"):
                    min -= 1
                    max -= 1
                else:
                    min += a.tuple()[1].intValue()
                    max += a.tuple()[1].intValue()
            elif not a.isAssigned():
                if (a.tuple()[1].value() == "m"):
                    min -= 1
                else:
                    max += a.tuple()[1].intValue()
    if (min >= 0):
        dlvhex.output(())
    elif (max >= 0):
        dlvhex.outputUnknown(())
Example #48
0
def pick(void, pref_file, already_picked):
    f = open(pref_file.value()[1:-1], 'r')

    prefs = [[], []]

    goods_num = int(f.readline())

    for i in range(0, goods_num):
        prefs[0].append(int(f.readline()))

    for i in range(0, goods_num):
        prefs[1].append(int(f.readline()))

    for position in range(0, goods_num):
        for agent in range(0, 2):

            unknown = False
            picked = []

            for x in dlvhex.getInputAtoms():
                if x.tuple()[0] == already_picked and int(
                        x.tuple()[1].value()[1:]) == position:
                    if not x.isTrue() and not x.isFalse():
                        unknown = True
                    if x.isTrue():
                        picked.append(int(x.tuple()[2].value()[1:]))

            if not unknown:
                for pref in prefs[agent]:
                    if pref not in picked:
                        agent_pick = pref

                dlvhex.output(('a' + str(agent), 'p' + str(position),
                               'i' + str(agent_pick)))

            else:
                for item in range(0, goods_num):
                    dlvhex.outputUnknown(
                        ('a' + str(agent), 'p' + str(position),
                         'i' + str(item)))
Example #49
0
def pick(void,pref_file,already_picked):
	f = open(pref_file.value()[1:-1],'r')

	prefs = [[],[]]

	goods_num = int(f.readline())

	for i in range(0,goods_num):
		prefs[0].append(int(f.readline()))

	for i in range(0,goods_num):
		prefs[1].append(int(f.readline()))
	

	for position in range(0,goods_num):
		for agent in range(0,2):

			unknown = False
			picked = []

			for x in dlvhex.getInputAtoms():
				if x.tuple()[0] == already_picked and int(x.tuple()[1].value()[1:]) == position:
					if not x.isTrue() and not x.isFalse():
						unknown = True
					if x.isTrue():
						picked.append(int(x.tuple()[2].value()[1:]))

			if not unknown:
				for pref in prefs[agent]:
					if pref not in picked:
						agent_pick = pref
						
				dlvhex.output(('a' + str(agent), 'p' + str(position),'i' + str(agent_pick)))


			else:
				for item in range(0,goods_num):
					dlvhex.outputUnknown(('a' + str(agent), 'p' + str(position),'i' + str(item)))
Example #50
0
def idPartial(p):
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			dlvhex.output( (x.tuple()[1].value(),) )
		elif not x.isFalse():
			dlvhex.outputUnknown( (x.tuple()[1].value(),) )
Example #51
0
def pseudoBoolean(formula,trueAt):	
	import re

	# read formula from file:
	file = open(formula.value()[1:-1])
	
	# parse content of file into list
	conjs = []

	for line in file:
		disjs = []
		literals = line.split()[:-1]
		# lines starting with 'p' or 'c' are ignored, according to dimacs
		if literals[0] != 'p' and literals[0] != 'c':
			for lit in literals:
				if lit[0] != '>':
					product = lit.split('*')
					# a literal is stored in a two element list, separating negation and atom
					if product[1][0] == '-':
						disjs.append([product[0],'-',product[1][1:]])
					else:
						disjs.append([product[0],'',product[1]])
				else:
					result = lit[2:]
			conjs.append([disjs,result])

	file.close()

	# store partial evaluation of input atoms:	
	atoms = dlvhex.getInputAtoms()
	atomVal = dict()
	
	# get only atom names with regexp
	regex = re.compile('\w*\((\w*)\)')

	for a in atoms:
		at = regex.match(a.value()).group(1)
		if a.isTrue():
			atomVal[at] = 'true'
		elif a.isFalse():
			atomVal[at] = 'false'
		else:
			atomVal[at] = 'unknown'

	
	# check if sat formula is already known to be either true or false:
	cFalse = False
	cUnknown = False
	for disjs in conjs:
		dTrue = False
		dUnknown = False

		trueSum = 0
		unknownSum = 0
		for lit in disjs[0]:
			# if one literal in clause is true, the clause is true
			if (lit[1] != '-' and atomVal[lit[2]] == 'true') \
				or (lit[1] == '-' and atomVal[lit[2]] == 'false'):
				trueSum += int(lit[0])
			# if one literal in clause is unknown, the clause is not known to be false yet
			elif atomVal[lit[2]] == 'unknown':
				unknownSum += int(lit[0])

		if trueSum >= int(disjs[1]):
			dTrue = True
		elif trueSum + unknownSum >= int(disjs[1]):
			dUnknown = True
		
		# if all the literals in a clause are false, the formula is false
		if not dTrue and not dUnknown:
			cFalse = True
		# if the truth value of a clause is unknown, the formula could still evaluate to false
		elif not dTrue:
			cUnknown = True

	# if the clause evaluates to false, the external atom is false, otherwise:
	if not cFalse:
		if cUnknown:
			# external atom can be true
			dlvhex.outputUnknown(())
		else:
			# external atom is true
			dlvhex.output(())
Example #52
0
def issue_2_num(a):
    n = 0
    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == a and x.isTrue():
            n += 1
    dlvhex.output((n, ))
Example #53
0
def someSelectedLearning(selected):
    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == selected and x.isTrue():
            dlvhex.output(())
            nogood = [x, dlvhex.storeOutputAtom(()).negate()]
            dlvhex.learn(nogood)
Example #54
0
def someSelected(selected):
    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == selected and x.isTrue():
            dlvhex.output(())