首页 > 解决方案 > 在 Anylogic PLE 中训练 RL4J 模型时,什么可能导致状态图不更新?

问题描述

作为我论文的一部分,我正在尝试使用 Anylogic PLE 中的 RL4J 构建具有深度 Q-Learning 的 RL 模型。不幸的是,我对 Anylogic 和 DL4J 并不太熟悉,因此可能会遗漏一些明显的步骤。我只能访问 PLE,因此我试图在 Anylogic 中训练 RL 模型,而不使用自定义实验。我将车辆电池示例更改为在 Anylogic 项目的主代理中进行训练。

主要代理包括一个状态图,这是我的环境。最重要的是 ,getObservation()这里也实现了这些功能。我还包含了一个功能,可以在达到最终状态后重置状态图。当我手动调用它们时,所有这些功能都可以正常工作。main 中的最后一个函数是包含所有 RL4J 代码的函数。takeAction()calcReward()resetStateChart()train()

一旦我开始训练,训练本身就可以正常工作,并且所有函数都会被正确调用。但是,状态图不会更新。我使用该receiveMessage()函数调用转换。当我takeAction()手动调用时receiveMessage()返回true。在训练期间调用时,它返回 false。根据文档,这意味着状态图中没有转换,它会被消息触发。我不确定这是怎么回事,因为它在手动调用时运行良好。

你们中有人知道可能导致这种情况的原因吗?

这是我采取行动的功能:

public void takeAction( int action ) { 

    if (action == 0 || action == 1)
        power -= actionCost;
    else if (action == 2)
        power -= waitCost;
    boolean ret = statechart.receiveMessage(action); 

}

这是训练 RL 模型的代码:

