【仿真建模-anylogic】EventRate原理解析

Author:赵志乾
Date:2024-06-13
Declaration:All Right Reserved!!!

1. 类图

2. 原理解析

          EventOriginator是Anylogic中各类事件的父类,对外暴露的接口主要有:

函数功能
boolean isActive()判定是否存在尚未调度的执行规划
double getRest(TimeUnits units)获取当前时刻至事件逻辑触发时的时间间隔,当不存在尚未执行的规划时,该函数将返回infinity

        Event是EventOriginator的子类,其主要定义了抽象函数 void reset()和void restart();从这两个函数可以看出Event与DynamicEvent的区别:DynamicEvent是一次性的,一个实例只能做一次规划(没有restart函数将无法重新规划);

       EventRate是Event的3个子类之一,其主要用于对符合泊松过程的事件触发场景进行建模;通过在图形编辑窗口拖入Event组件,并选择Trigger Type为Rate,此时Anylogic会自动在容器类中新建与之对应的EventRate实例;为了自定义泊松过程的到达率以及“到达”特性发生时需要执行的逻辑,Anylogic会自动在容器类中生成double evaluateRateOf( EventRate _e )和void executeActionOf( EventRate self )函数;

// 假设事件名为event,且Model时间单位为秒

// 到达率计算函数
@AnyLogicInternalCodegenAPI
public double evaluateRateOf(EventRate _e) {
    double _value;
    // 获取自定义的到达率
    if (_e == event) {
       _value = 此处内容为Event组件属性窗口中Rate属性中所填内容;
       _value = toModelRate( _value, PER_SECOND );
       return _value;
    }
    return super.evaluateRateOf( _e );
}


// 执行事件发生时的自定义逻辑
@AnyLogicInternalCodegenAPI
public void executeActionOf( EventRate self ) {
    if ( self == event) {
        // 自定义逻辑,为Event组件属性窗口中Action属性中所填的内容
        return ;
    }
    super.executeActionOf( self );
}

            EventRate类核心代码:

//*********************************************************************
//             说明: anylogic内核做了代码混淆。为便于理解,以下代码中涉及的
//                   部分变量、函数名做了改写;
//*********************************************************************

// reset函数--取消尚未执行的规划
public void reset() {
    this.cancel();      // 取消尚未执行的规划
    this.rate = -1.0;   // 到达率设置未非法值,到达率大于0才能真正起作用,见restart函数;
}


// 重新生成规划
public void restart() {
    this.cancel();
    // this.getAgent()获取的是容器智能体,即事件发起智能体;自定义的到达率位于容器智能体中,在此处与EventRate实例关联起来;
    this.rate = Math.max(0.0, this.getAgent().evaluateRateOf(this));
    if (this.rate > 0.0) {
       // exponential(this.rate)返回值为到达率为rate的泊松过程下一次到达时间间隔,plan函数用于重新定义倒计时时间;
       this.plan(this.getAgent().exponential(this.rate));
    }
}

    
// 事件启动函数,即第一规划,在容器智能体的start函数中自动调用;
@AnyLogicInternalCodegenAPI
public void start() {
   this.rate = Math.max(0.0, this.getAgent().evaluateRateOf(this));
   if (this.rate > 0.0) {
       this.plan(this.getAgent().exponential(this.rate));
   }
}


// 容器智能体onChange()函数内部会调用EventRate实例的onChange();即受容器智能体变更控制;
public void onChange() {
    // 只有在原来到达率处于合法值是才会对onChange做出反应,即需要用户显式将EventRate规划启用;
    if (this.rate > 0.0)) {
       if (this.getAgent().getEngine().d() != this) {
           double newVersionRate = Math.max(0.0, this.getAgent().evaluateRateOf(this));
           if (newVersionRate != this.rate) {
              if (newVersionRate == 0.0) {
                  this.cancel();
              } else {
                  this.restart();
              }
           }
        }
    }
}


