如何为服务块代理的时间计算函数添加首代理仅取处理时间的逻辑?
如何为服务块代理的时间计算函数添加首代理仅取处理时间的逻辑?
看起来你已经把不同代理类型切换的时间逻辑梳理得很清晰了,现在只需要补上对第一个进入服务块的代理的判断逻辑就行——毕竟第一个代理没有前驱,完全不需要换型时间,直接返回它的纯处理时间就好。
核心思路
第一个进入服务块的代理最大的特征是没有前驱(predecessor),在大多数仿真工具里,这种情况下predecessor变量会是null或者undefined。我们只需要把这个判断放在函数最开头,优先处理这种情况,剩下的逻辑就沿用你原来写的换型+处理时间的规则就行。
修改后的完整代码示例
// 优先判断:是否是第一个进入服务块的代理(无前驱) if (predecessor == null) { // 根据当前代理类型返回对应的纯处理时间,替换成你实际的数值 if (currentAgent instanceof Oberteil) { return 10; // Oberteil的处理时间 } else if (currentAgent instanceof Unterteil) { return 12; // Unterteil的处理时间 } else if (currentAgent instanceof Halteteil) { return 8; // Halteteil的处理时间 } else if (currentAgent instanceof Ring) { return 15; // Ring的处理时间 } } // 以下是你原本的换型时间+处理时间逻辑 if (currentAgent instanceof Oberteil && predecessor instanceof Unterteil) { return 45; } else if (currentAgent instanceof Oberteil && predecessor instanceof Halteteil) { return 40; } else if (currentAgent instanceof Oberteil && predecessor instanceof Ring) { return 45; } else if (currentAgent instanceof Unterteil && predecessor instanceof Oberteil) { return 45; } else if (currentAgent instanceof Unterteil && predecessor instanceof Halteteil) { return 40; } else if (currentAgent instanceof Unterteil && predecessor instanceof Ring) { return 45; } else if (currentAgent instanceof Halteteil && predecessor instanceof Oberteil) { return 40; } else if (currentAgent instanceof Halteteil && predecessor instanceof Unterteil) { return 40; } else if (currentAgent instanceof Halteteil && predecessor instanceof Ring) { return 45; } else if (currentAgent instanceof Ring && predecessor instanceof Oberteil) { return 45; } else if (currentAgent instanceof Ring && predecessor instanceof Unterteil) { return 45; } else if (currentAgent instanceof Ring && predecessor instanceof Halteteil) { return 45; } return 2; // 默认时间,可根据需求调整
额外优化建议
如果觉得重复写instanceof判断太繁琐,可以把处理时间单独抽成一个辅助函数,让代码更整洁:
// 辅助函数:获取单个代理的纯处理时间 private double getProcessingTime(Agent agent) { if (agent instanceof Oberteil) { return 10; } else if (agent instanceof Unterteil) { return 12; } else if (agent instanceof Halteteil) { return 8; } else if (agent instanceof Ring) { return 15; } return 2; // 默认处理时间 }
然后在主函数的首代理判断分支里,直接调用这个函数:
if (predecessor == null) { return getProcessingTime(currentAgent); }
注意事项
- 请根据你使用的仿真工具,确认第一个代理的
predecessor是否确实为null:有些工具可能用其他方式标记首代理,比如通过服务块的getAgentCount()方法判断当前是第几个代理,你可以根据工具API调整判断条件。 - 记得把示例里的处理时间数值替换成你实际业务中的真实值哦。
备注:内容来源于stack exchange,提问作者Xitus
相关产品推荐
相关产品推荐

