我开发了一个模拟骰子游戏的模型,其中每个玩家代表工厂的一个工作站。我建立了模型,并且工作/运行良好,没有任何问题。突然间,没有任何变化,它出现了下面解释的错误。当我检查“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;
}
我尝试重塑模型并取得了成功,但只持续了一段时间。后来突然又出现了奇怪的错误。
如果您能提供有关如何解决该问题的支持,我将不胜感激。非常感谢!! :)