// 事件触发时执行逻辑
@AnyLogicInternalAPI
void execute() {
    super.execute();
    try {
       // 自定义逻辑位于容器智能体中,在此处进行关联;
       this.getAgent().executeActionOf(this);
    } finally {
       // Event只能规划一次,对于EventRate而言,其规划被执行后需要重新生成规划;
       if (this.rate > 0.0) {
           this.rate = Math.max(0.0, this.getAgent().evaluateRateOf(this));
           if (this.rate > 0.0) {
               this.plan(this.getAgent().exponential(this.rate));
           }
       }
    }
}

3. 应用

         EventRate主要用于对符合泊松过程的事件触发场景进行建模,例如:商店顾客到达过程符合泊松过程,统计数据分析出其到达率为每天1000人,则可以通过EventRate描述顾客到达模型;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/704965.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上午接到被裁员的通知,下午就收到涨薪30%的offer,我生怕公司反悔,当天就找HR签了离职协议,拿到了N+1赔偿!

大家好,我是瑶琴呀。 昨天看到一位网友分享自己被裁的经历:最近这段时间在面试,没成想上午刚被 HR 约谈裁员的事情,下午就收到下家公司涨薪 30% 的offer,这可真是天时人和,当天下午就找 HR 签了离职协议&a…

有一个主域名跟多个二级子域名时该怎么申请SSL证书?

当您拥有主域名以及多个子域名时,选择合适的SSL证书类型对于确保网站的安全性至关重要。以下是三种SSL证书类型的简要介绍: 单域名SSL证书: 功能:只能绑定单个域名,无论是主域名还是子域名。 适用场景:仅…

Linux系统使用Docker安装Dashy导航页结合内网穿透一键发布公网

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

比特币对接文档

