【问题标题】:AnyLogic Stock/Flow ERROR: Couldn't parse expression for (variable name) - FlowAnyLogic Stock/Flow 错误:无法解析(变量名)的表达式 - 流
【发布时间】:2021-05-21 19:30:30
【问题描述】:

这样做的目的是根据温度的冷热程度来控制蚊子的出生率。温度与滑块相关联,因此用户可以在模拟过程中调整温度以观察蚊子出生率的变化。温度越接近75,蚊子的出生率就越高。但是我有这个问题:

当我尝试运行我的 AnyLogic 模型时,这是我得到的唯一错误,它使模型在我尝试运行它时无法运行模拟窗口:

Couldn't parse expression for Mosquito_Births - Flow: syntax error.
Please check expressions of this variable.
    at group4_assignment2.Main.<init>(Main.java:460)
    at group4_assignment2.Simulation.createRoot(Simulation.java:154)
    at group4_assignment2.Simulation.createRoot(Simulation.java:1)

[这是模型中发现错误部分的图片,用红色圈起来]https://i.stack.imgur.com/sx8hH.png

Temperature_F 链接到函数 NEAsia_Temperature_F。下限设置为 1,上限设置为 120。

函数 NEAsia_Temperature_F 设置为返回int 值,代码为:

if(Temperature_F <= 75){
NEAsia_Temperature_F = (Temperature_F / 75);
} else {
NEAsia_Temperature_F = (2 - (Temperature_F / 75));
}
return NEAsia_Temperature_F;

NEAsia_Mosquito_Birthrate = 0.45

Mosquito_Births = (NEAsia_Mosquito_Pop * NEAsia_Mosquito_BirthRate) * (NEAsia_Temperature_F(Temperature_F);)

NEAsia_Mosquito_Pop = 100

这是从与错误关联的模型自动生成的 Java 代码。错误在底部的if (true) throw new RuntimeException 行:

  private static String[] _parameterNames_xjal;

  @Override
  public String[] getParameterNames() {
    String[] result = _parameterNames_xjal;
    if (result == null) {
      List<String> list = new ArrayList<>( Arrays.asList( super.getParameterNames() ) );
      list.add( "NEAsia_Human_FertilityRate" );
      list.add( "NEAsia_Mosquito_BirthRate" );
      list.add( "Mosquito_Mortality_Rate" );
      list.add( "Human_Mortality_Rate" );
      list.add( "Contact_Rate" );
      list.add( "Incubation_Time" );
      list.add( "Infection_Duration" );
      result = list.toArray( new String[ list.size() ] );
      _parameterNames_xjal = result;
    }
    return result;
  }

  // Dynamic (Flow/Auxiliary/Stock) Variables
  {
    if (true) throw new RuntimeException("ERROR during variable generation:\nCouldn't parse expression for Mosquito_Births - Flow: syntax error.\r\nPlease check expressions of this variable.");
  }

问题显然源于 Mosquito_Births 中的函数调用,但是当我尝试运行模型时,除了那个单一的语法错误之外,我在任何地方都没有收到任何其他语法错误。我花了很长时间才让它没有错误(最后一个除外)。非常感谢任何提示/建议/帮助!

【问题讨论】:

    标签: java function parsing anylogic runtimeexception


    【解决方案1】:

    所以我看了你对模型的解释,似乎有些事情需要澄清/纠正:

    1. 滑块是否未链接到参数?尝试将其链接到名为 Temperature_F 的参数并将滑块的名称更改为其他任何名称。在这种情况下,新参数将有一个链接将其连接到流,就像“NEAsia_Mosquito_Birthrate”一样

    2. 我假设您的函数接受名为“Temperature_F”的 int 类型参数。那正确吗?应该的。

    3. 您没有在函数中定义变量“NEAsia_Temperature_F”吗?以

      开头的函数体
      int NEAsia_Temperature_F = 0;
      
    4. 从流量方程中去掉分号:

      Mosquito_Births = (NEAsia_Mosquito_Pop * NEAsia_Mosquito_BirthRate) * (NEAsia_Temperature_F(Temperature_F))
      

    以上 cmets 是基于您提供的信息。通过上述步骤,我尝试复制您的模型,错误不再存在。

    如果这能为你解决问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      相关资源
      最近更新 更多