June 2021-Continuous Transition: Improving Sample Efficiency for Continuous Control Problems via MixUp

摘要:
尽管深度强化学习(RL)已成功应用于各种机器人控制任务,但由于样本效率较差,将其应用于现实世界任务仍然具有挑战性。为了克服这一缺点,一些工作侧重于在训练过程中重用收集的轨迹数据,将其分解为一组策略无关的离散变迁。然而,它们的改进有些边际,因为i)转换的数量通常很小,ii)值分配只发生在联合状态中。
针对这些问题,提出一种简洁而有效的连续transition构造方法,通过挖掘轨迹上潜在的transition来挖掘轨迹信息。本文建议通过对连续transition进行线性插值来合成新的transition用于训练。为了保持构建的transition的真实性,还开发了一个鉴别器来自动指导构建过程。广泛的实验表明,所提出的方法在MuJoCo中各种复杂的连续机器人控制问题上实现了样本效率的显著提高,并优于先进的基于模型/无模型的强化学习方法。源代码是可用的

I. INTRODUCTION

  在这些方法中,通过将轨迹数据分割为一组根据动作的离散tranasition(即{(st, at, st+1, dt, rt)}t=0: t−1),从数据中删除policy的印记,以便这些transition只依赖于直接的状态和动作,并且可以重用。然而,将一个episode分割为几个离散的transition仍然对样本效率有有限的提高,因为trnaistion的数量通常很少,并且在训练期间对策略来说只有几个联合状态(即{st}t=0: t)可见。

提高sample从轨迹到连续transition的效率。从左到右依次为轨迹、离散transition和通过插值连续离散transition得到的连续transition。

  看到通过将轨迹分解为离散transition来提高样本效率的巨大成功,我们想知道提取的transition是否可以更密集,并且可以使用轨迹的更多状态来改进策略。

  传统上,扩展数据最流行的策略是通过数据增强。最近提出的MixUp技术是一种非常简单有效的数据增强方法,用于增强深度分类模型的性能。
  通过线性插值随机数据样本对及其训练目标,MixUp生成一个合成的训练样本集,并使用这些流形外(out-of-manifold) examples来正则化深度模型。
  这些方法揭示了通过从已经存在的数据中构建数据来提高深度神经网络性能的潜力。然而,这些策略大多数是针对图像输入开发的,仍然没有有效的方法来增强强化学习中的特征输入

  本文通过类似mixup的策略进一步从轨迹数据中提取transition——线性插值两个连续的transition,来开发强化学习中提高样本效率的潜力。与连续的机器人控制任务一样,连续的状态、动作和奖励通常是相似的,并且可以顺利地进行转换。从这个意义上说,通过对两个连续的transition进行线性插值所构造的transition可能存在于实际的transition流形中或离实际的transition流形不远。通过这种方法,我们可以从连续变化的轨迹中提取无限数量的过渡。

主要贡献包括两个方面:

  1. 提出构建连续transition,以进一步提高强化学习在连续控制问题上的样本效率;
  2. 为了使连续transition保持在离真实转换流形不远的地方,引入了一个基于能量的鉴别器来自动调整beta分布的温度系数。广泛和全面的实验评估表明,所提出的框架在复杂的连续控制任务上实现了样本效率的明显提高。

II. RELATED WORK

Improving Sample Efficiency

提高样本效率是强化学习中最关键的问题之一;
考虑到:探索-学习过程,如何更好地优化策略以及如何高效地探索环境;
考虑环境因素,如何学习等动力学模型

Data Augmentation

在强化学习领域,数据增强仍然应用于具有图像输入的任务。据我们所知,RL中对特征输入的数据增强仍然是无差别的

III. PRELIMINARIES

Reinforcement Learning.

MixUp.

线性插值w.r.t.插值比∈ [0, 1]:

IV. METHODOLOGIES

Continuous Transition.

  transition的数量通常很小,值的分配只发生在它们的联合状态上。这些联合状态之间的中间信息没有收集到,并且大部分被浪费了。获取这些中间信息可以帮助策略更好地泛化,而不是记忆几个离散联合状态的信息。此外,如果这些轨迹在相似的中间状态相交,则可能有助于值在不同轨迹之间传播。因此,本文旨在挖掘沿着轨迹的中间信息的潜力,以进一步提高样本效率。
  为了获得用于训练的中间信息,借助于线性插值两个连续离散transition,以构建沿着轨迹平滑连续变化的new transition

