Flexible-Job-Shop-Scheduling-Problem解读
admin
2024-03-13 07:27:44
0

本次解读的代码来自:

https://github.com/samy-barrech/Flexible-Job-Shop-Scheduling-Problem/tree/master/app

关于生产排程的问题。

点评

  • 方法相对全面
  • 没有体现出工艺路线,按照线性做下去

数据

6   6   1   
6   1   3   1   1   1   3   1   2   6   1   4   7   1   6   3   1   5   6   
6   1   2   8   1   3   5   1   5   10  1   6   10  1   1   10  1   4   4   
6   1   3   5   1   4   4   1   6   8   1   1   9   1   2   1   1   5   7   
6   1   2   5   1   1   5   1   3   5   1   4   3   1   5   8   1   6   9   
6   1   3   9   1   2   3   1   5   5   1   6   4   1   1   3   1   4   1   
6   1   2   3   1   4   3   1   6   9   1   1   10  1   5   4   1   3   1   

第一行:代表6个job,6个机器,每个工序平均需要1台机器
之后的6行代表其中的6job,第二行是第一个job,需要6个工序来完成,第一个工序可以1台机器完成,机器3,需要1个单位时间。

OOD

  • job
    • 待完成activity
    • 已完成activity
  • activity
    • 属于的job
    • 待完成operation
    • 已完成operation
  • operation
    • operation用那个机器
    • 花的时间
  • machine
    • operation
    • 增加operation, 最大operation
    • 处理的operation

规则

1 parse => jobs_list, machines_list

2 heuristic = Heuristic().select

3 Scheduler(machine_list, jobs_list)

4 Scheduler.run(heuristic)

def run(self, heuristic, verbose=True):# Disable print if verbose is Falseif not verbose:sys.stdout = Nonecurrent_step = 0while len(self.__jobs_to_be_done) > 0:  # 只要有未完成工作current_step += 1best_candidates = heuristic(self.__jobs_to_be_done, self.__max_operations, current_step)  # 不同规则返回最佳candidatefor id_machine, candidates in best_candidates.items():  # 最佳候选里,是关于多个机器,其能承受最大工序的machine = self.__machines[id_machine - 1]  # id转化为对象for activity, operation in candidates:if not (machine.is_working_at_max_capacity() or activity.is_pending):  # 符合条件的分配给机器machine.add_operation(activity, operation)for machine in self.__machines:  # 机器时间开始流动machine.work()for job in self.__jobs_to_be_done:  # 检查更新job是否完整状态if job.is_done:self.__jobs_to_be_done = list(filter(lambda element: element.id_job != job.id_job, self.__jobs_to_be_done))self.__jobs_done.append(job)print(colored("[SCHEDULER]", "green"), "Done in " + str(current_step) + " units of time")# Reenable stdoutif not verbose:sys.stdout = self.__original_stdoutreturn current_step
class Heuristics:# When a choice between multiple operations is available, always pick the first one@staticmethoddef select_first_operation(jobs_to_be_done, max_operations, _):best_candidates = {}for job in jobs_to_be_done:  # 从待完成的job里找到best_candidatecurrent_activity = job.current_activity  # 向下选择activity/ operation,由于activity要按顺序完成,选择每个job当前best_operation = current_activity.shortest_operation  # 当前里最短的工序if best_candidates.get(best_operation.id_machine) is None:  # 如果最佳候选里暂时没有这台机器的安排best_candidates.update({best_operation.id_machine: [(current_activity, best_operation)]})elif len(best_candidates.get(best_operation.id_machine)) < max_operations:  # 如果最佳候选还能继续安排工作,加上去best_candidates.get(best_operation.id_machine).append((current_activity, best_operation))else:  # 机器已经满载了,那么就从里面选list_operations = best_candidates.get(best_operation.id_machine)  for key, (_, operation) in enumerate(list_operations):if operation.duration < best_operation.duration:  # 原本候选集里比最新这个时间更短的,pop一个出去list_operations.pop(key)breakif len(list_operations) < max_operations:  # 如果有pop,就把最新的加上去。否则其实还是原本的候选list_operations.append((current_activity, best_operation))return best_candidates

