当前位置: 首页 > 知识库问答 >
问题:

如何选择运行事件的随机区域?

梁丘诚
2023-03-14

我正在创建一个模型,在这个模型中我必须模拟一只耳朵。特别是它的位置在我在GIS地图上创建的多个区域内是随机的。我需要运行模型,几分钟后,模型必须生成意大利南部地震中心的随机位置,在我创建的一个区域。此外,这些地区发生地震的概率不同(例如坎帕尼亚20%、卡拉布里亚15%等)。如何改进?我也不太懂java语言,你能指导我吗?非常感谢,问候。我上传了一张Anylogic模型的照片。谢谢

共有1个答案

卜昂熙
2023-03-14

数学。random()将返回一个伪随机数,其(近似)均匀分布在0(包含)和1(排除)之间。因此,您可以使用数学。随机()

这里有一个例子,它也计算了地震发生的实际次数,以表明概率实际上是你所期望的。

public class Application {

    public static void main(String[] args) {
        var trueCounter = 0;
        var falseCounter = 0;
        var tries = 10000;
        for (int i = 0; i < tries; i++){
            var spawnEarthquake = shouldSpawnEarthquake(0.2f);
            if(spawnEarthquake) trueCounter++;
            else falseCounter++;
        }
        System.out.printf("""
                %s tries:
                %s times an earthquake was spawned (Ratio: %s)
                %s times no earthquake was spawned (Ratio: %s)
                """, tries, trueCounter, (double)trueCounter / (double) tries, falseCounter, (double)falseCounter / (double) tries);
    }
    public static boolean shouldSpawnEarthquake(float probability){
        return Math.random() < probability;
    }

}

预期结果:

10000 tries:
1987 times an earthquake was spawned (Ratio: 0.1987)
8013 times no earthquake was spawned (Ratio: 0.8013)

你的结果可能会明显不同,但应该大致相同。

您需要迭代所有区域并为每个区域应用该函数,因为地震不是互斥的。如果地震是互斥的,那么你的模型/模拟就不是很准确。没有什么能阻止两次地震“同时”发生(至少据我所知),所以你需要对所有区域计算这个概率。当然,你也可以建立一些模型,比如当附近发生地震时,地震发生的概率会降低,如果实际情况是这样的话。但这取决于你的建模,我不是地震专家。

这里有一个简单的实现,可以检查一次某个地区的地震。多次执行,以查看有时会产生地震,有时不会产生地震:

import java.util.*;

public class Application {
    
    // A record for the region
    // Each region as a name and an earthquake probability
    record Region(String name, float earthquakeProbability){};

    public static void main(String[] args) {
        var myRegions = List.of(
                new Region("Campania", 0.2f),
                new Region("Calabria", 0.15f)
        );

        myRegions.forEach(region -> {
            var spawnEarthquake = shouldSpawnEarthquake(region.earthquakeProbability);
            if(spawnEarthquake) System.out.printf("An earthquake occurred in %s\n", region.name());
        });
    }
    public static boolean shouldSpawnEarthquake(float probability){
        return Math.random() < probability;
    }
}
 类似资料:
  • 问题内容: 这是我的表结构。在这里我想随机选择4行,所以我在查询中使用RAND()mysql函数,我的问题是 如何配对到行。我的意思是,我想始终选择pid 2和3。我需要按以下顺序。 我不想打破对A2 A3 或或或等 我使用下面的查询,但对我不起作用 问题答案: turbod与他的答案很接近,他只是随机排序,当您似乎想要按pid排序时,在获得所需的随机行以及与A2和A3有关的行之后:

  • 问题内容: 我正在使用MSSQL Server2005。在我的数据库中,我有一个表“ customerNames”,其中有两列“ Id”和“ Name”以及大约。1,000个结果。 我正在创建一个功能,每次必须随机选择5个客户。谁能告诉我如何创建一个查询,该查询每次执行查询时都会随机获得5行(Id和Name)? 问题答案: 也就是说,似乎每个人都可以访问此页面,以获取对您的问题的更一般的答案: 在

  • 问题内容: 这是我在数据库中查询一些单词的方法 我正在使用mysql,我想获得符合条件的随机行,我在查询中使用rand()的顺序。 我发现这个类似的问题基本上表明,由于在理论中不支持ORDER BY RAND,因此可以将主键随机化。但是,在我的情况下无法做到这一点,因为我有一个搜索条件和一个where子句,因此并非每个主键都可以满足该条件。 我还找到了一个代码段,建议您使用OFFSET来随机化行,

  • 问题内容: 我看到了许多与此主题有关的主题,但在了解如何做到这一点上一直没有成功。 例如,如果我有此表: 并且我只想显示“一个”类中的X个随机行,我该怎么做? 注意 :这是一张大桌子,所以我不想使用。 问题答案: 如您所知,大多数人推荐的解决方案无法扩展到大型表。 我在《SQL反模式:避免数据库编程的陷阱》一书中介绍了该解决方案和其他解决方案。 如果要使用PHP进行此操作,则可以执行以下操作(未测

  • 问题 你想从一个序列中随机抽取若干元素,或者想生成几个随机数。 解决方案 random 模块有大量的函数用来产生随机数和随机选择元素。 比如,要想从一个序列中随机的抽取一个元素,可以使用 random.choice() : >>> import random >>> values = [1, 2, 3, 4, 5, 6] >>> random.choice(values) 2 >>> random

  • 问题内容: 我有下表 SQLFiddle 我试图做的是选择三个随机图像,但是要确保没有两个图像具有相同的对象,我试图做的是将GROUP BY和ORDER BY rand()一起执行,但是失败了。它总是给我cat1.jpg,dog1.jpg,box1.jpg(所有路径以1结尾而不是其他路径结尾的图像) 小提琴包括我运行的查询及其运行方式。 问题答案: 您需要的是一个随机聚合函数。通常,当前的RDBM