似乎由 AnyLogic 本身生成的错误:“重复局部变量 self”

问题描述 投票:0回答:1

我开发了一个模拟骰子游戏的模型,其中每个玩家代表工厂的一个工作站。我建立了模型,并且工作/运行良好,没有任何问题。突然间,没有任何变化,它出现了下面解释的错误。当我检查“Main.java”中的错误时,它显示来自内部 Anylogic 设置的代码,而不是我自己制作的配置或我自己编写的任何代码。

由于我无法识别问题,我返回了一个版本(仍然有效)并再次逐步添加最新版本的更改。同样,模型构建没有错误并且运行良好。然后我有几天没有访问这个模型,当我访问时,出现了与之前相同的错误。我无法识别问题,因为正如前面提到的,“不是我自己的建模。”

错误:重复的局部变量 self。位置:Dice_Game_DtC/Main - 代理类型

该模型主要由一些事件运行。基本上,AnyLogic 为每个事件定义一个变量“self”,这会导致稍后出现此重复错误中的“Main.java”。

请参阅事件“Define_Downs”和“Pay_Costs”以及“Check_Invests”中的代码示例(如图所示)。其余事件(例如“Sell_Products”和“Initial_WIP”)不存在此问题。

 if ( _e == Pay_Costs ) {
      EventTimeout self = _e;

//My code below
Fixed_Costs_Round=Fixed_Cap_Cost;
Fixed_Cap_Costs_Payed.add(Fixed_Costs_Round);
Total_Fixed_Costs=Total_Fixed_Costs+Fixed_Costs_Round;

Total_Inv_Round=Total_WIP+Available_Finished_Prd;
Total_Inv_per_Round.add(Total_Inv_Round);
Invent_Cost_Round= Total_Inv_Round/Num_Players;
Invent_Cost_per_Round.add(Invent_Cost_Round);
Total_Invent_Costs=Total_Invent_Costs+Invent_Cost_Round 
//End of my code

;
      return;
    }
    if ( _e == Define_Downs ) {
      EventTimeout self = _e;

//My code below

//1. Set NO downs always for PLayer 1
for (int i = 1; i <= Num_ROUNDS; i ++){
    Downtimes_P1.add(i,0);
    Downtimes_ME_P1.add(i,0);
    Downtimes_MA_P1.add(i,0);
    Downtimes_HU_P1.add(i,0);};

//2. Set NO downs at rounds 1 and 2 for all players
for (int i = 1; i < Num_Players; i ++){ //start at one because index 0 is P1, which was already set
    Downtimes_Datasets.get(i).add(1,0);
    Downtimes_Datasets.get(i).add(2,0);
    MA_Downs.get(i).add(1,0);
    MA_Downs.get(i).add(2,0);
    HU_Downs.get(i).add(1,0);
    HU_Downs.get(i).add(2,0);
    ME_Downs.get(i).add(1,0);
    ME_Downs.get(i).add(2,0);
    };

//3. Define for all players (except 1) and all rounds (except 1 and 2) the downs - for every 2 rounds
for (int i = 1; i < Num_Players; i ++){ //starting at one to ignore player 1 (that has index 0)
    for (int y = 3; y < Num_ROUNDS; y +=2){ //Y=round
        //first defining down per partner (machne, method, human)
        double down_value_ma=uniform(0,1);//MACHINE
        if (down_value_ma<DWT_Machine_Prob) down_value_ma =1; else down_value_ma =0; 
        MA_Downs.get(i).add(y,down_value_ma);
        MA_Downs.get(i).add(y+1,down_value_ma);
        
        double down_value_me=uniform(0,1);//METHOD
        if (down_value_me<DWT_Method_Prob) down_value_me =1; else down_value_me =0;
        ME_Downs.get(i).add(y,down_value_me);
        ME_Downs.get(i).add(y+1,down_value_me);
        
        double down_value_hu=uniform(0,1);//HUMAN
        if (down_value_hu<DWT_Human_Prob) down_value_hu =1; else down_value_hu =0;
        if (y>=HeadC_Inv_Round) down_value_hu=0;//if such round got HP investment, set DWT as 0 anyway
        HU_Downs.get(i).add(y,down_value_hu);
        if (y+1==HeadC_Inv_Round) HU_Downs.get(i).add(y+1,0) ; else HU_Downs.get(i).add(y+1,down_value_hu);//if the second round is the investment one, already set 0 for it
        
        //if any partner is down then station is down
        int down_value;
        if (down_value_ma==1||down_value_me==1||down_value_hu==1) down_value=1; else down_value=0;
        
        Downtimes_Datasets.get(i).add(y,down_value);
        Downtimes_Datasets.get(i).add(y+1,down_value);};}
//End of my code
 
;
      return;
    }

我尝试重塑模型并取得了成功,但只持续了一段时间。后来突然又出现了奇怪的错误。

如果您能提供有关如何解决该问题的支持,我将不胜感激。非常感谢!! :)

anylogic
1个回答
0
投票

这可能是由于编码不干净造成的。

只要看你的截图,我就可以看到“;”不应该有的地方:

我看到没有“;”的行最后应该有一些:

这可能会在重新编译时“出错”Java...

也许仔细检查所有代码并清理它

© www.soinside.com 2019 - 2024. All rights reserved.