示例#1
0
# -----------------------------------
operator = 'owa'
model = models['fusion']
devaluation_time = [2, 8, 16]

fig1 = figure()

ind = 1
for d in devaluation_time:
    model.startExp()
    for s in list(set(p_test[operator].keys()) - set(['S2'])):
        # for s in p_test[operator].keys():
        # for s in ['S9']:
        model.setAllParameters(p_test[operator][s]['fusion'])
        for i in xrange(nb_blocs):
            cats.reinitialize()
            cats.set_devaluation_interval(d)
            model.startBloc()
            for j in xrange(nb_trials):
                # print cats.asso
                state = cats.getStimulus(j)
                # print state
                action = model.chooseAction(state)
                # print action, cats.actions.index(action)
                reward = cats.getOutcome(state, action)
                model.updateValue(reward)

                # print reward
                #sys.stdin.readline()

    states = convertStimulus(np.array(model.state))
示例#2
0
nb_blocs = 1
nb_trials = 40

cats = CATS(nb_trials)
model = FSelection(cats.states, cats.actions, parameters)



Hbs = []
Hfs = []

model.startExp()
for i in xrange(nb_blocs):
	Hbs.append([])
	Hfs.append([])
	cats.reinitialize()
	model.startBloc()
	#cats.set_devaluation_interval(5)
	for j in xrange(nb_trials):
		# print cats.asso				
		state = cats.getStimulus(j)				
		# print state
		action = model.chooseAction(state)
		Hbs[-1].append(model.Hb)
		Hfs[-1].append(model.Hf)
		# print action, cats.actions.index(action)
		reward = cats.getOutcome(state, action)				
		model.updateValue(reward)

		# print reward
		#sys.stdin.readline()
示例#3
0
文件: Sweep.py 项目: gviejo/Gohal
class SamplingPareto():
    """ Simple sampling of parameters to
    draw pareto front """

    def __init__(self, human, model, n = 10000):
        self.human = human
        self.model = model
        self.subject = self.human.keys()
        self.n = n
        self.nb_repeat = 8
        self.nb_blocs = 4
        self.nb_trials = 39
        self.nb_param = len(self.model.bounds.keys())
        self.p_order = self.model.bounds.keys()
        self.cats = CATS(self.nb_trials)
        self.rt = dict()
        self.state = dict()
        self.action = dict()
        self.responses = dict()
        self.indice = dict()
        self.hrt = dict()        
        for s in self.human.keys():
            self.rt[s] = np.array([self.human[s][i]['rt'][0:self.nb_trials,0] for i in range(1,self.nb_blocs+1)])
            self.rt[s] = np.tile(self.rt[s], (self.nb_repeat,1))
            self.state[s] = np.array([self.human[s][i]['sar'][0:self.nb_trials,0] for i in range(1,self.nb_blocs+1)])
            self.state[s] = np.tile(self.state[s], (self.nb_repeat,1))
            self.action[s] = np.array([self.human[s][i]['sar'][0:self.nb_trials,1] for i in range(1,self.nb_blocs+1)])
            self.action[s] = np.tile(self.action[s], (self.nb_repeat,1))
            self.responses[s] = np.array([self.human[s][i]['sar'][0:self.nb_trials,2] for i in range(1,self.nb_blocs+1)])
            self.responses[s] = np.tile(self.responses[s], (self.nb_repeat,1))
            step, indice = getRepresentativeSteps(self.rt[s], self.state[s], self.action[s], self.responses[s])
            self.hrt[s] = computeMeanRepresentativeSteps(step)[0]
            self.hrt[s] = self.center(self.hrt[s])

    def _convertStimulus(self, s):
            return (s == 1)*'s1'+(s == 2)*'s2' + (s == 3)*'s3'

    def center(self, x):
        x = x - np.median(x)
        x = x / float(np.percentile(x, 75)-np.percentile(x, 25))
        return x

    def evaluate(self, s):
        p_test = {k:np.random.uniform(self.model.bounds[k][0],self.model.bounds[k][1]) for k in self.model.bounds.keys()}
        self.model.setAllParameters(p_test)
        self.model.startExp()
        for i in xrange(self.nb_repeat):
            for j in xrange(self.nb_blocs):
                self.cats.reinitialize()
                self.cats.stimuli = np.array(map(self._convertStimulus, self.human[s][j+1]['sar'][:,0]))
                self.model.startBloc()
                for k in xrange(self.nb_trials):
                    state = self.cats.getStimulus(k)
                    action = self.model.chooseAction(state)
                    reward = self.cats.getOutcome(state, action)
                    self.model.updateValue(reward)
        self.model.reaction = np.array(self.model.reaction)
        self.model.action = np.array(self.model.action)
        self.model.responses = np.array(self.model.responses)
        self.model.value = np.array(self.model.value)
        step, indice = getRepresentativeSteps(self.model.reaction, self.state[s], self.model.action, self.model.responses)
        hrtm = computeMeanRepresentativeSteps(step)[0]
        hrtm = self.center(hrtm)

        rt = -np.sum(np.power(hrtm-self.hrt[s], 2))

        choice = np.sum(np.log(self.model.value))
        return np.array([choice, rt])

    def multiSampling(self, s):
        n = 100
        data = np.zeros((n, 3))
        pareto = np.array([[-1, -1000., -1000.0]])
        p = np.zeros((n,self.nb_param+1))        
        good = np.zeros((1, self.nb_param+1))
        good[0,0] = -1.0
        for i in xrange(1,self.n+1):
            ind = (i-1)%n            
            data[ind,0] = i
            p[ind,0] = i
            data[ind,1:] = self.evaluate(s)
            p[ind,1:] = np.array([self.model.parameters[k] for k in self.p_order])
            if i%n == 0:
                pareto, good = self.constructParetoFrontier(np.vstack((data, pareto)), np.vstack((p, good)))
                
        return dict({s:np.hstack((pareto, good[:,1:]))})

    def constructParetoFrontier(self, front, param):
        front = front[front[:,1].argsort()][::-1]
        pareto_frontier = [front[0]]
        for pair in front[1:]:
            if pair[2] >= pareto_frontier[-1][2]:
                pareto_frontier.append(pair)
        pareto_frontier = np.array(pareto_frontier)        
        good = np.array([param[param[:,0] == i][0] for i in pareto_frontier[:,0]])
        return pareto_frontier, good

    def run(self):
        subject = self.subject
        pool = Pool(len(subject))
        self.data = pool.map(unwrap_self_multiSampling, zip([self]*len(subject), subject))
        tmp = dict()
        for i in self.data:
            s = i.keys()[0]
            tmp[s] = i[s]            
        self.data = tmp

    def save(self, output_file):
        output = open(output_file, 'wb')
        pickle.dump(self.data, output)
        output.close()
