python遗传算法解决分配问题

article/2025/10/1 23:19:03

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)


http://chatgpt.dhexx.cn/article/ZCjg7MmD.shtml

相关文章

python遗传算法

学习代码来源于&#xff1a;遗传算法python 一.主要思想 遗传算法是根据达尔文的“适者生存&#xff0c;优胜劣汰”的思想来找到最优解的额&#xff0c;其特点是所找到的解是全局最优解&#xff0c;相对于蚁群算法可能出现的局部最优解还是有优势的。 二.主要名词 个体&…

遗传算法python代码

不知道为什么一个大一的萌新能有这么多事要干......蚁群算法的代码先缓一缓&#xff0c;等博主写完作业&#xff0c;考完英语期中再说吧。关于遗传算法的代码&#xff0c;由于忘记了np数组不copy的时候会直接引用&#xff0c;导致很长一段时间不知道自己哪里出bug了&#xff0c…

python遗传算法解简单整数规划与原理探究

文章目录 一、算例与代码1.1 问题与思路1.2 代码 二、实现细节2.1 什么是种群2.2 编码与解码2.3 如何处理约束2.4 如何从较好解获得新的解 三、反思&#xff1a;真的是采样逼近吗 / 消融实验3.1 最优解和较好解的关系 / 遗传算法为什么可行3.2 为什么交叉能得到更优解3.3 为什么…

遗传算法python

目录 01 遗传本质 02 编码 1.单目标多变量函数 - 无约束 - &#xff08;可画立体图&#xff09; 2.单目标多变量函数 - 罚算法 - 约束​编辑 3.单目标多变量函数 - 带约束 (不明白得出了什么东西&#xff0c;可能是输出评价指标&#xff1f;) 4.多目标函数 - 带约束 可…

python遗传算法(应用篇1)--求解一元函数极值

目录 遗传算法求解过程算法参数构建初始化种群解码&#xff08;二进制>十进制&#xff09;自然选择交叉变异解码&#xff08;新种群>十进制&#xff09;计算新种群的适应度 完整代码及其可视化版本其他numpy中的随机数 下面我们使用遗传算法尝试求解一元函数的最值 y s…

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

问题描述 模型 分析 带有分段约束和max最值&#xff0c;导致使用一般的线性规划pulp问题进行求解会比较麻烦如果将分段约束转化为0/1整数规划&#xff0c;其余变量 u i u_i ui​未必还是整数&#xff0c;就涉及混整问题相对麻烦&#xff0c;所以考虑使用遗传算法进行求解 Py…

Python 遗传算法路径规划

了却一个心愿 文章目录 目录 文章目录 前言 二、主要内容 三、使用步骤 1.将压缩包下载解压 2.读入数据 3.最终结果 前言 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律…

遗传算法的python实现(手撕python遗传算法)

遗传算法简介 假设有无约束优化问题&#xff1a; z f ( x , y ) zf(x,y) zf(x,y) 如何通过遗传算法求解&#xff1f; 在这里需要将该优化问题与遗传算法中的概念进行对比。 f f f 对应遗传算法的适应度函数。自变量 x , y x,y x,y 对应遗传算法的个体&#xff0c;注意&#…

Python 遗传算法 Genetic Algorithm

粒子群算法常常用于在连续解空间内搜索&#xff0c;而在不连续、离散的空间内常常会出现搜索越界的问题 例如旅行商问题&#xff0c;寻找可以遍历 15 个地点的最短路径&#xff08;当然可以用二进制状态压缩 动态规划解决&#xff09;&#xff0c;以 {0, 1, ..., 14} 表示这些…

python遗传算法之geatpy学习

&#x1f63b;今天我们来学习python中的遗传算法的使用&#xff0c;我们这里使用的是geatpy的包进行学习&#xff0c;本博客主要从geatpy中的各种数据结构一步一步进行学习&#xff0c;请大家耐心看完。 &#x1f424;其实以前也学习过遗传算法&#xff0c;但是主要使用matlab…

遗传算法详解 附python代码实现

