- 手机:
- 18888889999
- 电话:
- 0898-66889888
- 邮箱:
- admin@youweb.com
- 地址:
- 海南省海口市玉沙路58号
优化领域解决问题通常使用三种方法,第一种是精确方法(Exact Approaches),另外还有启发式算法(Heuristics Algorithm)和以及元启发式算法(Meta-heuristics Algorithm)
1. 精确方法(Exact Approaches),通常使用数学建模的方法建立数学模型(包括决策变量,目标函数以及约束条件),通过优化算法(单纯形法,分支定界,分支切割,割平面方法等)解这个数学模型得出问题的最优解。解的好坏由模型建立的是否合理,优化算法的设计等决定。
对于常见的数学模型,比如线性规划(Linear Programming),整数规划 (Integer Programming),混合整数规划 (Mixed Integer Programming),二次规划 (Quadratic Programming)等,都可以使用优化求解器IBM Cplex,Gurobi,FICO Xpress,SCIP (前两个学术用户可以免费申请,最后一个是开源的)等进行求解,大大节省了求解时间。关于各个优化求解器性能,可参见这个网址,可以看出Cplex 和 Gurobi 的性能总体较好。值得注意的是,这个网站的性能对比仅仅是对比算例的结果,对于其他模型或者算例的结果可能有所不同。比如我最近解决一个问题,同样的求解器,同样的问题,变量和约束少的模型求解时间时间是变量和约束多的模型求解时间近十倍。
为什么使用启发式算法呢?使用精确方法虽然可以求得最优解(Optimal Solution),可以从理论上证明求得的解是最优的,但随着问题规模的扩大(可能呈指数级或者阶乘级的增长),对于中等规模或者大规模的问题,在有限的时间内不可能求得最优解(对于我研究的问题,目前可以求得42个机器最优解)。这就需要在求解精读和运算时间之间有一个折衷和权衡(trade off)。对于大规模的问题,我们不需要求得最优解,只需在短时间内求得次优解(Sub-Optimal Solution)或者满意解(Satisfactory Solution)(西南交通大学靳番教授和金炜东教授对满意优化理论做了开创性研究),加之计算机性能的提升,出现了启发式算法。
作者:知乎用户
链接:https://www.zhihu.com/question/29762576/answer/212138630
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
?
2. 启发式算法(Heuristics Algorithm),启发式算法是以问题为导向(Problem-oriented)程序,根据问题的特殊结构或者性质来改进解。一般情况下,启发式算法比精确方法更容易实现。启发式算法包括构造算法(Construction Algorithm)和 改进算法 (Improvement Algorithm)等。对于构造算法(Construction Algorithm),针对布局问题,对于和其它机器流量比较小的机器尽量摆在机器序列的两端,这样就可以形成一个启发式规则,基于流量的排列(Flow-based permutation, FBP), 这样就可以根据这个规则得到机器序列;另外还有基于机器长度的排列(Length-based permutation, LBP)规则,尽量把长度小的机器排列到中间,基于这规则也可以得到一个机器序列。这样产生的解都是可行解(Feasible Solution),但一般情况下都不是最优解。对于 改进算法 (Improvement Algorithm),常见的就是使用基于贪婪方法的爬山法(Hill Climbing),见下图,它是由一个初始解开始改进解,爬山法太贪婪,容易陷入局部最优(Local Optimum)。如图所示,从C点搜索到A点,就陷入了局部最优,而问题的全局最优在B点。
? ? ? ? ? ? ? ? ? ?
3. 元启发式算法(Meta-heuristics Algorithm),相对于启发式算法,元启发式算法是问题独立(Problem-independent)的是针对大范围的优化问题提供通用的流程。一般地,需要提供至少一个初始可行解(Initial Feasible Solution),在预定义的搜索空间高效搜索用以迭代地改进解。可以分为基于单个解(Single solution based)的元启发式算法,例如: 模拟退火算法 (Simulated Annealing)和禁忌搜索算法(Tabu Search); 另外是基于群体(Population based)的元启发式算法,比如遗传算法(Genetic Algorithm),分散搜索算法(Scatter Search Algorithm),粒子群算法(Particle Swarm Optimization)和蚁群算法(Ant Colony Optimization)等。元启发式算法可以使用某些操作跳出局部最优。
现在越来越多的学者使用混合算法(Hybrid Algorithm),包括元启发式算法与精确方法的混合,比如这篇09年的综述文章:Hybridizing exact methods and metaheuristics: A taxonomy。对于双行布局问题,既要确定机器排列顺序,又要确定机器的精确位置,这是一个组合优化和连续优化结合的问题,对于大规模的算例,需要元启发式算法和精确方法协同解决。元启发式算法与启发式算法的混合,元启发式算法的性能非常依赖初始解的质量,可以使用启发式算法为元启发式算法产生初始解,以提高其性能。元启发式算法与元启发式算法的混合,可以参考11年的综述文章:Hybrid metaheuristics in combinatorial optimization: A survey。算法的混合可以发挥各个算法的优点,抵消其缺点,以实现更好的性能。
元启发算法范围内大部分应用了随机优化机构,多目标优化用的蛮多。但是多目标优化中,目标太多时一般会先降维(比如PCA),多于3-5个目标的优化效率低,也没有太多实际的可读性。接近实际的案例里面一般都会涉及多种算法,先用元启发算法求得一个小范围的满意解,再用启发或者精确算法找最优解,这样即提高了计算效率又能有高质量结果。
参考连接:https://www.zhihu.com/question/29762576
?
?
?
?
?
?
?
?