多目标优化算法(一)NSGA-Ⅱ(NSGA2) 注:没有想到这篇博客竟然有很多人查看,这是我去年写的算法,里面难免会有一些错误,大家可以看看评论区,这里的matlab代码写的不太好,是以C语言思维写的,...基本上没有并行,初学者建议可以看看platEMO上的源代码,提前培养好写代码的习惯!...前言 这个算法是本人接触科研学习实现的第一个算法,因此想在这里和大家分享一下心得。 1....end 从二目标优化问题来看,就像是该个体在目标空间所能生成的最大的矩形(该矩形不能触碰目标空间其他的点)的边长之和。拥挤度示意图如图2所示。...图8 ZDT6 pareto最优解对比图(绿色为理论值,红色为实验值) 从结果中可以看出,除ZDT4以外,找到的解几乎全部是pareto前端上的点,并且解在目标空间上分布十分均匀,该算法对于非凸非均匀的多目标函数最优解的寻找还是十分有效的
上次我们分享了事件驱动型的菜单框架,也实现了一个基本的小项目,如下: 基于事件型表驱动法菜单框架之小熊派简易气体探测器实战项目开发(上) 但是怎么看怎么都觉得界面不爽,单纯显示文字的方式实在是太单调了,...于是,我选择在SD卡中放图片,通过Fatfs去读取SD卡中的图片来进行显示,图片都是我自己在阿里图库上找的开源素材,然后用PS自己P的: ? 废话不多说,来看看实际效果吧!...演示视频如下: 这样看起来效果就舒服一点啦。...此时按左键可以切换选项,短按右键进入某一菜单项,长按右键退出回到主页面,这里只实现了仪器信息,其它项目还没有实现,但要添加也非常简单,期待后期分享。...本节代码已同步到码云的代码仓库中: 获取方法如下: 1、新建一个文件夹 ? 2、使用git clone远程获取小熊派所有案例代码 ? ?
但是函数对象本质上还是一个 class 的具体化 object, 里面是可以附带一些成员变量(可以理解为函数对象的状态(state))的, 这就让函数对象的应用场景比函数指针更广阔....函数指针并不是没有其用处了, 对于 C API 库里的某些函数不支持函数对象还是有用武之地的....这里不提及模板函数, 因为模板函数的概念只存在于编译期, 运行期的函数没有模板的概念, 都是经过完全特化过的, 因此与普通函数/类成员函数的概念是一致的....; // 正确, 没有状态的 lambda (没有捕获)的lambda表达式可以直接转换为函数指针 Ptr p1 = [&](int* p){delete p;}; // 错误, 有状态的 lambda...3、心心念念的优化完成了,虽然不是很完美
而insert有两个使用偏移量进行操作的重载函数,且都没有默认值,根据输入参数选择函数,如果写成str.insert(3,'c');那么将直接在str[3]的位置上插入1个c字符。...所以使用string的erase和substr操作的时候最好把两个参数写全了,且注意表示的不是偏移量区间(迭代器的版本才是区间),而是从某个偏移量开始的n个数,而使用insert的时候可以只写偏移量,也可以将偏移量和要插入的个数同时写出..."<<c_num<<endl; 35 string f="def"; 36 int f_num=e.find(f); 37 cout<<"字符串f的位置在"<<f_num<<endl...同样重载运算符operator<<用于输出操作。...,而不是首字符的位置这个与rfind区分 string类的替换函数: string &replace(int p0, int n0,const char *s);//删除从p0开始的n0个字符,然后在
很多人将这个问题归结为天赋,我却不这么看,我想这个不是天赋的问题,任何人经过一定有效率的学习和练习都能完成。...凯恩教授曾说:要善于把复杂的问题简单化。李小龙最后把深奥的武学简而单之的化为功和防,就是中国古典哲学中的阴和阳。...,只列出我们用到的字段。...但实际上,所有的报表字段都是从上面的sql列出来的字段经过简单处理而得来的,比如性别的数量,其实就是count(‘男’)或者count('女'),年龄是count(cust_age)得到的。...基本上已经能够看到结果集的样子了。但是,现在的结果集还不正确,因为大部分的统计字段还都是0,我们需要对它进行转换。 转换完成之后,只需要分组然后count一下即可。
工作切分的随意性 有时管理者会制定一些KPI来度量团队绩效,但就像那句名言所说:你度量什么,就会得到什么。其实这句话只说了一半,另一半是:只是不一定是用你所期待的方式得到。...而实际上,如果将代码行的产出作为考核KPI,除了会得到一堆臃肿、难以维护的代码之外没有任何好处;如果将研发过程中发现的缺陷数作为考核KPI,自然会形成开发与测试团队之间的『混乱之墙』,除了增加团队之间的隔阂也没有其他好处...以敏捷研发过程中的一些概念(如故事点数)进行度量 有些采用敏捷研发模式的团队,在使用每个迭代能完成的故事点数或迭代速率来进行度量和考核,而实际上这只是一种容量规划工具(推测需要多久完成工作),绝对数值跟团队紧密相关...研发效能度量的正确姿势 通过以上分析可以得知,我们对软件研发效能的度量,应当遵从以下两个基本原则: 1. 聚焦在全局指标而不是局部指标 我们要促进跨越职能和功能,在团队内、团队间彼此高效协作。...聚焦在结果产出而不是某阶段工作输出 我们不应对那些看似繁忙但只产出了一大堆无效工作输出的团队或人员进行奖励,而是引导到那些对促进组织达成目标有实际帮助的工作上去。
也就是说,AlphaCode的代码能力媲美在Codeforces上参加过测试的几乎一半程序员(2300名)。...,为挑战者提供了能与正确预期输出相匹配的输入。...现在,他们不尝试生成输入与输出对,而只是试图产生一些与问题相关的现实输入。所以,AlphaCode可能必须根据问题所在,生成字符串、二进制数或数字列表等。 ...他们抓取了一些 github 代码,并随机选择所谓的枢轴点(pivot point)。 枢轴点之前的所有内容都会被输入编码器,而解码器的目标是重建枢轴点以下的代码。...编码器仅输出代码的向量表示,可用于整个解码过程。 解码器以自回归方式运行:首先预测代码的第一个标记。然后,损失函数只是预测的 softmax 输出和真实令牌(token)之间的交叉熵。
有时你可以做一个简单的实现,而不牺牲任何可测试性;太棒了!但是有时你必须找到一个平衡点。对于某些代码,不添加单元测试是可以的。 对“单元测试”的过分关注可能会对代码库造成难以置信的损害。...一旦测试开始做任何有用的事情,例如验证它实际上从数据库中返回正确的行,单元测试纯粹主义者开始抱怨它并不是真正的单元测试,你做错了。...请注意,代码并非完全没有经过测试,因为我们确实进行了集成测试。 重构的版本要复杂得多。除了花了两周时间将一段工作代码重构成另一段工作代码(另一篇文章的主题)之外,我并不相信它实际上要好得多。...如果一个普通的程序员因为有很多层的抽象而难以理解一些简单的函数的本质,那么一定是出现了问题。重构提供了一个工具用另一个测试用例来验证正确性(简单性)。简单性很难保证正确性,但单元测试也不是。...所以这些都是错误的抽象:它们包装和混淆,而不是分离关注点并缩小范围。 关于开源项目 如果你有兴趣在开源项目中请求其他人来贡献,那么测试可以理解是一个非常重要的问题。
所以,Precision(猫)= 10/13 = 76.9% Recall 以猫为例,在总共18只真猫中,我们的模型认为里面只有10只是猫,剩下的3只是狗,5只都是猪。这5只八成是橘猫,能理解。...所以,Recall(猫)= 10/18 = 55.6% Specificity 以猫为例,在总共48只不是猫的动物中,模型认为有45只不是猫。...这里只是简单回顾一下: 在分类型模型中,以二分类为例,我们的模型结果一般可以视为0/1问题,或者说positive/negative的问题。模型的产出物,不是positive,就是negative。...如果ROC曲线完全在横轴上,代表这一点上,y=0,即TPR=0。模型没有把任何positive的数据正确的判断为positive,预测完全不准确。...所以如果ROC曲线完全与右上方45度倾角线重合,证明模型的准确率是正好50%,错判的几率是一半一半。 因此,我们绘制出来ROC曲线的形状,是希望TPR大,而FPR小。
最小的,小到无法再拆分,这个单元只做了一件事。 可测试的,这个单元应该有明确的输入和输出,并且在输入确定时,我们应该能够预测输出的情况。 二....但是对我们没有考虑到的情况-----告辞。。。 这里着重讨论一下后面两点: 提供样例,有的童鞋习惯在函数上面写上一大段的注释,有时候看业务代码搞得像在读JDK源码。...哪些地方需要Unit Test 正如前文所述,并不是所有地方都需要写UT,从某种意义上讲,UT应该越少越好,前提是系统拆分够精确,关注点的测试够详细。...怎么做Unit Test 至于如何做UT,网上一搜一大把的教程,这里就不赘述了,只是列几条个人总结的值得注意的点: 多组数据(考虑周全)->正常业务测试,边界条件测试 不要误用Mock工具,理清需要被Mock...的对象 整体覆盖率没有意义,但是关键业务代码覆盖率很重要 运维时:每一个BugReport都应有一个对应的UT UT并不是越多越好,而是对于核心代码、有意义的错误,UT越详细越好 作者:鬼畜的猪 链接
这里我们只摘取其中消费者的部分代码: @Service @RocketMQMessageListener(topic = MqTopicConstant.DEMO_TOPIC , consumerGroup...} } 在上面的代码中,重点是业务板块部分的代码,如果在订阅关系中重新将业务板块内的代码copy一份,然后修改对应的Expression值(也就是tag值),那么基本上是不会成功的。...思路与第一种方案一样,阿里云这里只是创建了一个ConsumerBean,而上面的自主搭建时采用了多个Consumer。...那是因为:集群模式消费,它会负载均衡分配到各个节点去消费,所以一半消息(不固定个数)跑到了Consumer1上,结果Consumer1订阅的是tag1,所以不会任何输出。...如果换成BROADCASTING,那后者会收到全部消息,而不是一半,因为广播是广播全部Consumer。 如果还有其他相关问题,也可关注公众号“程序新视界”,相互沟通学习。
4.做安全方案也是,VPN+堡垒机可以解决99%日常安全隐患,而不是去从花费高、细节的地方先去实现。 工作流程优化 上面说了,其它岗位很繁忙,很难有精力做其它事,这里除了系统还有流程上的。...如果支持的不多,关注不到你(很常见,好多公司没运维主管,就CTO),那可以将计划书拆分几个小块,一点点改革,尽量和效果关联上。...这里讲开发他们也不是傻子,devops人家都听过的,随意你推动大家都会欢迎,觉得很好。 规矩 开发人员写代码的时候,都会探讨一下怎么写,出一个方案,用什么技术。...这样对运维的工作会曝光,将清晰透明,在多个运维当中可以看出谁在划水和偷懒。当然也可以方便任务分配和记录,运维干的是一个很杂的活,经常会出现做一半中断的情况,就需要jira这种东西去记录。...这些东西最好用python去写一个动态脚本,不然会频繁于维护confluence,wiki将失去查看意义,每次查看还是去源头看(例如阿里云),而只是去维护它。
从下而上可以看到: 1、基础设施层,面向网络、IT等,相应出现了 NetOps、ITOps 2、软件生命周期层的 DevOps、DevSecOps、AIOps 3、在企业内部面向数据研发生命周期的 DataOps...这里举两个案例,第一是某大型股份制银行的数字化研发大盘,给 DevOps 平台提供了非常完备的数据采集度量定义规范,帮助内部提供精细化研发效能管理。...低代码平台等,都嵌入在工具链里面才能实现真正的业技融合。...智能运维围绕质量、成本、效率、安全等众多场景,建立运维能力的相关要求。 第一是建立应对场景,将场景进行了深度梳理。...第二是建立系统工具标准,在支撑智能运维能力过程中系统和工具应该具备什么核心能力,在系统和工具标准里面都有所输出。这部分涵盖了国内所有做智能运维的研究机构和厂商,基本均在这个标准中有所输出。
为每个功能单元编写一个单元测试,而不是代码单元。...只为代码覆盖率而编写测试 跟踪测试覆盖率通常是一个好主意。如今,许多测试框架都支持这一点,并且像codecov这样的平台可以很容易地随着时间的推移对其进行跟踪。...那么,为什么沉迷于它不是一个好的想法呢? 代码覆盖率只是一种测量工具。100% 的代码覆盖率并不意味着你已经覆盖了所有的边缘情况,它只是意味着所有的代码路径都被执行了。...我没有努力覆盖每一行代码,而是推荐 Martin Fowler 的建议。将测试重点放在有风险的代码上。那是您自己编写的代码,而不是可能会被重构的框架。然而,知道什么是有风险的很困难,因为它需要经验。...您应该将 [您的测试工作] 集中在风险点上。— Martin Fowler,重构 特别是某个代码逻辑导致的线上bug,或者其它同学发现的问题,都可以编写成测试用例,防止此类错误的再次出现。
当然不应该这样,例如两军打仗,当炊事班的烟熏着战士了,是将中军大营搬出去,还是讲炊事班搬出去呢?当然是炊事班了。 另外一点是,能够形成复用的组件,往往不是核心业务逻辑。...接下来,应该新建工程,新启动一个进程,尽早的注册到注册中心,开始提供服务,这个时候,新的工程中的代码逻辑可以先没有,只是转调用原来的进程接口。 为什么要越早独立越好呢?哪怕还没实现逻辑先独立呢?...接下来就可以将老工程中的逻辑逐渐迁移到新工程,由于代码迁移不能保证逻辑的完全正确,因而需要持续集成,灰度发布,微服务框架能够在新老接口之间切换。...最终当新工程稳定运行,并且在调用监控中,已经没有对于老工程的调用的时候,就可以将老工程下线了。 3.3. 阶段二的运维模式 经过业务层的的服务化,也对运维组造成了压力。 应用逐渐拆分,服务数量增多。...而开发部门的中间件组,主要研究如何正确的使用这些PaaS,配置什么样的参数,使用的正确姿势等等,这个和业务相关。 ?
这一块出了问题,我本身环境是好的,我设置的环境是好的,你生产环境出了问题你自己过去查,不关我的事儿,是你运维的事儿,本质上还是价值输出还不够完美,人与人对接,总归是有很多的问题。...,而不是靠系统来治理。...基于运维的出发点,仅仅只提供了资源的输出,我的资源没有问题,理论上讲我也不会背这些锅,那最后的锅应该由谁来背呢?...基于一些考量更多的是体现在整个的平衡上,它平衡了整个速度、成本、质量和风险,以及提升了整个创新的能力,其实这个就回到了运维需不需要跑得更快一点。...其实有了相应的方法论和技术的加持,其实我们就能跑的快一点。既然我们要做正确的事,我们下一步干什么?我们要正确地做事,所以说我们得要有方法。在整个的落地的过程当中,我们要从具体到抽象。
然而,在很多的C程序中,你可能会看到不是那么直接的比较特殊一点的宏定义,比如do{}while(0)。 do{conditional code}while(condition)结构 流程图如下: ?...初见do{...}while(0) linux内核和其他一些开源的代码中,经常会遇到这样的代码: do{ ... }while(0) 这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有...总结了7种妙处 实际上,do{...}while(0)的作用可不止一点点,下面我列举了一些。 有时候只是为了代码分块,比仅仅使用{}更直观些。...当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于do{...}while(0)循环中,则能用break达到这个目的。 do { 执行....可以是兼容各种编译器 int a; a = 10; int b; b = 20; 这种代码在只支持c89的编译器上是编译不过去的,比如ADS 2.0。
但 是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出 为“我ABC”而不是“我ABC+汉的半个”。...,输出为按字节截取的字符串。...但 * 是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应 * 该输出为“我ABC”而不是“我ABC+汉的半个”. */ public class Test10...这样理解:它什么都不是所以为负数 //英文字母只占一个字节,所以读取不会出问题,所以可以正确读取,这里理解:可以正确读取就为正数 //此处我们还要判断,到底是汉字的前一半还是后一半呢...就读到上一个字节就行了,所以就(len-1),对吧?
“我确实更喜欢回到只需要掌握特定编程技巧的时候,而不是现在这样成为一个万事通,因为多个责任分散了我太多精力。这两者都是全职工作,而我只能各自投入一半的精力。”...“转型的目的不是要给开发人员增加负担,而是在正确的时间为开发者提供正确的信息。”...Harness 公司的 Durkin 表示,“开发者最需要的不是额外的配置任务,而是在正确的时间能从系统中快速获取必要信息,这样就能支持运维、安全和基础设施团队的正常工作。...这才是重点,而不是让他们全面负责生产。 在云计算领域,Kubernetes 容器编排正在成为开发与运维之间的边界。...关注这条边界,就能让开发者集中于自己的代码,并让运维人员确保底层基础设施和管理的运行与优化。“但这种独立是以沟通和理解作为基础的,并不是以往那种孤岛式的各自为战。”
2、合理化上线方案 开发人员(rd)需在个人电脑搭建LAMP环境测试开发好的网站代码,并且在办公室或 IDC机房的测试环境测试通过,最好有专职测试人员(ts)。...尽量由运维人员管理上线,对于代码的功能性,开发人员更在意,而对于代码的性能优化和上线后服务器的稳定,运维更在意服务器的稳定,因此,如果网站宕机问题归运维管,就要让运维上线,这样更规范科学。...开发人员通知或和测试人员一起测试程序,没有问题后,由配置管理员打上新的tag标记。这里要注意,不同环境的配置文件是随代码同时发布的。...5 、Java程序代码上线的具体方案 对于java上线方法:较大公司需要分组平滑上线(如从负载均衡器上摘掉一半的服务器),发布代码后,重启服务器测试,没问题后,挂上上好线的一半,再下另外一半。...频繁的提交代码会促使开发人员创建模块化,低复杂性的代码。 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
领取专属 10元无门槛券
手把手带您无忧上云