带条件退出队列,收集以过滤目的地

Posted

技术标签:

【中文标题】带条件退出队列,收集以过滤目的地【英文标题】:Exit queue with condition, Collection to filter destinations 【发布时间】:2020-08-22 10:28:47 【问题描述】:

我在 AnyLogic 中模拟一个配送系统,在该系统中产品使用不同的车辆在世界各地运输。

一开始,产品是在众多工厂之一生产的。每个产品都有一个变量 v_destination1 (String) 用于显示下一个目的地。

代理(产品)在代理类型“工厂”中,更具体地说,在队列块中。 我想编写一个代码,调用车辆进入工厂并提取产品。 困难在于代码必须包含以下条件: - 如果至少有 10 个产品具有相同的目的地(可变),则调用该车辆 v_destination1) 在队列块中 这些产品代理应该离开队列块并进入提货块。

我有以下想法,但我不知道如何继续:

1.1 使用队列中的所有产品创建一个集合 (c_waitingTruck) 1.2 int count (c_waitingTruck, p -> p.v_destination1 ... --> 这里不知道怎么写正确的条件 1.3 if (count >= 10) 检查是否达到最少 10 个产品。

2.1 使用队列中的所有产品创建一个集合 (c_waitingTruck) 2.2 filter (c_waitingTruck, c -> c.v_destination1 ... --> 同 1.2 2.3if (filter.size() >= 10)

有人可以帮助我吗?如果有任何建议,我将非常高兴。

【问题讨论】:

【参考方案1】:

不要使用队列,使用称为等待的等待块。 在等待块的on enter中,检查金额是否满足

List <Product> products=findAll(wait,a->a.v_destination1.equals(agent.v_destination1);
if(products.size()>=10)
    //call truck, however you do that
   // then release your products into the queue that comes before the pickup block
    for(Product p : products)
        wait.free(p);
    

我没有测试这段代码,所以它可能有错误,但至少是这样的想法

【讨论】:

以上是关于带条件退出队列,收集以过滤目的地的主要内容,如果未能解决你的问题,请参考以下文章

C中具有共享队列的线程安全生产者/消费者

如何将 Laravel 队列工作限制为一个执行结束出口?

AQS源码剖析第二篇--公平与非公平,条件队列和线程中断

数据结构(背包队列和栈)

如何销毁队列中的所有代理并插入有条件的新代理?

消息队列(MQ)消息延迟及过滤设计方案