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

news2025/2/22 0:55:34
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描述顾客到达模型;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人类如何挣脱被人工智能替代的命运?

人工智能技术的迭代升级,使得“换脸”“拟声”成为可能,我如何证明不是“我”?面对人工智能超高的生产效率,我如何与人工智能“抢工作”?在人工智能时代,如何回应这类疑问?挣脱被替代的命运&…

Windows 11 24H2版首发体验!附详细更新升级安装教程

Windows 11 24H2 版首发体验!这是微软2024年的大版本更新,新增超多新功能,以下会给你细细道来。这个版本目前小编亲测,使用非常流畅,没有什么明显问题。系统是已经集成了VB6/VC2005/VC2008/VC2010/VC2012/VC2013/VC201…

618哪些数码产品比较好?2024超高人气产品推荐!

随着6.18大促的脚步渐近,你是否已经按捺不住内心的激动,想要在网络购物的海洋中畅游,尽情享受购物的狂欢?然而,面对繁多的商品和各式各样的优惠活动,你是否感到了一丝迷茫?作为一位经验丰富的网…

补偿 EMI 滤波器 X 电容对有源 PFC 功率因数的影响

现代开关模式电源使用 X 电容器和 Y 电容器与电感器的组合来过滤共模和差模 EMI。滤波器元件位于任何有源(或无源)功率因数校正 (PFC) 电路的前面(图 1),因此 EMI 滤波器的电抗对功率因数 (PF) 造成的任何失真都会改变…

2024/6/11 英语每日一段

They found that, regardless of culture, greater mental well-being is linked with feeling emotions that we believe are appropriate to our situation, rather than just having positive emotions regardless of context--“feeling right” as opposed to “feeling g…

某商标网cookie - FECA

⚠️前言⚠️ 本文仅用于学术交流。 学习探讨逆向知识,欢迎私信共享学习心得。 如有侵权,联系博主删除。 请勿商用,否则后果自负。 网址 aHR0cHM6Ly9jYXMuc2JqLmNuaXBhLmdvdi5jbi9jYXMvbG9naW4 事情起因 该网站是瑞数6代,瑞数…

利用python爬虫采集苹果公司各产品销售收入统计报告

数据为2013年到2022年苹果公司各产品(iPhone、iPad、Mac等)及服务的销售收入。iPhone是苹果公司销售收入最高的产品。 数据统计单位为:亿美元 。 数据说明: 数据整理自苹果公司历年10-K文件,每年10-K文件可能对之前年…

Python Flask框架基础(七)留言板

本章示例程序是一个非常简单的留言板程序SayHello,涉及的知识完全是前面六个章节的内容 。这一章会基于这个程序介绍一种组织代码的形式,并了解Web程序开发流程,对前面六章的知识进行简单的回顾复习。 在具体的开发中,代码编写主…

saas企业营销必看:如何正确选择客户裂变系统?

SaaS企业如何营销,如何以低成本又高效的方式获客,是一直以来的难题。对于选择转型PLG模式的saas企业来说,选择合适的客户裂变系统帮助企业完成从老客户到新客户1到N的裂变非常重要,关乎着PLG模式是否能成功、获客是否能留存和转化…

C语言----字符函数和字符串函数

在编程的过程中,我们要经常处理字符和字符串,为了方便操作字符和字符串,c语言标准库中提供的一系列库函数,接下来我们就开始学习与认识他们 1.字符分类函数 c语言中有一系列的函数是专门做字符分类的,也就是一个字符…

yolov8数据处理方式

数据处理 在YOLOv8中,数据处理是非常重要的一环,它包括数据加载、数据增强、数据预处理和数据标签处理等步骤。以下是YOLOv8中常用的数据处理方式及常用处理方法的介绍: 1.数据加载: 数据加载是指将训练和测试数据加载到模型中进…

像素蛋糕Photoshop颜色导出不一致问题分析与解决

问题点:发现用像素蛋糕修完图明天应该为最右边图片显示 模特应该是白皙的,但是导出图片无论是否勾选SRGB都表现的为种间图片颜色一样 饱和度巨高。 问题分析:那这一定是颜色配置文件出现问题,找到客服表示可以去PS打开看是否与预…

沉降观测点的定义、重要性、建设与选择

沉降观测点,简称沉降点,是指在建筑物、构筑物或地基等结构物上设置的用于测量其垂直位移(沉降)的特定位置。这些点通常被标记并安装相应的监测设备,以便长期、连续地监测结构物的沉降情况。 点击输入图片描述(最多30字&#xff09…

工业企业的物料主数据管理应该如何做?

前言:如果我们说主数据是企业的“黄金数据”,那么对于制造型企业来说物料主数据就是企业的“钻石”数据。物料主数据贯穿于制造型企业的设计、工艺、采购、生产、库存、物流、销售的各个环节。做好物料主数据管理,是企业保有竞争力的关键&…

Codeforces Global Round 26 E. Shuffle 【换根DP】

E. Shuffle 题意 给定一颗 n n n 个节点的树 T T T,现在要求恰好执行下面的程序操作一次: 从 T T T 中选择一个点,作为 T 2 T_2 T2​ 的新根节点将这个点从 T T T 中删除,现在 T T T 被分成了一个或一个以上的连通块树对每…

Linux so文件无法找到及某条命令找不到的解决办法

前言 在一些定制软件中可能会自带so文件。或者自带一些二进制命令。 这时会如果运行某个程序会发生 **.so 文件无法找到的错误。 以及 * 某条命令无法找到的错误。 比如像是下面这样 解决办法: so文件无法找到 通过往 LD_LIBRARY_PATH 变量中追加路径来告诉程序…

微软新一代文本转语音模型——笑声,情绪,心情,打造真实AI语音

文本转语音一直是音频领域大家研究的对象,而基于人工智能模型打造的文本转语音的音频总是有机器人的味道,缺乏了人类的感情。如何把人类的感情融入到文本转音频领域一直是各大模型厂家研究的重点。 而OpenAI发布的GPT-4o(“o”代表“omni”&a…

老杨说运维 | 基于数据驱动的智观能力建设(文末附现场视频)

本期回顾来自擎创科技创始人兼CEO杨辰的现场演讲 青城山脚下的滔滔江水奔涌而过,承载着擎创一往无前的势头,共同去向未来。2024年6月,双态IT成都用户大会擎创科技“数智化可观测赋能双态运维”专场迎来了完满的收尾。 “没有2200年前李冰率众…

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

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

强化学习-tutorial

强化学习 当你发现收集有标注的数据困难,正确答案人类也不知道是什么的时候,往往是考虑使用RL的时候。尽管机器不知道答案是什么,但是机器会知道什么好,什么不好,通过与环境互动获得奖励。 过程 演算法解RL问题&…