先再啰嗦一句:智能优化算法解决NP问题,程序的每次运行结果基本都不一样。如果你不能理解这句话,先看我的02号置顶日志。
1. 遗传算法
遗传算法基本可以解决任何优化问题。这是因为遗传算法的编码很自由,而其他智能优化算法在解决具体问题的时候存在一定的局限性(下面介绍)。
遗传算法的编码有多种形式,根据具体问题选择一种合适的编码方式,问题便可迎刃而解。
遗传算法的编码形式有
01编码:如,选址问题,0表示不选,1表示选择;
1~N自然数排列编码:这个编码的特点就是,优化节点访问顺序,要求每个节点都要访问且只能访问一次,如TSP、VRP问题、航班排序问题等等,
自然数编码:一般用于分配问题中,如有N个任务分配给M个工人,那么任务n的对应编码m就表示,任务n分配给工人m
实数编码:求解连续函数时用到,如同后面介绍的群体类算法。
遗传算法的上述四种编码方式,基本可解决任何问题。具体在使用时就要根据问题(主要是约束条件)来选择编码,也会出现一些编码的等效变化,即可能编码是其他样子,但本质用的时候还是上述四种编码。当然也会有复合编码,就是上述四种编码方式的组合。
不同的编码对应的交叉和变异是不一样的,这个就需要根据具体的编码来进行操作。
2. 蚁群算法
说实话蚁群算法的应用范围很窄。
蚁群算法的提出是基于解决旅行商问题(路径最短问题)的,在这个问题中,蚁群算法的信息素的定义以及启发函数的定义都是根据距离进行的