首页 > 编程语言 >25/1/14 算法笔记<强化学习> CBR加强化学习

25/1/14 算法笔记<强化学习> CBR加强化学习

时间:2025-01-19 19:04:28浏览次数:3  
标签:case 25 检索 14 self CBR 案例 state action

CBR,基于案例的推理,它是一种基于过去的实际经验或经历的推理,他可以根据过往的案例找到与当前案例最相关的案例,然后对该案例做改动来解决当前的问题。

CBR的过程

CBR可以看作一个循环过程:相似按键检索-->案例重用-->案例修改-->案例学习

遇到新问题时,将新问题通过案例描述输入CBR系统,系统会检索出与目标案例最匹配的案例,若有与目标案例情况一致的源案例则直接交给用户,若没有则根据目标案例的情况对相似案例的解决方案调整修改。

                                

案例检索

那么案例检索会用到哪些方法呢?有以下几种:

1.基于内容的检索:提取案例关机按,使用距离度量计算新问题与案例之间的相似度。

2.基于索引的检索:先对案例进行所以,以快速检索,使用梳妆结构来组织案例,以提高检索效率

3.基于规则的检索:依赖预定义的规则来检索案例,规则可以基于专家知识或经验

4.基于类的检索:将案例根据某些特征分为不同的类,检索时首先确定新问题的类,然后在该类中查找相似案例。

5.混合检索:结合多种检索方法

6机器学习增强检索:利用机器学习技术来改进案例检索过程。使用神经网络提取特征,加入强化学习,反馈优化检索策略。

看到这我就发觉这算法和强化学习有多大区别吗,甚至都没归纳到机器学习中。

之后网上查找

首先推理机制不同

CBR是依赖过去的案例来解决问题,而不是通过学习模型来进行预测

机器学习是侧重学习模式,通过训练模型进行预测或者分类

简单的说是这样的,CBR作为一个研究领域,起源较早,主要是受到心理学和认知科学的影响,强调如何利用经验进行推理。

CBR和强化学习

嘿看我们的标题,你说这CBR不是经验吗,那这和强化学习不也就差不多吗,而且这不就是专家系统吗,为什么有不分入强化学习呢?

网上说并不是同一个概念,我看了之后发现其实还是有很多的相似点,不同肯能就是,专家系统是存储的是领域专家的知识,经验和规则,CBR存储的是案例,也可以是失败的案例,它是通过检索与新问题相似的历史案例来找到解决方案,应该就是一个找方案的方式不一样,一个是让训练好的专家分析,一个是去案例库里面直接找。

但是,CBR是不是专家系统那不重要啊(滑稽),我能让强化学习加入它吗?

包行的啊,老弟!

我们用CBR存储案例,然后强化学习过程中调用案例库,解决相似的问题

看下代码:
导入库
import numpy as np
import gym
from collections import deque 创建双端队列,适合存储案例。
CBR类
class CBR:
    def __init__(self, max_size=100):
        self.case_base = deque(maxlen=max_size)
添加案例

将一个新的案例(状态、动作、奖励、下一个状态)添加到案例库中。

    def add_case(self, state, action, reward, next_state):
        self.case_base.append((state, action, reward, next_state))
检索案例

根据当前状态检索最相似的案例

    def retrieve_case(self, current_state):
        if not self.case_base:
            return None
        return min(self.case_base, key=lambda case: np.linalg.norm(np.array(case[0]) - np.array(current_state)))
RL agent类
class RLAgent:
    def __init__(self, action_space):
        self.q_table = {}
        self.action_space = action_space
        self.epsilon = 1.0  # 探索率
        self.gamma = 0.99    # 折扣因子
        self.alpha = 0.1     # 学习率
        self.cbr = CBR()
动作选择
    def get_action(self, state):
        if np.random.rand() < self.epsilon:
            return self.action_space.sample()  # 随机选择动作
        return self.q_table.get(state, {}).get(max(self.q_table.get(state, {}), key=lambda x: self.q_table.get(state, {}).get(x, 0)), 0)
更新Q值
    def update_q_value(self, state, action, reward, next_state):
        if state not in self.q_table:
            self.q_table[state] = {}
        if action not in self.q_table[state]:
            self.q_table[state][action] = 0

        # Q-learning 更新
        best_next_action = max(self.q_table.get(next_state, {}), key=lambda x: self.q_table.get(next_state, {}).get(x, 0), default=0)
        td_target = reward + self.gamma * self.q_table.get(next_state, {}).get(best_next_action, 0)
        self.q_table[state][action] += self.alpha * (td_target - self.q_table[state][action])
从案例中学习
    def learn_from_case(self, case):
        state, action, reward, next_state = case
        self.update_q_value(state, action, reward, next_state)
主函数
def main():
    env = gym.make('CartPole-v1')
    agent = RLAgent(env.action_space)

    num_episodes = 1000
    for episode in range(num_episodes):
        state = env.reset()
        done = False
        while not done:
            action = agent.get_action(tuple(state))
            next_state, reward, done, _ = env.step(action)

            # 存储案例
            agent.cbr.add_case(tuple(state), action, reward, tuple(next_state))

            # 更新 Q 值
            agent.update_q_value(tuple(state), action, reward, tuple(next_state))

            # 从案例中学习
            case = agent.cbr.retrieve_case(tuple(state))
            if case:
                agent.learn_from_case(case)

            state = next_state

        # 逐渐减少探索率
        agent.epsilon = max(0.01, agent.epsilon * 0.995)

    env.close()

实际当中,我们还需要根据案例然后对对当前状态进行调整,这里就做了个大概。

ok,over,明天见啦!

标签:case,25,检索,14,self,CBR,案例,state,action
From: https://blog.csdn.net/yyyy2711/article/details/145145580

相关文章

  • 2025毕设springboot 基于web的家教管理系统论文+源码
    系统程序文件列表开题报告内容研究背景在当今社会,随着教育需求的多元化和个性化发展,家教服务逐渐成为众多家庭补充学校教育、提升孩子学习成绩的重要途径。然而,传统的家教市场存在信息不对称、管理不规范、服务质量参差不齐等问题,给家长和家教老师带来了诸多不便。随着互联......
  • 2025毕设springboot 基于Web的多功能游戏平台设计与实现论文+源码
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和普及,网络游戏已成为人们休闲娱乐的重要方式之一。传统的游戏平台大多局限于单一的游戏类型或服务商,无法满足用户多样化的游戏需求。与此同时,随着Web技术的不断进步,基于Web的游戏平台凭借其跨平台、易访问、......
  • 2025 #1 我依然怕先行者放弃了导航 奉献者悔恨起坚守过信条
    T1.P4262[Code+#3]白金元首与莫斯科\(n\timesm\)的棋盘上有一些障碍格,对于每一个非障碍格,需要求出若该格为障碍格,用\(1\times2\)的砖铺满棋盘的方案数。其中\(1\len,m\le17\)。看到这一种比较抽象的网格上的题目,可以考虑使用插头dp来解决。对于一个\(1\ti......
  • H25:编码(选作)
    (......
  • 2025四款好用的电脑桌面日程清单软件推荐
    进入2025年,很多打工人都想要在职场更进一步,提高工作效率,而使用一款电脑桌面日程清单软件,可以帮助我们轻松管理工作日程,让每天的工作任务井井有条。今天给大家推荐4款简单好用的Win电脑桌面日程清单软件。一、微软todo微软自带的待办清单工具,旨在帮助用户规划和组织日常任务、事......
  • [2025.1.19 JavaSE学习]网络编程-2(netstat指令 && TCP补充)
    netstatnetstat-an:可以查看当前主机网络情况,包括端口监听情况和网络连接情况netstat-an|more:可以分页显示在dos控制台执行Listening表示某个端口在监听如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息PS:netstat-anb,可以发现,8888端口号在上一节程序运行......
  • 【Typora】2025最新Typora安装下载与破解免费使用保姆级图文教程
    本文目录一、下载Typora二、安装Typora三、使用Typora一、下载Typorahttps://www.typoraio.cn/首先我们去Typroa的官网下载Typora。这里可以使用中文站,不会太卡。二、安装Typora选定好自己的路径进行下载,这里推荐D盘进行下载。然后创建一个桌面版图标,方便下......
  • springboot+vue高校年终考核材料归档平台研究与设计 64x25
    目录系统实现截图开发核心技术介绍技术栈核心代码部分展示操作手册视频演示/源码获取系统实现截图开发核心技术介绍springboot+Element-UI+vue本系统采用MVVM模式,开发框架使用SpringBoot框架,开发工具使用IDEA,VisualStudioCode,Web服务器使用Tomcat,数据库服务......
  • .NET周刊【1月第1期 2025-01-05】
    国内文章3款.NET开源、功能强大的通讯调试工具,效率提升利器!https://www.cnblogs.com/Can-daydayup/p/18631410本文介绍了三款功能强大的.NET开源通讯调试工具,旨在提高调试效率。这些工具包括LLCOM,提供串口调试和自动化处理功能;Wu.CommTool,支持ModbusRTU和MQTT调试,界面丰富;以及......
  • 250118 ABC389总结
    昨天激情地打了1场ABC。A一眼秒了。B一眼秒了。C两眼秒了。D1.5眼秒了,然后发现题读错了,不过问题不大,最后还是秒了。第一发没开longlong见祖宗了。全军复诵:不开longlong见祖宗。E一眼dp,但是我不会dp,所以想了一小下直接去看F了。最后的最后试图码了一下单调队列+暴......