标签: simulation

用于评估计算机视觉算法的模拟和合成视频生成

我正在寻找一种简单的方法来生成合成视频来测试计算机视觉软件.

目前我只知道一种针对这种需求的工具: ObjectVideo虚拟视频(OVVV).它是一个HalfLife 2 mod,可以模拟虚拟世界中的相机.

但我正在寻找一个更开放的(如在开源中)和可能的便携式解决方案.一种方法是在十几个开源3D引擎之一上实现所需的功能.但是,如果有人知道已经实现像OVVV那样的库或工具,那将会很棒.

此外,如果您没有一个现成的解决方案:您将如何解决这个问题?

PS:我在这里问的原因是我想尽量减少我在这个问题上的努力.并不是我不知道该怎么做.但我的解决方案需要我投入大量时间.所以我在这里寻找具体的提示... :-)

testing simulation 3d video computer-vision

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

通过modelsim进行vhdl仿真的VCD转储.如何?

这是我第一次尝试制作VCD而且我遇到了一些麻烦.

我有一个名为bench_minimips.vhdl的测试平台,其中包含实体sim_minimips.我想模拟它并从中获取VCD.

我在Modelsim shell中输入以下命令:

vsim work.sim_minimips
vcd file myvcd1.vcd
vcd add -file bench_minimips.vhd/*
run
Run Code Online (Sandbox Code Playgroud)

但如果我在一个空文件中打开myvcd1.vcd.我该怎么做才能创建转储?

我在另一个论坛上尝试了以下命令:

wlf2vcd -o myvcd2.vcd vsim.wlf
Run Code Online (Sandbox Code Playgroud)

但是会产生错误.

我真的迷失在理解中,因为我找到的所有网站都告诉你使用altera或其他公司生成的TCL,我没有他们的内容可供查看.

有人知道我该怎么办?

最好的,斯特凡诺

simulation dump vhdl modelsim

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

连续物理引擎的碰撞检测技术

我正在研究一种纯粹连续的物理引擎,我需要选择算法来进行宽窄相位碰撞检测."纯粹连续"意味着我从不进行交叉测试,而是希望找到在碰撞发生之前捕获每个碰撞的方法,并将每个碰撞放入由TOI订购的"计划碰撞"堆栈中.

广泛相位 我能想到的唯一连续宽相方法是将每个物体包围在一个圆圈中并测试每个圆圈是否会与另一个圆圈重叠.然而,这似乎非常低效,并且没有任何剔除.

我不知道今天的离散碰撞剔除方法(例如四叉树)可能存在哪些连续模拟.我怎样才能防止诸如离散引擎之类的不适当和毫无意义的广泛测试呢?

狭窄的阶段
我设法使狭窄的SAT适应连续检查而不是离散,但我确信在你们可能遇到的论文或网站中还有其他更好的算法.
您建议我使用哪种快速或准确的算法以及每种算法的优点/缺点是什么?

最后注意:
我说技术而不是算法,因为我还没有决定如何存储不同的多边形,这些多边形可能是凹的,凸的,圆的,甚至有孔.我计划根据算法的要求做出决定(例如,如果我选择将多边形分解为三角形或凸形的算法,我将简单地以这种形式存储多边形数据).

algorithm simulation physics 2d collision-detection

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

捕食者 - 猎物模拟

我正在尝试实现捕食者 - 猎物的模型.它是基于代理的模型.每隔几毫秒就是一个新举措.在场上有两种类型的生物:捕食者和猎物.每个人的行为由以下规则给出:

猎物:

  1. 刚搬到一个空置的牢房
  2. 每走几步都会为他的老牢房创造后代
  3. 预期寿命受移动次数的限制

铁血战士:

  1. 捕食者用猎物移动到细胞.如果不是这样的细胞,则在任何自由的相邻细胞中
  2. 相同
  3. 相同

我有选择猎物移动的问题. 猎物

例如,我在单元格5和9中有捕获.它们中的每一个都可以移动到单元格6.如何解决此冲突?谢谢

algorithm simulation collision-detection agent agent-based-modeling

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

在模拟中控制内存分配/ GC?

我在查看Statemonad中运行的模拟中如何减少内存使用和GC时间时遇到了一些麻烦.目前我必须运行已编译的代码+RTS -K100M以避免堆栈空间溢出,并且GC统计数据非常可怕(见下文).

以下是代码的相关摘要.完整的,有效的(GHC 7.4.1)代码可以在http://hpaste.org/68527找到.

-- Lone algebraic data type holding the simulation configuration.
data SimConfig = SimConfig {
        numDimensions :: !Int            -- strict
    ,   numWalkers    :: !Int            -- strict
    ,   simArray      :: IntMap [Double] -- strict spine
    ,   logP          :: Seq Double      -- strict spine
    ,   logL          :: Seq Double      -- strict spine
    ,   pairStream    :: [(Int, Int)]    -- lazy (infinite) list of random vals
    ,   doubleStream  :: [Double]        -- lazy (infinite) list of …
Run Code Online (Sandbox Code Playgroud)

random simulation garbage-collection haskell ghc

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

控制混合Modelica模型中的事件

我对Modelica中的混合建模范例感到困惑.一方面,事件是有用的,另一方面,它们应该被避免.让我解释一下我的情况:

我有一个大型模型,由一个模拟超过1年的社区中的多个建筑组成.最初,模型运行得很慢.尽可能多的if条件添加noEvent()可以大大提高速度.

随着开发的继续,模型的控制变得更加复杂,我再次发生了许多事件,有时间隔非常短.提出一个想法:

Number of (model) time events : 28170
Number of (U) time events     : 0
Number of state    events     : 22572
Number of step     events     : 0
Run Code Online (Sandbox Code Playgroud)

这些事件会炸毁输出(对于正确的后处理,我需要事件中的变量)并减慢模拟速度.而且,我感觉有些无事件(如果......)会导致意外行为.

我想知道在某些时间步骤强制我的事件并在这些时间步之间禁止它们是否是一个解决方案?理想情况下,我想根据某些条件触发这些"强迫事件".例如:白天它们应该是每15分钟一次,每分钟都有高太阳辐射,在夜晚我根本不想要事件.

这是一个好主意吗?我想这会更快,因为许多州的事件将成为时间事件?如何使用Modelica 3.2(在Dymola中)完成这项工作?

预先感谢所有答案.罗埃尔

simulation modelica

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

没有全局队列的离散事件模拟?

我正在考虑建立物流网络.有一些以一定速度运行的过程,可以溢出或下溢的缓冲器以及它们之间的连接.

我没有看到使用全局事件队列以经典的离散事件模拟(DES)方式对此进行建模时出现任何问题.我尝试在没有队列的情况下对系统建模,但在早期阶段失败了.我仍然不理解为什么需要队列的根本原因,至少不是因为在网络"内部"发生的事件.

无队列DES的想法是将整个网络视为一个函数,它接收来自外部世界的事件流并返回状态变化流.网络中的每个节点只应受与其直接连接的节点的影响.我总体上对Haskell的箭头和功能反应式编程(FRP)寄予了一些希望,但我仍然在学习.

事件队列对我来说太"全球化"了.如果我的网络分成两个子网,它们之间没有连接,我只询问有关一个子网的状态变化的问题,另一个子网根本不应该进行任何计算.在这种情况下,我可以使用两个事件队列.但是,只要连接两个子网,我就必须将所有事件放入一个队列中.我不喜欢这个想法,我需要知道网络的拓扑结构才能设置我的队列.

所以

  • 是否有人知道DES算法不需要全局队列?
  • 这有什么困难甚至是不可能的原因吗?
  • FRP在DES中是否有用?

simulation functional-programming frp reactive-programming

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

Schlumberger Eclipse的E100时间戳是什么意思?

我正在对一个水库进行分析,我有以下年份和时间.根据Eclipse软件(Schlumberger)的E100黑油模型导入数据 - 这个Eclipse与用于软件开发的传统Eclipse不同,它是石油工程师使用的软件.我知道时间戳是1988 - 2005年左右,可能接近15.06.1992-15.09.1999(其他水库的时间戳).我不确定时间戳是否已损坏,或者这种时间戳是否确实存在,其中测量之间的某些年份奇怪地为零.

时间戳在YEAR部分和TIME部分中表示的是什么意思?

在此输入图像描述

simulation timestamp timestamp-analysis

5
推荐指数
0
解决办法
269
查看次数

Modelica中基于Agent的建模

是否可以在Modelica中模拟多代理系统?我说的是用Java编写的MASON系统.这将是多么容易或困难?据我所知,Modelica不是一种典型的编程语言,所以它会特别有用还是modelica语言的基本设计会造成任何阻碍?更重要的是,我们如何模拟基于代理的建模中常见的"消息"系统?

simulation agent-based-modeling modelica mason-abm

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

实现模拟线程#sleep()

背景

我正在设计我的软件,以便我可以轻松地执行单元测试.我有一个IClock接口,其中包括其他方法 IClock#wait(TimeUnit timeUnit, long duration).此方法将暂停当前线程的timeUnit持续时间(即1秒).

IClock接口有两种实现方式:

  • SimulatedClock:有手动增加时钟存储时间的方法
  • RealClock:时间通过参考自动增加 System.currentTimeMillis()

这是以下的默认方法IClock#wait(...):

/**
     * Locks current thread for specified time
     *
     * @param timeUnit
     * @param dt
     */
    default void wait(TimeUnit timeUnit, long dt)
    {
        Lock lock = new ReentrantLock();
        scheduleIn(timeUnit, dt, lock::unlock);
        lock.lock();
    }
Run Code Online (Sandbox Code Playgroud)

问题

我希望模拟单元测试工作的当前方式是

  1. 启动线程
  2. 等到所有线程都完成或处于阻塞状态(我假设它们被阻止,他们已经调用IClock#wait(...))
  3. 如果所有线程都已完成,请完成.否则,将SimulatedClock时间增加一毫秒.

然而,真正发生的是:

  1. 启动线程
  2. 即使线程IClock#wait()第一次没有调用,也要开始增加时间.

所以,我需要做的是能够确定何时完成或阻止所有线程.虽然可以这样做Thread#getState(),但我宁愿使用更优雅且可以使用的解决方案ForkJoinPool.

完整代码

GitHub上

SimulatedClock

package com.team2502.ezauton.utils;

import …
Run Code Online (Sandbox Code Playgroud)

java simulation multithreading

5
推荐指数
0
解决办法
312
查看次数