比特币对接 地址分类 p2sk()p2skh(主网地址是以"1"开头,例如:16dN3XhaTejyZFy4hWompK2x8de2T46wA8; 测试网是以"m"或"n"开头, 例如:mvZjn2485hwxjVPJoLAZVyJKUDn8aGpBy5)p2sh (主网地址是以"3"开头,例如:33ZzFZZJcvtnLBWRdne6F9SpD9…

数据结构笔记1-19(补充之前没有提及的细节)

目录 算法的五大特征 时间复杂度 next数组 nextval数组 树结点的计算 满二叉树和完全二叉树 线索二叉树 树的存储结构 森林、树之间的转换 哈夫曼树的构造 这几个红框,因为之前在别的视频有学过了,故不再看了。如果到时候还有什么需要查缺补…

Linux内核编程(二)杂项设备模型驱动编写

本文目录 一、知识点1. Linux设备分类2. 设备号3. Linux 字符设备的几种编程模型 二、杂项设备模型API1. 杂项设备结构体2. 注册杂项设备3. 注销杂项设备4. copy_from_user5. copy_to_user 三、字符设备编程 查看:内核驱动程序编写环境搭建。 一、知识点 1. Linux设…

高考结束嗨一夏,AOC显示器暑期购机指南来了!

摘要:AOC显示器,暑期狂欢,近在眼前! 历经三年紧张备战,高考已然画下句号。过去的时间里,你们挥洒汗水,刻苦学习,未来的时间里,也将迎来短暂的休憩嗨皮时光。这个暑假里&…

SaaS产品运营 | 千万不能踏入的PLG模式的六大误区

随着科技的迅速发展和市场竞争的日益激烈,越来越多的公司开始尝试采用PLG(Product Led Growth,即产品驱动增长)模式来推动其业务的发展。然而,尽管PLG模式在促进增长方面具有显著优势,但在实践中也容易出现…

一文学会Spring 实现事务,事务的隔离级别以及事务的传播机制

目录 一.Spring (Spring Boot) 实现事务 1.通过代码的方式手动实现事务 (手动档的车) 2.通过注解的方式实现声明式事务 (自动挡的车) 二.事务的4大特性(ACID) 三.事务的隔离级别 ①Mysql的事务隔离级别: ②Spring的事务隔离级别: 四.事务的传播机制 ①事务传播机制的概…

ASCII码表介绍

一、ASCII码是什么 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它可分为基于7位二进制数的标准版本和基于8位二进制数的扩展版本,标准版本主要用于显示现…

[AI Stability] 开源AI新利器:Stable Diffusion 3 Medium震撼发布!文本到图像再升级!

Stable Diffusion 3 Medium(SD3) 开源了,我们来看下。 关键要点 Stable Diffusion 3 Medium 是 Stability AI 迄今为止最先进的文本到图像开源模型。该模型的体积小巧,非常适合在消费级 PC 和笔记本电脑上运行,也适合在企业级 GPU 上运行。…

精彩回顾!安全智能体的前沿技术研究与实践

(关注“安全极客”,回复“智能体”下载第一期系列专题PPT!) 近日,安全极客和Wisemodel社区联合发起并主办了“AISecurity”系列第1期:大模型与网络空间安全前沿探索线下活动。在这次活动中,云起…

读取CSV文件生成RDD去掉标题行

文章目录 1. 创建CSV文件2. 上传CSV文件3. 读取CSV文件生成RDD4. 去掉标题行生成新RDD5. 查看新生成的RDD 1. 创建CSV文件 执行命令:vim scores.csv 在WPS里查看CSV文件 2. 上传CSV文件 执行命令:hdfs dfs -put scores.csv /park 3. 读取CSV文件生…

「漏洞复现」I Doc View 在线文档预览 qJvqhFt.json 任意文件读取漏洞(XVE-2024-2115)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

【 EI会议 | 西南大学主办 | 往届均已实现检索】第三届神经形态计算国际会议(ICNC 2024)

第三届神经形态计算国际会议(ICNC 2024) 2024 3rd International Conference on Neuromorphic Computing (ICNC 2024) 一、重要信息 大会官网:www.ic-nc.org(点击投稿/参会/了解会议详情) 会议时间:2024年12月13-15…

在线的、完全免费的、提供回放的技术传播方面的大会:Adobe DITA World 2024

▲ 搜索“大龙谈智能内容”关注公众号▲ 最近美国苹果公司召开了WWDC24,国内不少人熬夜观看。 对于我来说,我更关注在美国召开的另外一个会,它就是Adobe DITA world。 一年一度的Adobe DITA world号称是全球最大的DITA营销和技术传播专业人…

【docker 不希望每次sudo docker cmd】

一、背景 ubuntu系统下安装好了docker 不希望每次sudo docker cmd,这样每次多输入很多字,比较麻烦 二、原理 在 Ubuntu 等 Linux 发行版上,使用 Docker 命令时常常需要使用 sudo 命令,这是因为 Docker 的服务是以 root 权限运行…

基于STM32和人工智能的智能交通管理系统

目录 引言环境准备智能交通管理系统基础代码实现:实现智能交通管理系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景:智能交通管理与优化问题解决方案与优化收尾与总结 1. 引言 随着城市化进程的加快&#xff0…

Three.js做了一个网页版的我的世界

前言 笔者在前一阵子接触到 Three.js 后, 发现了它能为前端 3D 可视化 / 动画 / 游戏方向带来的无限可能, 正好最近在与朋友重温我的世界, 便有了用 Three.js 来仿制 MineCraft 的想法, 正好也可以通过一个有趣的项目来学习一下前端 3D 领域 介绍 游戏介绍 相信大家对我的世…

Web基础和HTTP协议

1、Web基础 (1)域名概述 域名空间结构 域名注册 2、网页 (1)网页概述 网页 纯文本格式文件 编写语言为HTML 在用户的浏览器中被“翻译”成网页形式显示出来 网站 由一个一个页面构成的,是多个网页的结合体 主页…