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, ))
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
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
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
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(())
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,) )
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
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
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, ))
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(())
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))
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, ))
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(())
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(())
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(())
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(())
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(())
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(())
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, ))
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)))
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(())
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(())
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))
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(())
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(())
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(())
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)))
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(), ))
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()))
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()))
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)) )
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, ))
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)))
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(),) )
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()) )
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()) )
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(),) )
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(), ))
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(())
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(())