首页 > 解决方案 > AnyLogic 库存/流错误:无法解析(变量名)的表达式 - 流

问题描述

这样做的目的是根据温度的热/冷来操纵蚊子的出生率。温度与滑块相关联,因此用户可以在模拟过程中调整温度以观察蚊子出生率的变化。温度越接近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 中的函数调用,但是当我尝试运行模型时,除了那个单一的语法错误之外,我在任何地方都没有收到任何其他语法错误。我花了很长时间才让它没有错误(最后一个除外)。非常感谢任何提示/建议/帮助!

标签: javafunctionparsinganylogicruntimeexception

解决方案


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

  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))
    

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

让我知道这是否为您解决了问题。


推荐阅读