AS用来解决TSP问题的基本计算公式
n个城市的TSP,城市间的距离为
d
i
j
d_{ij}
dij
选择概率公式:若
j
∈
A
j\in A
j∈A则
P
i
j
k
(
t
)
=
τ
i
j
(
t
)
α
η
i
j
β
∑
l
∈
A
k
[
τ
i
j
]
α
η
i
l
β
P_{ij}^k (t)=\frac{\tau_{i j}(t)^{\alpha} \eta_{i j}^{\beta}}{\sum_{l \in A_{k}}\left[\tau_{i j}\right]^{\alpha} \eta_{i l}^{\beta}}
Pijk(t)=∑l∈Ak[τij]αηilβτij(t)αηijβ
否则,
P
i
j
k
(
t
)
=
0
P_{ij}^k(t)=0
Pijk(t)=0
距离的影响:
η
i
j
=
1
/
d
i
j
\eta _{ij}=1/d_{ij}
ηij=1/dij
A
k
=
N
−
t
a
b
u
k
(
t
)
,
A
k
表
示
蚂
蚁
k
没
走
过
的
城
市
,
t
a
b
u
k
(
t
)
表
示
蚂
蚁
k
走
过
的
城
市
A_k=N -tabu_k(t),A_k表示蚂蚁k没走过的城市,tabu_k(t)表示蚂蚁k走过的城市
Ak=N−tabuk(t),Ak表示蚂蚁k没走过的城市,tabuk(t)表示蚂蚁k走过的城市
α
β
\alpha \beta
αβ是指数权重,用来调节信息素和距离的重要程度
α
=
0
,
β
=
1
贪
婪
启
发
式
\alpha =0, \beta =1 贪婪启发式
α=0,β=1贪婪启发式
α
=
1
,
β
=
0
只
考
虑
信
息
素
\alpha =1, \beta =0 只考虑信息素
α=1,β=0只考虑信息素
τ
i
j
(
t
+
n
)
=
(
1
−
ρ
)
τ
i
j
(
t
)
+
Δ
τ
i
j
,
ρ
为
遗
忘
因
子
,
Δ
为
信
息
素
增
量
\tau _{ij}(t+n)=(1-\rho )\tau_{ij}(t)+\Delta \tau_{ij},\rho为遗忘因子,\Delta 为信息素增量
τij(t+n)=(1−ρ)τij(t)+Δτij,ρ为遗忘因子,Δ为信息素增量
Δ
τ
i
j
=
∑
k
=
1
M
Δ
τ
i
j
k
累
计
所
有
蚂
蚁
留
下
的
信
息
\Delta \tau_{ij}=\sum_{k=1}^M\Delta \tau_{ij}^k 累计所有蚂蚁留下的信息
Δτij=k=1∑MΔτijk累计所有蚂蚁留下的信息
如果边ij在蚂蚁k的巡回上,则
Δ
τ
i
j
k
=
Q
/
L
k
\Delta \tau_{ij}^k=Q/L_k
Δτijk=Q/Lk否则
Δ
τ
i
j
k
=
0
\Delta\tau_{ij}^k=0
Δτijk=0
ACO的基本算法步骤
-
1、初始化
令t=0,NC=0(巡回次数),对所有的边(i,j)令 τ i j ( t ) = c , Δ τ = 0 \tau_{ij}(t)=c, \Delta\tau=0 τij(t)=c,Δτ=0将m个蚂蚁分散到n个城市中 -
2、令S=1,(S是tabu表的指标,即走过的城市数)将所有的初始城市计入 t a b u k ( t ) tabu_k(t) tabuk(t)
-
3、重复以下步骤,直到tabu表填满(所有城市走过)。令S=S+1,对k=1到m个城市,以 P i j k ( t ) P_{ij}^k(t) Pijk(t)选择城市j的移动,将j加入 t a b u k ( s ) tabu_k(s) tabuk(s)
-
4、对k=1到M,计算L_k,更新最短巡回(即历史最优解)对边(i,j)计算 Δ τ i j k → Δ τ i j \Delta\tau_{ij}^k\to \Delta\tau_{ij} Δτijk→Δτij
-
5、对所有边计算 τ i j ( t + n ) \tau_{ij}(t+n) τij(t+n)令t=t+1,NC=NC+1
-
6、若NC大于NC_max停止,否则转第二步,并清空tabu表