1 、相关资源:
2020年发表在自动化学报的论文《状态转移算法原理及应用》,对状态转移算法作了广泛而深入的介绍:自动化学报——状态转移算法原理与应用,感兴趣的可以看下论文
各种状态转移算法的源代码可以在中南大学周晓君教授的个人主页免费下载:中南大学周晓君教授,想要解决实际问题或者测试算法性能的同学请移步到此进行代码下载
基本状态转移算法可参见 状态转移算法
2、背景介绍
离散优化,又称为整数规划 (线性整数规划),决策变量全取整数值。是一类在实际生活中非常普遍且重要的问题。具体定义请参见 离散优化Wiki 。比如以下问题都是离散优化问题( 组合优化 也是离散优化的一种特例)
- 路径优化问题(Routing Problem)–交通领域(GPS导航);
- 仓储、运输等物流(Logistics)以及供应链(Supply chain)领域;
- 制造业里的生产流程优化(Process Optimization);
- 电力领域的电网的布局以及分配(Power Grid);
- 电子工程里的设施部件分配问题(Facility Layout Problem);
- 能源领域的优化,如:如何铺设输油管道;
- 火车、课程、飞机时刻表安排问题等调度问题 (Scheduling Problem);
- 以及比较出名的旅行商问题,最大切割问题等等
为了求解优化离散问题,周晓君教授也扩展开发了离散形式状态转移算法,被称为DSTA (Discrete state transition algorithm)。在离散优化问题上,DSTA有着出色表现,更多信息请参考论文 Discrete state transition algorithm for unconstrained integer optimization problems
DSTA的基本思想与基本状态转移算法一致,都是在状态转移统一框架下的不同分支实现。将最优化问题的一个解看成是一个状态, 解的迭代更新过程看成是状态转移过程, 利用现代控制理论的状态空间表达式来作为产生候选解的统一框架, 基于此框架来设计状态变换算子。是一种基于个体的进化算法, 它基于给定当前解, 通过某种状态变换算子产生候选解集, 并与当前解进行比较, 迭代更新当前解,直到满足某种终止条件。
其流程图和伪代码如下所示,
3、算子设计详解
与基本状态转移算法相似,DSTA也给出了4个基本的变换的算子,分别是替换、交换、平移、对称,我会简单介绍以下四个算子的设计思想。
- 交换算子 : 随机选择两个位置进行值的交换
- 平移变换算子,主要是随机选择一个区间,然后做循环左移
- 对称变换算子:在随机的一个区间内做镜像对称
- 替换算子,随机选择一个位置进行替换
除此之外,使用者可以根据自身经验和待解决的问题特点,设计更适合的算子来产生候选解,这也是状态转移算法具有良好可控性的体现。
实例
本文就以旅行商问题为例,做一个简单演示。 旅行商(TSP)问题:“给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。” 你需要从起点访问完所有城市再回到起点,每个城市只准你去一次,求最短路程:
问题维基百科已经定义的很明白了 旅行推销员问题百科 , 就是求一个 [1,n]
的某个排列,此排列得到的距离最小。由于问题自身特点,本问题无法使用替换变换算子,仅用另外三个算子进行优化求解。结果如下(101个城市)