启发性算法

启发性算法

  • 非常狭义定义:
    • 用来设计最优化问题的随机算法的鲁棒性技术;
    • 不能保证解的效率和质量
    • 没有有界常数概率

模拟退火 Simulated Annealing

概念

  • 局部搜索+跳出局部最优的随机决策
  • 局部搜索:找到一个可行解;找到邻域中的最优解替换并且循环这一步
  • 多起点局部搜索
  • threshold local search:允许移动到较差解
  • 模拟退火的基本思想:
    • 初始化:初始温度T,初始可行解$\alpha \in M(x)$(是算法迭代的起点),温度关于温度和时间的下降函数f
    • 时间$I=0$,当温度大于0(或不太靠近0)时,重复一下操作:
      • 随机选取$\alpha$邻域中的解$\beta$
      • 如果$cost(\beta)\le cost(\beta)$, $\alpha:=\beta$;
      • 否则生成一个(0, 1)间的随机数r
        • 如果$r<\exp(-\frac{cost(\beta)-cost(\alpha)}{T})$, 则$\alpha:=\beta$;
      • $I =I+1$
      • $T=f(T,I)$
    • 输出$\alpha$

理论和经验

  • 如果下列条件成立, 模拟退火是渐进收敛的, 即取全局最优解的概率随迭代次数的增加趋向于1
    • 每个可行解都是任意其他可行解可达的
    • 初始温度T至少为最深的非全局最优的局部最优解的深度
  • 初始温度选择:
    • cost的最大差值
    • 或者任选T, 过程中增大T值保证接受概率小于1
  • 温度下降函数选择:
    • 通常选取常数r, $0.8\le r \le 0.99$, $T := r\cdot T$
    • 或者选取$T_k:=\frac{T}{\log_2(k+2)}$
    • 每个固定温度的迭代次数d为邻域的大小
  • 终止条件:
    • 一段时间cost不变
    • T < term, 通常$term\le \frac{\epsilon}{\ln [(|M(x)|-1)/p]}$
  • 观察结果:
    • 可能解质量好但是计算开销极大
    • 解的质量实际上未必和初始解选取有关
    • 最重要的参数是邻域和温度下降率
    • 平均时间接近最坏时间
    • 相同邻域下效果比局部搜索好
  • 应用: MAX-CUT, MIN-CUT; (TSP效果很差)

随机禁忌搜索

  • 模拟退火推广版
  • 记录搜索过的最优解, 并且在邻域和TABU的差集中搜索, 搜索后更新TABU
  • TABU有多种选择策略, 可以前k步搜索过的解以免重复
  • 随机禁忌搜索算法:
    • 选初始解$\alpha$, TABU = {$\alpha$}, STOP = FALSE, BEST = $\alpha$
    • 选$Neigh_x(\alpha)-TABU$中最优解$\beta$, 同模拟退火选择是否接受$\beta$
    • 更新TABU和STOP
    • 重复直至STOP

遗传算法 genetic algorithm

概念

  • 遗传算法:
    • 创造一个初始化人口$P=\{\alpha_1, \cdots, \alpha_k\}$; 已经创造的人口数$t=0$
    • 计算fitness($\alpha_i$), i = 1, 2, …, k, 据此评估P的分布律$Prob_P$, 满足高fitness有较高概率
    • 根据$Prob_P$随机选取$k/2$对可行解$(\beta_1^1, \beta_1^1)$, …, $(\beta_{k/2}^1, \beta_{k/2}^1)$
    • 计算每一对的crossover生成新个体, 加入P
    • 对P中每个个体随机使用变异mutation
    • 对于P中每个个体再次计算fitness, 据此选择k个组成P’ $\subseteq$P
    • 可能对于P’中元素在邻域中搜索最优解来替代
    • $t:=t+1$; $P:=P’$; 满足停止条件则输出, 不然重复上述步骤
  • 定义: M(x)的计划为任意向量$s=(s_1, s_2,…,s_n)\in \\{0,1, \\} ^ n$(表示free); 对于计划s的可行解集合为
    $Schema(s_1, …, s_n) = \{ \gamma_1, …, \gamma_n\in M(x)|\gamma_i = s_i \text{ for all }i \in \{1,…,n\} $
    $\text{ such that }s_i\in \{0,1\};\gamma_i \in\{0,1\}\text{ for all }j\in \{1,2,…,n \}\text{ such that }s_j=* \}$
  • length(s): s中第一个和最后一个非位置间的距离;
    order(s): 非
    位置数
    $Fitness(s, P) = \frac{1}{|Schema(s)\cap P|}\cdot \sum_{\gamma\in Schema(s)\cap P}cost(\gamma)$
    $Fit-ratio(s, P) = \frac{Fitness(s, P)}{\sum_{\beta \in P}cost(\beta)/|P|}$, 分母为平均fitness
  • The Schema Thm for GAS: 对任意Schema s 和任意 t= 1, 2, …, Schema(s)在(t+1)-st人口的期望个体数为
    $E[Z_{t+1}]=Fit-ratio(s, P_t)\cdot \frac{n-length(s)}{n}\cdot (1-order(s)\cdot pr_m)\cdot |P_t\cap Schema(s)|$

参数选择

  • 人口大小:
    • 太小容易局部最优, 太大计算开销大
    • 30或者区间[n, 2n]内(n为实例的大小)
  • 初始人口选择:
    • 随机选择
    • 选择较高质量的初始人口会增快收敛速度, 但容易收敛到局部最优
  • fitness选择:
    • 最大化问题直接选取cost作为fitness, 或再减去一个小于最小值的常数; 减去的值越接近最小cost, 越偏向于高cost个体
  • 父母的选择:
    • 选最好的一半和剩下的随机组合
    • 或者按照从小到大排序后, 根据$Prob(\alpha_i)=\frac{2i}{n(n+1)}$的概率选择
  • 个体的表示和crossover
    • 例如TSP中个体表示为1-n的排列, crossover可以选择为一个排列中的某部分按照另一个排列中的顺序重排
    • 或者将父母的某些特征crossover, 然后选择满足crossover后性质的解作为孩子
  • 突变概率:
    • 1/100
    • 或1/n
    • 或$\frac{1}{k^{0.93}\sqrt{n}}$
    • 如果人口数量k较小, 就要增大突变率防止局部最优
  • 新人口选择机制
    • en block strategy: 孩子完全替代父母
    • elite model: 选一小部分父母中的高fitness个体, 其余的大部分选孩子
    • 父母孩子放一起, 选择高fitness的
    • 选完之后可以在小邻域中提升个体fitness
  • 停止策略:
    • 确定的代数
    • 根据平均fitness(不怎么变)和个体差异(小)