灰色预测
参考:https://www.jianshu.com/p/a35ba96d852b
灰色预测法是一种针对灰色系统的预测方法。灰色系统介于白色系统(内部信息完全可知)和黑色系统(内部不可知,只知道与外界的交互,黑箱)之间。
灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行灰色生成来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
灰色预测是用灰色模型GM(1,1)来进行定量分析的,具体推导见参考链接,算法步骤如下:
(1) 数据的级比检验
(2) 建立GM(1,1)模型,计算出预测值列。
(3) 检验预测值: ① 相对残差检验 ② 级比偏差值检验
(4) 利用模型进行预测。
模拟退火
参考:https://www.cnblogs.com/Qling/p/9326109.html
模拟退火用于解决最优化问题。往往先确定一个随机初值,按照某种准则移动,判断值的变化,再决定是否移动,最终逼近最优解。
Metropolis准则:比如在求最大值时,当f(i+1)>f(i)时,接受该移动;当f(i+1)<f(i)时,以一定的概率接受该移动,否则不接受此次移动。所以关键的是移动准则的确定,应该具备一定的随机性。
解决TSP(旅行商)问题。程序流程:
- 设定初始温度T0,并且随机选择一条遍历路径P(i)作为初始路径,算出其长度L(P(i));
- 随机产生一条新的遍历路径P(i+1),算出其长度L(P(i + 1));
- 若L(P(i + 1)) < L(P(i)),则接收P(i + 1)为新路径,否则以模拟退火的概率接收P(i + 1),然后降温;
- 重复步骤1和2直至温度达到最低值Tmin。
产生新的遍历路径的方法有很多,下面列举其中3种:
-
随机选择2个节点,交换路径中的这2个节点的顺序。
-
随机选择2个节点,将路径中这2个节点间的节点顺序逆转。
-
随机选择3个节点m,n,k,然后将节点m与n间的节点移位到节点k后面。
MATLAB例程:
% main.m
%% I. 清空环境变量
clear all
clc
%% II. 导入城市位置数据
X = [16.4700 96.1000
16.4700 94.4400
20.0900 92.5400
22.3900 93.3700
25.2300 97.2400
22.0000 96.0500
20.4700 97.0200
17.2000 96.2900
16.3000 97.3800
14.0500 98.1200
16.5300 97.3800
21.5200 95.5900
19.4100 97.1300
20.0900 92.5500];
%% III. 计算距离矩阵
D = Distance(X); %计算距离矩阵
n = size(D,1); %城市的个数
%% IV. 初始化参数
T0 = 1e10; % 初始温度
Tf = 1e-30; % 终止温度
%L = 2; % 各温度下的迭代次数
q = 0.9; % 降温速率
Time = floor(log(Tf/T0)/log(0.9)); % 计算迭代的次数 T0 * (0.9)^x = Tf
count = 0; % 初始化迭代计数
Obj = zeros(Time, 1); % 目标值矩阵初始化
path = zeros(Time, n); % 每代的最优路线矩阵初始化
%% V. 随机产生一个初始路线
S1 = randperm(n