使用遗传算法解决图着色问题

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

遗传算法解决图着色问题


常量及遗传算子定义

  1. 导入所需库

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

  1. 硬约束惩罚因子

HARD_CONSTRAINT_PENALTY = 10

  1. 基因算法常量

POPULATION_SIZE = 100

P_CROSSOVER = 0.9

P_MUTATION = 0.1

MAX_GENERATIONS = 100

HALL_OF_FAME_SIZE = 10

MAX_COLORS = 10

  1. 实例化图着色问题,该实例具有要解决的所需NetworkX图,以及hardConstraintPenalty的所需值

gcp = GraphColoringProblem(nx.petersen_graph(),HARD_CONSTRAINT_PENALTY)

  1. 定义最小化适应度策略

creator.create(“FitnessMin”,base.Fitness,weights=(-1.0,))

  1. .由于解由代表参与颜色的整数值列表表示,因此需要定义一个随机生成器,该生成器将创建介于0和颜色数减1之间的整数。每个整数代表一种颜色。然后,定义解(个体)创建器,该创建器将生成随机整数的列表,列表的长度与给定图的长度匹配。最后,定义创建整个群体的运算符:

creator.create(“Individual”,list,fitness=creator.FitnessMin)

toolbox = base.Toolbox()

toolbox.register(“Integers”,random.randint,0,MAX_COLORS - 1)

toolbox.register(“individualCreator”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值