# 数据结构定义:存储订单、企业、供应商数据及算法配置 class OrderData: """订单数据类:存储物料需求、交货期、成本等信息""" def __init__(self): self.I = 5 # 物料种类数 self.Q = [250, 300, 200, 350, 280] # 各物料的需求数量 self.Dd = 12 # 需求交货期(单位:时间) self.P0 = [50.0, 80.0, 60.0, 70.0, 90.0] # 风险企业的单位采购价 self.T0 = [5.0, 8.0, 6.0, 7.0, 9.0] # 风险企业的单位运输成本 self.transport_speed = 10.0 # 运输速度(单位:距离/时间) class RiskEnterpriseData: """风险企业数据类:存储风险企业的产能、距离等信息""" def __init__(self): self.I = 5 # 物料种类数(与订单一致) self.C0_i_std = [40.0, 50.0, 35.0, 45.0, 48.0] # 单物料的单位时间标准产能 self.C0_total_max = 100.0 # 总产能上限(单位时间) self.distance = 10.0 # 与需求点的距离 class SupplierData: """供应商数据类:存储各供应商的产能、价格、距离等信息""" def __init__(self, I=5): self.I = I # 物料种类数 self.supplier_count = 4 # 供应商数量 self.names = ["S0", "S1", "S2", "S3"] # 供应商名称 # 能否生产某物料的矩阵(supplier_count × I),1=能生产,0=不能 self.can_produce = [ [1, 1, 1, 1, 1], [1, 0, 1, 0, 1], [0, 1, 0, 1, 0], [0, 0, 1, 1, 1] ] # 单物料单位时间标准产能(supplier_count × I) self.Cj_i_std = [ [20.0, 18.0, 15.0, 22.0, 25.0], [25.0, 0.0, 30.0, 0.0, 28.0], [0.0, 22.0, 0.0, 35.0, 0.0], [0.0, 0.0, 20.0, 30.0, 22.0] ] # 供应商单位时间的最大总产能(supplier_count) self.Cj_total_max = [120.0, 110.0, 100.0, 95.0] # 最小起订量(supplier_count × I) self.MinOrder = [ [20.0, 20.0, 15.0, 25.0, 20.0], [30.0, 0.0, 25.0, 0.0, 30.0], [0.0, 25.0, 0.0, 30.0, 0.0], [0.0, 0.0, 20.0, 35.0, 25.0] ] # 最大供应量(supplier_count × I) self.MaxOrder = [ [100.0, 150.0, 80.0, 120.0, 130.0], [120.0, 0.0, 100.0, 0.0, 110.0], [0.0, 140.0, 0.0, 150.0, 0.0], [0.0, 0.0, 90.0, 130.0, 100.0] ] # 单位采购价格(supplier_count × I) self.P_ij = [ [60.0, 85.0, 70.0, 80.0, 100.0], [65.0, 0.0, 75.0, 0.0, 105.0], [0.0, 90.0, 0.0, 85.0, 0.0], [0.0, 0.0, 78.0, 88.0, 98.0] ] # 单位运输成本(supplier_count × I) self.T_ij = [ [7.0, 9.0, 8.0, 10.0, 12.0], [6.0, 0.0, 9.0, 0.0, 11.0], [0.0, 10.0, 0.0, 12.0, 0.0], [0.0, 0.0, 10.0, 13.0, 14.0] ] # 供应商与需求点的距离(supplier_count) self.distance = [45.0, 35.0, 60.0, 50.0] class Config: """算法参数配置类:存储NSGA-II的各类参数""" def __init__(self): # 种群参数 self.pop_size = 50 # 种群大小 self.N1_ratio = 0.2 # 优先成本的种群比例 self.N2_ratio = 0.2 # 优先延期的种群比例 self.N3_ratio = 0.3 # 强制风险企业的种群比例 self.N4_ratio = 0.3 # 随机种群比例 # 遗传操作参数 self.crossover_prob = 0.8 # 交叉概率 self.mutation_prob = 0.3 # 变异概率 self.max_generations = 100 # 最大进化代数 # 惩罚系数 self.delta = 1.3 # 变更惩罚系数 self.gamma = 0.8 # 提前交付惩罚系数 # 早停参数 self.early_stop_patience = 50 # 连续多少代无改进则早停 # 目标函数数量 self.objective_num = 2 # 双目标(成本+延期)