惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志
D
Docker
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Register - Security
The Register - Security
J
Java Code Geeks
S
SegmentFault 最新的问题
月光博客
月光博客
G
Google Developers Blog
美团技术团队
Last Week in AI
Last Week in AI
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
The Blog of Author Tim Ferriss
腾讯CDC
Recent Announcements
Recent Announcements
Recorded Future
Recorded Future
The Cloudflare Blog
有赞技术团队
有赞技术团队
博客园_首页
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
B
Blog
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
爱范儿
爱范儿
D
DataBreaches.Net
F
Full Disclosure
M
MIT News - Artificial intelligence
博客园 - 司徒正美
H
Help Net Security

算法

Knuth 2025 圣诞讲座:把骑士巡游变成精准匹配问题 - V2EX 已知网易云音乐的歌单的上限是一万首。还有某个歌单的歌曲加入到另外一个歌单会自动去重,并且非重复的都在歌单开头。有没有手动去掉指定歌单中听过的歌曲的方法? Leetcode 1. 两数之和 算法可视化演示(1/100) 建了一个 LeetCode Hot 100 刷题讨论群,大佬们有兴趣的冲冲冲 不用 AI 挑战? 看看大家的算法水平 - V2EX 请教一个集合 ChunkBySize 的算法 - V2EX Tiktok 的算法有多厉害? US 搞的定 LLM,为什么学不会 tt 的算法? - V2EX 🎥 最长递增子序列(LIS)算法讲解 | 真诚分享一次 AC 背后的思路 👉 https://www.bilibili.com/video/BV1inEQzvEaK/ 跪求大佬指点! 10GB+数据查重最优解,哪种算法能扛住? 几百万个三维坐标中判断富集的簇,如何做比较好? - V2EX 去楼下超市买东西发现个活动,满 18 送可乐一瓶,发现有点意思 - V2EX 面试遇到怪题,大家有什么思路吗 - V2EX 如何避免露出 prompt 给用户 - V2EX 这个算法有多难? 把 Ai 也难到了 - V2EX 帮忙这个题到底是咋解啊?? - V2EX 求个思路 背抓测试测算两个中指之间距离 - V2EX 算法题:给出任意两个表,找出两个表所有的关联关系 - V2EX 请问我这段 2-hop 算法的 Rust 实现还能怎么优化 - V2EX C++如何优化矩阵乘法 gemm - V2EX 求个思路:判断两个及以上的图形是否重叠。 - V2EX 有什么 3 维矩阵匹配算法吗? - V2EX 有没有各种算法的列表?最好是重点介绍输入、输出和适用范围 - V2EX [招聘] [兼职] [算法] 招聘录制算法视频 长期合作 - V2EX [线上] 求 算法大佬录制视频 - V2EX 请教应该去学习使用什么算法或者思路,在同一时间编排考试上 - V2EX 多算法级联一定能加强安全性吗? - V2EX 算法小白手撸扫雷小游戏,有没有大佬指点一下? - V2EX 求教,路径规划的一个问题思路 - V2EX 抽卡随机算法请教 - V2EX 工程算法难题,求大神 - V2EX 各个社区的 trends 推荐,背后的算法逻辑是怎样的呀? - V2EX 请教一个算法问题,给学生分配校车乘车路线 - V2EX 应该如何制定排班表,有什么好的方案吗? - V2EX 广度遍历算法探测两个节点之间的联通性并打印路径 - V2EX 汽车沙漠抛锚,如何处理淡水? - V2EX 求个算法, 组合总和类型的, 从给定数组中取数, 要求取出来的数字总和在某个范围内 - V2EX 抽奖、老虎机、随机数、Fortuna、搞钱! - V2EX 请问这个场景可以归结为哪种算法? - V2EX 求助估算队列剩余处理时间的问题 - V2EX 人类目前算法领域最高的结晶,是什么? - V2EX nvida jetson 替代品 - V2EX 有没有大佬帮我解答一个关于比赛分组的算法问题? - V2EX 对转账做排序保证账户永远都是非负的 - V2EX 关于一道面试遇到的算法题 - V2EX 求教,这个逻辑应该怎么写 - V2EX [请教] 生活中的算法题:密码尝试次数 - V2EX 求一个动态规划算法 - V2EX HashMap ❤️ Heap - V2EX 一个简单但是我不会的算法题 - V2EX
请教算法大佬们一个使用遗传算法排课的问题 - V2EX
ga9 · 2024-06-20 · via 算法

大佬们, 来请教这个使用遗传算法排课的问题了, 说起来有点绕:

举个例子:
教学任务:
1 年级 1 班,一周有 3 节语文课, 4 节数学课
1 年级 2 班,一周有 3 节语文课, 4 节数学课

教师:
王老师: 教授 1 年级 1 班和 1 年级 2 班语文
李老师: 教授 1 年级 1 班和 1 年级 2 班数学

时间段:
每周 5 天,每天 8 节课, 一周就是 40 个时间段, 用数组表示:[1,2,3....40]

现在的数据结构是:
基因: 科目+班级+教师+时间段
时间段: 例如每周 5 天,每天 8 节课, 一周就是 40 个时间段
染色体: 相同科目,相同班级组成的多个基因数组
个体: 染色体构成的数组

