def read(path): # 打开文件 with open(os.path.join(os.getcwd(), path), "r") as data: # 第一行读取3个参数:全部作业数a,CNC机器数b,每个机器的同时进行操作容量c total_jobs, total_machines, max_operations = re.findall( '\S+', data.readline()) # 转为数字 number_total_jobs, number_total_machines, number_max_operations = int(total_jobs), int(total_machines), int(float( max_operations)) # 生成机器数ID 和 最大操作数 machines_list = [] # 机器表 machines_install_uninstall_time_cost_list = [] # 机器上下料时间表 # 第二行读取b个参数,RGV在对应顺序(b个)CNC机器一次上下料所需之单位时间 machines_install_uninstall_time_cost_list = re.findall( '\S+', data.readline()) # 第三行读取4个参数:RGV清洗作业时间,移动1个单位,2个单位,3个单位CNC机器间隔距离所需之时间 RGV_clean_time, RGV_movement_1_time, RGV_movement_2_time, RGV_movement_3_time = re.findall( '\S+', data.readline()) # 第四行读取2个参数: 故障率, 故障恢复时间(单位时间) CNC_break_down_rate, CNC_recovery_time_cost = re.findall( '\S+', data.readline()) # 字符串数字化 RGV_clean_time = int(RGV_clean_time) RGV_movement_1_time = int(RGV_movement_1_time) RGV_movement_2_time = int(RGV_movement_2_time) RGV_movement_3_time = int(RGV_movement_3_time) CNC_break_down_rate = float(CNC_break_down_rate) CNC_recovery_time_cost = int(CNC_recovery_time_cost) # 配置RGV车走动时间 RGV_config = RGVSystemConfig( RGV_movement_1_time, RGV_movement_2_time, RGV_movement_3_time, RGV_clean_time) for id_machine in range(1, number_total_machines + 1): machines_list.append( Machine( id_machine, number_max_operations, int( machines_install_uninstall_time_cost_list[id_machine-1]), CNC_break_down_rate, # 机器故障率 CNC_recovery_time_cost # 机器故障时间 ) ) # 初始工件ID id_job = 1 jobs_list = [] for key, line in enumerate(data): if key >= number_total_jobs: break # 按空格分隔字符串 parsed_line = re.findall('\S+', line) # 新建当前工件 job = Job(id_job) # 当前作业活动 id_activity = 1 # 当前读取行从 第一行开始 按行解析 i = 1 import random while i < len(parsed_line): # 总待加工工件即等于剩余行数k number_operations = int(parsed_line[i]) # 新建一道作业活动 activity = Activity(job, id_activity) for id_operation in range(1, number_operations + 1): # 插入操作到作业活动 machine_id_for_current_operation = int( parsed_line[i + 2 * id_operation - 1]) activity.add_operation( Operation( id_operation, # 顺序生成操作ID machine_id_for_current_operation, # 对应操作可选CNC机器ID int(parsed_line[i + 2 * id_operation]) # 初始化操作耗时 = 输入原耗时 ) ) # 随机插入故障占位 if random.random() < CNC_break_down_rate: # 随机指定故障CNC机器 activity.add_operation( Operation( -1, random.randint(1, number_total_machines), random.randint(10*60, 20*60) # 随机指定故障恢复时间 10-20分钟 ) ) job.add_activity(activity) i += 1 + 2 * number_operations id_activity += 1 jobs_list.append(job) id_job += 1 return jobs_list, machines_list, number_max_operations, RGV_config