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

AnyLogic中如何实现兴奋性细胞动作电位的条件触发式动态变化?

在AnyLogic中实现兴奋性细胞动作电位的阶段变化逻辑

一、变量调整

  • 将Membran_potencial设置为连续变量(Continuous variable),初始值设为-75,移除直接赋值的公式Membran_potencial = -70 + impulse(后续逻辑会覆盖静态赋值)。
  • 保留impulse滑块变量(类型设为Double/Integer,根据需求调整取值范围)。

二、推荐实现方式:状态图(Statechart)

状态图是AnyLogic处理时序阶段逻辑最直观的工具,步骤如下:

  1. 新建状态图,添加初始状态并命名为静息态。

  2. 静息态逻辑:

    • 在状态的entry action中添加代码,恢复静息电位计算:
      Membran_potencial = -70 + impulse;
      
    • 添加on change事件监听impulse变量,当滑块调整时实时更新静息电位:
      Membran_potencial = -70 + impulse;
      
    • 设置转换条件:当Membran_potencial >= -60时,自动跳转到去极化阶段。
  3. 去极化阶段(0.5秒升至+30):

    • 设置状态持续时间为0.5秒。
    • 在entry action中添加线性插值代码(或用AnyLogic内置ramp函数简化):
      // 从进入状态时的电位线性升至+30
      Membran_potencial = ramp(entryValue(Membran_potencial), 30, 0.5, entryTime());
      
    • 0.5秒后自动跳转到复极化阶段。
  4. 复极化阶段(0.8秒降至-80):

    • 设置状态持续时间为0.8秒。
    • entry action代码:
      Membran_potencial = ramp(30, -80, 0.8, entryTime());
      
    • 0.8秒后自动跳转到超极化恢复阶段。
  5. 超极化恢复阶段(0.2秒回升至-70):

    • 设置状态持续时间为0.2秒。
    • entry action代码:
      Membran_potencial = ramp(-80, -70, 0.2, entryTime());
      
    • 完成后自动跳转回静息态。

三、替代实现方式:事件+阶段标记变量

如果偏好事件驱动逻辑,可按以下步骤操作:

  1. 新增变量:

    • actionPotentialPhase(整数类型,初始值0:0=静息,1=去极化,2=复极化,3=恢复)。
    • 三个延迟事件:eventDepolarize、eventRepolarize、eventRecover。
  2. 主循环逻辑:
    添加一个rate事件(触发间隔设为0.01秒,保证电位平滑更新),在事件动作中写入:

    if (actionPotentialPhase == 0) {
        Membran_potencial = -70 + impulse;
        // 触发动作电位条件
        if (Membran_potencial >= -60) {
            actionPotentialPhase = 1;
            eventDepolarize.setDelay(0.5);
            eventDepolarize.restart();
        }
    } else if (actionPotentialPhase == 1) {
        // 去极化过程
        double elapsed = time() - eventDepolarize.getCreationTime();
        Membran_potencial = entryValue(Membran_potencial) + (30 - entryValue(Membran_potencial)) * elapsed / 0.5;
    } else if (actionPotentialPhase == 2) {
        // 复极化过程
        double elapsed = time() - eventRepolarize.getCreationTime();
        Membran_potencial = 30 + (-80 - 30) * elapsed / 0.8;
    } else if (actionPotentialPhase == 3) {
        // 恢复过程
        double elapsed = time() - eventRecover.getCreationTime();
        Membran_potencial = -80 + (-70 - (-80)) * elapsed / 0.2;
    }
    
  3. 事件动作设置:

    • eventDepolarize触发时:
      actionPotentialPhase = 2;
      eventRepolarize.setDelay(0.8);
      eventRepolarize.restart();
      
    • eventRepolarize触发时:
      actionPotentialPhase = 3;
      eventRecover.setDelay(0.2);
      eventRecover.restart();
      
    • eventRecover触发时:
      actionPotentialPhase = 0;
      

内容的提问来源于stack exchange,提问作者Тимур Богоев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 17:52:28