anylogic - 如何从数据库中读取概率分布并将它们保存在集合中

标签 anylogic probability-distribution

我正在从 Arena 迁移到 AnyLogic,并且对发行版有疑问。我需要根据某些代理参数使用不同的分布。我在这里看到了建议,但是分布的数量太多了,我不想对它们进行硬编码。

How to associate a probability distribution to Agents - Anylogic

在 Arena 中,可以创建表达式数组并将它们链接到数据库(例如 excel),然后使用这些参数从表达式数组中获取分布。我尝试使用 AnyLogic 中的集合来执行相同的操作,但无法将字符串(例如“uniform(100,120)”)转换为分布。

  1. AnyLogic 中有什么方法可以将分布存储在集合中吗?
  2. AnyLogic 有没有办法从数据库中读取分布?

谢谢

最佳答案

你说的一切都是可能的..至少有4种方法可以做到:用分布创建代理,创建分布类的集合,执行你提到的字符串表达式,直接从数据库读取和计算。在这种特殊情况下,我喜欢带有类的选项,表达式 one 对您来说更简单,但我可能会在稍后写下所有其他选项:

使用执行表达式

如果您成功创建了一个包含代表您的分布的字符串的集合,您可以这样做:

executeExpression("uniform(100,200)");

或者在你的情况下有一个集合(无论你选择“i”是什么)

executeExpression(collection.get(i));

但这很丑,所以我会做复杂而酷的方式

使用数据库

第一件事显然是用您的信息创建一个数据库。我会假设,因为这似乎是你的情况,你想要有一个分布的集合,这些分布都是统一的。所以数据库看起来像这样:

database 其中 cum_probability 是要选择的分布的累积概率,最大值和最小值将代表您的均匀(最小值、最大值)分布的参数。

使用类的分布集合

现在我们将创建一个包含所有这些信息的类:

public class Distribution implements Serializable {

    public double probability;
    public double min;
    public double max;

    /**
     * Default constructor
     */
    public Distribution(double probability,double min,double max) {
        this.probability=probability;
        this.min=min;
        this.max=max;
    }

    public double getDistributionResult() {
        return uniform(this.min,this.max,new Random());

    }
}

您还将创建一个集合: collection

并且您将在启动时在 Main 中初始化您的集合

List <Tuple> theList=selectFrom(distributions).list();
for(Tuple t : theList){
    distributionsArray.add(
        new Distribution(t.get(distributions.cum_probability),
                            t.get(distributions.minimum),
                            t.get(distributions.maximum))
    );
}

好的,现在您有了一组分布。伟大的。唯一剩下的就是创建一个函数来返回随机集合分发结果:

double rand=uniform();
List <Distribution> filtered=filter(distributionsArray,d->d.probability>=rand);
return top(filtered,d->-d.probability).getDistributionResult();

关于anylogic - 如何从数据库中读取概率分布并将它们保存在集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53327356/

相关文章:

Anylogic道路交通图书馆变道错误

python - 从文档中了解 PyTorch 伯努利分布

reinforcement-learning - 理解pytorch中正态分布的log_prob

performance - 如何生成随机 "enough"的随机整数?

java - 如何在Anylogic的一个流程图中处理不同的 Material ?

matlab - 链接 AnyLogic 和 Matlab

java - Anylogic:固定种子,但如果使用行人库则不可重复运行

java - 询问队列中是否有座席(AnyLogic 模拟)

python - 如何从python中的正态概率密度函数中找到概率?