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遗传算法解决分配问题相关推荐

  1. python遗传算法解决分段线性约束问题

    问题描述 模型 分析 带有分段约束和max最值,导致使用一般的线性规划pulp问题进行求解会比较麻烦 如果将分段约束转化为0/1整数规划,其余变量uiu_iui​未必还是整数,就涉及混整问题相对麻烦, ...

  2. 遗传算法解决tsp问题(基于python)

    目录 1.遗传算法简要介绍 2.tsp问题简要介绍 3.遗传算法解决tsp问题的几个特殊点 4.源码 1.遗传算法简要介绍 简单来说,遗传算法是用于解决最优化问题的一种搜索算法.其核心基于自然界种群进 ...

  3. 遗传算法解决旅行商问题(Python版)

    完整代码点这里 遗传算法解决旅行商问题(Python版) 一.问题描述 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中 ...

  4. 如何使用Python轻松解决TSP问题(遗传算法)

    文章目录 前言 TSP问题 枚举 智能算法 策略 算法 数据样例 遗传算法 算法流程 繁殖 交叉 变异 选择 逆转 代码 TSP遗传算法 种群表示 交叉,变异 代码 运行结果 总结 前言 临时接到一个 ...

  5. 遗传算法解决寻路问题——Python描述

    概要 我的上一篇写遗传算法解决排序问题,当中思想借鉴了遗传算法解决TSP问题,本质上可以认为这是一类问题,就是这样认为:寻找到一个序列X,使F(X)最大. 详解介绍 排序问题:寻找一个序列,使得这个序 ...

  6. python 遗传算法 字符串_遗传算法——Python

    好久没写博客了,最近看了个东西,觉得不错,整理了一下: 遗传算法 遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程 ...

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

    使用遗传算法解决图着色问题 图着色 问题描述 应用 解的表示形式 图着色问题中的约束条件 利用python实现问题创建 遗传算法解决图着色问题 常量及遗传算子定义 使用精英主义策略 遗传流程 结果 使 ...

  8. 使用遗传算法解决N皇后问题

    使用遗传算法解决N皇后问题 N皇后问题 解的表示 问题的表示 遗传算法解决N皇后问题 常量及遗传算子定义 使用精英主义策略 遗传流程 结果 N皇后问题 经典的N皇后问题最初被称为八皇后拼图,起源于国际 ...

  9. Python 遗传算法实现字符串

    Python 遗传算法实现字符串 流程 1. 初始化 2. 适应度函数 3. 选择 4. 交叉 5. 变异 适应度函数计算方法 计算个体间的差:分别计算每个元素与目标元素的差取平方和 种群:计算总体均 ...

  10. 写一个用遗传算法解决VRP问题的代码

    下面是一个使用 Python 实现的遗传算法解决 VRP 问题的代码示例: ``` import random import numpy as np class VRP: def init(self, ...

最新文章

  1. Java是“按引用传递”还是“按值传递”?
  2. Segment Routing — SRv6 — 转发原理
  3. oracle怎么读取表空间文件大小,oracle获取表空间文件大小
  4. 第三章:选择结构(一)
  5. springMVC4(14)各类视图输出实例分析
  6. linux 5.5 外接usb2.0硬盘,RHEL5 使用pam_usb
  7. matplotlib绘制李萨如图(三) 静态3D李萨如图
  8. Centos7 搭建 Socks 服务
  9. 2020-10-23 集合+序列化+递归+多线程+泛型+枚举+单例+反射小记
  10. stm32_GPIO模拟I2c读写EEPROM
  11. linux startx无效_startx启动失败的几个解决方法
  12. 当ChatGPT遇上StableDiffusion ChatGPT指导StableDiffusion绘画
  13. TCP 短链接 和 长链接
  14. 使用Android的Service实现后台定时检测并重启应用
  15. failed to respond问题查找
  16. css -- 为什么:last-child 无效?
  17. 用python实现excel 14个常用操作,用Python 操作 Excel,这篇文章别错过了!(超全总结)...
  18. 浓缩德国奎尔鱼油 (QÜELL FISH OIL™ HIGHT EPA / DHA / D)
  19. 程序化自动生成视频实现Youtube掘金
  20. 计算机测绘专业,测绘类专业

热门文章

  1. 安装VisualC++出现未安装等错误怎么办
  2. Window Linux双系统安装 超详细教程
  3. 99行代码的《冰雪奇缘》,收下我的膝盖!
  4. Origin 去demo水印
  5. linuxshell编程_使shell命令发包软件-当你在Linux shell调用外部程序,如
  6. Linux的使用注意事项
  7. java环境配置 jcreator
  8. CCNA学习指南 第八章 下载
  9. android高效视频压缩代码,Android视频压缩的示例代码
  10. 基于Python实现语义分析