Esempio n. 1
0
def getUniformModelwithClosure(
        Args,
        size,
        seed=None,
        K_prop=[],
        closure_size=1
):  # generates a random uniform opponent model of given size
    M = OpponentModel()

    all_models = powerset(Args)

    # get random seed:
    if not seed:
        seed = random.randint(0, sys.maxint)

    M.addID(seed)
    random.seed(seed)

    if size > len(all_models) or size == None:
        selection = all_models
    else:
        selection = random.sample(all_models, size)

    mu = getRandomClosure(K_prop, Args, size=closure_size)
    i = 0
    for K in selection:
        Opp = Agent(K, mu)
        M.add_model(Opp, 1)
        i += 1

    #M.normalise()
    return M
def getUniformModelwithClosure(Args,size,seed=None,K_prop=[],closure_size=1): # generates a random uniform opponent model of given size
	M = OpponentModel()

	all_models = powerset(Args)

	# get random seed:
	if not seed:
		seed = random.randint(0,sys.maxint)

	M.addID(seed)
	random.seed(seed)

	if size > len(all_models) or size==None:
		selection = all_models
	else:
		selection = random.sample(all_models,size)

	mu = getRandomClosure(K_prop,Args,size=closure_size)
	i = 0
	for K in selection:	
		Opp = Agent(K,mu)
		M.add_model(Opp,1)
		i += 1

	#M.normalise()
	return M
Esempio n. 3
0
	def buildSuccess(self,semantics):
		X = powerset(self.Args)
		Y = []
		for A in X:
			subAF = self.subframe(A)

			for g in self.goals:
				if not g in semantics(subAF).In:
					Y += [A]
					continue

		self.success = [set(A) for A in X if A not in Y]
Esempio n. 4
0
    def buildSuccess(self, semantics):
        X = powerset(self.Args)
        Y = []
        for A in X:
            subAF = self.subframe(A)

            for g in self.goals:
                if not g in semantics(subAF).In:
                    Y += [A]
                    continue

        self.success = [set(A) for A in X if A not in Y]
Esempio n. 5
0
def simulate(Opp,AF,strategy):	# Simulates all possible dialogues of strategy S against Opp
	D_empty = Dialogue()
	S = strategy.copyOf()

	dialogue_queue = [(S,D_empty)]

	ineffective = None
	while not dialogue_queue == []:

		# pop first open dialogue
		(S,D) = dialogue_queue.pop()

		# do nothing if terminated
		if D.isTerminated():
			if AF.isSuccessful(D.getArgs()):
				continue	# dialogue is terminated and successful (do not push to queue but search continues)
			else:
				ineffective = D 	# D is terminated and unsuccessful (search over)
				break


		# add proponent move
		else:
			prop_move = S.play(D.getArgs())
			D.add(prop_move)


		# do nothing if terminated
		if D.isTerminated():
			if AF.isSuccessful(D.getArgs()):
				continue 	# dialogue is terminated and successful (do not push to queue but search continues)
			else:
				ineffective = D 	# D is terminated and unsuccessful (search over)
				break


		# add all possible opponent moves (no repeated arguments)
		else:
			K = Opp.getClosure().get(Opp.getKnowledge() | set(D.getArgs()))
			possible_moves = powerset(K-set(D.getArgs()),min_size=0)

			for opp_move in possible_moves:
				D1 = D.copyOf()
				D1.add(opp_move)
				S1 = S.copyOf()
				dialogue_queue += [(S1,D1)]

	return ineffective
Esempio n. 6
0
def getStrategies(Prop): 	# generates a list of all possible sequences for simple strategies

	used = []
	unused = [([],set([]))]

	while True:
		if unused == []:
			break

		(S, args) = unused.pop(0)

		used += [(S, args)]

		possible_moves = powerset(Prop.getKnowledge()-args, min_size=1) 

		for move in possible_moves:
			new_S = S + [set(move)]
			new_args = args | set(move)

			unused += [(new_S,new_args)]

	return [S for (S,args) in used]
