113 lines
3.7 KiB
Python
113 lines
3.7 KiB
Python
# 数据结构定义:存储订单、企业、供应商数据及算法配置
|
||
|
||
|
||
class OrderData:
|
||
"""订单数据类:存储物料需求、交货期、成本等信息"""
|
||
|
||
def __init__(self):
|
||
self.I = 5 # 物料种类数
|
||
self.Q = [250, 300, 200, 350, 280] # 各物料的需求数量
|
||
self.Dd = 12 # 需求交货期(单位:时间)
|
||
self.P0 = [50, 80, 60, 70, 90] # 风险企业的单位采购价
|
||
self.T0 = [5, 8, 6, 7, 9] # 风险企业的单位运输成本
|
||
self.transport_speed = 10 # 运输速度(单位:距离/时间)
|
||
|
||
|
||
class RiskEnterpriseData:
|
||
"""风险企业数据类:存储风险企业的产能、距离等信息"""
|
||
|
||
def __init__(self):
|
||
self.I = 5 # 物料种类数(与订单一致)
|
||
self.C0_i_std = [40, 50, 35, 45, 48] # 单物料的单位时间标准产能
|
||
self.C0_total_max = 100 # 总产能上限(单位时间)
|
||
self.distance = 10 # 与需求点的距离
|
||
|
||
|
||
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, 18, 15, 22, 25],
|
||
[25, 0, 30, 0, 28],
|
||
[0, 22, 0, 35, 0],
|
||
[0, 0, 20, 30, 22]
|
||
]
|
||
|
||
# 供应商单位时间的最大总产能(supplier_count)
|
||
self.Cj_total_max = [120, 110, 100, 95]
|
||
|
||
# 最小起订量(supplier_count × I)
|
||
self.MinOrder = [
|
||
[20, 20, 15, 25, 20],
|
||
[30, 0, 25, 0, 30],
|
||
[0, 25, 0, 30, 0],
|
||
[0, 0, 20, 35, 25]
|
||
]
|
||
|
||
# 最大供应量(supplier_count × I)
|
||
self.MaxOrder = [
|
||
[100, 150, 80, 120, 130],
|
||
[120, 0, 100, 0, 110],
|
||
[0, 140, 0, 150, 0],
|
||
[0, 0, 90, 130, 100]
|
||
]
|
||
|
||
# 单位采购价格(supplier_count × I)
|
||
self.P_ij = [
|
||
[60, 85, 70, 80, 100],
|
||
[65, 0, 75, 0, 105],
|
||
[0, 90, 0, 85, 0],
|
||
[0, 0, 78, 88, 98]
|
||
]
|
||
|
||
# 单位运输成本(supplier_count × I)
|
||
self.T_ij = [
|
||
[7, 9, 8, 10, 12],
|
||
[6, 0, 9, 0, 11],
|
||
[0, 10, 0, 12, 0],
|
||
[0, 0, 10, 13, 14]
|
||
]
|
||
|
||
# 供应商与需求点的距离(supplier_count)
|
||
self.distance = [45, 35, 60, 50]
|
||
|
||
|
||
class Config:
|
||
"""算法参数配置类:存储NSGA-II的各类参数"""
|
||
|
||
def __init__(self):
|
||
# 种群参数
|
||
self.pop_size = 300 # 种群大小
|
||
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.2 # 变异概率
|
||
self.max_generations = 800 # 最大进化代数
|
||
|
||
# 惩罚系数
|
||
self.delta = 1.3 # 变更惩罚系数
|
||
self.gamma = 500 # 提前交付惩罚系数
|
||
|
||
# 早停参数
|
||
self.early_stop_patience = 50 # 连续多少代无改进则早停
|
||
|
||
# 目标函数数量
|
||
self.objective_num = 2 # 双目标(成本+延期) |