天涯背包不羁客 2024-06-04 09:19 采纳率: 0%
浏览 7

anylogic。事件与动态事件

已知题目:
三种事件a,b,c等概率随机发生在100*100的空间中,各事件需要的处理时间随机。
事件发生机制中需要使用事件模块和动态事件模块。
a事件发生后会通知主体A,b事件发生后会通知主体B,c事件发生后会通知全部主体。
事件通知需要通过主体A和B的端口实现。
主体A可以独立处理事件a,B可以独立处理事件b,处理事件c需要A和B同时到位。
A和B之间协同处理事件c。
A和B之间的通信通过专用的连接模块来实现。
模型需要输出各类事件的发生时间、各主体开始参与处理的时间和最终完成处理的时间。

问问,怎么做出这个模型呢,不会写相关控制代码,有佬可以帮帮忙在anylogic里写一下吗??作为感谢,我可以成为你的粉丝,给你的每一篇帖子点赞收藏。

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-04 09:19
    关注

    引自免费微信小程序:皆我百晓生

    首先,让我们逐步创建这个模型,并解释每个部分的功能。在这个过程中,我们将使用AnyLogic提供的内置库对象来构建模型。

    1. 环境设置

      • 创建一个新的任何逻辑(AnyLogic)模型。
      • 设置时钟为持续时间(Continuous),因为我们需要模拟实时事件。
    2. 实体类定义

      • 创建三个实体类:Event, AgentA, 和 AgentB
    3. 属性定义

      • Event类中,添加属性:eventType (枚举类型,值为a, b, c),startTime (事件发生时间),endTime (事件结束时间)。
      • AgentAAgentB类中,添加属性:currentEvent (当前处理的事件),arrivalTime (到达事件的时间),endTime (处理事件结束时间)。
    4. 建模组件

      • 添加一个SourceEvent类,用于生成事件。
      • Source设置随机生成事件的时间间隔(例如,均匀分布,范围[0, 1]秒)。
      • 对于eventType,设置概率为1/3。
      • 添加两个Agent类型的Population,分别代表AgentAAgentB
    5. 事件处理

      • Event类中,创建onStart()方法,在这里处理事件的通知和分配。
        • 如果是事件a,调用AgentA.receiveEvent(this)
        • 如果是事件b,调用AgentB.receiveEvent(this)
        • 如果是事件c,调用AgentC.receiveEvent(this)
      • AgentAAgentB类中,创建receiveEvent(Event event)方法,接收事件并更新状态。
        • 如果事件类型匹配,则设置currentEvent为接收到的事件,记录arrivalTime为当前时间。
      • AgentC类中,创建receiveEvent(Event event)方法,接收事件并等待AgentAAgentB的响应。
        • 记录事件信息,并检查AgentAAgentB是否准备好处理事件c。
        • 当两者都准备好时,启动事件处理并记录arrivalTime
    6. 同步处理

      • AgentAAgentB类中,创建isReadyForEventC()方法,返回是否准备好了处理事件c。
        • 可以设置一个布尔变量表示是否处理完上一个事件。
      • 创建一个Connection对象,连接AgentAAgentB,以便他们可以相互检测对方的状态。
    7. 事件处理和通信

      • AgentC类中,创建processEventC(AgentA a, AgentB b)方法,用于处理事件c。
        • 这个方法将在AgentAAgentB都准备好时由AgentC调用。
        • 记录endTime,计算处理时间。
      • 使用连接对象,当AgentAAgentB的准备状态改变时,触发事件,更新AgentC的处理状态。
    8. 数据收集

      • Event, AgentA, 和 AgentB类中,添加outputTable,用于输出事件时间和处理时间。
      • 在相应的方法中,将事件时间、开始处理时间和结束处理时间写入对应的输出表。

    由于AnyLogic不支持编写完整的代码,以下是伪代码来描述如何在AnyLogic中实现上述步骤:

    // Event class
    onStart {
        // ... 省略其他初始化 ...
        switch (eventType) {
            case "a":
                agentA.receiveEvent(this);
                break;
            case "b":
                agentB.receiveEvent(this);
                break;
            case "c":
                agentC.receiveEvent(this);
                break;
        }
    }
    
    // AgentA and AgentB classes
    void receiveEvent(Event event) {
        if (event.eventType == currentEventType) {
            arrivalTime = currentTime();
            // 更新其他状态 ...
        }
    }
    
    boolean isReadyForEventC() {
        // 返回是否准备好处理事件c ...
    }
    
    // AgentC class
    void receiveEvent(Event event) {
        // ... 省略其他初始化 ...
        // 检查AgentA和AgentB的状态,如果都准备好,调用processEventC ...
    }
    
    void processEventC(AgentA a, AgentB b) {
        arrivalTime = currentTime();
        // 处理事件c ...
        endTime = currentTime();
        // 输出处理时间 ...
    }
    
    // Connection between AgentA and AgentB
    onStateChange {
        // 当状态改变时,更新AgentC的处理状态 ...
    }
    

    这只是一个基本的框架,你需要根据实际需求调整细节。例如,可能需要实现更复杂的通信逻辑和状态管理,以及考虑并发和同步问题。此外,还需要设置适当的图形界面以显示结果。在AnyLogic中,你可以通过拖拽控件和编辑属性来实现这些功能,无需编写大量代码。如果你对AnyLogic不熟悉,建议参考官方文档和教程进行学习。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月4日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真