用python实现柔性作业车间调度基础数据(如Brandimarte_DATA、DAUZERE_DATA、Hurink_DDATA)的准换,转换为标准可用算例

该博客介绍了一个Python函数,用于读取并处理FJSP(Flow Shop Scheduling Problem)的算例数据。函数从指定路径的文本文件中提取数据,构造FJSP问题实例,并对数据进行预处理。提供的算例数据包含工件数、机器数和每道工序的机器选择信息。处理后的数据可用于后续的调度算法求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FJSP算例获取可点击此处:包括以上所有数据集

算例形式如下:

算例说明:

第一行至少两个数字:第一个数字表示工件数、第二个数字表示机器数、第三个数字表示每道工序平均可有几台机器加工

接下来每一行表示一个工件的各工序可用机器情况

。。。。

转换的代码:(用的时候记得换成自己的路径)

import os
import sys
import numpy as np
import random

#需要解决的问题
#传入的path为当前文档所在路径之后的拼接路径
def Get_Problem(path):
    if os.path.exists(path):
        #提取txt文件中的数据
        with open(path,'r') as data:
            List=data.readlines()
            # print(List)
            P=[]
            for line in List:
                list_ = []
                for j in range(len(line)):
                    try:
                        if line[j].isdigit() and line[j + 1].isdigit():
                            list_.append(int(line[j]) * 10 + int(line[j + 1]))
                            k = line[j]
                        if line[j - 1].isdigit() and line[j].isdigit() and j != 0:
                            pass

                        elif line[j].isdigit() :
                            if line[j +1].isspace() and j+1<len(line):
                                list_.append(int(line[j]))
                    except Exception as e:
                        print('可能出错,记得检查',e)
                        pass
                P.append(list_)
            for k in P:
                    if k==[]:
                        P.remove(k)
            #将提取到的数据转化为具体的FJSP问题
            J_number=P[0][0]   #工件数
            M_number=P[0][1]   #机器数

            Problem=[]
            for J_num in range(1,len(P)):
                O_num=P[J_num][0] #工件的工序数
                for Oij in range(O_num):
                    O_j = []
                    next=1
                    while next<len(P[J_num]):
                        M_Oj=[0 for Oji in range(M_number) ]
                        M_able = P[J_num][next]  # 加工第一道工序的可选机器数
                        able_set=P[J_num][next+1:next+1+M_able*2]
                        next=next+1+M_able*2
                        for i_able in range(0,len(able_set),2):
                            M_Oj[able_set[i_able]-1]=able_set[i_able+1]
                        O_j.append(M_Oj)
                Problem.append(O_j)
            for i_1 in range(len(Problem)):
                for j_1 in range(len(Problem[i_1])):
                    for k_1 in range(len(Problem[i_1][j_1])):
                        if Problem[i_1][j_1][k_1]==0:
                            Problem[i_1][j_1][k_1]=9999
            # Max_len = []
            # for i_p in range(len(Problem)):
            #     Max_len.append(len(Problem[i_p]))
            # Max_Operation_len=max(Max_len)
            # for i_l in range(len(Problem)):
            #     if len(Problem[i_l])<Max_Operation_len:
            #         M_ky=[0 for Oji in range(M_number)]
            #         Problem_fake=Problem[i_l]
            #         Problem_fake.append(M_ky)
            #         Problem[i_l]=Problem_fake
            # Problem=np.array(Problem)
            # print(Problem)
    else:
        print('路径有问题')
    return Problem ,J_number,M_number


Processing_time,J_num,M_num=Get_Problem(r'C:\User\PycharmProjects\GA_FJSP\.idea\Dataset\Brandimarte_Data\FJS\Mk01.fjs')

结果:

<think>好的,我现在需要处理用户关于Python实现柔性作业车间调度问题(FJSP)的查询。首先,我得确认用户的具体需求是什么。FJSP是一个在运筹学和计机科学中的经典优化问题,用户可能是在寻找现有的开源项目或实现,特别是用Python写的。 用户提到了几个引用,比如引用[1]、[2]、[3]、[4],这些应该都是相关的资源。需要先仔细查看这些引用内容。引用[1]和[2]提到了Guillaume Bour的GitHub仓库,项目地址是https://gitcode.com/gh_mirrors/fl/flexible-job-shop,这似乎是一个遗传法的实现。引用[3]详细说明了该项目是解决FJSP的,支持任务在不同机器上执行。引用[4]提到了复现案数据集的位置,但用户可能需要的是代码实现而不是数据集。 用户明确想要Python相关的解决方案,所以需要重点推荐已有的Python项目。Guillaume Bour的仓库应该是一个主要的推荐对象,因为直接提到了Python实现。此外,是否有其他类似的开源项目也需要考虑,比如是否有基于其他法(如模拟退火、粒子群)的实现,但根据引用内容,目前只提到了遗传法。 接下来需要组织回答结构,按照用户的要求,分步骤说明推荐项目、法、数据集和复现建议。同时,生成相关问题,比如优化方法、法比较、数据集来源等。需要注意的是,用户可能对如何开始使用这些项目、如何调整参数或者如何处理自己的数据有疑问,所以相关问题需要涵盖这些方面。 在回答中,必须正确引用提供的参考文献,比如在提到Guillaume Bour的项目时添加[^3],数据集部分引用[^4]。同时,确保所有数学公式使用正确的LaTeX格式,如在解释FJSP目标时使用$...$,如果有独立公式则使用$$...$$。不过当前问题可能不涉及复杂数学公式,但需要注意用户提到的系统级指令。 最后,检查是否有遗漏点,比如是否还有其他Python库或框架可以用于FJSP,但根据提供的引用,主要资源是提到的GitHub项目。因此,回答应围绕这些引用展开,提供明确的步骤和相关资源链接,确保用户能够顺利找到所需的实现方案。</think>### Python柔性作业车间调度(FJSP)实现方案 #### 1. 推荐开源项目 Guillaume Bour的**flexible-job-shop**项目是Python实现FJSP的典型方案,基于遗传法解决多机器任务调度问题。其特点包括: - 支持任务在相同功能组的机器间灵活分配 - 提供基数据集(如Brandimarte_DATADAUZERE_DATA等) - 可扩展的适应度函数和交叉变异操作 项目地址: ```bash https://gitcode.com/gh_mirrors/fl/flexible-job-shop ``` #### 2. 实现要点 核心代码结构示: ```python # 遗传法主循环 for generation in range(max_generations): # 选择 selected = selection(population, fitnesses) # 交叉 offspring = crossover(selected) # 变异 mutated_offspring = mutation(offspring) # 评估 population = update_population(mutated_offspring) ``` 目标函数通常最小化最大完工时间:$C_{max} = \max(C_i)$,其中$C_i$表示作业$i$的完成时间[^3] #### 3. 数据集使用 推荐数据集目录结构: ``` ├── Brandimarte_DATA │ ├── MK01.fjs │ ├── MK02.fjs └── Hurink_DDATA ├── la01.fjs ``` 数据集文件包含机器数量、工序约束等信息 #### 4. 复现建议步骤 1. 克隆仓库并安装依赖:`pip install deap numpy` 2. 加载数据集:`problem = FJSP.load_instance('data/MK01.fjs')` 3. 调整参数: ```python config = { 'population_size': 100, 'cx_prob': 0.8, 'mut_prob': 0.2 } ``` 4. 可视化甘特图输出
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码丽莲梦露

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值