对应的个体,染色体,基因结构举例:
基因:
基因 1: 语文(科目)+1 年级 1 班(班级)+王老师(教师)+1(时间段, 1 是举例, 可以是 1...40 中的任意一个数字)
基因 2: ...
染色体:
染色体 1:
基因 1: 语文(科目)+1 年级 1 班(班级)+王老师(教师)+1(时间段)
基因 2: 语文(科目)+1 年级 1 班(班级)+王老师(教师)+2(时间段)
基因 3: 语文(科目)+1 年级 1 班(班级)+王老师(教师)+3(时间段)
染色体 2:
基因 1: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+4(时间段)
基因 2: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+5(时间段)
基因 3: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+6(时间段)
基因 4: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+7(时间段)

个体:
染色体 1:
基因 1: 语文(科目)+1 年级 1 班(班级)+王老师(教师)+1(时间段)
基因 2: 语文(科目)+1 年级 1 班(班级)+王老师(教师)+2(时间段)
基因 3: 语文(科目)+1 年级 1 班(班级)+王老师(教师)+3(时间段)
染色体 2:
基因 1: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+4(时间段)
基因 2: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+5(时间段)
基因 3: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+6(时间段)
基因 4: 数学(科目)+1 年级 1 班(班级)+李老师(教师)+7(时间段)
染色体 3:
基因 1: 语文(科目)+1 年级 2 班(班级)+王老师(教师)+7(时间段)
基因 2: 语文(科目)+1 年级 2 班(班级)+王老师(教师)+8(时间段)
基因 3: 语文(科目)+1 年级 2 班(班级)+王老师(教师)+9(时间段)
染色体 4:
基因 1: 数学(科目)+1 年级 2 班(班级)+李老师(教师)+10(时间段)
基因 2: 数学(科目)+1 年级 2 班(班级)+李老师(教师)+11(时间段)
基因 3: 数学(科目)+1 年级 2 班(班级)+李老师(教师)+12(时间段)
基因 4: 数学(科目)+1 年级 2 班(班级)+李老师(教师)+13(时间段)

现在的问题是:

现在两个个体交叉操作时,是在种群中随机找到两个父代个体中的一个染色体索引位置,然后做交叉,生成两个子代
但是交叉后,会出现时间段冲突(会有相同的时间段): 个体内部的同一个班级内,出现了相同的时间段, 个体内部的同一个教师内,,出现了相同的时间段,这就不对了
因为同一个班级,在同一个时间段,没法上两节不同的课, 同一个教师,在同一个时间段,也没法上两节课

我现在的做法,是通过一个修复函数来处理这种冲突, 思路是:

交叉操作后, 将班级内冲突时间段, 都整理到一起, 将班级内还可以使用的时间段,也整理到一起
然后将教师的冲突时间段, 也整理到一起, 将教师还可以使用的时间段,也整理到一起
然后将班级冲突时间段,和教室冲突时间段, 通过班级可用时间段和教师时间段来替换

如果将班级冲突时间段,和教室冲突时间段,都能使用班级可用时间段和教师时间段替换调,则表示修复成功,反正就是无法修复

现在是会出现, 无法修复的情况,如果无法修复,那么就需要撤销此次交叉操作

实际情况是, 能实际修复的交叉操作很少,导致迭代很多代后,最优的个体,还是第 1 代的, 这就不对了。

请问该如何处理更好一些?

---------------------------------------------

上面的例子,为了表达,我做了一些简化,实际情况,会比这个更复杂一下,例如下面是我正在解决的排课问题:

九年级,14 个班,周一至周五,上午 4 节课,下午 4 节课,周一下午第 4 节统一班会课

每个班:语文 7 节(两次两节课的连堂,排在周二和周四),数学 7 节(一次两节课的连堂,排在周三),英语 6 节(两次两节课的连堂,排在周三和周五,周二正课没有英语),物理 5 节(一次两节课的连堂),化学 5 节(一次两节课的连堂),道法 4 节(一次两节课的连堂),历史 4 节(一次两节课的连堂),物理化学每天至少 1 节课,包括晚自习

任课方案:
语文 1:1-2 班 语文 2:3-4 班 语文 3:5-6 班 语文 4:7-8 班 语文 5:9-10 班 语文 6:11-12 班 语文 7:13-14 班
数学 1:1-2 班 数学 2:3-4 班 数学 3:5-6 班 数学 4:7-8 班 数学 5:9 班 数学 6:10 班 数学 7:11-12 班 数学 8:13-14 班
英语 1:1-2 班 英语 2:3-4 班 英语 3:5-6 班 英语 4:7-8 班 英语 5:9-10 班 英语 6:11-12 班 英语 7:13-14 班
物理 1:1-3 班 物理 2:4-6 班 物理 3:7-9 班 物理 4:10-11 班 物理 5:12-14 班
化学 1:1-3 班 化学 2:4-5 班 化学 3:6-8 班 化学 4:9-11 班 化学 5:12-14 班
道法 1:1-4 班 道法 2:5-8 班 道法 3:9-10 班 道法 4:11-14 班
历史 1:1-4 班 历史 2:5-9 班 历史 3:10-14 班

---------------------------------------------

这个里面有个连堂课的概念,连堂课就是两节课一起上。

对应的上面的基因的结构是:
基因: 数学(科目)+1 年级 2 班(班级)+李老师(教师)+1_3(两个时间段,1,3 是举例)

非常感谢 :)