def chooseAction(continueDict, state): '''To choose whether to continue the previous direction, reverse the direction, or go to another direction. The decision is based on previous action and the current state. For example, if previous action is 'ZOOM IN', then we only examine the 'z' value. The continueDict will give a probability to continue and a probability to reverse for each possible 'z' value.''' action = state["prevAction"] axis = related_axis(action) v = related_value(action, state) #by default reverse p_continue, p_reverse = 0.5, 0.5 try: count, p_continue, p_reverse, p_reset = continueDict[axis][v][action] #print "continue or not?:", axis, v, count, p_continue, p_reverse, p_reset except KeyError: print "Out of the range" pass #use the default value rand = random.nextDouble() #print "rand: ", rand, p_continue, p_continue+p_reverse, p_continue+p_reverse+p_reset if rand <= p_continue: return action elif rand <= p_continue + p_reverse: return reverseTable[action] elif rand <= p_continue + p_reverse + p_reset: return 'RESET' else: return 'CHANGE'
def selectDirection(popPlus, popMinus): propPlus = popPlus / (popPlus + popMinus) rand = random.nextDouble() if rand < propPlus: return "plus" else: return "minus"
def selectDirection(ratePlus, rateMinus): propPlus = ratePlus / (ratePlus + rateMinus) rand = random.nextDouble() if rand < propPlus: return "plus" else: return "minus"
def chooseAction(continueDict, state): '''To choose whether to continue the previous direction, reverse the direction, or go to another direction. The decision is based on previous action and the current state. For example, if previous action is 'ZOOM IN', then we only examine the 'z' value. The continueDict will give a probability to continue and a probability to reverse for each possible 'z' value.''' action = state.prevAction axis = related_axis(action) v = eval(related_value(action)) #by default reverse p_continue, p_reverse = 0.5, 0.5 try: p_continue, p_reverse = continueDict[axis][v][action] print 'cont', p_continue, 'rev', p_reverse except KeyError: pass #use the default value rand = random.nextDouble() if rand <= p_continue: return action print 'to contiue' #elif rand <= p_continue + p_reverse: # return reverseTable[action] else: return None
def divide_files(path, path_o1, path_o2): '''randomly divide files in a directory to two directories.''' for name in os.listdir(path): #ignore none "behavior" files if "behavior" not in name: continue fullname = os.path.join(path, name) rand = extend_random.nextDouble() if rand < 0.5: output_fullname = os.path.join(path_o1, name) else: output_fullname = os.path.join(path_o2, name) os.system("mkdir -p "+path_o1) os.system("mkdir -p "+path_o2) os.system("cp -f %s %s" % (fullname, output_fullname))
def chooseBeginAction(beginDict): '''In the beginning or after 'RESET', choose the first action at the default view point.''' accu_dict = {} sum = 0 for action in sorted(beginDict.keys()): prob = beginDict[action] #print action, prob sum += prob accu_dict[action] = sum #print action, sum prob = random.nextDouble() for action in sorted(accu_dict.keys()): accu = accu_dict[action] #print action, accu, prob if prob <= accu: #print prob, "action ", action return action
def selectAxis(popularity): '''Choose the next axis to go along We add 1/popularity together, and choose the axis propotional to its 1/popularity. Exception: if the popularity of an axis is 0, we directly choose it. ''' acc_1_pop = 0 acc_res = [] for ax, pop in popularity.iteritems(): if (pop == 0): return ax acc_1_pop += (1 / pop) acc_res.append((ax, acc_1_pop)) rand = random.nextDouble() * acc_1_pop for ax, acc in acc_res: #print "rand: ", rand, "axis", ax, "acc ", acc if rand <= acc: return ax