在java中模拟

时间:2009-02-07 09:53:31

标签: java simulation

我是模拟世界的新手,想学习程序员如何在java中开发真正的模拟项目。我会用eclipse。 任何人都可以指出我需要知道的其他事情(例如其他包裹,软件等及其用途)吗?

我担心这个问题可能看起来有点模糊,因为我不清楚我在谈论哪种类型的项目。但作为一名新手,让我说开始如何编写模拟项目。

6 个答案:

答案 0 :(得分:10)

如果您要为Monte-Carlo model或[{3}}的模拟模型构建discrete event simulation,您应该会发现pricing derivatives body framework已经在那里了。如果您正在进行数值模拟,例如code,那么您将基于finite-element model matrix库进行模拟。 computation存在,但这是最可能发生的两种情况。

我从来没有写过有限元模型,对这些模型几乎一无所知,尽管我确实有机会在一点上将一个端口移到Other types of simulation。虽然程序(DEC Visual FORTRAN,如果有人关心)用法语注释,但移植练习包括修改两个日期函数,总共6行FORTRAN代码 - 并编写一个makefile。

蒙特卡洛模型包括测量一些基本人口以获得一个或多个感兴趣变量的SAFIR,。然后你选择distributions具有良好的Pseudo-Random number generatorstatistical属性(geometric算法广泛用于此)并编写Mersenne Twister来转换输出这是一个function您可能会找到random variable with the appropriate distribution. library来执行此操作,除非您的变量有非常不寻常的分布。

然后,您构建或获取模拟框架并编写一个例程,该例程接受随机变量并执行您希望为模型执行的任何计算。运行它,存储每个模拟的结果,直到误差在某个所需的容差范围内。之后,您可以从模拟模型的所有运行中计算统计数据(均值,分布等)。

网上有很多资源,还有很多关于模拟建模的书籍,特别是在衍生品定价领域。你应该四处寻找,看看你能找到什么。

另外,functions上的random模块具有针对不同发行版的转换函数。如果你想要一个,你可以得到它并将适当的转换函数移植到java。您可以使用具有相同随机数种子的python的输出来测试java的正确性。

答案 1 :(得分:8)

离散事件模拟是一个很好的选择,可以将问题建模为在特定时间发生的单个事件。主要活动是:

  • 根据经验数据随机生成时间和持续时间,
  • 在模拟运行时累积统计数据。

例如,您可以模拟停车场中的活动,作为汽车的进入和离开以及因车库已满而无法进入的客户流失。这可以通过两个模型类(Car和Garage)和三个基础结构类,一个Event类(如下所述),一个管理事件的Schedule和一个用于累积数据的Monitor来完成。

以下是它如何运作的简要草图。

事件

Event有时间,表示在特定类的对象上调用特定方法。

附表

“计划”保留事件队列,按事件时间排序。时间表通过简单的循环驱动整体模拟。只要有剩余事件(或直到标记模拟运行结束的事件):

  1. 从队列中取出最早的事件
  2. 将“世界时钟”设置为该事件的时间,并
  3. 调用事件指定的任何操作。
  4. 汽车

    Car类保存了到达间隔和逗留时间统计数据。

    当汽车到达时,它:

    1. 使用监视器记录它的到来,

    2. 查询世界时钟,确定下一辆车到达前多久,并将该到达事件发布在附表上。

    3. 询问车库是否已满:

      1. 如果已满,汽车会将其作为失踪客户的离开记录在显示器上。

      2. 如果还不满,车:

        1. 使用监视器记录其条目,

        2. 告诉它已进入的车库(以便车库可以降低其可用容量),

        3. 确定剩余时间,并将其离开事件与时间表一起发布。

    4. 当汽车离开时,它:

      1. 告诉车库(因此车库可以增加可用容量),

      2. 使用显示器记录它的离开。

      3. 车库

        Garage会跟踪当前内部的汽车,并了解其可用容量。

        监视器

        监视器会跟踪您感兴趣的统计数据:客户数量(成功抵达的汽车),失去的客户数量(当地段已满时到达的人数),平均停留时间,收入(基于停车费等)

        模拟运行

        通过将两个事件放入计划中来开始模拟:

        1. 第一辆车的到达(通过实例化Car对象并调用其“到达”事件建模)和

        2. 模拟结束。

        3. 重复基本模拟循环,直到遇到模拟结束事件。此时,要求车库报告其当前居住者,并要求监测人员报告会议的整体统计数据。

答案 2 :(得分:1)

简短的回答是取决于

除非你能使问题更具体,否则无法给出答案。

你想模拟什么?

例如,如果要模拟添加两个数字,可以使用以下内容执行此操作:

a = b + c;

如果你想模拟一个球的弹跳,你可以使用一些数学方程式和图形库来做到这一点。

如果您想模拟网络浏览器,也可以这样做。

因此,确切的答案取决于您想要进行的模拟。

答案 3 :(得分:0)

首先想出一个问题。

没有通用的“模拟”这样的东西。那里有很多技术。

如果你只是一个想要伪物理的游戏玩家,那么像this这样的东西就是你的想法。

答案 4 :(得分:0)

查看Repast Symphony:http://repast.sourceforge.net/repast_simphony.html

2010年12月3日发布的Repast Simphony 2.0 Beta是一个紧密集成,交互式丰富,跨平台的基于Java的建模系统,可在Microsoft Windows,Apple Mac OS X和Linux下运行。它支持开发非常灵活的交互代理模型,用于工作站和小型计算集群。

Repast Simphony模型可以用几种不同的形式开发,包括ReLogo Logo的方言,点击式流程图,Groovy或Java,所有这些都可以流畅地交错NetLogo 模型也可以导入。

Repast Simphony已成功应用于许多应用领域,包括社会科学,消费品,供应链,未来可能的氢基础设施 和古代的行人交通一样。“

答案 5 :(得分:0)

这是一个老问题,但对于Java中的Simulation,我刚安装并测试了JavaSim Mark New,泰恩河畔纽卡斯尔大学。据我所知,如果您有一个可以转换为离散事件模拟的模型,它的效果非常好。请参阅Mark的网站http://markclittle.blogspot.com.au/2008/03/csimjavasim.html。我还尝试使用Desmo-J,它非常广泛且具有2-D图形模式,但无法在Mac下以JDK 1.6进行。