Artificial intelligence 用连续作用空间求解多臂土匪问题

Artificial intelligence 用连续作用空间求解多臂土匪问题,artificial-intelligence,reinforcement-learning,bandit-python,Artificial Intelligence,Reinforcement Learning,Bandit Python,我的问题在某个时间间隔(0,1)上有一个单一的状态和无限多的动作。在谷歌搜索了一段时间后,我发现了一些关于一种称为缩放算法的论文,这种算法可以解决连续动作空间的问题。然而,我的实现不善于利用。因此,我考虑添加一种epsilon贪婪行为 结合不同的方法是否合理 你知道解决我问题的其他方法吗 代码示例: import portion as P def choose_action(self, i_ph): # Activation rule not_covered = P.closed

我的问题在某个时间间隔(0,1)上有一个单一的状态和无限多的动作。在谷歌搜索了一段时间后,我发现了一些关于一种称为缩放算法的论文,这种算法可以解决连续动作空间的问题。然而,我的实现不善于利用。因此,我考虑添加一种epsilon贪婪行为

结合不同的方法是否合理

你知道解决我问题的其他方法吗

代码示例:

import portion as P
def choose_action(self, i_ph):
    # Activation rule
    not_covered = P.closed(lower=0, upper=1)
    for arm in self.active_arms:
        confidence_radius = calc_confidence_radius(i_ph, arm)
        confidence_interval = P.closed(arm.norm_value - confidence_radius, arm.norm_value + confidence_radius)
        not_covered = not_covered - confidence_interval
    
    if not_covered != P.empty():
        rans = []
        height = 0
        heights = []
        for i in not_covered:
            rans.append(np.random.uniform(i.lower, i.upper))
            height += i.upper - i.lower
            heights.append(i.upper - i.lower)
        ran_n = np.random.uniform(0, height)
        j = 0
        ran = 0
        for i in range(len(heights)):
            if j < ran_n < j + heights[i]:
                ran = rans[i]
            j += heights[i]
        self.active_arms.append(Arm(len(self.active_arms), ran * (self.sigma_square - lower) + lower, ran))

    # Selection rule
    max_index = float('-inf')
    max_index_arm = None
    for arm in self.active_arms:
        confidence_radius = calc_confidence_radius(i_ph, arm)

        # indexfunction from zooming algorithm
        index = arm.avg_learning_reward + 2 * confidence_radius

        if index > max_index:
            max_index = index
            max_index_arm = arm
    action = max_index_arm.value
    self.current_arm = max_index_arm
    return action

def learn(self, action, reward):
    arm = self.current_arm
    arm.avg_reward = (arm.pulled * arm.avg_reward + reward) / (arm.pulled + 1)
    if reward > self.max_profit:
        self.max_profit = reward
    elif reward < self.min_profit:
        self.min_profit = reward

    # normalize reward to [0, 1]
    high = 100
    low = -75
    if reward >= high:
        reward = 1
        self.high_count += 1
    elif reward <= low:
        reward = 0
        self.low_count += 1
    else:
        reward = (reward - low)/(high - low)

    arm.avg_learning_reward = (arm.pulled * arm.avg_learning_reward + reward) / (arm.pulled + 1)
    arm.pulled += 1

# zooming algorithm confidence radius
def calc_confidence_radius(i_ph, arm: Arm):
    return math.sqrt((8 * i_ph)/(1 + arm.pulled))
将部分导入为P
def选择行动(自我,i\U ph):
#激活规则
未覆盖=P.闭合(下=0,上=1)
对于自激活手臂中的手臂:
置信度半径=计算置信度半径(i\U ph,arm)
置信区间=P.闭合(arm.norm\u值-置信半径,arm.norm\u值+置信半径)
未覆盖=未覆盖-置信区间
如果不包括在内!=P.empty():
rans=[]
高度=0
高度=[]
对于未涵盖的i/U:
rans.append(np.random.uniform(i.lower,i.upper))
高度+=仪表板上部-仪表板下部
高度。附加(i.上-i.下)
随机均匀(0,高度)
j=0
ran=0
对于范围内的i(长度(高度)):
如果j最大索引:
最大指数=指数
最大分度臂=臂
动作=最大分度值
self.current\u arm=最大索引\u arm
返回动作
def学习(自我、行动、奖励):
臂=自电流\u臂
arm.avg_奖励=(arm.pulled*arm.avg_奖励+奖励)/(arm.pulled+1)
如果奖励>自我最大利润:
self.max_利润=奖励
elif奖励=高:
奖励=1
自高计数+=1

elif reward您可能会发现,完整的算法描述非常有用。他们将探针均匀地网格化,并告知此选择(例如,以著名的高能臂为中心的正常选择)也是可能的(但这可能会使一些界限无效,我不确定)。

请展示您已经尝试过的内容。我不知道我添加的代码样本是否是您想要的。基本上,我试图实现Kleinberg、Slivkins和Upfal在《度量空间中的强盗和专家》中描述的缩放算法。我并不是在征求编码方面的建议,而是想得到我问题的一般答案。无论如何谢谢你!