# Demo entry 6658838

show

Submitted by anonymous on Nov 08, 2017 at 13:12
Language: Python 3. Code size: 1.8 kB.

```class ACO(object):
def __init__(self, ant_count: int, generations: int, alpha: float,
beta: float, rho: float, q: int, strategy: int):
"""
:param ant_count:
:param generations:迭代次数
:param alpha: pheromone的相对重要因子
:param beta: heuristic信息的相对重要因子
:param rho: pheromone的历史剩余系数
:param q: pheromone intensity
:param strategy: pheromone的三种更新策略的选择. 0 - ant-cycle, 1 - ant-quality, 2 - ant-density
"""
self.Q = q
self.rho = rho
self.beta = beta
self.alpha = alpha
self.ant_count = ant_count
self.generations = generations
self.update_strategy = strategy

def _update_pheromone(self, graph: Graph, ants: list):
for i, row in enumerate(graph.pheromone):
for j, col in enumerate(row):
graph.pheromone[i][j] *= self.rho
for ant in ants:
graph.pheromone[i][j] += ant.pheromone_delta[i][j]

def solve(self, graph: Graph):
"""
:param graph:
"""
best_cost = float('inf') #初始化最优值设置为最大
best_solution = []
for gen in range(self.generations): #迭代求解
ants = [_Ant(self, graph) for i in range(self.ant_count)] #生成蚂蚁
for ant in ants:
for i in range(graph.rank - 1):
ant._select_next()
ant.total_cost += graph.matrix[ant.tabu[-1]][ant.tabu]
if ant.total_cost < best_cost:
best_cost = ant.total_cost
best_solution = [] + ant.tabu
ant._update_pheromone_delta() #更新信息素
self._update_pheromone(graph, ants)

return best_solution, best_cost
```

This snippet took 0.00 seconds to highlight.

Back to the Entry List or Home.