标签: simulation

什么是加速蒙特卡罗模拟的最佳技巧?

每当我在S-Plus中进行大规模的蒙特卡罗模拟时,我总是在等待它完成时留下胡须.

在R中运行蒙特卡罗模拟的最佳技巧是什么?以分布式方式运行流程的任何好例子?

simulation r distributed-computing montecarlo

5
推荐指数
2
解决办法
4913
查看次数

实现一维碰撞检测的最佳方法是什么?

我正在编写一个模拟软件,需要一种有效的方法来测试沿线的碰撞.

模拟的是火车穿越轨道上的几个开关.当车轮在开关N英寸范围内时,开关打开,然后在车轮离开时关闭.由于所有车轮尺寸相同,并且所有开关尺寸相同,我可以将它们表示为沿轨道的单个坐标X. 一旦设定,开关距离和车轮距离就不会相互改变.

当通过将X坐标放入列表并遍历它们时通过蛮力完成这是一个相当微不足道的问题,但我需要一种有效的方法,因为它需要非常准确,即使列车高速移动.有大量关于2D碰撞检测的教程,但我不确定这种独特的1D场景的最佳方法.


显然,我的数据看起来有些混乱.

我正在模拟一个站点,而不是整个区域.火车可以是任何长度的,有不同类型的汽车,但只有一列火车.我的列车数据是表格{48,96,508,556,626,674,...},表示从火车前部(0)到车轴中心的距离.

(列车数据更有可能以有序的 物体列表的形式出现在我的身上Car ,每个物体都有一个长度和一个整数列表,表示距离汽车前部的车轴距离,但它们都聚合成一个列表,因为所有车轴对我来说都是一样的.)

我的开关都在几百英尺内,通常完全由火车覆盖.开关可以在几百英尺到几英寸之间的任何间隔,并且与火车的形式相同:{0,8,512,520,...},表示距离站点的开头到交换机的中心.

最后,我知道车轮启动开关的距离,以英寸为单位.

例如,使用上述样本数据和8英寸的激活距离,当列车到达X = 40时,X = 0处的第一个开关将激活,这意味着火车距离现场40英寸.当火车到达X = 48时,X = 8的开关也被激活.在X = 56时,第一个开关熄灭,而在X = 64时,第二个开关也熄灭.不同的轴在穿过现场时打开和关闭不同的开关.

火车通常以低于10英里/小时的速度运行,但可以更高.(现在我们的模拟时速仅为30英里/小时,但更高会更好.)

.net c# algorithm simulation collision-detection

5
推荐指数
2
解决办法
1294
查看次数

对Amazon Elastic MapReduce上的R映射器脚本进行故障排除 - 结果与预期不符

我正在尝试使用Amazon Elastic Map Reduce来运行数百万个案例的一系列模拟.这是一个没有reducer的Rscript流媒体作业.我在EMR调用中使用Identity Reducer --reducer org.apache.hadoop.mapred.lib.IdentityReducer.

当手动传递一行字符串时,脚本文件在测试并在Linux机器上的命令行本地运行时工作正常echo "1,2443,2442,1,5" | ./mapper.R,我得到了我期望的一行结果.然而,当我使用EMR上的输入文件中的大约10,000个案例(行)测试我的模拟时,我只得到10个输入行中的十几行输出.我已经尝试了几次,但我无法弄清楚原因.Hadoop作业运行正常,没有任何错误.看起来输入行似乎被跳过,或者可能是Identity Reducer发生了什么.对于有输出的情况,结果是正确的.

我的输入文件是一个具有以下数据格式的csv,一系列由逗号分隔的五个整数:

1,2443,2442,1,5
2,2743,4712,99,8
3,2443,861,282,3177
etc...
Run Code Online (Sandbox Code Playgroud)

这是mapper.R的 R脚本

#! /usr/bin/env Rscript

