AnyLogic:由费率和匹配变量定义的到达次数

问题描述 投票:0回答:2

我想通过来源块将车辆插入特定的工厂。我的工厂是基于代理类型的种群,在这里我想编写一个普遍适用的逻辑。到达率是由我要从数据库中读取的到达率(例如,每周5个)定义的。该数据库包括以下几列:开始(车辆应在其上开始的工厂的名称),每星期的depatures_per_week(费率),目的地(车辆的目的地)。

例如:

  1. 开始= city1,每星期depatures_2 =目的地,dest1
  2. 开始= city1,每星期发车数= 0.5,目的地=目标2

现在,我对一个源块有2个速率。我想将它们加起来等于一个比率,并根据车辆的变量v_destination中每周的离开量来写出目的地。因此,0.2%的目标将得到dest2,0.8%的目标将得到dest1。

如何编写代码以根据各个费率定义车辆的目的地?

谢谢!

sql database simulation querydsl anylogic
2个回答
0
投票

如果您愿意将源建模为泊松过程,则可以按照它们的组合速率生成它们,然后将它们按单个目标的比率成比例地分解为组成目标。] >

例如,city1的综合利率为λc

=(λd1d2)= 2 + 0.5 = 2.5。其中,比例λd1c = 2 / 2.5 = 0.8和λd2] /λc = 0.5 / 2.5 = 0.2 2,分别。因此,以2.5的速率生成货件,然后生成一个U,一个Uniform(0,1)随机数。如果U <= 0.8,则此装运转到dest1,否则转到dest2。

这概括了目的地的数量。如果目的地d 1,d 2

和d 3的比例为p 1,p 2和p 3,则将它们路由当U <= p 1时为d 1,当p 1 2时为d 2,否则为d 3 。换句话说,使用一系列if / else逻辑与累积比例进行比较。

首先,似乎您需要获得给定来源的每个目的地的概率。您可以使用子查询来执行此操作,该子查询可以连续加入主查询,也可以使用窗口函数。我个人认为窗口函数更加清晰,因此这里是使用窗口函数的示例

 SELECT
      start,
      destination,
      depatures_per_week / SUM(depatures_per_week) OVER (
            PARTITION BY start
            ORDER BY  destination
            ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
      ) * 100 as percentage
 FROM trains

可以使用WindowFunction在QueryDSL SQL中构造Window函数。窗口功能在JPA中不可用。


0
投票

首先,似乎您需要获得给定来源的每个目的地的概率。您可以使用子查询来执行此操作,该子查询可以连续加入主查询,也可以使用窗口函数。我个人认为窗口函数更加清晰,因此这里是使用窗口函数的示例

© www.soinside.com 2019 - 2024. All rights reserved.