时间流动

亲测

相关内容

热门资讯

中国银行招标结果:中国银行北京... 证券之星消息,根据天眼查APP-财产线索数据整理,中国银行股份有限公司5月24日发布《中国银行北京庄...
原创 A... "上下同欲者胜。"——《孙子兵法》 “厂家那边又逼我压两百万的货,可库存早都冒了。” 凌晨两点...
原创 “... 全款买房”和贷款30年,差别到底有多大?曹德旺一句话点醒了很多人 前阵子,一个朋友把看了半年的房子终...
云英谷科技登陆港交所:AI终端... 5月27日,云英谷科技股份有限公司(股票简称:云英谷科技,股票代码:3310.HK)成功登陆港交所主...
京东集团与三一集团签订战略合作... 5月25日,京东集团与三一集团在北京签署战略合作协议。京东集团SEC副主席、京东集团CEO许冉与三一...
青岛的朋友看过来:黄金回收我跑... 前阵子想把家里一些旧金饰处理掉,在青岛问了几家回收黄金的地方。今天就跟大家随便聊聊我打听、上门、对比...
武汉有闲置贵重金属变现需求该怎... 不少有黄金回收需求的用户不知道该如何挑选合适的服务机构,其实只要从资质、专业度、服务能力、口碑几个维...
业绩再度下滑,石药集团一季度归... 图片来源:视觉中国 蓝鲸新闻5月27日讯(记者 屠俊)5月27日午间,石药集团(01093.HK)公...
蚂蚁CEO韩歆毅:在Agent... 【CNMO科技消息】近日,蚂蚁集团CEO韩歆毅在演讲中,系统分享了关于智能体经济和AI支付的底层思考...
Buff叠满!芯片,双重利好!... 芯片领域,传来两则大消息! 一是5月27日有媒体报道称,台积电3纳米制程下半年将涨价15%,明年或再...
“全球正面临第五次油价冲击” 日本央行行长植田和男27日在东京说,自上世纪70年代以来,全球多次经历能源价格急剧上涨,当前全球正面...
白酒股,直线拉升!600779... 【导读】白酒股终于涨了 中国基金报记者 泰勒 大家好,花有重开日,人无再少年。就在刚刚,低迷许久的“...
河北地区闲置名酒如何合规变现 闲置名酒处置的行业现状 近年来随着居民酒类收藏意识的逐步提升,不少家庭都存有不同品类的年份名酒,当...
重磅!长鑫科技科创板IPO获通... 5月27日消息,长鑫科技科创板IPO获上交所上市委会议通过。
东方基金开展“一司一省一高校”... 为深入贯彻落实新“国九条”以及《推动公募基金高质量发展行动方案》的核心要求,积极响应证监会对于金融机...
那句「都是卖猪食的」,为什么你... 你大概也笑了一下。 最近有句话在网上传疯了,说字节的副总裁回怼腾讯的“短视频像猪食”,撂了一句“都是...
2026 年小红书多账号管理工... 摘要 2026 年小红书矩阵运营成品牌获客主流,但账号风控严、消息分散、转化低效等痛点突出。本文基...
打着高知女性旗号割韭菜,“五个... 出品丨搜狐财经 作者丨柴鑫洋 编辑丨李文贤 你被“五个女博士”种草过吗? 打着高知女性旗号,却做着低...
A股董责险渗透率破32%,海南... 开栏语: 保险是经济的“减震器”,但保险条款复杂晦涩,犹如海下暗礁。 即日起,海财经·证券导报开设“...
奥尼电子:49万股限制性股票将... 5月27日,奥尼电子(301189)发布公告,2025年限制性股票激励计划第一个归属期归属结果已确定...