void train ( ) {

    MDP<Encodable, Integer, DiscreteSpace> mdp = new MDP<Encodable, Integer, DiscreteSpace>() {
    
        ObservationSpace<Encodable> observationSpace = new ArrayObservationSpace<>(new int[]{13});
        DiscreteSpace actionSpace = new DiscreteSpace(4);
    
        public ObservationSpace<Encodable> getObservationSpace() { return observationSpace;
        }
    
        public DiscreteSpace getActionSpace() { return actionSpace;
        }
    
        public Encodable getObservation() { 
            return new Encodable() {
                double[] a = main_getObservation(); 
                public double[] toArray() { return a; 
                }
            };
        }
    
        public Encodable reset() {
            resetStateChart();
            return getObservation();
        }
    
        public void close(){}
    
        public StepReply<Encodable> step(Integer action) {
            int a = action.intValue();
            takeAction(a);
            double reward = calcReward();
            return new StepReply(getObservation(), reward, isDone(), null);
        }
    
        public boolean isDone(){
            return inState(win) || inState(dead);
        }
    
        public MDP<Encodable, Integer, DiscreteSpace> newInstance() { return null; }
    };

    try{
        DataManager manager = new DataManager(true);
    
        QLearning.QLConfiguration AL_QL = 
            new QLearning.QLConfiguration(
                1,
                10000,
                100000,
                100000,
                128,
                1000,
                10,
                1,
                0.99,
                1.0,
                0.1f,
                30000,
                true
            );
    
        DQNFactoryStdDense.Configuration AL_NET =   
            DQNFactoryStdDense.Configuration.builder()
                .l2(0).updater(new 
                RmsProp(0.001)).numHiddenNodes(300).numLayer(2).build();
            
         QLearningDiscreteDense<Encodable> dql = new QLearningDiscreteDense(mdp, AL_NET, AL_QL, manager);
    
        dql.train();
    
        DQNPolicy<Encodable> pol = dql.getPolicy();
    
        pol.save("Statechart_Policy2.zip");
    
        mdp.close();
    }catch(IOException e){
         e.printStackTrace();

}

如果您需要任何其他信息,请告诉我。

期待任何提示,谢谢!

编辑:

这是我将状态图重置为其初始状态的功能:

void resetStateChart(  ) { 

boolean ret = statechart.receiveMessage(4);
power = powerCapacity; 

}

这是我获取观察的功能:

public double[] main_getObservation(  ) { 

    statechart_state[] states = statechart_state.values();
    double[] observation = new double[states.length + 1];

    for (int i=0; i<states.length; i++){
        statechart_state ss = states[i];
        observation[i] = inState(ss) ? 1 : 0;
    }

    observation[observation.length - 1] = power/powerCapacity;

    return observation; 

}

我的状态图截图

我的状态图代码:

// Statecharts
  public Statechart<statechart_state> statechart = new Statechart<>( this, (short)6 );

  @Override
  @AnyLogicInternalCodegenAPI
  public String getNameOf( Statechart _s ) {
    if(_s == this.statechart) return "statechart";
    return super.getNameOf( _s );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public int getIdOf( Statechart _s ) {
    if(_s == this.statechart) return 0;
    return super.getIdOf( _s );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public void executeActionOf( Statechart _s ) {
    if( _s == this.statechart ) {
      enterState( operating, true );
      return;
    }
    super.executeActionOf( _s );
  }

   // States of all statecharts
   
  public enum statechart_state implements IStatechartState<Main, statechart_state> {
    operating,
    recharging,
    reset,
    dead,
    state_1() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    },
    state_2() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    },
    state_3() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    },
    state_4() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    },
    win() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    },
    branch() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    },
    branch1() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    },
    branch2() {
      @Override
      @AnyLogicInternalCodegenAPI
      public statechart_state getContainerState() {
        return operating;
      }
    };

    @AnyLogicInternalCodegenAPI
    private Collection<statechart_state> _simpleStatesDeep_xjal;

    @AnyLogicInternalCodegenAPI
    private Set<statechart_state> _fullState_xjal;

    @AnyLogicInternalCodegenAPI
    private Set<statechart_state> _statesInside_xjal;

    @Override
    @AnyLogicInternalCodegenAPI
    public Collection<statechart_state> getSimpleStatesDeep() {
      Collection<statechart_state> result = _simpleStatesDeep_xjal;
      if (result == null) {
        _simpleStatesDeep_xjal = result = calculateAllSimpleStatesDeep();
      }
      return result;
    }
    
    @Override
    public Set<statechart_state> getFullState() {
      Set<statechart_state> result = _fullState_xjal;
      if (result == null) {
        _fullState_xjal = result = calculateFullState();
      }
      return result;
    }
    
    @Override
    @AnyLogicInternalCodegenAPI
    public Set<statechart_state> getStatesInside() {
      Set<statechart_state> result = _statesInside_xjal;
      if (result == null) {
        _statesInside_xjal = result = calculateStatesInside();
      }
      return result;
    }

    @Override
    @AnyLogicInternalCodegenAPI
    public Statechart<statechart_state> getStatechart( Main _a ) {
      return _a.statechart;
    }
  }
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state operating = statechart_state.operating;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state recharging = statechart_state.recharging;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state reset = statechart_state.reset;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state dead = statechart_state.dead;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state state_1 = statechart_state.state_1;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state state_2 = statechart_state.state_2;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state state_3 = statechart_state.state_3;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state state_4 = statechart_state.state_4;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state win = statechart_state.win;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state branch = statechart_state.branch;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state branch1 = statechart_state.branch1;
  @AnyLogicCustomProposalPriority(type = AnyLogicCustomProposalPriority.Type.STATIC_ELEMENT)
  public static final statechart_state branch2 = statechart_state.branch2;


  @AnyLogicInternalCodegenAPI
  private void enterState( statechart_state self, boolean _destination ) {
    switch( self ) {
      case operating:
        logToDBEnterState(statechart, self);
        // (Composite state)
        trans_op_rech.start();
        trans_op_dead.start();
        trans_op_res.start();
        if ( _destination ) {
           enterState( state_1, true );
        }
        return;
      case recharging:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( recharging );
        trans_rech_op.start();
        trans_rech_rech.start();
        trans_rech_re.start();
        return;
      case reset:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( reset );
        trans_res_op.start();
        return;
      case dead:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( dead );
        trans_dead_res.start();
        return;
      case state_1:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( state_1 );
        {
System.out.println("State1"); 
;}
        trans_1_b.start();
        trans_1_1.start();
        return;
      case state_2:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( state_2 );
        {
System.out.println("State2"); 
;}
        trans_2_b.start();
        trans_2_1.start();
        return;
      case state_3:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( state_3 );
        trans_3_4.start();
        trans_3_2.start();
        trans_3_2_not_wait.start();
        return;
      case state_4:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( state_4 );
        trans_4_b.start();
        trans_4_3.start();
        return;
      case win:
        logToDBEnterState(statechart, self);
        // (Simple state (not composite))
        statechart.setActiveState_xjal( win );
        return;
      case branch:
        logToDBEnterState(statechart, self);
        // (Branch)
        if ( 
randomTrue(slipChance) 
 ) { // trans_slip_1
          enterState( state_1, true );
          return;
        }
        // trans_b_2 (default)
          enterState( state_2, true );
        return;
      case branch1:
        logToDBEnterState(statechart, self);
        // (Branch)
        if ( 
randomTrue(slipChance) 
 ) { // transi_slip_2
          enterState( state_1, true );
          return;
        }
        // trans_b_3 (default)
          enterState( state_3, true );
        return;
      case branch2:
        logToDBEnterState(statechart, self);
        // (Branch)
        if ( 
randomTrue(slipChance) 
 ) { // trans_slip_4
          enterState( state_1, true );
          return;
        }
        // trans_b_w (default)
          enterState( win, true );
        return;
      default:
        return;
    }
  }

  @AnyLogicInternalCodegenAPI
  private void exitState( statechart_state self, Transition _t, boolean _source ) {
    switch( self ) {
      case operating: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Composite state)
        if ( _source ) exitInnerStates(self);
        if ( !_source || _t != trans_op_rech ) trans_op_rech.cancel();
        if ( !_source || _t != trans_op_dead ) trans_op_dead.cancel();
        if ( !_source || _t != trans_op_res ) trans_op_res.cancel();
        return;
      case recharging: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        if ( !_source || _t != trans_rech_op) trans_rech_op.cancel();
        if ( !_source || _t != trans_rech_rech) trans_rech_rech.cancel();
        if ( !_source || _t != trans_rech_re) trans_rech_re.cancel();
        return;
      case reset: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        if ( !_source || _t != trans_res_op) trans_res_op.cancel();
        return;
      case dead: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        if ( !_source || _t != trans_dead_res) trans_dead_res.cancel();
        return;
      case state_1: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        if ( !_source || _t != trans_1_b) trans_1_b.cancel();
        if ( !_source || _t != trans_1_1) trans_1_1.cancel();
        return;
      case state_2: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        if ( !_source || _t != trans_2_b) trans_2_b.cancel();
        if ( !_source || _t != trans_2_1) trans_2_1.cancel();
        return;
      case state_3: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        if ( !_source || _t != trans_3_4) trans_3_4.cancel();
        if ( !_source || _t != trans_3_2) trans_3_2.cancel();
        if ( !_source || _t != trans_3_2_not_wait) trans_3_2_not_wait.cancel();
        return;
      case state_4: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        if ( !_source || _t != trans_4_b) trans_4_b.cancel();
        if ( !_source || _t != trans_4_3) trans_4_3.cancel();
        return;
      case win: 
        logToDBExitState(statechart, self);
        logToDB(statechart, _t, self);
      // (Simple state (not composite))
        return;
      default:
        return;
    }
  }

  @AnyLogicInternalCodegenAPI
  private void exitInnerStates( statechart_state _destination ) {
    statechart_state _state = statechart.getActiveSimpleState();
    while( _state != _destination ) {
            exitState( _state, null, false );
            _state = _state.getContainerState();
        }
    }
  
  public TransitionTimeout trans_rech_rech = new TransitionTimeout( this );
  public TransitionTimeout trans_3_4 = new TransitionTimeout( this );

  @Override
  @AnyLogicInternalCodegenAPI
  public String getNameOf( TransitionTimeout _t ) {
    if ( _t == trans_rech_rech ) return "trans_rech_rech";
    if ( _t == trans_3_4 ) return "trans_3_4";
    return super.getNameOf( _t );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public Statechart getStatechartOf( TransitionTimeout _t ) { 
    if ( _t == trans_rech_rech ) return statechart;
    if ( _t == trans_3_4 ) return statechart;
    return super.getStatechartOf( _t );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public void executeActionOf( TransitionTimeout self ) {
    if ( self == trans_rech_rech ) {
      {
power = limitMax(power+25, powerCapacity) 
;}
      trans_rech_rech.start();
      return;
    }
    if ( self == trans_3_4 ) {
      exitState( state_3, self, true );
          enterState( state_4, true );
      return;
    }
    super.executeActionOf( self );
  }
  @Override
  @AnyLogicInternalCodegenAPI
  public double evaluateTimeoutOf( TransitionTimeout _t ) {
    double _value;
    if ( _t == trans_rech_rech ) {
      _value = 
1 
;
      _value = toModelTime( _value, SECOND );
      return _value;
    }
    if ( _t == trans_3_4 ) {
      _value = 
5 
;
      _value = toModelTime( _value, SECOND );
      return _value;
    }
    return super.evaluateTimeoutOf( _t );
  }

  public TransitionCondition trans_res_op = new TransitionCondition( this );
  public TransitionCondition trans_op_dead = new TransitionCondition( this );

  @Override
  @AnyLogicInternalCodegenAPI
  public String getNameOf( TransitionCondition _t ) {
    if ( _t == trans_res_op ) return "trans_res_op";
    if ( _t == trans_op_dead ) return "trans_op_dead";
    return super.getNameOf( _t );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public Statechart getStatechartOf( TransitionCondition _t ) { 
    if ( _t == trans_res_op ) return statechart;
    if ( _t == trans_op_dead ) return statechart;
    return super.getStatechartOf( _t );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public void executeActionOf( TransitionCondition self ) {
    if ( self == trans_res_op ) {
      exitState( reset, self, true );
          enterState( operating, true );
      return;
    }
    if ( self == trans_op_dead ) {
      exitState( operating, self, true );
          enterState( dead, true );
      return;
    }
    super.executeActionOf( self );
  }
  @Override
  @AnyLogicInternalCodegenAPI
  public boolean testConditionOf( TransitionCondition _t ) {
    if ( _t == trans_res_op ) return 
true 
;
    if ( _t == trans_op_dead ) return 
power <= 0  
;
    return super.testConditionOf( _t );
  }


  public TransitionMessage trans_op_rech = new TransitionMessage( this );
  public TransitionMessage trans_rech_op = new TransitionMessage( this );
  public TransitionMessage trans_rech_re = new TransitionMessage( this );
  public TransitionMessage trans_dead_res = new TransitionMessage( this );
  public TransitionMessage trans_op_res = new TransitionMessage( this );
  public TransitionMessage trans_1_b = new TransitionMessage( this );
  public TransitionMessage trans_2_b = new TransitionMessage( this );
  public TransitionMessage trans_4_b = new TransitionMessage( this );
  public TransitionMessage trans_4_3 = new TransitionMessage( this );
  public TransitionMessage trans_3_2 = new TransitionMessage( this );
  public TransitionMessage trans_3_2_not_wait = new TransitionMessage( this );
  public TransitionMessage trans_2_1 = new TransitionMessage( this );
  public TransitionMessage trans_1_1 = new TransitionMessage( this );

  @Override
  @AnyLogicInternalCodegenAPI
  public String getNameOf( TransitionMessage _t ) {
    if ( _t == trans_op_rech ) return "trans_op_rech";
    if ( _t == trans_rech_op ) return "trans_rech_op";
    if ( _t == trans_rech_re ) return "trans_rech_re";
    if ( _t == trans_dead_res ) return "trans_dead_res";
    if ( _t == trans_op_res ) return "trans_op_res";
    if ( _t == trans_1_b ) return "trans_1_b";
    if ( _t == trans_2_b ) return "trans_2_b";
    if ( _t == trans_4_b ) return "trans_4_b";
    if ( _t == trans_4_3 ) return "trans_4_3";
    if ( _t == trans_3_2 ) return "trans_3_2";
    if ( _t == trans_3_2_not_wait ) return "trans_3_2_not_wait";
    if ( _t == trans_2_1 ) return "trans_2_1";
    if ( _t == trans_1_1 ) return "trans_1_1";
    return super.getNameOf( _t );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public Statechart getStatechartOf( TransitionMessage _t ) { 
    if ( _t == trans_op_rech ) return statechart;
    if ( _t == trans_rech_op ) return statechart;
    if ( _t == trans_rech_re ) return statechart;
    if ( _t == trans_dead_res ) return statechart;
    if ( _t == trans_op_res ) return statechart;
    if ( _t == trans_1_b ) return statechart;
    if ( _t == trans_2_b ) return statechart;
    if ( _t == trans_4_b ) return statechart;
    if ( _t == trans_4_3 ) return statechart;
    if ( _t == trans_3_2 ) return statechart;
    if ( _t == trans_3_2_not_wait ) return statechart;
    if ( _t == trans_2_1 ) return statechart;
    if ( _t == trans_1_1 ) return statechart;
    return super.getStatechartOf( _t );
  }

  @Override
  @AnyLogicInternalCodegenAPI
  public void executeActionOf( TransitionMessage self, Object _msg ) {
    if ( self == trans_op_rech ) {
      exitState( operating, self, true );
          enterState( recharging, true );
      return;
    }
    if ( self == trans_rech_op ) {
      exitState( recharging, self, true );
          enterState( operating, true );
      return;
    }
    if ( self == trans_rech_re ) {
      exitState( recharging, self, true );
          enterState( reset, true );
      return;
    }
    if ( self == trans_dead_res ) {
      exitState( dead, self, true );
          enterState( reset, true );
      return;
    }
    if ( self == trans_op_res ) {
      exitState( operating, self, true );
          enterState( reset, true );
      return;
    }
    if ( self == trans_1_b ) {
      exitState( state_1, self, true );
      {
        Integer msg = (Integer) _msg;
System.out.println("Action"); 
;}
          enterState( branch, true );
      return;
    }
    if ( self == trans_2_b ) {
      exitState( state_2, self, true );
          enterState( branch1, true );
      return;
    }
    if ( self == trans_4_b ) {
      exitState( state_4, self, true );
          enterState( branch2, true );
      return;
    }
    if ( self == trans_4_3 ) {
      exitState( state_4, self, true );
          enterState( state_3, true );
      return;
    }
    if ( self == trans_3_2 ) {
      exitState( state_3, self, true );
          enterState( state_2, true );
      return;
    }
    if ( self == trans_3_2_not_wait ) {
      exitState( state_3, self, true );
          enterState( state_2, true );
      return;
    }
    if ( self == trans_2_1 ) {
      exitState( state_2, self, true );
          enterState( state_1, true );
      return;
    }
    if ( self == trans_1_1 ) {
      exitState( state_1, self, true );
          enterState( state_1, true );
      return;
    }
    super.executeActionOf( self, _msg );
  }
  @Override
  @AnyLogicInternalCodegenAPI
  public boolean testMessageOf( TransitionMessage _t, Object _msg ) {
    if ( _t == trans_op_rech ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
3 
;
      return msg.equals( _g );
    }
    if ( _t == trans_rech_op ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
3 
;
      return msg.equals( _g );
    }
    if ( _t == trans_rech_re ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
4 
;
      return msg.equals( _g );
    }
    if ( _t == trans_dead_res ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
4 
;
      return msg.equals( _g );
    }
    if ( _t == trans_op_res ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
4 
;
      return msg.equals( _g );
    }
    if ( _t == trans_1_b ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
0 
;
      return msg.equals( _g );
    }
    if ( _t == trans_2_b ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
0 
;
      return msg.equals( _g );
    }
    if ( _t == trans_4_b ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
0 
;
      return msg.equals( _g );
    }
    if ( _t == trans_4_3 ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
1 
;
      return msg.equals( _g );
    }
    if ( _t == trans_3_2 ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
1 
;
      return msg.equals( _g );
    }
    if ( _t == trans_3_2_not_wait ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
0 
;
      return msg.equals( _g );
    }
    if ( _t == trans_2_1 ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
1 
;
      return msg.equals( _g );
    }
    if ( _t == trans_1_1 ) {
      if ( !(_msg instanceof Integer) )
        return false;
      
Integer 
msg = (Integer) _msg;
      Object _g = 
1 
;
      return msg.equals( _g );
    }
    return super.testMessageOf( _t, _msg );
  }

标签: anylogicdl4j

解决方案


推荐阅读