具体来说,通过T't= M(Tt, Tt+1)获得continuous transition T't,其中是从beta分布采样的插值率,即 ~ B(β, β)(以温度β∈(0,1])为参数)。

  要插值的transition应该是连续的原因是,连续的transition在连续控制任务上通常具有更相似的动态信息(例如,位置)。如下图所示,与两个距离较远的transition(图中的蓝点)之间的插值相比,对两个接近的transition进行插值更有可能产生一个也存在于流形中的新transition(图中的黄色点)。然后,使用连续transition代替原始离散transition进行训练;

Automatic Temperature Tuning

推导了一个用于构建连续过渡的线性插值算法。最重要的超参数是beta分布的温度β∈(0,1]
当β接近0时,beta分布类似于2点伯努利分布。在这种情况下,从beta分布中采样的插值率约为0或1,将连续transition减少为一个离散transition(图中红点)。
当β接近1时,beta分布类似于均匀的[0,1]分布。在这种情况下,连续transition很可能位于流形之外(图中蓝点)。
在这种意义上,连续transition和真实transition流形之间的期望距离与β的值呈正相关。我们可以调整β以保持期望距离低于容差m。

采用基于能量的鉴别器来估计transition到transition流形之间的距离:

我们把(st, at)表示为xt和(st+1, rt, dt) = yt。
通过优化φ使所有离散transition的方程最小化来提升鉴别器

保证真实离散transition的估计距离为零,进一步通过减去离散transition的能量来校正鉴别器:

记Et为E(xt, yt);
E't是continuous transition T't的能量。当为0或1时,d~ (M(Tt, Tt+1))等于0,与参数φ无关

  不是要求用户手动设置温度,我们可以通过制定一个约束满足问题来自动化这个过程,本文旨在找到一种随机策略来构建连续的transition,使合成transition与实际流形之间的距离在容差m内。

形式上,我们想解决约束优化问题:

利用函数逼近和随机梯度下降优化β,简化目标为:

在每个梯度下降步骤之后,我们将β裁剪到(0,1]之内。

Algorithm



使用生成的continuous transitions更新Q函数

本文转载于网络 如有侵权请联系删除

相关文章

  • Go 视图模板篇(五):模板布局和继承

    模板布局与继承在Go模板中,可以结合define指令和template指令实现模板布局功能。首先编写一段服务端示例代码:packagemain import( "html/template" "net/http" ) funclayoutExample(whttp.ResponseWriter,r*http.Request){ t:=template.Must(template.ParseFiles("layout.html")) t.ExecuteTemplate(w,"layout","") } funcmain(){ http.HandleFunc("/layout",layoutExample) http.ListenAndServe(":8080",nil) }复制对应的模板文件layout.html代码如下,这里我们将子视图模板和布局模板写到一个文件:{{define"layout"}} <!DOCTYP

  • 不使用 if-elif 语句,如何优雅地判断某个数字所属的等级?

    偶然看到了stackoverflow上的一个问题,还挺有启发,故分享一下。题目大意是:有从A到F的5个等级,现要判断某个数值(从0到1之间)所属的等级。举例,如数值>=0.9,则属于A;若数值>=0.8,则属于B;以此类推。若使用if-elif语句,可能写成这样:ifscr>=0.9: print('A') elifscr>=0.8: print('B') elifscr>=0.7: print('C') elifscr>=0.6: print('D') else: print('F')复制此写法出现了很多重复的模式,不够简洁优雅。有什么更好的写法,来实现这个目的呢?该问题下的回答挺多的,实现思路五花八门。我挑几个可读性比较好:方法一:使用bisect模块(数字可调)方法二:使用zip()与next()方法三:使用字典(仅适用于Python3.6以上的有序字典)还有其它几个回答,虽然都能实现数字分级的目的,但是其可读性要差很多,因为它们要么需要你作计算

  • 19年BAT常问面试题汇总:JVM+微服务+多线程+锁+高并发性能

    1.Redis面试题 1、什么是Redis?. 2、Redis的数据类型? 3、使用Redis有哪些好处? 4、Redis相比Memcached有哪些优势? 5、Memcache与Redis的区别都有哪些? 6、Redis是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis的持久化机制是什么?各自的优缺点? 9、Redis常见性能问题和解决方案: 10、redis过期键的删除策略? 11、Redis的回收策略(淘汰策略)? 12、为什么edis需要把所有数据放到内存中? 13、Redis的同步机制了解么? 14、Pipeline有什么好处,为什么要用pipeline? 15、是否使用过Redis集群,集群的原理是什么? 16、Redis集群方案什么情况下会导致整个集群不可用? 17、Redis支持的Java客户端都有哪些?官方推荐用哪个? 18、Jedis与Redisson对比有什么优缺点? 19、Redis如何设置密码及验证密码? 20、说说Redis哈希槽的概念? (文末附面试答案)2.Dubbo面试题 1、Dubbo是什么? 2、为什么要用Dubbo?

  • 【Python进阶】带你使用Matplotlib进行可视化

    欢迎来到专栏《Python进阶》。在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件、数据的处理,Python各种好用的库如NumPy、Scipy、Matplotlib、Pandas的使用等等。我们的初心就是带大家更好的掌握Python这门语言,让它能为我所用。今天是《Python进阶》专栏的第五期,在本期中,我们将主要介绍如何使用Matplotlib这个第三方库进行数据可视化。作者&编辑|汤兴旺“美丽的可视化可反映出所描述数据的品质,显式地揭示出源数据中内在和隐式的属性和关系,读者了解了这些属性和关系之后,可以因此而获取新的知识、洞察力和乐趣。”以上是书籍《数据可视化之美》对可视化的解读。说的很有道理,相信大家听说过“一图胜千言”这句话,当看到一堆数据时,若你对数字不够敏感,肯定会费劲半天找不到规律,但若用一张图来表达时,相信你一定会一目了然。下面我就大家使用Matplotlib对数据进行美丽的可视化。1Matplotlib的基本操作在Matplotlib中有三个基本概念,分别是Figure、axes和axis。下面我来详细解释下这三个基本概念。在Ma

  • 优雅你的Python代码的15个tips

    前言:师妹前段时间非常认真地选了下学期的《大数据分析实践》选修课,根据几位师兄的建议买了本书开始自学Python语言。然而年后再见,师妹说她看完了书,做了一些习题,但并不觉得Python有啥吸引人的地方,对这门语言的激情也就大不如前。起初笔者很疑惑为什么师妹会有这样的感受,直到看到了师妹写的Python代码,才明白了症结所在——师妹一直在用类似C/C++语言的习惯写Python代码,而没有利用Python语言本身的特性,写的代码和以前的代码差不多冗长,开发效率并没有明显提高。因此自然不觉得Python有啥特别之处,也就失去了兴趣。笔者指出了问题,接着对着师妹的代码,刷刷刷改了起来。不一会儿就将原代码量缩短了几乎一半。看着简洁、直观、自带注释属性的新代码,师妹重新燃起了学习的热情。在她的要求下,笔者整理了如下的15条经验,供大家参考和学习。文章全文约2000字,共有15个程序样例片段。测试环境为:python版本3.7.0/操作系统window764位;Python环境下,在开始编码之前,输入importthis,可以看到Python为我们准备的彩蛋——TheZenofPython,by

  • 大数据时代,传统数据仓库技术是否已经过时?

    内容来源:2017年10月21日,深奇智慧联合创始人高扬在“PostgreSQL2017中国技术大会”进行《基于Greenplum,postgreSQL的大型数据仓库实践》演讲分享。IT大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。阅读字数:4263|11分钟阅读摘要大数据时代,传统数据仓库技术是否已经过时?我们将进行探讨,超越传统数据仓库,又基于传统数据仓库,如何设计超大型数据仓库平台。本专题将详细介绍Greenplum,postgreSQL在大型数据仓库中的地位和实践。嘉宾演讲视频回放及PPT,请复制链接:http://t.cn/RgcE3V6,粘贴至浏览器地址栏即可。 传统数据仓库过时了吗传统数据仓库体系结构传统数据仓库由源系统、ODS、EDW、DataMart这几部分组成,源系统就是业务系统、生产系统,ODS是操作数据存储,EDW是企业级数据仓库,DataMart是数据集市。源系统生产系统、财务系统、人力资源系统还有12306的订票系统等其实都是源系统,源系统的主要作用是产生数据。传统行业大多是将这些数据存储在oracle、db2上,互

  • 云计算为企业带来显着竞争优势

    《哈佛商业评论》最近共访问了527名来自世界各地大、中型机构的读者,当中包括中国香港的读者,发现大力推动使用云计算的公司可更灵活快捷经营业务,从而取得竞争优势。云计算显然已获公认成为企业运算中的重要一环,七成受访者表示曾使用不同形式的云端服务,更有七成四受访者认为云计算提升了公司的竞争优势。 云计算为企业带来显着竞争优势 云端服务成效一如预期般理想。受访者中三成五人为云端服务的支持者,被问及云端服务如何为公司带来竞争优势时,他们认为云端服务有助公司更灵活敏捷地经营业务,可以更迅速应对市场转变,加快新产品及服务打入市场的步伐,并缩短推出新业务所需的时间。 不少云端支持者表示,能够随时随地存取资料及云端资源,有助促进环球团队以及贸易伙伴间的协作与沟通,为企业增添竞争优势。同时,受访者压倒性地认为,云端技术可通过降低业务的繁复程度以显著提升营运上的敏捷程度,亦能够简化复杂的资讯科技运作程序,从而减少成本。而提升雇员的生产力及回馈客户的速度也是云端不言而喻的好处。 中国香港的云就绪指数 中国香港政府在推广科技革新方面一向高瞻远足,并于区内的云端领导力排行榜中名列第五。随着创新及科技局的成立,加

  • 糖果吃了那么多,你真的知道比特币分叉是咋回事吗?

    简洁的语言科学的归纳艺术的区块链最近有比特币的小伙伴除了感受有力而魔性的市场震荡外,想必还吃了不少糖果(分叉币)吧?那么比特币为啥要分叉捏?这得从比特币区块的扩容问题说起。早先比特币区块其实并没有容量上限,后来因为一些原因被设定了1M的区块容量上限。而如今比特币交易量剧增,交易确认速度慢,矛头直指1M的上限。如果将一笔笔比特币交易看作一艘艘在河道行驶的船,船不多时一切都很完美。然后船渐渐多起来了,河道里塞不下了,有些船就只能在入河口等着。。。那叫一个心累。。。当然这问题也可以花钱解决,多给河道守护者(矿工)一些小费(手续费/矿工费)就可以优先入河了。还未发送的交易可以调高手续费获取优先权,已经发送的交易也可以单独给矿工小费和交易哈希(相当于交易单号)让矿工优先确认。手续费的不断抬升确实令很多用户不满,但河道就这么宽,为了争取优先权也只能牺牲点银子啦。那么为什么河道只有这么点宽?也就是为什么比特币区块链容量被设定了1M的上限?一种可能的原因是,在比特币早期常规用户只能使用BitcoinQT这一种钱包(也就是现在的Bitcoincore钱包),而这个钱包需要用户下载完整的区块链才能使用,如

  • 基于jquery的imgAreaSelect.js插件+JAVA后台实现图片裁剪保存功能

    前段时间,项目在做个人信息设置,其中有一项是设置用户头像信息,需要将用户选择的头像按照用户需要进行剪切,同时保存为大(120*120)、中(75*75)、小(35*35)三种格式的图像,分别显示到不同的位置。需求很简单,就是这么easy,这个其中重点就是用户可以自己对选择的头像进行截取,最终选择了基于jquery的imgareaselect.js。既然插件都有了,那就开工吧!第一步: 前端下载必须的js插件,后台使用java自带imageio包处理,不需要其他jar包。 jquery.imgareaselect-0.9.10.zip jquery.js第二步: 新建静态页面index.html(页面有点丑哈。。。)<htmllang="en"> <head> <metacharset="UTF-8"> <title>jquery.imgareaselect图像区域剪切</title> <metaid="i18n_pagename"content="in

  • RabbitMQ实现订单超时案例

    前言 人间清醒 目录前言业务场景JUC(DelayQueue)方案DelayQueue简介JUCDelayQueue实现订单超时案例代码案例代码RedisKey过期事件方案简介RabbitKey过期时间实现订单超时案例代码JUC与Redis的不足为什么使用RabbitMQ来实现?RabbitMQ死信队列方案死信队列实现订单超时案例代码延迟消息插件方案延迟消息插件安装延迟消息实现订单超时案例代码案例源代码 业务场景 用戶在购买商品的时候通常会预购然后没付款,没付款的订单通常会被设置一个自动超时时间如30分钟后超时,所以我们要在订单到30分钟后自动将超时的订单取消。 JUC(DelayQueue)方案 DelayQueue简介 DelayQueue是java并发包下的延时阻塞队列,常用于实现定时任务。 DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素, 如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时才能够从队列中取元素。 DelayQueue主要用于两个方面:-缓存:

  • 聊聊HDR

    什么是HDR Highdynamicrange (HDR)顾名思义就是高动态范围,这里的高动态范围是跟SDR(Standarddynamicrange)也就是标准动态范围比较的。 那么,如何理解呢? 先从显示的原理说起。我们知道,人类之所以能够看到物体,是因为物体表面反射了光到人的眼睛里,才会被人类看到/识别到。不同的物体对不同波长的光会有不同的反射/衰减程度,到我们眼睛里就是不同的色彩。而摄像机/照相机在拍照/视频的时候,就是把自然界里的光信号转换为电信号的过程,也是模拟-->数字转换的过程,这个转换的过程也就是模拟-->数字映射的过程。 举个不太严谨但是非常利于理解的简单例子,数模转换把不同的光照强度转换为大小不一的数字,由于摄像机/照相机的CMOS工艺的限制,这个转换必定是有最大值/最小值的,这个最大值和最小值的范围就是我们所说的动态范围。当然,HDR的动态范围,不仅包含光照强度的动态范围,还包括色彩空间的动态范围。 因此,HDR的图片/影响以提供更多的动态表现和图像细节,能够更好地反映出真实环境中物体所自有的视觉效果,因此更加接近人眼可见的真实画面,做到画

  • 学号 20175212 《Java程序设计》第九周学习总结

    学号20175212《Java程序设计》第九周学习总结 教材学习内容总结 一、MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码ConnectionDemo.java importstaticjava.lang.System.out; importjava.sql.*; publicclassConnectionDemo{ publicstaticvoidmain(String[]args) throwsClassNotFoundException,SQLException{ Class.forName("com.mysql.jdbc.Driver"); StringjdbcUrl="jdbc:mysql://localhost:3306/demo"; Stringuser="root"; Stringpasswd=""; try(Connectionconn= DriverManager.getConnection(jdbcUrl,user,passwd)){ out.printf("已%s数据库连接%n", conn.isClosed()?"

  • 计算器

  • 迅为3399开发板Qt蜂鸣器和LED测试

    QLed测试资料在网盘“iTOP-3399开发板\iTOP-3399开发板\02_iTop-RK3399开发资料汇总(不含光盘内容)\05_iTOP-3399开发板Qt应用开发资料\3399开发板QT测试-QtLED和buzzer”目录下,我们将要运行QLed程序到开发板的Qt系统上。参考第二十六章节交叉编译Qt工程,下面我们采用命令行交叉编译Qt工程。1拷贝资料包里面的实例QLed到Ubuntu,并解压。进入到Qt工程目录,如下图所示:   2在Qt工程文件夹下使用qmake生成Makefile,如下图所示:   /home/topeet/rk3399_linux_sdk_v2.0/buildroot/output/rockchip_rk3399/host/bin/qmake3执行make编译,如下图所示(输入makeclean可以清除编译)   4将生成的可执行文件QLed通过U盘或者ssh拷贝到开发板的/usr/local/目录下,如下图所示:   5输入以下命令设置环境变量,如下图所示:mkdir-p/tmp/.xdg&&

  • elementui el-table表格出现抖动

    页面正好卡到那个滚动条   解决:(对已有的table不影响)  .el-table{     width:99.9%     }  

  • git拉取文件

    gitclonehttp:cdqiaotouchREADME.mdgitaddREADME.mdgitcommit-m"addREADME"gitpush-uoriginmaster

  • oracle基础备份和还原

    #全库备份 expmminfo/123456buffer=64000inctype=completefile=c:\mminfo.dmplog=c:\mminfo.log #用户备份:用户mminfo下的所有表 expmminfo/123456buffer=64000owner=mminfofile=c:\mminfo.dmplog=c:\mminfo.log #表备份:备份用户(mminfo)下的单个表(t_unit) expmminfo/123456buffer=64000tables=(mminfo.t_unit)file=c:\mminfo.dmplog=c:\mminfo.log #全库还原-存在同样的表需要删除 impmminfo/123456buffer=64000full=yfile=c:\mminfo.dmplog=c:\mminfo.logfromuser=mminfotouser=mminfo_bak #用户还原:用户mminfo下的所有表-存在同样的表需要删除 impmminfo/123456buffer=64000ignore=yfile=c:\mm

  • C语言深度剖析-笔记

    关键字: C语言关键字32个: 关键字                                       意义 auto                         声明自动变量,缺省时编译器一般默认为auto int          &nbs

  • 如何让公司少不了你?

    成长&认知丨作者/袁吴范 这是pointers公众号的第32篇原创文章 今天,团队内一个小伙伴,找到我,跟我说要离职。 第一感觉,感到很惊讶,为啥来了几个月就要离开呢? 是不是缺少人文关怀? 还是团队气氛不对,他适应不了? 融入不了团队? 带着这些疑问,一番询问得知,原来是感情问题。 谈了好几年的女朋友给他带了绿帽子。 现在心思已经完全不在工作上。 这个原因,让我哭笑不得,一个女孩子有那么夸张吗?工作都不要干了。可能太爱她了吧。 当遇到这种人生变故,我会一般会提供一周的假,让他好好的调整下状态。 很显然他拒绝了,他肯定告诉我,他想要离开杭州这个伤心的城市,想要尽快的离开,早点回到老家。 现在的95年,还是比较任性的,年终奖也不要了。 当然我还是支持他的。希望他能找回自己,重新燃起对生活的热情。 大家可能要问了,你为啥不极力的把他留下? 对这就是我接下来想说的。 可能你不会爱听,但是这就是事实。 我常说的,站在企业的角度看问题,会更加的通透,能够让我们针对性提升自己。 不留下他的原因有两点: 1、他在近期已经无法进入到工作状态,他的状态会严重影响到团队。 2、他的能力没有达到

  • 学术论文中的参考文献格式

      参考文献在文末以参考文献表的形式列示,外文文献不必译成中文。参考文献应另起一页,“参考文献”四字按一级标题编排,内容采用五号字。 1著录格式   参考文献的著录格式按照中华人民共和国国家标准《文后参考文献著录规则(GB/T7714-2005)》执行。各类引用参考文献条目的编排格式如下: 学术期刊文献 [序号]作者.文献题名[J].刊名,出版年份,卷号(期号):起-止页码 学术著作 [序号]作者.书名[M].版次(首次免注).翻译者.出版地:出版社,出版年:起-止页码 有ISBN号的论文集 [序号]作者.题名[A].主编.论文集名[C].出版地:出版社,出版年:起-止页码 学位论文 [序号]作者.题名[D].保存地:保存单位,年份 专利文献 [序号]专利所有者.专利题名[P].专利国别:专利号,发布日期 技术标准 [序号]标准代号,标准名称[S].出版地:出版者,出版年 报纸文章 [序号]作者.题名[N].报纸名,出版日期(版次) 报告 [序号]作者.文献题名[R].报告地:报告会主办单位,年份 电子文献 [序号]作者.电子文献题名[文献类型/载体

  • 使用Microsoft EnterpriseLibrary(微软企业库)日志组件把系统日志写入数据库和xml文件

    这里只是说明在项目中如何配置使用微软企业库的日志组件,对数据库方面的配置请参考其他资料。 1、在项目中添加Microsoft.Practices.EnterpriseLibrary.Data.dll、Microsoft.Practices.EnterpriseLibrary.Logging.dll、Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll这三个引用。 2、打开EnterpriseLibrary的配置工具EntLibConfig.exe 1)选择菜单“Block->AddLoggingSetting" 2)点击“+”号添加LoggingTargetListeners,选择AddDatabaseTraceListener 3、设置DatabaseTraceListener中的参数,比如数据库连接、插入日志存储过程、插入分类存储过程、选择文本格式等 4、设置DatabaseSetting中的“ConnectionString”中的数据库连接5、最后保存配置文件到项目路径中。 设置后的配置文件: <

相关推荐

推荐阅读