# Define Functions
trimWhiteSpace <- function(line) gsub("(^ +)|( +$)", "", line)
splitIntoWords <- function(line) unlist(strsplit(line, "[[:space:]]+"))
# function to read in the relevant data from needed data files
get.data <- function(casename) {
    list <- lapply(casename, function(x) {
        read.csv(file = paste("./inputdata/",x, ".csv", sep = ""),
                 header = TRUE,
        stringsAsFactors = FALSE)})
    return(data.frame(list))
} …
Run Code Online (Sandbox Code Playgroud)

simulation hadoop r amazon-emr

5
推荐指数
1
解决办法
1239
查看次数

用于优化模拟决策的最佳算法

我正在寻找最佳算法来优化同时进行的决策,以便在合理的时间内找到快速结果.同意做了许多"滴答",偶尔需要做出决定.最终达到目标状态.(如果做出非常糟糕的决定,就有可能永远不会达到目标状态)

有很多目标国家.我想找到具有最少蜱数的目标状态(蜱在现实生活中大致相当于一秒."我基本上想要决定在尽可能短的几秒内做出哪些决定来达到目标​​,

关于问题域的一些观点:

  • 直接蝙蝠我可以产生一系列选择,这将导致一个解决方案.它不会是最佳的.
  • 我有一个合理的启发式函数来确定什么是一个好的决定
  • 我有一个合理的功能来确定从节点到目标的最小可能时间成本.

算法:

  • 我需要处理这个问题大约10秒钟,然后给出最好的答案.
  • 我相信A*会找到我最理想的解决方案.问题是决策树会很大,以至于我无法快速计算出来.
  • IDA*会在10秒钟内给我一个很好的前几个选择,但我需要一条路径到目标.

目前我认为我将从目标的已知非最佳路径开始,然后可能使用模拟退火并尝试在10秒内改进它.

试图解决这类问题的研究算法是什么?

algorithm simulation optimization artificial-intelligence decision-tree

5
推荐指数
1
解决办法
960
查看次数

存储大量模拟配置,运行值和最终结果的首选(或推荐)方法

我正在使用一些网络模拟器.在对它进行一些扩展之后,我需要进行大量不同的模拟和测试.我需要记录:

  • 模拟场景配置
  • 每个时间单位t的每个设备的一些参数(例如缓冲区大小,信号质量,位置)的值
  • 从这些记录值计算的最终结果

执行模拟后需要第二个数据来执行一些可视化(简单动画,随时间显示一些统计数据).

我正在使用Python与matplotlib等进行后处理数据和编写适当的应用程序(现在考虑pyQt或Django,但这不是问题的主题).现在我想知道存储这些数据的最佳方法是什么?

我的第一个猜测是使用XML文件,但它可能是XML语法的过多开销(我的意思是,文件可以增长到非常大的大小,特别是对于数据类型的第二部分).所以我试图设计一个数据库......但在我看来这也不是正确的方法......也许是两者的混合?

我试图在谷歌找到一些线索,但没有发现什么特别的.您是否曾需要存储此类数据?你是怎么做到的?那有什么"设计模式"吗?

python database simulation design-patterns

5
推荐指数
1
解决办法
2170
查看次数

用于高度图的离散流体"填充"算法

我正在寻找一种算法来描述流体在高度图表面上的瞬态行为.我在t = 0时的起始条件是:

  • 尺寸为[x,y]的高度值(H)的二维矩阵
  • 尺寸为[x,y]的流体高度值(F)的二维矩阵
  • 矩阵(a)中每个点的面积的度量,即每个位置是1平方厘米
  • 流体的粘度值(u)

我想要的是一种算法,可以在t'= t + 1处计算流体高度矩阵F的新值.在任何时候,我都可以通过v = a*(F(x,y) - H(x,y))来计算给定点处的流体体积.该算法的理想属性是:

  • 它不需要考虑每个点处流体柱顶部或底部的"斜率"或"形状".也就是说,它可以将hieghtmap中的每个值视为描述一定高度的扁平方形,并且流体高度的每个值映射为具有平顶的水的矩形柱
  • 如果遇到"排水"(即高度图中的一个非常低的点),来自地图所有部分的流体可能会受到影响,因为它被拉向它.

我正在寻找的一个简单例子是:

  • 5x5高度的地图矩阵,其中所有值均为0
  • 一个5x5流体高度映射矩阵,其中所有值均为0,除了[2,2],即10.
  • 每点面积1平方公尺
  • 粘度为u

该算法将描述在几个时间步长上在5×5矩阵上展开的流体"列".最终算法将在所有位置以10/25的均匀高度稳定下来,但我真的对它们之间发生的事情感兴趣.

我试图搜索这种算法,但我能找到的只是描述流体中颗粒行为的方程式,这对于我的目的而言太过细化.有谁知道我可以参考这个问题的任何好的来源,或者可能满足我需要的现有算法.

algorithm simulation fluid-dynamics

5
推荐指数
1
解决办法
1736
查看次数

用于仿真的VHDL替代子模块架构

我有一个VHDL组件,它实现了DRAM测试序列.它包含一个子实体,它是DRAM控制器.

我想模拟(调试)DRAM测试序列,但是为DRAM控制器使用一个简单的假存根而不是真正复杂的东西.

有没有办法我可以设置它,也许使用VHDL配置来使用简单版本的控制器实体进行模拟?我对模拟很陌生,对VHDL一般没有太大的经验.

这是使用针对Spartan-6的Xilinx ISE和ISim,如果这有所不同的话.

simulation fpga vhdl

5
推荐指数
1
解决办法
2676
查看次数

建模与模拟

我从以下论文中读到了仿真定义:MARTE:RT/E系统建模,分析和仿真的概况?

字典将模拟定义为(忠实地)模仿某事物的外观或特征的行为.从这个意义上说,模拟与建模紧密相关,其准确性是通过与底层模型语义的距离来衡量的

您能否根据上述定义澄清建模和仿真之间的差异?

simulation uml modeling

5
推荐指数
2
解决办法
309
查看次数

C#中的N体仿真

我正在尝试使用Runge Kutta 4或Velocity Verlet集成算法在C#中实现N体模拟.

在我移动到更大数量的粒子之前,我想通过模拟围绕太阳的地球轨道来测试模拟,然而,由于某种原因,我得到了一个奇怪的螺旋而不是椭圆轨道.

我无法弄清楚这个问题,因为我使用相同的算法对太阳系进行了简单的模拟,其中太阳被固定在适当的位置并且一切都运行良好.积分器工作得很好,因为我使用哪一个并不重要,我得到两者的螺旋.

任何帮助,将不胜感激.

这是代码:

class NBODY
{
    public static double G = 4 * Math.PI * Math.PI;

    class Particle
    {
        public double[] r;       // position vector
        public double[] v;       // velocity vector
        public double mass;    

        //constructor
        public Particle() {}
        public Particle(double x, double y, double z, double vx, double vy, double vz, double m)
        {
            this.r = new double[3];
            this.v = new double[3];

            this.r[0] = x;
            this.r[1] = y;
            this.r[2] = z;
            this.v[0] = vx;
            this.v[1] …
Run Code Online (Sandbox Code Playgroud)

c# algorithm simulation physics numerical-methods

5
推荐指数
1
解决办法
1235
查看次数

如何在实践中实施蒙特卡洛树搜索

我在一定程度上理解算法的工作原理.我不完全理解的是算法是如何在实践中实际实现的.

我有兴趣了解一个相当复杂的游戏(也许是象棋)的最佳方法.即递归方法?异步?同时?平行?分散式?数据结构和/或数据库?

- 我们期望在一台机器上看到什么类型的限制?(我们可以同时在多个核心上运行......也许是gpu?)

- 如果每个分支都会产生一个全新的游戏,(这可能达到数百万)我们如何保持整个系统的稳定?我们如何重用已经播放的分支?

algorithm simulation artificial-intelligence montecarlo monte-carlo-tree-search

5
推荐指数
1
解决办法
391
查看次数