使用事件图支持des建模

DESp的Python项目详细描述


绝望

despy是离散事件模拟的python实现 (DES)基于Schruben事件图的方法(见使用事件图的模拟建模)。 它还支持乐高组件框架(请参见用乐高构建复杂模型和用simkit基于组件的仿真建模。

安装

  • 已安装Python 3.7或更高版本
  • pip安装despy

运行示例场景

示例组件位于examples包中,其中 示例中的示例场景。运行

  • SimpleServer
  • 有限容量服务器
  • 实体服务器
  • 带Reneges的服务器
  • 传输线
  • 置信区间示例:终止情况
  • 置信区间示例:稳态情况

定义事件图组件

每个事件图组件对应于despy模型中的特定元素

<表><广告>事件图 绝望 < /广告><正文>部件simentitybase的子类参数属性传递到\u init()\u状态变量属性初始化为nan[]运行事件reset()方法和run()方法 其他活动同名方法,首字母小写状态转换状态变量赋值,后跟notify_state_change()安排活动调用"计划"(<;事件名称>;,<;延迟>;,[<;可选参数>;])取消事件调用"取消"(<;事件名称>;,[<;可选参数>;]

执行模型

<表><广告>动作 事件列表调用 < /广告><正文>运行详细模式eventlist.verbose=true运行XXX个simtime单元事件列表。停止时间(xxx)为N foo事件运行eventlist.stop_on_event(n,'foo')准备运行模型eventlist.reset()运行模型事件列表.start_simulation()

示例:simpleserver

simpleserver组件是multiple 服务器队列。它的状态表示由表示 队列中的客户数(队列中的客户数)和可用的客户数 服务器(可用服务器数)。它不是一个独立的模型,但必须是 设置为"侦听"另一个组件,该组件定期安排到达事件。 最基本的组件是arrivalprocess。

# Instantiate ArrivalProcess component with interarrival times Exponential(1.7)
interarrival_time_generator = RandomVariate.instance('Exponential', mean=1.7)
arrival_process = ArrivalProcess(interarrival_time_generator)

# Instantiate SimpleServer component with 2 servers and service times Gamma(1.7, 1.8)
number_servers = 2;
service_time_generator = RandomVariate.instance('Gamma', alpha=1.7, beta=1.8)
simple_server = SimpleServer(number_servers, service_time_generator)

# Add the SimpleServer instance to the ArrivalProcess instance as a
# SimEventListener
arrival_process.add_sim_event_listener(simple_server)

# These statistics objects will collect the time-varying number_in_queue
# and number_available_servers of the SimpleServer instance
number_in_queue_stat = SimpleStatsTimeVarying('number_in_queue')
number_available_servers_stat = SimpleStatsTimeVarying('number_available_servers')

# Add the statistics objects as StateChangeListeners
simple_server.add_state_change_listener(number_in_queue_stat)
simple_server.add_state_change_listener(number_available_servers_stat)

# Execute the model for 100,000 time units
stopTime = 100000;
EventList.stop_at_time(stopTime)

# Initialize the EventList and put all Run events on the EventList
EventList.reset()

# Execute the simulation
EventList.start_simulation()

运行多个复制

估计置信区间最直接的方法是 多个独立复制。 若要运行多个复制,请包装reset()start\u simulation()中调用for循环。然而,收集统计数据需要有所不同 对于"内部"统计对象和"外部"统计对象。

statistics对象是实现stateChange()方法的stateChangeListeners 更新计数器。两种主要类型是"计数"和"时变"。 它们通常以两种不同的方式使用:"内部"和"外部"。

内部统计对象使用stat从单个复制到 为该复制生成值(通常是平均值)。自模拟数据 是典型的自相关,估计的方差可能会有极大的偏差。 因此,不能应用置信区间的常用表达式。 重要的是clear()每个内部统计对象 在每次复制之前,以确保复制之间的独立性。

外部统计对象通常用于从内部收集数据 统计对象。每次复制后,来自内部统计信息的值 对象(通常是平均值)传递给外部对象。

以这种方式,不管传递的值是什么,外部statistics对象 然后(有足够数量的复制)可以为 有问题的值(所有关于中心极限定理的"通常"假设)。

参数与状态变量

参数

参数是组件中的变量,在给定的 模拟。这些是模拟的输入,因此必须 通过\u init()方法传入。参数可以是标量,例如 生成不同值的服务器或随机变量的总数 每次呼叫时,例如服务时间生成器。在这种情况下,虽然生成的值可能不同, 发行版本身保持不变。

状态变量

状态变量在给定的模型复制中发生变化。满 状态变量的定义必须包含其初始值,因为 在每个组件的reset()方法中设置。只有事件方法是 允许更改状态变量的值,因为事件由状态转换标识。因此,给定的 在模拟时间的任何一点上的状态完全由 初始值和随后的状态转换。

每个状态转换都必须伴随一个notify_state_change()调用,该调用 通知stateChangeListsner给定的状态已更改。这允许 只写入模型动力学而不涉及的组件 收集统计数据,因为这可以通过适当的统计数据来完成 对象,它们是statechaneglistsner。

定义事件

事件在simentitybase的子类中定义为普通方法。在事件方法中, 只有(按顺序):

  1. 状态转换(然后是状态更改通知)
  2. 通过调用self.cancel()
  3. 取消事件(如果需要)
  4. 通过调用self.secschedule()
  5. 安排事件(如果需要) < > >

    随机变量实例化

    按照惯例,randomvariate类将其参数指定为 建造商。

    有几种方法可以实例化一个随机变量

    • 直接实例化,例如指数(平均值=2.3)
    • 使用带关键字的factory方法:randomvariate.instance('exponential',mean=2.3)
    • 在字典中使用randomvariate factory方法(使用params关键字):
    params_map={mean:2.3}
    RandomVariate.instance('Exponential', params=params_map)
    

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
JavaCenter是JavaFX2中不可执行的窗格   java Docker将容器连接到本地数据库   java无法通过Spring从Redis获得正确的值   java为什么要将数组转换为列表再转换为数组   Java泛型在方法中放入字符串或整数参数   在Cloud Bigtable SDK中找不到java类   java Mavensiteplugin无法加载生成的源(Jaxb)   java GWT序列化和Appengine通道Api   PrintWriter out=new PrintWriter(sWriter)和PrintWriter out=response之间的java差异。getWriter()   空手道DSL中的javascript,在java参数调用中传递变量时如何转义单引号   windows 64位java可以与32位tomcat一起使用   为for循环| Java输入参数   java您可以更改SWT选项卡项的背景和/或前景颜色吗?   用java生成6位pin码   java如何从另一个通量中排除通量中的所有元素   java无法调用“javafx.scene.control.ComboBox.getItems()”,因为“Controller.getMyBox()”的返回值为null   将Java字符串与数组匹配时出现问题   java如何使用HttpsUrlConnection对SSL连接使用代理身份验证?   java如何检查XML元素是否包含CDATA?