标签: simulation

最好的闪电生成/模拟算法?

所以我需要一些编程闪电路径生成的算法.哪一个最快,同时又逼真?

algorithm simulation

6
推荐指数
1
解决办法
4836
查看次数

在1-DOF质量弹簧系统中实现半隐式后向欧拉

我有一个简单的(质量)弹簧系统,有两个与弹簧相连的点.一个点固定在天花板上,所以我想用数值方法计算第二个点的位置.所以,基本上我得到了第二个点的位置和它的速度,并想知道这两个值在一个时间步后如何更新.

以下力量对这一点起作用:

  • 引力,由 -g * m
  • 弹簧力,由k * (l - L)k表示刚度,l为当前长度,L为初始长度
  • 阻尼力,由下式给出 -d * v

总而言之,这导致了

  • F = -g * m + k * (l - L)
  • Fd = -d * v

申请示例显式欧拉,可以推导出以下内容:

  • newPos = oldPos + dt * oldVelocity
  • newVelocity = oldVelocity + dt * (F + Fd) / m,使用F = m * a.

但是,我现在想要使用半隐式后向欧拉,但不能确切地找出从哪里派生雅可比人等.

algorithm simulation interpolation

6
推荐指数
1
解决办法
3119
查看次数

实时流体模拟技术

什么技术用于实时模拟水等流体,例如在电子游戏中?

特别是,我正在为Uni的(不幸的是相当简短的)物理项目寻找项目构思,所以越简单越好(如果在流体模拟中有任何"简单"这样的东西......)

simulation physics fluid

6
推荐指数
1
解决办法
7693
查看次数

使用Java进行LAN仿真?

我必须创建一个模拟大约50-100个节点的Java程序.我想测试一些路由算法并分析网络性能.我尝试用线程模拟节点,但是当我使用更多线程时,我的CPU利用率就像任何东西一样上升.是否有一种在Java中模拟网络的方法.如果是这样的话?

java simulation lan

6
推荐指数
1
解决办法
366
查看次数

模拟USB设备以实现自动化

我必须模拟USB设备以实现自动化和测试(在Linux中).此设备的原始驱动程序/应用程序使用"libusb"与其通信.

我在Linux和Simulation方面没有太多经验,经过一些搜索我已经明白我需要在用户空间中编写内核级驱动程序和应用程序来模拟该设备.这是正确的吗?如果是,如何做到这一点?

提前致谢.

linux simulation kernel driver libusb

6
推荐指数
1
解决办法
4686
查看次数

在 r 中模拟复合泊松过程

我正在尝试在 r 中模拟复合泊松过程。该过程由 $ \sum_{j=1}^{N_t} Y_j $ 定义,其中 $Y_n$ 是独立同分布序列独立的 $N(0,1)$ 值,$N_t$ 是参数为 $1$ 的泊松过程。我试图在 r 中模拟这个,但没有运气。我有一个算法来计算它,如下所示:模拟从 0 到 T 的 cPp:

启动:$ k = 0 $

当 $\sum_{i=1}^k T_i < T$ 时重复

设置 $k = k+1$

模拟 $T_k \sim exp(\lambda)$ (在我的例子中 $\lambda = 1$)

模拟 $Y_k \sim N(0,1)$ (这只是一个特殊情况,我希望能够将其更改为任何分布)

轨迹由 $X_t = \sum_{j=1}^{N_t} Y_j $ 给出,其中 $N(t) = su(k : \sum_{i=1}^k T_i \leq t )$

有人可以帮我在 r 中模拟这个,以便我可以绘制该过程吗?我已经尝试过,但无法完成。

simulation r

6
推荐指数
1
解决办法
6596
查看次数

网格/仓库布局上离散事件模拟的可视化

我需要模拟一个仓库,其中有几辆自动驾驶车辆在给定的布局上移动,并具有简单的优先级规则。根据我的理解,这个问题可以通过离散事件模拟 (DES) 轻松解决,我会使用SimPy来解决这个问题。

我看到的问题是,我似乎很难想象这些车辆的实际轨迹和相互作用。当然,我可以记录所有时期内所有车辆的所有位置,但是如何继续创建可视化呢?

最愚蠢的方法是创建一百万张图片,但必须有更好的方法。是否有任何库或工具可以通过在背景之前移动符号来可视化网格上对象的移动?

另一种选择是使用基于代理的方法和AnyLogic这样的软件,但这对我来说似乎更复杂,我想应用 DES 方法,最好使用开源软件。

simulation grid visualization simpy anylogic

6
推荐指数
2
解决办法
6102
查看次数

多处理策略 - 共享嵌套对象

我正在从事一个研究项目,并希望应用并行化来提高执行速度。我之前曾与multiprocessing图书馆合作过,但仅用于数字运算。我将尝试简要描述我的设置和目标。我主要希望来自对多处理概念更有经验的人的想法。

该项目:

该项目是一个多回声供应链模拟(一个多级分销网络),其中根据传入的需求在每个位置定期做出重新订购决策。一个玩具示例如下所示:

  Level 3               Level 2                 Level 1             Level 0

                                         --- Local Warehouse 1
                                        |
             --- Central Warehouse 1 --
            |                           |
            |                            --- Local Warehouse 2
            |
Supplier --                                                        Customer
            |                            --- Local Warehouse 3
            |                           |
             --- Central Warehouse 2 --
                                        |
                                         --- Local Warehouse 4
Run Code Online (Sandbox Code Playgroud)

模拟对象(简化)如下:

class Simulation:
  self.locations = dict() #List of locations
  self.customer = Customer() #Object periodically ordering at deepest level (Local) Warehouses
  self.levels = {0: [], 1:[],..} # Locations by depth …
Run Code Online (Sandbox Code Playgroud)

python simulation multiprocessing

6
推荐指数
1
解决办法
236
查看次数

在 C++11 中模拟类似 Arduino 的中断

我正在开发一个粗略的 Arduino 模拟器。它的主要功能应该是测试由控制结构、循环、开关和子程序组成的简单代码。

我的主要想法是自己简单地提供 Arduino 库的功能,例如像digitalWrite()or 之类的功能digitalRead(),它可以从外部应用程序(如虚拟面包板)读取和发送引脚状态。

下图显示了我目前的概念。模拟器基本上是一个线程,它执行setup()一次函数,然后开始执行loop()函数直到停止。它可以从控制(主)线程停止或暂停。

在此处输入图片说明

setup()loop()函数的实现,以及一些变量,由用户提供,不能修改或访问。

到现在为止还挺好。现在我想要模拟中断。当模拟器线程正在执行loop()函数时,外部应用程序会触发一个中断。这应该导致中断处理程序的执行isr(),它也由用户提供并且不能更改。

我有两种不同的方法来解决这个问题:

  1. 暂停模拟器线程,在不同的线程中执行中断处理程序并恢复模拟器线程。
  2. 改用信号处理程序,在发生中断时向进程发送信号。

这两种方法都有自己的问题。对于第一个,我需要以某种方式同步状态,这似乎更像是一个可怕的黑客。对于第二个选项,据我所知,我无法指定哪个线程将执行信号处理程序。

如果可能,解决方案应该与平台无关。但是,该解决方案绝对需要在Windows(MinGW甚至Cygwin)下编译和运行

c++ windows simulation arduino interrupt

6
推荐指数
1
解决办法
208
查看次数

落沙模拟中的水

奇异水物理演示

我目前正在使用 C++ 和 SDL2 开发一个非常简单的“落沙”模拟游戏,并且在让水以更逼真的方式流动方面遇到了问题。我基本上有一个单元格网格,我从下到上,从左到右迭代,如果我找到一个水单元格,我只需检查下面,从下到左,下到右,左然后右的空单元格它移动到它找到的第一个(如果两个对角线单元格或两个水平单元格都是空闲的,它会随机选择)。然后我将它移动到的单元格标记为已处理,以便在该循环的其余部分不会再次检查它。

我的问题是粒子如何移动的一种“左偏”;如果我在屏障上方生成一个正方形的水细胞,一旦粒子开始到达屏障,它们基本上都会向左移动而不移动,而右侧的细胞将以正确的方式向下运行。所以不是形成一个漂亮的三角形,均匀地流向两边,整个形状只会向左移动。每当我从左到右迭代时,这种效果就会逆转,所以我知道这与此有关,但到目前为止我一直在努力修复它。我最初认为这是我如何将单元格标记为已处理的问题,但在数小时的测试中我没有发现该系统有明显的错误。有没有人在开发这样的模拟时遇到过任何类似的挑战,或者知道一些我' 我失踪了?任何帮助将不胜感激。

编辑: 好的,所以我取得了一些进展,但是我遇到了另一个似乎与迭代无关的错误,因为现在我保存了旧单元格的副本并从中读取以决定更新,然后更新原始单元格并显示它。这已经使沙子更好地工作,但是水平检查游离细胞的水现在在水平移动时“消失”。我整个上午都在测试它,但还没有找到解决方案,我认为这可能与我复制数组的方式有关,但据我所知,它似乎有效。

新片段:

模拟.cpp

void Simulation::update()
{
    copyStates(m_cells, m_oldCells); // so now oldcells is the last new state

    for(int y = m_height - 1; y>= 0; y--)
    for(int x = 0; x < m_width; x++)
        {
            Cell* c = getOldCell(x, y); // check in the old state for possible updates
            switch(c->m_type)
            {
                case EMPTY:
                    break;
                case SAND:
                    if(c->m_visited == false) update_sand(x, y);
                    break;
                case WATER:
                    if(c->m_visited == false) update_water(x, y);
                    break;
                default:
                    break; …
Run Code Online (Sandbox Code Playgroud)

c++ simulation cellular-automata game-physics particle-system

6
推荐指数
1
解决办法
269
查看次数