python遗传算法解决分配问题
python遗传算法解决分配问题
import numpy as np
import random
import matplotlib.pyplot as pltdef get_rand():select = [x for x in range(10)]random.shuffle(select)return selecttime = np.array([[82, 16, 66, 71, 44, 28, 76, 85, 36, 8],[91, 98, 4, 4, 39, 68, 26, 26, 84, 6],[13, 96, 85, 28, 77, 66, 51, 82, 59, 54],[92, 49, 94, 5, 80, 17, 70, 25, 55, 78],[64, 81, 68, 10, 19, 12, 90, 93, 92, 94],[10, 15, 76, 83, 49, 50, 96, 35, 29, 13],[28, 43, 75, 70, 45, 96, 55, 20, 76, 57],[55, 92, 40, 32, 65, 35, 14, 26, 76, 47],[96, 80, 66, 96, 71, 59, 15, 62, 39, 2],[97, 96, 18, 4, 76, 23, 26, 48, 57, 34]])
'''种群数量'''
magnit = 100
'''工人数量'''
pop = (time.shape)[1]
'''初始化群体'''
# print(pop)
rang = np.zeros((magnit, pop), int)
# print(rang)
# print(type(rang[1][1]))
for i in range(magnit):select = [x for x in range(10)]random.shuffle(select)rang[i, :] = select# print(rang)def cal_time(rang, time, pop):sum_time_pop = []for choice in rang:single_array_sum_time = 0for i in range(pop):cut = choice[i]single_array_sum_time += time[cut][i]sum_time_pop.append(single_array_sum_time)sum_time_pop = np.array(sum_time_pop).reshape(-1, 1)num = sum_time_pop.shape[0]return sum_time_pop, numcount = 0
bestpop = []
while count < 100:'''计算每一种分配的总时间'''sum_time_pop = []for choice in rang:single_array_sum_time = 0for i in range(pop):cut = choice[i]single_array_sum_time += time[cut][i]sum_time_pop.append(single_array_sum_time)sum_time_pop = np.array(sum_time_pop).reshape(-1, 1)num = sum_time_pop.shape[0]# print(sum_time_pop)'''排序'''index = np.argsort(sum_time_pop, 0)sum_time_pop = sum_time_pop[index].reshape(num, 1)[0:magnit, :]rang = rang[index].reshape(num, pop)[0:magnit, :]'''计算适值和适应度'''fit = 1000 - sum_time_pop[:] # 适值fitplus = np.cumsum(fit).reshape(-1, 1) # 适值向下叠加# print(fitplus[magnit-1, :])fitlevelplus = fitplus[:] / fitplus[magnit - 1, :] # 适应度向下叠加fitlevelplus = np.insert(fitlevelplus, 0, np.array([0]), 0) # 在第一行添加0# print(fitlevelplus)# a = (np.shape(fitlevelplus))[0]'''选择'''newchoose = []new_sum_time = []for _ in range(magnit):rand = random.random()for row in range(magnit):if rand > fitlevelplus[row, :] and rand < fitlevelplus[row + 1, :]:newchoose.append(rang[row, :])new_sum_time.append(sum_time_pop[row, :])continuenewchoose = np.array(newchoose)prechoose = newchoose.copy()new_sum_time = np.array(new_sum_time)# print(newchoose)# print((np.shape(newchoose))[0])# print(new_sum_time)'''交叉'''pc = 0.8for row in range(0, (np.shape(newchoose))[0], 2):if pc > random.random():gen_1 = newchoose[row, :].copy()gen_2 = newchoose[row + 1, :].copy()select = [x for x in range(10)]random.shuffle(select)r1 = select[0]r2 = select[1]r1, r2 = min(r1, r2), max(r1, r2)cr1, cr2 = gen_1[r1:r2 + 1].copy(), gen_2[r1:r2 + 1].copy()# print(r1, r2, cr1, cr2)for site in range(r2 - r1 + 1):s1 = np.where(gen_1 == cr2[site])gen_1[s1] = (gen_1[r1:r2 + 1])[site].copy()a = gen_1for site in range(r2 - r1 + 1):s2 = np.where(gen_2 == cr1[site])gen_2[s2] = (gen_2[r1:r2 + 1])[site].copy()b = gen_2gen_1[r1:r2 + 1] = cr2.copy()gen_2[r1:r2 + 1] = cr1.copy()newchoose[row, :] = gen_1.copy()newchoose[row + 1, :] = gen_2.copy()'''变异'''pm = 0.1for row in range(0, (np.shape(newchoose))[0]):if pm > random.random():select = [x for x in range(10)]random.shuffle(select)r1 = select[0]r2 = select[1]gen = newchoose[row, :]gen[r1], gen[r2] = gen[r2], gen[r1]newchoose[row, :] = gen.copy()# print(r1,r2,gen[r1],gen[r2])# print(newchoose,'--------')# print(prechoose)rang = np.append(prechoose, newchoose, 0)bestpop.append(sum_time_pop[0, :])count += 1# print(rang.shape)
bestpop = np.array(bestpop)
# print(bestpop)
print(sum_time_pop[0, :])
print(rang[0, :])x = [a for a in range(1,101)]
y = bestpop
plt.plot(x,y)
plt.xlabel('迭代次数')
plt.ylabel('总时间')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()
运行结果:
最短时间:138
分配情况:2 0 1 9 4 3 7 6 5 8(0~9)
python遗传算法解决分配问题相关推荐
- python遗传算法解决分段线性约束问题
问题描述 模型 分析 带有分段约束和max最值,导致使用一般的线性规划pulp问题进行求解会比较麻烦 如果将分段约束转化为0/1整数规划,其余变量uiu_iui未必还是整数,就涉及混整问题相对麻烦, ...
- 遗传算法解决tsp问题(基于python)
目录 1.遗传算法简要介绍 2.tsp问题简要介绍 3.遗传算法解决tsp问题的几个特殊点 4.源码 1.遗传算法简要介绍 简单来说,遗传算法是用于解决最优化问题的一种搜索算法.其核心基于自然界种群进 ...
- 遗传算法解决旅行商问题(Python版)
完整代码点这里 遗传算法解决旅行商问题(Python版) 一.问题描述 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中 ...
- 如何使用Python轻松解决TSP问题(遗传算法)
文章目录 前言 TSP问题 枚举 智能算法 策略 算法 数据样例 遗传算法 算法流程 繁殖 交叉 变异 选择 逆转 代码 TSP遗传算法 种群表示 交叉,变异 代码 运行结果 总结 前言 临时接到一个 ...
- 遗传算法解决寻路问题——Python描述
概要 我的上一篇写遗传算法解决排序问题,当中思想借鉴了遗传算法解决TSP问题,本质上可以认为这是一类问题,就是这样认为:寻找到一个序列X,使F(X)最大. 详解介绍 排序问题:寻找一个序列,使得这个序 ...
- python 遗传算法 字符串_遗传算法——Python
好久没写博客了,最近看了个东西,觉得不错,整理了一下: 遗传算法 遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程 ...
- 使用遗传算法解决图着色问题
使用遗传算法解决图着色问题 图着色 问题描述 应用 解的表示形式 图着色问题中的约束条件 利用python实现问题创建 遗传算法解决图着色问题 常量及遗传算子定义 使用精英主义策略 遗传流程 结果 使 ...
- 使用遗传算法解决N皇后问题
使用遗传算法解决N皇后问题 N皇后问题 解的表示 问题的表示 遗传算法解决N皇后问题 常量及遗传算子定义 使用精英主义策略 遗传流程 结果 N皇后问题 经典的N皇后问题最初被称为八皇后拼图,起源于国际 ...
- Python 遗传算法实现字符串
Python 遗传算法实现字符串 流程 1. 初始化 2. 适应度函数 3. 选择 4. 交叉 5. 变异 适应度函数计算方法 计算个体间的差:分别计算每个元素与目标元素的差取平方和 种群:计算总体均 ...
- 写一个用遗传算法解决VRP问题的代码
下面是一个使用 Python 实现的遗传算法解决 VRP 问题的代码示例: ``` import random import numpy as np class VRP: def init(self, ...
最新文章
- Java是“按引用传递”还是“按值传递”?
- Segment Routing — SRv6 — 转发原理
- oracle怎么读取表空间文件大小,oracle获取表空间文件大小
- 第三章:选择结构(一)
- springMVC4(14)各类视图输出实例分析
- linux 5.5 外接usb2.0硬盘,RHEL5 使用pam_usb
- matplotlib绘制李萨如图(三) 静态3D李萨如图
- Centos7 搭建 Socks 服务
- 2020-10-23 集合+序列化+递归+多线程+泛型+枚举+单例+反射小记
- stm32_GPIO模拟I2c读写EEPROM
- linux startx无效_startx启动失败的几个解决方法
- 当ChatGPT遇上StableDiffusion ChatGPT指导StableDiffusion绘画
- TCP 短链接 和 长链接
- 使用Android的Service实现后台定时检测并重启应用
- failed to respond问题查找
- css -- 为什么:last-child 无效?
- 用python实现excel 14个常用操作,用Python 操作 Excel,这篇文章别错过了!(超全总结)...
- 浓缩德国奎尔鱼油 (QÜELL FISH OIL™ HIGHT EPA / DHA / D)
- 程序化自动生成视频实现Youtube掘金
- 计算机测绘专业,测绘类专业