if len(colorArrangement) != self.len():
raise ValueError("size of color list should be equal to ",self.len())
创建唯一色列表
colorList = list(set(colorArrangement))
创建实际颜色列表
colors = plt.cm.rainbow(np.linspace(0,1,len(colorList)))
遍历节点,并根据颜色组合分配颜色
colorMap = []
for i in range(self.len()):
color = colors[colorList.index(colorArrangement[i])]
colorMap.append(color)
对相应节点进行着色
nx.draw_kamada_kawai(self.graph,node_color=colorMap,with_labels=True)
return plt
常量及遗传算子定义
- 导入所需库
from deap import base
from deap import creator
from deap import tools
import random
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
import networkx as nx
- 硬约束惩罚因子
HARD_CONSTRAINT_PENALTY = 10
- 基因算法常量
POPULATION_SIZE = 100
P_CROSSOVER = 0.9
P_MUTATION = 0.1
MAX_GENERATIONS = 100
HALL_OF_FAME_SIZE = 10
MAX_COLORS = 10
- 实例化图着色问题,该实例具有要解决的所需NetworkX图,以及hardConstraintPenalty的所需值
gcp = GraphColoringProblem(nx.petersen_graph(),HARD_CONSTRAINT_PENALTY)
- 定义最小化适应度策略
creator.create(“FitnessMin”,base.Fitness,weights=(-1.0,))
- .由于解由代表参与颜色的整数值列表表示,因此需要定义一个随机生成器,该生成器将创建介于0和颜色数减1之间的整数。每个整数代表一种颜色。然后,定义解(个体)创建器,该创建器将生成随机整数的列表,列表的长度与给定图的长度匹配。最后,定义创建整个群体的运算符:
creator.create(“Individual”,list,fitness=creator.FitnessMin)
toolbox = base.Toolbox()
toolbox.register(“Integers”,random.randint,0,MAX_COLORS - 1)
toolbox.register(“individualCreator”