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
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]
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]
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
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]
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(")")
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: