[量化]夏普比率3.27,通过DQN算法进行上证指数择时强化学习策略

本文完整展示了一个将强化学习用于股票投资的案例,呈现了大量算法细节和实验分析,非常值得收藏深研。

原文 | 强化学习初探与 DQN 择时(公众号关注nutquant,回复 0118,下载PDF原文查看更多细节)

来源 | 华泰金工

作者 | 林晓明、李子钰、何康

1. 摘要

本文分享的工作使用DQN强化学习算法构建上证指数日频择时策略,使用2007 至2016 年的数据作为为训练集训练模型,在2017至2022年6月的测试集进行策略回测,年化超额收益率 18.2%,夏普比率1.31,年均调仓42.0 次;进行超参优化后,年化超额收益率提升至 37.0%,夏普比率提升至3.27,年均调仓35.5次。

2. 背景知识

2.1 强化学习

与监督学习直接通过优化算法逼近标准答案(标签)不同,强化学习在没有标准答案的情况下,通过在环境中进行试错来学习策略以达成回报最大化。有标准答案的监督学习是人们对现实进行抽象与简化,构建出的乌托邦;而没有标准答案的强化学习,更接近世界的本质,也更接近真正意义上的“人工智能”。 强化学习的核心思想是个体通过与环境的交互,从反馈信号中进行学习。正如游戏玩家通过尝试多种策略,积累对游戏规则的理解;投资者通过交易行为,积累对市场规律的认知。如果某种行为可以使得投资者获得收益,那么这种行为将得到“强化”。强化学习由智能体和环境两部分构成。智能体(agent)是能够采取一系列行动并期望获得 高收益或者达到某一目标的个体,如游戏玩家,投资者。影响智能体行动 学习的其他因素统一称为环境(environment),如游戏的规则,投资标的和市场上其他参与者等。 智能体和环境每时每刻都会进行交互。智能体首先观察环境的状态(state),采取某种动作 (action),该动作对环境造成影响。随后,环境下一刻的状态和该动作产生的奖励(reward) 将反馈给智能体。智能体的目标是尽可能多地从环境中获取奖励。我们在下图以股票交易为示例,整个股票市场就是环境,股票价格,技术指标等信息是状态,买卖股票的交易操作是动作,收益是奖励。智能体首先观察环境,采取行动与环境互动,获得正向或负向奖励。随后,智能体借助反馈修正策略,尽可能最大化奖励。这与投资交易场景非常匹配。投资者首先观察市场,采取买入、卖出、持有等动作,产生盈亏。随后,投资者通过复盘修正投资策略,目标是最大化预期收益。

2.2 DQN算法

2015 年,DeepMind 在 Nature 发表论文 Human-level control through deep reinforcement learning,首次将深度强化学习应用于游戏领域并战胜人类,论文采用的强化学习算法正是 深度 Q 网络(Deep Q-learning Network,下文称 DQN)。 DQN 有一个记忆库用于学习之前的经历。Q learning 是一种 off-policy 离线学习法,它能学习当前经历着的, 也能学习过去经历过的, 甚至是学习别人的经历。所以每次 DQN 更新的时候, 都可以随机抽取一些之前的经历进行学习, 随机抽取这种做法打乱了经历之间的相关性, 也使得神经网络更新更有效率。DQN 中使用到两个结构相同但参数不同的神经网络, 预测Q估计的神经网络具备最新的参数, 而预测Q现实的神经网络使用的参数则是很久以前的,这样能够提升训练的稳定性。有关算法更多的详细描述可以参考文献[2]。

3. 本文方法

本文工作主要分为以下几部分:

  1. 强化学习的第一步是正确定义问题,对股指日频择时问题进行马尔可夫决策过程建模,定义状态空间、动作空间、状态转移矩阵、奖励函数、折扣因子构成的五元组。
  2. 第二步是确定强化学习算法设置。择时问题中,将智能体的决策空间简化为全仓做多、持有、 平多三种动作,动作空间属于离散集,因此选择基于价值的方法中的 DQN。进而构建 深度神经网络,包括确定网络结构、训练参数等。
  3. 强化学习对超参数敏感,对超参数进行参数敏感性分析。

3.1 定义问题

状态空间 表征状态的原始数据为股指在回看区间内日度开盘价、最高价、最低价、收盘价。预处理 方式为计算 t-lookback+1 至 t 日行情数据相对于过去 252 个交易日收盘价的 Z 分数。因此状态空间为 lookback*4 维实空间。回看区间 lookback 取 5 个交易日,同时测试 10 和 15。 动作空间 动作空间定义为{buy, sell, hold}。其中 buy 代表全仓买入,sell 代表全仓卖出,hold 代表持有多仓或者保持空仓,不涉及做空。基于t日收盘价的状态选择动作,以t+1日开盘价执行交易。 状态转移矩阵 我们无法对股票市场的状态转移进行精确描述,状态转移矩阵对于智能体而言是未知的。因此采用免模型方法中的 DQN,免模型方法不需要状态转移矩阵,智能体通过与环境互动进入下一状态。 奖励函数奖励分四种情况:

  1. 当前未持仓,且 At 为 buy 时,奖励为预测区间内扣费后多头收益率:

当前未持仓,且 At 为 sell 或 hold 时,奖励为预测区间内空头收益率:

当前持多仓,且 At 为 sell 时,奖励为预测区间内扣费后空头收益率:

当前持多仓,且 At 为 buy 或 hold 时,奖励为预测区间内多头收益率:

其中 TC 为单边交易费率,本文取万分之五;Closet+horizon为 horizon 日收盘价,预测区间horizon 取 5 个交易日,同时测试 1 和 10。 折扣因子折扣因子默认取 0.9,同时测试 0.5 和 0.7。

3.2 算法设置

Q 网络是 DQN 的核心组件,本文 Q 网络结构为 3 层全连接网络,如下图所示。

算法的主要步骤如下: 1. 初始化 Q 网络和目标网络; 2. 数据预处理,每个交易日 t,计算 t-lookback+1 至 t 日指数开高低收价格相对过去 252 日收盘价的 Z 分数,作为该日的观测状态; 3. 遍历训练集,构建四元组:按时间顺序,遍历训练集内每个交易日。通过 Q 网络计算该日状态的动作价值 ,通过 ε-贪心算法得到动作a;根据动作和奖励规则, 确定奖励值r(即 t 至 t+horizon 日多头或空头收益);将 t+horizon 日状态视作新的状态 ,由此得到每个交易日的(s,a,r,s’)四元组。 4. 存入回放缓冲区:将该条经验存入回放缓冲区。当回放缓冲区装满时,删除最早的一条数据。 5. 经验回放,优化 Q 网络:每得到一条经验,都对回放内存进行随机采样,得到小批量样本。基于 Q 网络和目标网络计算 Q 网络损失 L(θ),采用优化器更新Q网络参数。 6. 每隔指定epoch数量更新目标网络:每完整遍历一轮训练集,视作一个epoch。当训练轮数达到指定epoch次数时,停止训练。 7. 使用不同随机数种子合成信号,测试集回测:每组随机数种子训练一组 Q 网络。按时间顺序, 遍历测试集内每个交易日。根据该日状态 s 及训练好的 Q 网络计算动作价值,选择动作价值最高的动作 argmaxaQ(s,a;θ)。100 组随机数种子结果以多数票规则合成,得到最终交易信号。当处于空仓状态时,若动作为 sell 或 hold 则继续保持空仓,若动作为 buy 则于次日开盘做多。当处于做多状态时,若动作为 buy 或 hold 则继续保持做多, 若动作为 sell 则于次日开盘平仓。

4. 实验分析

4.1 数据

数据为上证指数 2007-01-04至 2022-06-30日度行情数据。其中 2007至 2016年为训练集,用来训练强化学习策略;2017 至 2022 年为测试集,用来评估策略表现。

4.2 超参数

4.3 回测分析

原始超参数为:折扣因子 γ=0.9,回放内存 replay_memory=32,回看区间 lookback=5,预测区间 horizon=5。择时策略样本外年化超额收益率为 18.2%,夏普比率为 1.31,年均调仓 42.0 次。

不同折扣因子收益率表现:γ=0.5 和 0.7 接近,γ=0.9 较差。折扣因子 γ 越小,远期奖励权重越低,越关注短期收益,有利于择时策略。

不 同 回 放 内 存 收 益 率 表 现不同,其中replay_memory=32 最好, replay_memory=16 次 之 , replay_memory=64 最差。回放内存和另一个超参数小批量样本数有关联。此处小批量样本数为 16,那么当回放内存为 16 时,每次取回放内存中的全部样本参与训练,失去了随机采样的意义,有损于模型训练。当回放内存较大时,回放内存中包含了相对久远的经验, 好比成年人用儿童的经验学习,也会有损于模型训练。

不同回看区间收益率表现:lookback=5 最好,lookback=10和15 接近,lookback=15 略好。过于久远的信息指示意义可能有限,降低数据信噪比,回看区间取短一些较好。

不同预测区间收益率表现:horizon=10 最好,horizon=5 次之,horizon=1 最差。预测区间 越大,计算奖励时目光越长远,有利于择时策略。预测区间 horizon=1 时,模型始终发出 buy 信号,因此策略和基准一致,这可能是因为下一日收益率随机性较大,模型难以学习。

优化后的超参数为:折扣因子 γ=0.5,回放内存 replay_memory=32,回看区间 lookback=5, 预测区间 horizon=10。此时,择时策略样本外年化超额收益率提升至 37.0%,夏普比率提 升至 3.27,年均调仓 35.5 次。

5. 总结展望

本文介绍基于强化学习DQN算法构建股指日频择时策略。有别于传统监督学习对真实标签的拟合,强化学习不存在标准答案,而是针对长期目标的试错学习。使用DQN构建上证指数择时策略,原始超参数样本外 2017 年至 2022 年 6 月年化超额收益率 18.2%,夏普 比率 1.31,年均调仓 42.0 次,优化后策略表现进一步提升。 本研究仅对上证指数进行择时测试,可扩展至更多可交易标的。状态空间仅采用原始行情数据,可扩展至择时指标,或使用神经网络编码。强化学习算法仅测试 DQN,可扩展至其他算法。强化学习存在过拟合风险,需探索过拟合检验方法。 虽然本文的方法表现非常不错,但仍然需要注意将强化学习应用于投资存在以下不可忽视的风险: 1. 数据量不足。训练强化学习模型需要较大数据量。对于股票择时场景,日频行情样本量约在10e3数量级,分钟频 行情样本量约在10e6数量级,逐笔数据样本量约在10e7数量级。强化学习可能更适用于 高频领域。低频领域如果要应用强化学习,就只能牺牲模型复杂度,并承担过拟合风险。 2. 缺少仿真环境。在传统量化研究中,通常只使用历史数据,缺少对市场的仿真模拟,模型的每个决策实际上并不会影响到市场。这种对市场的简化处理,一方面限制了新样本的获取,另一 方面也压缩了强化学习模型的试错空间。然而试图模拟市场又谈何容易,这是强化学习 应用于投资领域,相比于游戏等领域的关键差异和难点所在。 3. 可解释性差。深度强化学习相比深度学习“黑箱”程度更高。强化学习可解释性尚处于初步阶段,大量问题亟待解决。 4. 模型不稳定。强化学习模型超参数较多,并且对超参数、随机数种子较敏感。以前述择时策略为例,每组随机数种子单独产生信号,样本外策略相对基准强弱如下图,各随机 数种子表现差距较大。年化超额收益均值 13.4%,最高 28.0%,最低-0.3%,标准差高 达 8.0%,标准差超过均值的一半。

参考文献: [1] Deep Reinforcement Learning for Automated Stock Trading

[2] 动手学强化学习-DQN 算法

[3] Recent Advances in Reinforcement Learning in Finance

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

相关文章

  • 表格空行太多,怎样才能快速操作删除所有空行?

    1、点击[查找和选择]2、点击[定位条件]3、点击[空值]4、点击[确定]5、点击[文本]6、点击[删除]7、点击[整行]8、点击[确定]

  • CVPR 2021 3D视觉相关最新进展分享

    微软亚洲研究院2021CVPR论文分享会已完美结束。今日起,CV君将根据不同类别的分享主题进行逐一分享,欢迎查收!今日分享的主题为:3D视觉论文一论文名称:DeepImplicitMovingLeast-SquaresFunctionsfor3DReconstruction论文地址:https://arxiv.org/abs/2103.12266项目地址:https://github.com/Andy97/DeepMLS论文二论文名称:VariationalRelationalPointCompletionNetwork论文地址:https://arxiv.org/abs/2104.10154项目地址:https://github.com/paul007pl/VRCNet论文三论文名称:WeareMorethanOurJoints:Predictinghow3DBodiesMove论文地址:https://arxiv.org/pdf/2012.00619.pdf项目地址:https://yz-cnsdqz.github.io/MOJO/MOJO.html直播回顾:视频内容

  • etcd 性能测试与调优

    原文链接:https://www.jianshu.com/p/f31ef5e7bdd0etcd是一个分布式一致性键值存储。其主要功能有服务注册与发现、消息发布与订阅、负载均衡、分布式通知与协调、分布式锁、分布式队列、集群监控与leader选举等。 1. etcd性能优化官方文档原文:https://github.com/etcd-io/etcd/blob/master/Documentation/tuning.md 译文参考:https://skyao.gitbooks.io/learning-etcd3/content/documentation/op-guide/performance.html理解etcd的性能决定etcd性能的关键因素,包括:延迟(latency):延迟是完成操作的时间。吞吐量(throughput):吞吐量是在某个时间期间之内完成操作的总数量。当etcd接收并发客户端请求时,通常平均延迟随着总体吞吐量增加而增加。在通常的云环境,比如GoogleComputeEngine(GCE)标准的n-4或者AWS上相当的机器类型,一个三成员etcd集群在轻负载下可以在低于

  • 用于 Windows 下的日志跟踪分析工具(Tail for Windows)

    在Linux下做开发和调试任务的时候,有些情况会动态去跟踪一些日志的变化来调试问题。Linux下使用tail-f就可以达到需求了,但Windows下一直没有找到类似的好用工具,在github上也有一些开源项目,不是项目相对陈旧界面丑陋,就是功能不完善不能让人专注于分析日志。索性自己做了一个,预览图如下:项目地址Github:https://github.com/nmgwddj/logs-monitor程序功能可以动态监控日志文件的变化并显示到界面上可以同时监控多个文件的变化快速清空文件以方便针对性的查看分析日志现代化UI风格开发计划实现一些关键字高亮的功能做一些性能优化提供系统设置设置个性化功能PostViews:22相关Warning:Missingargument1forcwppos_show_review(),calledin/home/wwwroot/www.mycode.net.cn/wp-content/themes/flat/content-single.phponline29anddefinedin/home/wwwroot/www.mycode.net.cn/wp-c

  • Oracle 11g的安装(图文详解)

    前言Web项目聚集地的小伙伴反应在Oracle的安装与配置有很多错误与疑点,便有了这篇文章,现在是晚上2点哈哈,加油加油,日后还会有更多技术栈的专栏。Oracle的安装时一个挺麻烦的事情,注意的点比较多,有的小伙伴装一个Oracle花费了很长时间,Windows还好,Linux更加复杂,今天我们这篇教程是基于Windows平台的,本文章使用XP系统。简介Oracle数据库如果要想安装请准备出5G空间,同时也要清楚一些常见的Oracle版本:·Oracle8、Oracle8i:其中“i”表示的是internet,表示Oracle开始向网络发展,1CD;·Oracle9i:是Oracle8i的稳定版,也是现在见到最多的版本、3CD;·Oracle10g:表示Oracle开始基于网格计算推出的数据库,1CD;·Oracle11g:是Oracle10g稳定版,现在也算是最主流推广的版本,2G左右;·Oracle12C:“C”表示的是云计算的概念,是现在的最新版本。本次采用的是Oracle11g版本,而不是Oracle12C版,因为12C在进行初期学习的时候非常的麻烦。而且最方便的是,oracl

  • 【观点】“云”时代:网络安全的中国式突围

    互联网新闻研究中心于5月26日发表的《美国全球监听行动记录》指出,美国曾秘密侵入雅虎、谷歌在各国数据中心之间的主要通信网络,窃取了数以亿计的用户信息。这也说明,近年来兴起的“云计算”在给人们带来巨大便利的同时,也存在着不容忽视的安全隐患。  1、云计算是一把双刃剑  正如业内专家所指出的,作为一种崭新的互联网模式,云计算将会是新一代也是今后很长时间的基本模式,自问世起,便受到了人们的广泛关注。云计算以现有的分布式网络为基础,用户数据的存储和运算都是在“云”上完成的,鲜明地体现了“网络便是计算机”的理念。  云计算的出现和广泛应用,不仅降低了运算成本,还极大地改变了用户以桌面为核心的使用习惯,并改变了信息获取和知识传播的方式,给人们带来了前所未有的便利。从某种程度上说,“云”时代的到来,不亚于一场革命。  “云计算掀起了一场新的互联网革命,云计算通过集中供应的模式,打破了地域和时空的限制,真正形成了信息化。通过云计算,人们可以大大提高运算效率,从而把时间和精力更有效地投入到主要工作中。”业内专家如是说。  与此同时,云计算也潜藏着一定的安全风险。甚至可以说,安全性和隐私问题已经成为困扰云

  • 算法基础-动态规划

    背包问题01.01背包问题题目描述有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是v_i,价值是w_i。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数v_i,w_i,用空格隔开,分别表示第i件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V\le10000<v_i,w_i≤1000输入样例45 12 24 34 45复制输出样例:8复制题解时间复杂度O(n\cdotm)核心思想version1:2维暴力(朴素)做法f[i][j]—>在不超过j容积的情况下前选择前i个物品的最优解version2:1维优化版本由二维可知我们跟新f[i][j]只需要用到f[i-1]状态也就是前i-1个物品的状态又因为f[i-1]已经是最优解所以我们可以用所谓的的滚动数组进行优化即:if(j≥v)f[j]=max(f[j],f[j-v]+w);如果从前往后遍历的话我们用f[i-1]来跟新f[i]的时候就不

  • 【面试题】Vue路由传参的两种方式query和params

    Vue路由传参的两种方式query和params 点击打开视频讲解更加详细 一、router-link 1.不带参数 <router-link:to="{name:'home'}"> <router-link:to="{path:'/home'}">//name,path都行,建议用name //注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始。 2.带参数 <router-link:to="{name:'home',params:{id:1}}"> //params传参数(类似post) //路由配置path:"/home/:id"或者path:"/home:id" //不配置path,第一次可请求,刷新页面id会消失 //配置path,刷新页面id会保留 //html取参$route.params.id //script取参this.$route.params.id <router-link:to="{name:'home',query:{id:1}}">

  • learn to rank 模型概述

    模型总体描述: https://zhuanlan.zhihu.com/p/26539920 LambdaMART中Lambda计算以及RegressionTree训练: https://blog.csdn.net/u010035907/article/details/70739816 MART算法介绍: https://www.cnblogs.com/end/p/6971044.html   (1)LambdaMART 算法可参考如下两篇博客: http://www.cnblogs.com/wowarsenal/p/3900359.html http://www.cnblogs.com/wowarsenal/p/3906081.html LambdaMART= Lambda(计算doc下降的梯度)+ MART(回归树组成的回归森林首先寻找所有feature最佳分割点,得其一分割点得到一颗会归树,然后以残差作为label 继续训练其他feature,以此类推得到好多树,一起构建成回归森林)

  • Nginx http_auth_basic_module(访问控制功能)

    ngx_http_auth_basic_module模块 实现基于用户的访问控制,使用basic机制进行用户验证   用户登陆认证的模块 syntax:  auth_basic string|off;default:  auth_basicoffcontext:  server.loction.limit_except进行配置用户相关的登陆设置   sytax:  auth_basic_user_file file;default:  -context:  server,location,limit_except 进行对上述的引入   用户口令文件 1、铭文文本:格式name:password:comment 2、加密文本:由passwd命令实现 http-tools提供     创建一个http-tools pw:123456         第二次创建不需要加-c参数     修改配置文件     测试访问需要输入密码 &n

  • idea的maven聚合项目的子项目编译时遇见Could not resolve dependencies for project,Could not find artifact异常

    用idea自动生成的子项目依赖父项目的配置:   <dependency> <groupId>xx.xxx.xxx</groupId> <artifactId>ego-project</artifactId> <version>1.0-SNAPSHOT</version> </dependency>复制   缺了一个配置 <dependency> <groupId>cn.gzsxt.ego</groupId> <artifactId>ego-project</artifactId> <version>1.0-SNAPSHOT</version> <type>pom</type> </dependency>复制  

  • 有效数组判断两位元素相加是否等于目标值-左右碰撞指针

    1、左右碰撞指针,类似于二分法查找 1/** 2*查找是否存在目标值时间复杂度O(logN) 3*有序的数组,查可以这样用 4*@paramarray 5*@paramtarget 6*@return 7*/ 8publicstaticbooleanfindTarget(int[]array,inttarget){ 9//数组为null或者为空,直接返回false 10if(array==null||array.length==0){ 11returnfalse; 12} 13//既然数组有序,可以采用左右碰撞指针,进行解决 14intleft=0; 15intright=array.length-1; 16while(left<=right){ 17if(array[left]+array[right]==target){ 18//找到了,直接返回true 19returntrue; 20}elseif(array[left]+array[right]>target){ 21right--; 22}else{ 23left++; 24} 25} 26//未找到,直接返回

  • Spring-Aop

    目录1.概念2.应用场景场景:计算器运行计算方法的时候进行日志记录实现方式:1)、直接编写在方法内部;不推荐,修改维护麻烦2)、动态代理:特点:AOP(Spring动态代理):aop术语:AOP使用步骤:1.导包2.写配置1.将目标类和切面类(封装了通知方法(在目标方法前后执行的方法)加入到ioc容器中)2.告诉Spring哪一个是切面类(@Aspect)3.告诉Spring,切面类里面的每一个方法,都是何时何地运行4).开启基于注解的AOP功能AOP细节一:IOC容器中保存的是组件的代理对象被代理对象实现接口时:jdk创建代理对象被代理对象没有实现接口时:cglib创建对象注:AOP细节二:切入点表达式的写法:AOP细节三:通知方法的执行顺序正常执行:@Before(前置通知)=》@After(后置通知)==》@AfterReturning(返回通知)异常执行:@Before(前置通知)》@After(后置通知)》@AfterThrowing(异常通知)AOP细节四:通知方法运行时,获取目标方法详细信息1.JoinPoint获取目标方法的详细信息2.获取返回值:3.接收异常信息:4.

  • django-rest-framework 使用例子

    StartYourAPI 创建项目 startprojectrest_api 复制 创建APP startapptask 复制 配置rest_api/settings.py INSTALLED_APPS=( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'task', ) 复制 配置rest_api/urls.py #-*-coding:utf-8-*- fromdjango.conf.urlsimporturl,include urlpatterns=[ url(r'^api/',include('task.urls')), ] 复制 创建模型task/models.py #-*-coding:utf-8-*- fromdjango.dbimportmodels cl

  • AI 变得越来越聪明、越来越快。这创造了我们无法回答的棘手问题

    AI变得越来越聪明、越来越快。这创造了我们无法回答的棘手问题 AI还没有人类水平的能力,而且他们可能永远不会拥有这些能力。但是,我们今天仍然需要讨论责任、权利和道德地位的问题。 由乔最佳|2021年5月17日--格林威治标准时间10:15(新加坡标准时间18:15)|主题:人工智能 今天,人工智能(AI)涵盖了一组智能但有限的软件工具。但在未来,随着人工智能变得越来越复杂和无处不在,我们可能会被迫重新思考我们如何对待人工智能——甚至他们如何对待我们的对与错。 目前,人工智能本质上是狭窄的,执行诸如图像识别、欺诈检测和客户服务等任务。但是,随着人工智能的发展,它们将变得越来越自主。在某些时候,他们可能会做错。当AI犯错时,谁才是真正的过错者,这是一个会给企业带来麻烦并让律师兴奋的问题,因为他们正在努力弄清楚谁可以并且应该对由此产生的任何伤害负责。 今天,在大多数由人工智能引起的问题的情况下,故障所在是显而易见的。如果你买了一个AI并开箱即用,但它做了一些可怕的事情,这可能是制造商的错。如果你建立一个人工智能并训练它做一些可怕的事情,它可能是你的。但它不会总是那么明确。 参见:人工智能伦理

  • poj 1776 Task Sequences(哈密顿路)

    题意:给定一个邻接矩阵,即一幅有向图(有环),问最少的覆盖路径为几条,求出遍历顺序; 思路:竞赛图存在哈密顿路,一定能找到一条遍历所有点的路。 #include<cstdio> #include<cstring> #include<algorithm> usingnamespacestd; intmm[1005][1005]; charch[1005]; intnxt[50010]; intn,m; intmain() { inti,j,k,head,temp; while(scanf("%d",&n)!=EOF){ getchar(); for(i=0;i<n;i++){ gets(ch);temp=0; for(j=0;j<n;j++){ mm[i][j]=ch[temp]-'0'; temp+=2; } nxt[i]=-1; }//读入 head=0; for(i=1;i<n;i++){ if(mm[i][head]){//插入到首部 nxt[i]=head; head=i; continue; } j=head;

  • MATLAB等距扇形反投影分析

    MATLAB等距扇形反投影分析   摘要:MATLABphantom函数产生的Shepp-Logan模型,可以用来验证二维图像重建算法的数值精确度,本文首先据此模型,结合正弦图,讨论平行投影时的极坐标表示。扇形投影时,每条射线,可以看做是平行投影线旋转一定角度后的投影,根据几何关系,得出扇形投影时的极坐标表示。反投影是投影的逆变换,根据正弦图,可以很容易得出平行反投影的处理过程。对于扇形反投影,本文介绍了两种方法,一是参考MATLABifanbeam函数,将扇形投影数据重排成平行投影数据,这是个插值的过程,然后再按照平行反投影处理;二是对照平行反投影的过程,由扇形投影时的极坐标表示,直接扇形反投影。 关键字:MATLABifanbeam;平行投影正弦图;扇形投影到平行投影的数据重排;扇形直接反投影                      

  • 2022-2023-1 20221304 《计算机基础与程序设计》第九周学习总结

    2022-2023-120221304《计算机基础与程序设计》第九周学习总结 作业信息 这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP 这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09 这个作业的目标 自学教材《计算机科学概论》第10、11章并完成云班课测试,自学教材《C语言程序设计》第8章并完成云班课测试 作业正文 https://www.cnblogs.com/liu-221304-yi-tong/p/16823202.html 教材学习内容总结 学完《计算机科学概论》第10、11章后,我能够描述操作系统的两个主要责任。定义内存和进程管理。解释分时操作是如何创建虚拟机假象的。解释逻辑地址和物理地址之间的关系。比较内存管理方法。区分固定分区与动态分区。定义和应用分区选择算法。解释请求分页是如何创建虚拟机假象的。解释进程生存周期的各个阶段和过渡。解释各种CPU调度算法的处理。描述文件、文件系统和目录的用

  • ES6学习笔记(六)对象的扩展

    1.属性的简洁表示法             6. 对象的扩展运算符             7.链判断运算符  8.Null判断运算符          

  • javaSE 笔记 标准输入流 + 标准输出流 + 对象序列化/反序列化流 + properties

    标准输入流 因为是publicstaticfinalInputStreamin标准输入流,被static修饰,说明可以通过类名访问System.in 不过现在不太明白InputStreamis=System.in;的用法<, System类中有两个静态的成员变量: publicstaticfinalInputStreamin标准输入流 publicstaticfinalPrintStreamout标准输出流 in,out,还有个err方法都是叫字段,而且似乎叫做类字段。 用字符缓冲输入流按行读取键盘输入的值: BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); 这边的newBufferedReader(newInputStreamReader)是将字节流通过转换流转换成字符流,再转成字符缓冲输入流 不过这样写还是太麻烦了,所以JAVA提供了一个类供我们使用,即Scannersc=newScanner(System.in) 标准输出流 PrintStreamps=System.out;PrintS

  • SSL/TLS协议信息泄露漏洞(CVE-2016-2183) 避免使用DES算法 漏洞排查

      1  检测漏洞   下载检测工具 https://github.com/drwetter/testssl.sh 解压后进入目录 ./testssl.sh-W IP 如下图    修复后     2 排查有问题的地方,ssl、ssh、nginx、tomcat等等软件。 2.1 检查ssl支持的加密算法有没有des算法 opensslciphers-v 2.2检查nginx   对nginx进行加固,我这里nginx本身版本并没问题,是编译的时候ssl版本低 cd../nginx-1.20.1/ ./configure--prefix=/usr/local/nginx/--with-http_ssl_module--with-http_stub_status_module--with-openssl=/usr/local/openssl-1.1.1l make&&makeinstall 重启后再次检查    这里记一个坑,

相关推荐

推荐阅读