精华内容
下载资源
问答
  • 数据库优化 - SQL优化

    万次阅读 多人点赞 2019-11-01 21:00:00
    以实际SQL入手,带你一步一步走上SQL优化之路!
    前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。

    判断问题SQL

    判断SQL是否有问题时可以通过两个表象进行判断:

    • 系统级别表象
      • CPU消耗严重
      • IO等待严重
      • 页面响应时间过长
      • 应用的日志出现超时等错误

    可以使用sar命令,top命令查看当前系统状态。

    也可以通过Prometheus、Grafana等监控工具观察系统状态。(感兴趣的可以翻看我之前的文章)
    640?wx_fmt=png

    • SQL语句表象
      • 冗长
      • 执行时间过长
      • 从全表扫描获取数据
      • 执行计划中的rows、cost很大

    冗长的SQL都好理解,一段SQL太长阅读性肯定会差,而且出现问题的频率肯定会更高。更进一步判断SQL问题就得从执行计划入手,如下所示:640?wx_fmt=png

    执行计划告诉我们本次查询走了全表扫描Type=ALL,rows很大(9950400)基本可以判断这是一段"有味道"的SQL。

    获取问题SQL

    不同数据库有不同的获取方法,以下为目前主流数据库的慢查询SQL获取工具

    • MySQL

      • 慢查询日志
      • 测试工具loadrunner
      • Percona公司的ptquery等工具
    • Oracle

      • AWR报告
      • 测试工具loadrunner等
      • 相关内部视图如v$、$session_wait等
      • GRID CONTROL监控工具
    • 达梦数据库

      • AWR报告
      • 测试工具loadrunner等
      • 达梦性能监控工具(dem)
      • 相关内部视图如v$、$session_wait等

    SQL编写技巧

    SQL编写有以下几个通用的技巧:

    • 合理使用索引

    索引少了查询慢;索引多了占用空间大,执行增删改语句的时候需要动态维护索引,影响性能 选择率高(重复值少)且被where频繁引用需要建立B树索引;

    一般join列需要建立索引;复杂文档类型查询采用全文索引效率更好;索引的建立要在查询和DML性能之间取得平衡;复合索引创建时要注意基于非前导列查询的情况

    • 使用UNION ALL替代UNION

    UNION ALL的执行效率比UNION高,UNION执行时需要排重;UNION需要对数据进行排序

    • 避免select * 写法

    执行SQL时优化器需要将 * 转成具体的列;每次查询都要回表,不能走覆盖索引。

    • JOIN字段建议建立索引

    一般JOIN字段都提前加上索引

    • 避免复杂SQL语句

    提升可阅读性;避免慢查询的概率;可以转换成多个短查询,用业务端处理

    • 避免where 1=1写法

    • 避免order by rand()类似写法

    RAND()导致数据列被多次扫描

    SQL优化

    执行计划

    完成SQL优化一定要先读执行计划,执行计划会告诉你哪些地方效率低,哪里可以需要优化。我们以MYSQL为例,看看执行计划是什么。(每个数据库的执行计划都不一样,需要自行了解)explain sql640?wx_fmt=png

    字段 解释
    id 每个被独立执行的操作标识,标识对象被操作的顺序,id值越大,先被执行,如果相同,执行顺序从上到下
    select_type 查询中每个select 字句的类型
    table 被操作的对象名称,通常是表名,但有其他格式
    partitions 匹配的分区信息(对于非分区表值为NULL)
    type 连接操作的类型
    possible_keys 可能用到的索引
    key 优化器实际使用的索引(最重要的列) 从最好到最差的连接类型为consteq_regrefrangeindexALL。当出现ALL时表示当前SQL出现了“坏味道”
    key_len 被优化器选定的索引键长度,单位是字节
    ref 表示本行被操作对象的参照对象,无参照对象为NULL
    rows 查询执行所扫描的元组个数(对于innodb,此值为估计值)
    filtered 条件表上数据被过滤的元组个数百分比
    extra 执行计划的重要补充信息,当此列出现Using filesort , Using temporary 字样时就要小心了,很可能SQL语句需要优化

    接下来我们用一段实际优化案例来说明SQL优化的过程及优化技巧。

    优化案例

    • 表结构

      CREATE TABLE `a`
      (
          `id`          int(11) NOT NULLAUTO_INCREMENT,
          `seller_id`   bigint(20)                                       DEFAULT NULL,
          `seller_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
          `gmt_create`  varchar(30)                                      DEFAULT NULL,
          PRIMARY KEY (`id`)
      );
      CREATE TABLE `b`
      (
          `id`          int(11) NOT NULLAUTO_INCREMENT,
          `seller_name` varchar(100) DEFAULT NULL,
          `user_id`     varchar(50)  DEFAULT NULL,
          `user_name`   varchar(100) DEFAULT NULL,
          `sales`       bigint(20)   DEFAULT NULL,
          `gmt_create`  varchar(30)  DEFAULT NULL,
          PRIMARY KEY (`id`)
      );
      CREATE TABLE `c`
      (
          `id`         int(11) NOT NULLAUTO_INCREMENT,
          `user_id`    varchar(50)  DEFAULT NULL,
          `order_id`   varchar(100) DEFAULT NULL,
          `state`      bigint(20)   DEFAULT NULL,
          `gmt_create` varchar(30)  DEFAULT NULL,
          PRIMARY KEY (`id`)
      );
      
    • 三张表关联,查询当前用户在当前时间前后10个小时的订单情况,并根据订单创建时间升序排列,具体SQL如下

      select a.seller_id,
             a.seller_name,
             b.user_name,
             c.state
      from a,
           b,
           c
      where a.seller_name = b.seller_name
        and b.user_id = c.user_id
        and c.user_id = 17
        and a.gmt_create
          BETWEEN DATE_ADD(NOW(), INTERVAL – 600 MINUTE)
          AND DATE_ADD(NOW(), INTERVAL 600 MINUTE)
      order by a.gmt_create;
      
    • 查看数据量  

      640?wx_fmt=png

    • 原执行时间
      640?wx_fmt=png

    • 原执行计划
      640?wx_fmt=png

    • 初步优化思路

    1. SQL中 where条件字段类型要跟表结构一致,表中user_id 为varchar(50)类型,实际SQL用的int类型,存在隐式转换,也未添加索引。将b和c表user_id 字段改成int类型。
    2. 因存在b表和c表关联,将b和c表user_id创建索引
    3. 因存在a表和b表关联,将a和b表seller_name字段创建索引
    4. 利用复合索引消除临时表和排序

    初步优化SQL

    alter table b modify `user_id` int(10) DEFAULT NULL;
    alter table c modify `user_id` int(10) DEFAULT NULL;
    alter table c add index `idx_user_id`(`user_id`);
    alter table b add index `idx_user_id_sell_name`(`user_id`,`seller_name`);
    alter table a add index `idx_sellname_gmt_sellid`(`gmt_create`,`seller_name`,`seller_id`);
    

    查看优化后执行时间

    640?wx_fmt=png

    查看优化后执行计划
    640?wx_fmt=png

    查看warnings信息
    640?wx_fmt=png

    继续优化alter table a modify "gmt_create" datetime DEFAULT NULL;

    查看执行时间

    640?wx_fmt=png

    查看执行计划
    640?wx_fmt=png

    总结

    1. 查看执行计划 explain
    2. 如果有告警信息,查看告警信息 show warnings;
    3. 查看SQL涉及的表结构和索引信息
    4. 根据执行计划,思考可能的优化点
    5. 按照可能的优化点执行表结构变更、增加索引、SQL改写等操作
    6. 查看优化后的执行时间和执行计划
    7. 如果优化效果不明显,重复第四步操作
     

    系列文章

     
     

    温馨提示

    如果你喜欢本文,请关注我的个人公众号!或者关注我的个人博客www.javadaily.cn

    图片

     

     

    展开全文
  • sql优化的几种方式

    万次阅读 多人点赞 2018-11-05 10:20:46
    一、为什么要对SQL进行优化 我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化...

    一、为什么要对SQL进行优化

    我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。

    二、SQL优化的一些方法

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。    
        
    2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:    
    select id from t where num is null    
    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:    
    select id from t where num=0    
        
    3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。    
        
    4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:    
    select id from t where num=10 or num=20    
    可以这样查询:    
    select id from t where num=10    
    union all    
    select id from t where num=20    
        
    5.in 和 not in 也要慎用,否则会导致全表扫描,如:    
    select id from t where num in(1,2,3)    
    对于连续的数值,能用 between 就不要用 in 了:    
    select id from t where num between 1 and 3    
        
    6.下面的查询也将导致全表扫描:    
    select id from t where name like '%abc%'    
        
    7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:    
    select id from t where num/2=100    
    应改为:    
    select id from t where num=100*2    
        
    8.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:    
    select id from t where substring(name,1,3)='abc'--name以abc开头的id    
    应改为:    
    select id from t where name like 'abc%'    
        
    9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。    
        
    10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。    
        
    11.不要写一些没有意义的查询,如需要生成一个空表结构:    
    select col1,col2 into #t from t where 1=0    
    这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:    
    create table #t(...)    
        
    12.很多时候用 exists 代替 in 是一个好的选择:    
    select num from a where num in(select num from b)    
    用下面的语句替换:    
    select num from a where exists(select 1 from b where num=a.num)    
        
    13.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。    
        
    14.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,    
    因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。    
    一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。    
        
    15.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。    
    这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。    
        
    16.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,    
    其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。    
        
    17.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。    
        
    18.避免频繁创建和删除临时表,以减少系统表资源的消耗。

    19.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。    
        
    20.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,    
    以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

    21.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。    
        
    22.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。    
        
    23.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

    24.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。
    在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

    25.尽量避免大事务操作,提高系统并发能力。

    26.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
     

     

     

    展开全文
  • 4 Classification of optimization problem (IP: integer programming, MINLP: mixed integer non-linear programming, MILP: mixed integer linear programming, LP: linear ...其中,离散优化又称组合优化. me..

    optimization分类

    在这里插入图片描述

    4 Classification of optimization problem
    (IP: integer programming,
    MINLP: mixed integer non-linear programming,
    MILP: mixed integer linear programming,
    LP: linear programming,
    QP: quadratic programming,
    NLP: non-linear programming)

    在这里插入图片描述
    出自

    其中,离散优化又称组合优化. means searching for an optimal solution in a finite or countably infinite set of potential solutions.

    在这里插入图片描述

    optimization按目标函数分类

    在这里插入图片描述
    source

    optimization按照决策变量分类

    在这里插入图片描述
    source

    optimization按照解决方法分类

    在这里插入图片描述
    具体算法介绍

    易混的概念

    离散优化

    是站在解的角度来看。变量是离散的。

    整数规划

    离散优化的下面,离散的变量同时还都是整数。同时,它是基于线性规划中,变量必须是整数的约束下提出来的。跟线性规划密切相关。JK

    studies linear programs in which some or all variables are constrained to take on integer values.

    1. 0-1整数规划(二元整数规划):对于每个选择,选或者不选,再加上约束,找最优解
    2. 有分支界定法,分支切割法可以精确求解,但是是np难的方法。
    3. 要快一些的话,有如近似算法(Approximation Algorithms),启发式算法(Heuristic Algorithms),遗传算法(Evolution Algorithms, Meta-Heuristic)等等。它们虽然不能求得整数规划的最优解,但是却能在短时间(通常多项式时间)内给出一个较好的可行解。

    组合优化

    和离散优化表达的是一个意思。摘自wiki原文

    Combinatorial optimization is concerned with problems where the set of feasible solutions is discrete or can be reduced to a discrete one.

    凸优化的概念

    简单的测试一个集合是不是凸的,只要任意取集合中的俩个点并连线,如果说连线段完全被包含在此集合中,那么这个集合就是凸集,例如左图所示。
    在这里插入图片描述

    • 凸优化有个非常重要的定理,即任何局部最优解即为全局最优解。

    期刊文献

    https://www.zhihu.com/question/31900230

    展开全文
  • 多目标优化

    万次阅读 多人点赞 2018-09-14 11:40:57
    优化问题的分类 ... - 什么是多目标优化? 使多个目标在给定区域同时尽可能最佳,多目标优化的解通常是一组均衡解(即一组由众多 Pareto最优解组成的最优解集合 ,集合中的各个元素称为 Pareto最优解或非劣最...

    最优化问题的分类
    1)无约束和有约束条件;
    2)确定性和随机性最优问题(变量是否确定);
    3)线性优化与非线性优化(目标函数和约束条件是否线性);
    4)静态规划和动态规划(解是否随时间变化)。


    1. 什么是多目标优化?

    使多个目标在给定区域同时尽可能最佳,多目标优化的解通常是一组均衡解(即一组由众多 Pareto最优解组成的最优解集合 ,集合中的各个元素称为 Pareto最优解或非劣最优解)。

    非劣解——多目标优化问题并不存在一个最优解,所有可能的解都称为非劣解,也称为Pareto解。
    Pareto最优解——无法在改进任何目标函数的同时不削弱至少一个其他目标函数。这种解称作非支配解或Pareto最优解。

    • 多目标优化问题的描述

    这里写图片描述

    • Pareto支配关系:

    这里写图片描述


    2. 如何实现多目标优化?有哪些方法?

    多目标优化问题不存在唯一的全局最优解 ,过多的非劣解是无法直接应用的 ,所以在求解时就是要寻找一个最终解

    (1)求最终解主要有三类方法:

    一是求非劣解的生成法,即先求出大量的非劣解,构成非劣解的一个子集,然后按照决策者的意图找出最终解;(生成法主要有加权法﹑约束法﹑加权法和约束法结合的混合法以及多目标遗传算法

    二为交互法,不先求出很多的非劣解,而是通过分析者与决策者对话的方式,逐步求出最终解;

    三是事先要求决策者提供目标之间的相对重要程度,算法以此为依据,将多目标问题转化为单目标问题进行求解

    (2)多目标优化算法归结起来有传统优化算法和智能优化算法两大类。

    传统优化算法包括加权法、约束法和线性规划法等,实质上就是将多目标函数转化为单目标函数,通过采用单目标优化的方法达到对多目标函数的求解。

    线性加权求和法——对多目标优化问题中的N个目标按其重要程度赋以适当的权系数,其乘积和作新的目标函数,再求最优解。

    智能优化算法包括进化算法(Evolutionary Algorithm, 简称EA)、粒子群算法(Particle Swarm Optimization, PSO)等。

    两者的区别——传统优化技术一般每次能得到Pareo解集中的一个,而用智能算法来求解,可以得到更多的Pareto解,这些解构成了一个最优解集,称为Pareto最优解(任一个目标函数值的提高都必须以牺牲其他目标函数值为代价的解集)。


    3. 多目标进化算法 (MOEA )

    ①MOEA通过对种群 X ( t)执行选择、交叉和变异等操作产生下一代种群 X ( t + 1) ;
    ②在每一代进化过程中 ,首先将种群 X ( t)中的所有非劣解个体都复制到外部集 A ( t)中;
    ③然后运用小生境截断算子剔除A ( t)中的劣解和一些距离较近的非劣解个体 ,以得到个体分布更为均匀的下一代外部集 A ( t + 1) ;
    ④并且按照概率 pe从 A ( t + 1)中选择一定数量的优秀个体进入下代种群;
    ⑤在进化结束时 ,将外部集中的非劣解个体作为最优解输出。

    3.1 NSGA(非支配排序遗传算法)


    这里写图片描述

    小生境技术——将每一代个体划分为若干类,每个类中选出若干适应度较大的个体作为一个类的优秀代表组成一个群,再在种群中,以及不同种群中之间,杂交,变异产生新一代个体群。同时采用预选择机制和排挤机制或分享机制完成任务。
    基于共享机制的小生境实现方法——通过反映个体之间的相似程度的共享函数来调节群体中各个个体的适应度,从而在这以后的群体进化过程中,算法能够依据这个调整后的新适应度来进行选择运算,以维持群体的多样性,创造出小生境的进化环境。
    共享函数——表示群体中两个个体之间密切关系程度的一个函数

    共享度是某个个体在群体中共享程度的一中度量,它定义为该个体与群体内其它各个个体之间的共享函数值之和,用S 表示:
    S = (i=1,… ,M)
    在计算出了群体中各个个体的共享度之后,依据下式来调整各个个体的适应度
    F(X) =F(X) / S (i=1,… ,M)

    小生境算法的描述如下:
    (1)设置进化代数计数器;随机生成M个初始群体P(t),并求出各个个体的适应度F (i=1,2,M)。
    (2)依据各个个体的适应度对其进行降序排列,记忆前N个个体(N小于M)。
    (3)选择算法。对群体P(t)进行比例选择运算,得到P (t)。
    (4)交叉选择。对选择的个体集合P (t) 作单点交叉运算,得到P (t)。
    (5)变异运算。对P (t)作均匀变异运算,得到P (t)。
    (6)小生境淘汰运算。将第(5)步得到的M个个体和第(2)步所记忆的N个个体合并在一起,得到一个含有M+N 个个体的新群体;对着M+N个个体,按照下式得到两个个体x 和x 之间的海明距离:|| x - x ||= d,当|| x - x ||小于L时,比较个体x 和个体x 的适应度大小,并对其中适应度较低的个体处以罚函数: Fmin(x,x )=Penalty。
    (7)依据这M+N个个体的新适应度对各个个体进行降序排列,记忆前N个个体。
    (8)终止条件判断。若不满足终止条件,则:更新进化代数记忆器t = t+1, 并将第(7)步排列中的前M个个体作为新的下一代群体P(t),然后转到第(3)步:若满足终止条件,则:输出计算结果,算法结束。

    NSGA使用了非支配分层方法和适应度共享策略。非支配分层方法可以使好的个体有更大的机会遗传到下一代;适应度共享策略则使得准Pareto面上的个体均匀分布,保持了群体多样性,克服了超级个体的过度繁殖,防止了早熟收敛。

    NSGA与简单的遗传算法的主要区别在于:该算法在选择算子执行之前根据个体之间的支配关系进行了分层。其选择算子、交叉算子和变异算子与简单遗传算法没有区别。

    3.2 NSGAII(带精英策略的非支配排序的遗传算法)


    这里写图片描述

    NSGA一II算法的基本思想:
    (1)首先,随机产生规模为N的初始种群,非支配排序后通过遗传算法的选择、交叉、变异三个基本操作得到第一代子代种群;
    (2)其次,从第二代开始,将父代种群与子代种群合并,进行快速非支配排序,同时对每个非支配层中的个体进行拥挤度计算,根据非支配关系以及个体的拥挤度选取合适的个体组成新的父代种群;
    (3)最后,通过遗传算法的基本操作产生新的子代种群:依此类推,直到满足程序结束的条件。

    非支配排序算法
    考虑一个目标函数个数为K(K>1)、规模大小为N的种群,通过非支配排序算法可以对该种群进行分层,具体的步骤如下:
    这里写图片描述

    通过上述步骤得到的非支配个体集是种群的第一级非支配层;

    然后,忽略这些标记的非支配个体,再遵循步骤(1)一(4),就会得到第二级非支配层;

    依此类推,直到整个种群被分类。

    快速非支配排序算法:
    这里写图片描述

    拥挤度——指种群中给定个体的周围个体的密度,直观上可表示为个体。

    拥挤度比较算子:
    这里写图片描述

    3.3 多目标粒子群算法( PSO )


    设想这么一个场景:一群鸟进行觅食,而远处有一片玉米地,所有的鸟都不知道玉米地到底在哪里,但是它们知道自己当前的位置距离玉米地有多远。那么找到玉米地的最佳策略,也是最简单有效的策略就是是搜寻目前距离玉米地最近的鸟群的周围区域。

    基本粒子群算法:
    粒子群由 n个粒子组成 ,每个粒子的位置 xi 代表优化问题在 D维搜索空间中潜在的解;
    粒子在搜索空间中以一定的速度飞行 , 这个速度根据它本身的飞行经验和同伴的飞行经验来动态调整下一步飞行方向和距离;
    所有的粒子都有一个被目标函数决定的适应值(可以将其理解为距离“玉米地”的距离) , 并且知道自己到目前为止发现的最好位置 (个体极值 pi )和当前的位置 ( xi ) 。

    粒子群算法的数学描述 :
    每个粒子 i包含为一个 D维的位置向量 xi = ( xi1, xi2, …, xiD )和速度向量 vi = ( vi1, vi2,…, viD ) ,粒子 i搜索解空间时 ,保存其搜索到的最优经历位置pi = ( pi1, pi2, …, piD ) 。在每次迭代开始时 ,粒子根据自身惯性和经验及群体最优经历位置 pg = ( pg1, pg2, …, pgD )来调整自己的速度向量以调整自身位置。

    粒子群算法基本思想:
    (1)初始化种群后 ,种群的大小记为 N。基于适应度支配的思想 ,将种群划分成两个子群 ,一个称为非支配子集 A,另一个称为支配子集 B ,两个子集的基数分别为 n1、n2 。
    (2)外部精英集用来存放每代产生的非劣解子集 A,每次迭代过程只对 B 中的粒子进行速度和位置的更新 ;
    (3)并对更新后的 B 中的粒子基于适应度支配思想与 A中的粒子进行比较 ,若 xi ∈B , ϖ xj ∈A,使得 xi 支配 xj,则删除 xj,使 xi 加入 A 更新外部精英集 ;且精英集的规模要利用一些技术维持在一个上限范围内 ,如密度评估技术、分散度技术等。
    (4)最后 ,算法终止的准则可以是最大迭代次数 Tmax、计算精度ε或最优解的最大凝滞步数 Δt等。


    展开全文
  • 此篇博客主要是参考《Android高级进阶》,关于Android开发过程性能优化中的电量优化,布局优化和网络优化做一个记录。
  • 数学优化入门:凸优化

    万次阅读 多人点赞 2016-10-18 11:10:50
    做科研时,曾花了段时间学习凸优化,后来发现ML中其应用也非常普遍,想来今后可能还会接触,干脆做个系统的总结,方便以后查询。 博文内容主要参考Boyd(Stanford)的Convex Optimization,配套的slides,以及部分...
  • 问题在使用gcc作为编译器。...为了了解具体为什么造成该问题,对两种模式下的配置做了对比 debug模式编译器参数为-O0 -g –Wall release模式编译器参数为-O2 -g –Wall通过对比可以发现两种模式主要的不
  • 网络优化需要学习什么

    千次阅读 2018-08-29 20:22:56
    1,seo,搜索引擎优化,这是网站优化最核心的东西,另外昆明华信智原再告诉你还有其他需要掌握的辅助技能.2,PS,掌握一定的PS你可以很方便的操作你得网站上的图片3,HTML + CSS,这也是基础的东西,需要基本掌握并...
  • MySQL优化技巧

    万次阅读 多人点赞 2017-09-10 14:14:00
    MySQL优化三大方向① 优化MySQL所在服务器内核(此优化一般由运维人员完成)。② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。③ 对SQL语句以及表优化。MySQL参数优化1:MySQL 默认的最大...
  • 数据库优化 - 实例优化

    千次阅读 2019-10-25 10:30:00
    从网上去搜数据库优化基本都是从SQL层次进行优化的,很少有提及到数据库本身的实例优化。就算有也都是基于某个特定数据库的实例优化,本文涵盖目前市面上所有主流数据库的实例优化(Oralce、MySQL、POSTGRES、达梦)...
  • 谷歌seo优化主要做什么

    千次阅读 2019-06-04 16:07:51
    近年来,SEO带动了大多数的公司发展,SEO优化对于一个网站的搜索是非常的有帮助,那么今天我们就来给大家介绍下谷歌seo优化主要做什么? 谷歌SEO优化主要是做搜索引擎排名,也就是让做出来的网站更加的符合搜索引擎...
  • 优化学习 约束优化问题

    万次阅读 2021-06-02 00:01:47
    约束优化问题约束优化问题约束优化最优解的特征 约束优化问题 (P)min⁡f(x)(P) \min f(x)(P)minf(x)s.t. gi(x)⩽0,i=1,…ms.t. \text{ }g_{i}(x) \leqslant 0, i=1, \ldots \mathrm{m}s.t. gi​(x)⩽0,i=1...
  • SEO优化步骤是什么

    千次阅读 2018-08-01 17:35:58
    SEO优化其实是网站优化的一部分,大意就是搜索引擎优化,无论是网站内部优化,还是站外优化,都包含其中,从而提高搜索引擎上的排名,起到直接销售或者企业品牌推广的作用,保障企业通过线上服务获得足够的利润。...
  • 本文全面讲解性能优化中的所有知识,献上一份 Android性能优化的详细攻略, 含:优化方向、原因 &amp; 具体优化方案,希望你们会喜欢 文章较长,建议预留较长时间阅读 / 收藏 目录 1. 性能优化...
  • 【时间】2019.08.03 【题目】凸优化和非凸优化 ...为什么深度学习中往往要求损失函数是凸函数? 因为凸函数最终得到的解是全局最优解,非凸函数得到的可能是局部最优解,训练时可能不收敛。(个人理解) ...
  • Android内存优化之图片优化

    万次阅读 多人点赞 2019-04-08 11:52:23
    什么要进行图片优化 相信大概刚开始学习Android的时候有过图片过大而直接报错的情况,下面简单介绍一下OOM问题,Android支持的图片格式及图片优化的几种方式 什么是OOM?:Android系统的进程(APP级别)有最大的...
  • 优化算法】简述灰狼优化算法(GWO)原理

    万次阅读 多人点赞 2019-03-25 21:10:34
    系列优化算法简述: OP_1. 简述遗传算法(GA)原理 OP_2 简述灰狼优化算法(GWO)原理 前言: 灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能...
  • css优化,js优化以及web性能优化

    万次阅读 2017-07-27 00:09:07
    Css优化总结  对于css的优化可以从网络性能和css语法优化两方面来考虑。 Css性能优化方法如下: 1、css压缩 Css 压缩虽然不是高端的知识,但是很有用。其原理也很简单,就是把我们css代码中没有用的空白符等...
  • 优化问题:基础定义

    千次阅读 2018-12-02 22:09:01
    1 什么是凸优化 什么是凸优化?抛开凸优化中的种种理论和算法不谈,纯粹的看优化模型,凸优化就是:1、在最小化(最大化)的要求下,2、目标函数是一个凸函数(凹函数),3、同时约束条件所形成的可行域集合是一个...
  • Android性能优化系列之App启动优化

    万次阅读 多人点赞 2017-02-22 00:23:29
    Android性能优化系列之布局优化Android性能优化系列之内存优化Android性能优化系列之apk瘦身应用的启动速度缓慢是我们在开发过程中经常会遇到的问题,比如启动缓慢导致的黑屏,白屏问题,本篇博客就将介绍App启动...
  • 何为优化?措施: 对应方法变得更优: 对应的结果更加的好优化: 动词,一种行为方法-----------&gt;目的是获得更好的结果,总之有所改善优化问题的三要素:(1) 决策变量所变:可以改变的量,可以优化的量,...
  • 优化第四章凸优化问题 4.2凸优化

    千次阅读 2019-01-21 21:15:50
    4.2凸优化 标准形式的凸优化问题 局部最优解与全局最优解 可微函数的最优性准则 等价的凸问题 拟凸优化 标准形式的凸优化问题 是凸函数,等式约束是仿射函数。则此优化问题是凸优化问题。 也可以写成 ...
  • [前端优化]webAPP优化总结

    万次阅读 2017-01-05 14:21:26
    之前一直做算法,随后在公司做平台软件及后台,一个产品开发好-上线,优化一直伴随着整个过程,之前在公司做的一款平台软件,从上线到最终的稳定几乎花了一年时间,其中大部分都在做系统的优化. 优化的前提是软件的...
  • 优化学习 凸优化问题

    万次阅读 2021-05-29 00:35:07
    优化问题凸优化问题(convex problems)局部最优等同于全局最优(凸优化)x⋆∈Sx^{\star} \in Sx⋆∈S是最优解⇔∇f(x)T(x−x∗)⩾0,∀x∈S\Leftrightarrow \nabla f(x)^{T}\left(x-x^{*}\right) \geqslant 0 ,...
  • Android App优化之网络优化

    千次阅读 2016-11-10 08:49:09
    Android App优化之性能分析工具Android App优化之提升你的App启动速度之理论基础Android App优化之提升你的App启动速度之实例挑战Android App优化之Layout怎么摆Android App优化之ANR详解Android App优化之消除卡顿...
  • SQL优化最干货总结 - MySQL(2020最新版)

    万次阅读 多人点赞 2020-06-29 16:55:47
    MySQL - SQL优化干货总结(吐血版),别辜负了自己的梦想,欢迎白嫖、点赞、收藏。
  • Android性能优化之UI卡顿优化

    万次阅读 2018-03-02 17:09:43
    Android应用性能优化 性能优化分类 卡顿优化 内存优化 电量优化 网络优化 启动优化、安装包体积优化 官网性能优化指导(https://developer.android.com/topic/performance/index.html) 卡顿优化 卡顿:...
  • Android性能优化之网络优化

    千次阅读 2019-01-31 10:36:05
     很多人觉得网络优化是服务端的事情,客户端只要找个好的网络请求框架(如OKHttp)就可以了,并不需要再去做什么优化。其实不然,客户端这边在网络优化方面还是有很多事情可以做的。   二.网络优化主要从哪些...
  • 数据库优化——慢查询MySQL定位优化流程

    万次阅读 多人点赞 2021-05-19 11:07:25
    如何定位并优化慢查询SQL?如何使用慢查询日志?本文带来慢查询例子演示,新手都能看懂!那查询语句慢怎么办?explain带你分析sql执行计划!当主键索引、唯一索引、普通索引都存在,查询优化器如何选择?本文带你一...
  • SEO优化

    万次阅读 2018-05-13 19:55:04
    SEO(Search Engine Optimization):汉译为搜索引擎优化。搜索引擎优化是一种利用搜索引擎的搜索规则来提高目前网站在有关搜索引擎内的自然排名的方式。做好SEO优化有利于网站在搜索引擎的排名并提升网站的推广。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,098,542
精华内容 1,239,416
关键字:

优化了什么