You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic带间断递减函数时间曲线实现技术问询

AnyLogic递减函数逻辑修正与需求实现方案

现有代码的问题分析

  • 条件判断顺序错误:先判断usestock_boundary3 <=80就直接归零,后续的<=0判断永远不会触发——因为归零后变量值为0,但else if的逻辑会跳过该分支
  • 重置值不符合需求:需求要求归零后从85开始递减,现有代码设为90
  • 缺失“数日后恢复”的延迟逻辑:没有处理归零后等待指定天数再重新启动递减的流程

修正实现步骤

1. 添加辅助变量

在AnyLogic的变量面板中新增布尔型变量isInResetWait,初始值设为false,用来标记当前是否处于归零后的等待阶段,避免重复触发重置流程。

2. 修正递减函数代码

替换原有函数代码为以下逻辑:

// 仅当未处于等待重置阶段时,执行递减逻辑
if (!isInResetWait) {
    usestock_boundary3 -= 0.2;
    
    // 当数值降至80及以下时,直接归零并触发等待重置流程
    if (usestock_boundary3 <= 80) {
        usestock_boundary3 = 0;
        isInResetWait = true;
        // 触发延迟重置事件(假设延迟天数为3天,可自行修改)
        event_resetStock.schedule(3, TimeUnit.DAYS);
    }
}

3. 创建延迟重置事件

  • 在模型中新增事件(命名为event_resetStock)
  • 在事件的动作面板中添加以下代码:
// 结束等待阶段,重置变量为85,重新开始递减
isInResetWait = false;
usestock_boundary3 = 85;

4. 原调用事件的设置

保持原有的调用递减函数的事件(比如按固定时间间隔触发,如每1个时间单位触发一次),确保递减逻辑持续执行。

逻辑说明

  • 初始阶段isInResetWait为false,变量从100开始以-0.2的斜率递减
  • 当变量降至80及以下时,立刻归零,标记进入等待阶段,并触发延迟事件
  • 延迟指定天数后,延迟事件触发,将变量重置为85,取消等待标记,恢复递减流程

内容的提问来源于stack exchange,提问作者Aditya Wani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:42:56