⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 combinedmgenerator.java

📁 pso源程序
💻 JAVA
字号:
/**
 * Description: The description of generating operator for achieve an trail state
 *
 * @ Author        Create/Modi     Note
 * Xiaofeng Xie    Apr 28, 2006
 * Xiaofeng Xie    Jul 14, 2006
 *
 * @version 1.0
 */

package maosKernel.behavior.generate;

import maosKernel.represent.*;
import maosKernel.represent.landscape.*;
import maosKernel.memory.*;
import maosKernel.behavior.mutate.*;
import maosKernel.represent.encode.*;

public class CombinedMGenerator extends AbsGenerator implements ISetMAInfoEngine, ISetMSInfoEngine {
  private AbsGenerator baseGenerator;
  private AbsExplicitMutator[] mutators = new AbsExplicitMutator[0];

  private final int ENCODE_NULL= -1;
  private final int ENCODE_LOCAL= 0;
  private final int ENCODE_GLOBAL= 1;
  private int encodeStatus =ENCODE_NULL;


  public void initGenerator(AbsGenerator constructor) {
    this.baseGenerator = constructor;
  }

  public String getSummary() {
    String sumInfo = "";
    sumInfo += super.getSummary();
    sumInfo += "[Primary: "+baseGenerator.getSummary();
    if (mutators.length>0) {
      sumInfo += "; Mutators: ";
      for (int i=0; i<mutators.length; i++) {
        sumInfo += mutators[i].getSummary();
        if (i<mutators.length-1) sumInfo += "|";
      }
    }
    sumInfo += "]";
    return sumInfo;
  }

  public void initMutators(AbsExplicitMutator[] mutators) {
    this.mutators = mutators;
    initEncodeStatus();
  }

  private void initEncodeStatus() {
    if (mutators.length==0) encodeStatus = ENCODE_NULL;
    else if (mutators[mutators.length-1] instanceof IIndirectEncodeGlobalEngine) {
      encodeStatus = ENCODE_GLOBAL;
    } else {
      for (int i=0; i<mutators.length; i++) {
        if (!(mutators[i] instanceof IIndirectEncodeLocalEngine)) {
          return;
        }
      }
      encodeStatus = ENCODE_LOCAL;
    }
  }

  private void postEncoding(BasicEncodeData encodeData) {
    if (encodeStatus==ENCODE_NULL) return;
    if (encodeStatus==ENCODE_GLOBAL) {
      ((IIndirectEncodeGlobalEngine)mutators[mutators.length-1]).encodeGlobal(encodeData);
      return;
    }
    if (encodeStatus==ENCODE_LOCAL && !encodeData.isInfoRemoved()) {
      for (int i=0; i<mutators.length; i++) {
        ((IIndirectEncodeLocalEngine)mutators[i]).encodeLocal(encodeData);
      }
    }
  }

  public void setInfo(EncodedState baseState) {
    if (baseGenerator instanceof ISetMAInfoEngine) {
      ((ISetMAInfoEngine)baseGenerator).setInfo(baseState);
    }
  }

  public void setInfo(IGetSocialInfoEngine baseState) {
    if (baseGenerator instanceof ISetMSInfoEngine) {
      ((ISetMSInfoEngine)baseGenerator).setInfo(baseState);
    }
  }

  public AbsGenerator getSubGenerator() {
    return this.baseGenerator;
  }

  public boolean generateBehavior(EncodedState trailState) {
    if(!baseGenerator.generateBehavior(trailState)) return false;
    for (int i=0; i<mutators.length; i++) {
      mutators[i].mutateBehavior(trailState.getSearchState());
    }
    postEncoding(trailState.getEncodeInfo());
    return true;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -