运输时间矩阵设计

运输时间矩阵设计为 (num_machines + 1) × (num_machines + 1) 的原因如下:

1. 虚拟的 "0号机器" 设计目的

  • 作用:表示作业的 初始位置(如仓库、起始点),而非实际物理机器。

  • 必要性:作业首次被调度到某台机器时,需要从初始位置(虚拟的0号机器)运输到目标机器,此时需要记录从0到实际机器的运输时间。

  • 逻辑意义:将运输起点统一编码为机器编号,简化调度逻辑。

2. 矩阵结构的实际含义

假设实际机器编号为 1~N,则矩阵维度为 (N+1) × (N+1),其中:

  • 行索引 i:运输起点(0表示初始位置,1~N表示实际机器)

  • 列索引 j:运输终点(同上)

  • 值 transport_matrix[i][j]:从起点 i 到终点 j 的运输时间。

示例(3台实际机器):
0 (初始)1 (机器1)2 (机器2)3 (机器3)
00241
10035
20302
30520

3. 代码中的实际应用

在调度过程中,通过检查 last_machine 的值区分运输类型:

# 运输调度逻辑片段
last_machine = selected['last_machine']  # 作业上一次使用的机器(0表示初始位置)
transport = self.transport_matrix[last_machine][machine]

if last_machine != 0 and last_machine != machine:  # 排除初始位置和同一台机器的情况
    machines[machine - 1]['transport'].append((
        selected['current_time'], transport_end, selected['id'], last_machine
    ))
  • 当 last_machine == 0:作业从初始位置运输到第一台机器(需记录 transport_matrix[0][machine])。

  • 当 last_machine == machine:在同一台机器上加工,无需运输。

  • 当 last_machine != machine:机器间运输(需记录 transport_matrix[last_machine][machine])。

4. 若去掉 "0号机器" 的问题

如果矩阵维度为 N×N(仅包含实际机器):

  • 初始运输无法表示:无法区分作业是从初始位置还是其他机器运输而来。

  • 逻辑漏洞:首次调度时必须假设作业已位于某台机器,与实际情况矛盾。

  • 代码复杂度增加:需要额外逻辑处理初始位置,破坏统一性。

总结

通过增加一个虚拟的 0号机器

  1. 统一性:所有运输起点(包括初始位置)统一用机器编号表示。

  2. 完整性:覆盖作业从初始位置到第一台机器的运输场景。

  3. 代码简洁性:无需特殊处理初始运输逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值