示例#4
0
nb_trials = 42
nStepEm = 2000
pOutset = 0.2
cats = CATS()
Responses = dict()


# -----------------------------------
#Kalman Learning session
# -----------------------------------
Kdata = []
for i in xrange(200):
    answer = []
    values = createQValuesDict(cats.states, cats.actions)
    covariance = createCovarianceDict(len(cats.states)*len(cats.actions), init_cov, eta)
    cats.reinitialize(nb_trials, 'meg')
    for j in xrange(nb_trials):
        KalmanQlearning(j, values, covariance, False)
    Kdata.append(list(answer))
Responses['K'] = np.array(Kdata)
# -----------------------------------

# -----------------------------------
# QLearning session
# -----------------------------------
Qdata = []
for i in xrange(200):
    answer = []
    values = createQValuesDict(cats.states, cats.actions)
    cats.reinitialize(nb_trials, 'meg')
    for j in xrange(nb_trials):
示例#5
0
nb_trials = 42
nStepEm = 2000
pOutset = 0.2
cats = CATS()
Responses = dict()

# -----------------------------------
#Kalman Learning session
# -----------------------------------
Kdata = []
for i in xrange(200):
    answer = []
    values = createQValuesDict(cats.states, cats.actions)
    covariance = createCovarianceDict(
        len(cats.states) * len(cats.actions), init_cov, eta)
    cats.reinitialize(nb_trials, 'meg')
    for j in xrange(nb_trials):
        KalmanQlearning(j, values, covariance, False)
    Kdata.append(list(answer))
Responses['K'] = np.array(Kdata)
# -----------------------------------

# -----------------------------------
# QLearning session
# -----------------------------------
Qdata = []
for i in xrange(200):
    answer = []
    values = createQValuesDict(cats.states, cats.actions)
    cats.reinitialize(nb_trials, 'meg')
    for j in xrange(nb_trials):