<commit_before>#coding:utf-8
from likelihood_function import likelihood_function

def sensor_update(sensor_val,episode,particle):
    """
    処理:全てのパーティクルについて、尤度に基づいて重みを更新する
         重みの平均値でalphaを更新する
         alphaを用いて重みを正規化(すべてのパーティクルの重みの和が1)する
    引数: センサ値、エピソードクラス、パーティクルクラス
    戻り値: particleクラス
    """
    # episode.setsの中のセンサ値集合をまとめる
    sensor_set = []
    if len(episode.sets) == 0: #エピソード集合がまだない場合
        return particle
    else:
        for i in range(len(episode.sets)):
            sensor_set.append(episode.sets[i].sensor)

    likelihood = likelihood_function(sensor_val,sensor_set) 
    particle.alpha = 0.0

    for i in range(particle.num):
        particle.weight[i] = particle.weight[i] * likelihood[ particle.distribution[i] ]
        particle.alpha += particle.weight[i]

    if particle.alpha != 0.0:
        for i in range(particle.num):
            particle.weight[i] = particle.weight[i] / particle.alpha
        particle.alpha /= particle.num
    else:
        for i in range(particle.num):
            particle.weight[i] = 1.0 / particle.num
    return particle

def retrospective_resetting()
    処理：
        Particle.alphaがRobot.resetting_thresholdより小さく、
        かつ
        Robot.Episode.sets[] の数が充分存在している場合
        回想に基づくリセッティングを行う
    引数: particleクラス,episodeクラス,resetting_threshod,resetting_step
    戻り値:
    if self.alpha < self.resetting_threshold and len(self.episode) > self.resetting_step:
        # センサ値および直近のいくつかのエピソードについて、尤度を求めておく
        likelihood = [ [ 0.0 for i in range( len(self.episode) ) ] for ii in range(self.resetting_step) ]
        likelihood[0] = likelihood_function(self.sensor, self.episode)
        for i in range(1,self.resetting_step):
            likelihood[i] = likelihood_function(self.episode[-i][0], self.episode)
        for i in range(1,self.resetting_step):
            for ii in range( len(self.episode) ):
                if self.episode[ii][1] != self.episode[-i][1] or self.episode[ii][2] != self.episode[-i][2]:
                    likelihood[i][ii] *= self.reduction_rate
        # 各エピソードの重みを求める<commit_msg>functions.py編集中<commit_after>#coding:utf-8
from likelihood_function import likelihood_function

def sensor_update(sensor_val,episode,particle):
    """
    処理:全てのパーティクルについて、尤度に基づいて重みを更新する
         重みの平均値でalphaを更新する
         alphaを用いて重みを正規化(すべてのパーティクルの重みの和が1)する
    引数: センサ値、エピソードクラス、パーティクルクラス
    戻り値: particleクラス
    """
    # episode.setsの中のセンサ値集合をまとめる
    sensor_set = []
    if len(episode.sets) == 0: #エピソード集合がまだない場合
        return particle
    else:
        for i in range(len(episode.sets)):
            sensor_set.append(episode.sets[i].sensor)

    likelihood = likelihood_function(sensor_val,sensor_set) 
    particle.alpha = 0.0

    for i in range(particle.num):
        particle.weight[i] = particle.weight[i] * likelihood[ particle.distribution[i] ]
        particle.alpha += particle.weight[i]

    if particle.alpha != 0.0:
        for i in range(particle.num):
            particle.weight[i] = particle.weight[i] / particle.alpha
        particle.alpha /= particle.num
    else:
        for i in range(particle.num):
            particle.weight[i] = 1.0 / particle.num
    return particle

def retrospective_resetting()
    """
    処理：
        Particle.alphaがRobot.resetting_thresholdより小さく、
        かつ
        Robot.Episode.sets[] の数が充分存在している場合
        回想に基づくリセッティングを行う
    引数: particleクラス,episodeクラス,resetting_threshod,resetting_step,sensor_val
    引数: resetting_threshold
    戻り値:
    """
    if self.alpha < self.resetting_threshold and len(self.episode) > self.resetting_step:
        # センサ値および直近のいくつかのエピソードについて、尤度を求めておく
        likelihood = [ [ 0.0 for i in range( len(self.episode) ) ] for ii in range(self.resetting_step) ]
        likelihood[0] = likelihood_function(self.sensor, self.episode)
        for i in range(1,self.resetting_step):
            likelihood[i] = likelihood_function(self.episode.sets[].sensor, self.episode)
        for i in range(1,self.resetting_step):
            for ii in range( len(self.episode) ):
                if self.episode[ii][1] != self.episode[-i][1] or self.episode[ii][2] != self.episode[-i][2]:
                    likelihood[i][ii] *= self.reduction_rate
        # 各エピソードの重みを求める
{'fraction_non_alphanumeric': 0.10927152317880795, 'fraction_numerical': 0.008751182592242194, 'mean_word_length': 2.8340888485947415, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1516852', 'n_tokens_mistral': 1716, 'n_tokens_neox': 1656, 'n_words': 243}