遗传算法 遗传算法是用于解决最优化问题的一种搜索算法。从名字来看&#xff0c;遗传算法借用了生物学里达尔文的进化理论&#xff1a;”适者生存&#xff0c;不适者淘汰“&#xff0c;将该理论以算法的形式表现出来就是遗传算法的过程。 问题引入 上面提到遗传算法是用来解…

遗传算法【Python】

遗传算法概念 基本思想&#xff1a; 遗传算法(GA)是一种全局寻优搜索算法&#xff0c;它依据的是大自然生物进化过程中“适者生存”的规律。它首先对问题的可行解进行编码&#xff0c;组成染色体&#xff0c;然后通过模拟自然界的进化过程&#xff0c;对初始种群中的染色体进…

遗传算法python实现

遗传算法python实现 一、问题引入二、遗传算法的步骤1.初始化2.个体评价3.选择运算4.交叉运算5.变异运算6.终止条件判断 三、实现思路1.编码的设计2.适应度函数3.选择函数4.交叉函数5.变异函数6.迭代 四、具体实现1.编码解码函数2.适应度函数3.选择函数4.交叉函数5.变异函数6.选…

遗传算法(Python)

一、遗传算法 1、遗传算法的定义 遗传算法是一种现代优化算法。根据自然界适者生存的法则&#xff0c;种群中优秀个体的基因进行遗传。每个个体的染色体通过选择、交叉和变异等过程产生新的适应度更大的染色体&#xff0c;其中适应度越大的个体越优秀&#xff0c;种群得到优化…

python遗传算法(详解)

学习代码来源于&#xff1a;遗传算法python 一.主要思想 遗传算法是根据达尔文的“适者生存&#xff0c;优胜劣汰”的思想来找到最优解的额&#xff0c;其特点是所找到的解是全局最优解&#xff0c;相对于蚁群算法可能出现的局部最优解还是有优势的。 二.主要名词 个体&…

DH算法、DHE算法、ECDHE算法演进

ECDHE 算法解决了 RSA 算法不具备前向安全的性质 和 DH 算法效率低下的问题。 ECDHE 算法具有前向安全。所以被广泛使用。 由什么演变而来 DH 算法 -- > DHE 算法 -- > ECDHE 算法 DH 算法是非对称加密算法&#xff0c;该算法的核心数学思想是离散对数。 核心数学思…

DH 算法思想 SSH解决内容篡改问题

DH算法用于交换密钥 交换密钥的目的是生成仅双方共享的密钥 交换密钥的基本过程&#xff1a; 双方确定公开的内容用各自的私钥分别对公共内容加密&#xff08;加密本质就是数学运算&#xff09;并发送给对方这时双方使用自己的密钥对收到的内容加密&#xff08;要设计运算保证…

ECDH算法详解

ECDH算法详解 ECDH算法详解DH密钥交换原理结合ECC椭圆曲线算法ECDSA签名算法 参考资料 ECDH算法详解 DH密钥交换原理 进一步解释&#xff1a; 两端&#xff08;Alice 和 Bob&#xff09;想要安全的交换信息并且第三方不能获取到该信息。当然这也是TLS协议中的目的之一&#xf…

DH算法(密钥交换算法)

一 对称加密缺点 密钥传递过程复杂&#xff0c;这是对称加密带来的困扰。 二 DH密钥交换算法特点 构建本地密钥 双方密钥一致 三 DH相关参数 四 DH算法实现过程 1、初始化发送方的密钥&#xff08;KeyPairGenerator、KeyPair、PublicKey&#xff09; 2、初始化接受方的密钥&…

SSL/TLS中的DH算法、DHE算法、 ECDHE算法介绍

❤️SSL/TLS专栏导航页❤️ 文章目录 1. DH算法简介2. DH算法协商流程3. DH算法证明4. SSL/TLS中的DH算法 1. DH算法简介 Diffie-Hellman密钥交换算法是在1976年由这两个人发明的算法。它可以在不安全的网络中&#xff0c;通过交换一些公开的信息协商出共享密钥&#xff0c;使…