Esempio n. 7
0
def genTestPddl(filename, AF, Prop, model, propList, cannotAssertP, dialogueP,
                oPossModels, agentList, oppList, canAssertO, agentSet,
                probAgent, choice):  # Generates the PDDL specificatation
    #I = Indexer(AF.getArgs())	# assigns a label to each subset of AF.getArgs()

    with open(filename, "w") as f:

        ## Domain
        f.write("(define (problem {0})\n".format(AF.getName()))
        f.write("    (:domain StrategicArgumentation)\n")

        ## Objects
        f.write("    (:objects {0} - arg\n".format(
            str(list(Prop.getArgs())).translate(None, ",[]'")))

        # Objects (proponent sets)
        f.write("              ")
        for S in powerset(Prop.getArgs()):
            f.write("S{0} ".format(I.getIndex(S)))
        f.write("- setOfArgsP\n")

        # Objects (opponent sets)
        f.write("              ")
        for T in powerset(model.getArgs()):
            f.write("T{0} ".format(I.getIndex(T)))
        f.write("- setOfArgsO\n")

        # Objects (Agents)
        f.write("              ")
        for key in oPossModels:
            f.write("A{0} ".format(key))
        f.write("- agent )\n\n")

        ## Initial Conditions
        f.write("    (:init (= (stage) 0)\n\n")

        ## Can Assert
        for a in Prop.getArgs():
            f.write("           (canAssertP {0})\n".format(a))

        f.write("\n")

        ## Opponent Model
        for key in oPossModels:
            if key in probAgent:
                f.write("           (= (prob-belief A{0}) {1})\n".format(
                    key, probAgent[key]))

        ## Probability of Success
        f.write("\n           (= (prob-of-success) 0)\n\n")

        ## Successful Dialogues
        for S in powerset(Prop.getArgs()):
            for T in powerset(model.getArgs()):
                if AF.isSuccessful(set(S) | set(T)):
                    f.write(
                        "           (successful S{0} T{1})		; ({2}, {3})\n".
                        format(I.getIndex(S), I.getIndex(T), S, T))

        f.write("\n")

        ## Dialogue
        for key in propList:
            if key in dialogueP:
                f.write("           (dialogueP S{0})\n".format(key))
        tempKey = None
        for key in oppList:
            if set(oppList[key]) == choice:
                tempKey = key
                break
        for key in oPossModels:
            f.write("           (dialogueO A{0} T{1})\n".format(key, tempKey))

        f.write("\n")

        ## Add for proponent args
        for a in Prop.getArgs():
            for S1 in powerset(Prop.getArgs()):
                S2 = list(set(S1) | set([a]))

                f.write("           (addP {0} S{1} S{2})		; {0} + {3} = {4}\n".
                        format(a, I.getIndex(S1), I.getIndex(S2), S1, S2))

        f.write("\n")

        ## Add for opponent args
        for T1 in powerset(model.getArgs(), min_size=0):
            for T2 in powerset(model.getArgs()):
                T3 = list(set(T1) | set(T2))

                f.write(
                    "           (addO T{0} T{1} T{2})		; {3} + {4} = {5}\n".
                    format(I.getIndex(T1), I.getIndex(T2), I.getIndex(T3), T1,
                           T2, T3))

        f.write("\n")

        ## Closure

        for key in canAssertO:
            if key in agentSet:
                for S1 in powerset(Prop.getArgs()):
                    for S2 in powerset(canAssertO[key], min_size=0,
                                       max_size=1):
                        f.write(
                            "           (canAssertO T{0} A{1} S{2})		; A{1}: {3} -> {4}\n"
                            .format(I.getIndex(S2), key, I.getIndex(S1), S1,
                                    S2))

        f.write("    )\n\n")
        f.write("    (:goal (> (prob-of-success) 0))\n\n")

        f.write("    (:metric maximize (prob-of-success) )\n")
        f.write(")")
Esempio n. 8
0
K_prop = p.getProponentArgs()
Prop = Agent(K_prop)
K_opp = p.getOpponentArgs()

if p.getRules():
    mu = ClosureFunction(p.getRules())
else:
    mu = ClosureFunction([])

opponent_model = OpponentModel()
for (K, p) in p.getOpponentModel():
    Ag = Agent(K, mu)
    opponent_model.add_model(Ag, p)

propList = {}
for k in powerset(K_prop):

    propList["{0}".format(I.getIndex(k))] = k

oppList = {}
for k in powerset(K_opp):

    oppList["{0}".format(I.getIndex(k))] = k

agentList = {}
for Opp in opponent_model.getModels():

    agentList["{0}".format(opponent_model.getID(Opp))] = Opp.getArgs()

probAgent = {}
for key in agentList: