Пример #1
0
 private AbsMAOSInitializer loadProblemType(String problemType) throws Exception {
   String initializerName = SystemSettingPath.getInitializerName(problemType);
   try {
     Class<?> cls = Class.forName(initializerName);
     return (AbsMAOSInitializer) cls.newInstance();
   } catch (Exception e) {
     throw new Exception(
         "Problem type \""
             + problemType
             + "\" specified by the first parameter could not be found: "
             + e.getMessage());
   }
 }
Пример #2
0
  /**
   * To start application from given arguments.
   *
   * @param args the arguments input by users.
   */
  public MAOSExecuter(String[] args) throws Exception {

    if (args.length < 1) {
      GradedOut.showEXTREMEMessage(
          MessageTags.MSGTAG_PLAIN
              + "Usage: "
              + this.getClass().getName()
              + " $PROBTYPE:[NAME=VALUE] N=* Nact=* T=* Tcon=* solver=*:[NAME=VALUE]"
              + BasicTag.RETURN_TAG);
      return;
    }

    GlobalTools.CPUTimeCostCounter.setStart("initTime");

    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_SECT + "[Initialization Information]" + BasicTag.RETURN_TAG);

    GradedOut.showNORMALMessage("$PRJ_PATH=" + System.getProperty("user.dir"));
    SystemSettingPath.initRootSettingPath();
    GradedOut.showNORMALMessage("$SET_PATH=" + SystemSettingPath.RootSettingPath);

    BasicParamHolder paramHolder = new BasicParamHolder();

    CMDLineProblemSettings problemSettings = paramHolder.getProblemSettings();
    problemSettings.loadContent(args[0]);

    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM
            + "Load initializer for problem type $PROBTYPE: "
            + problemSettings.getKey());
    AbsMAOSInitializer maosInitializer = loadProblemType(problemSettings.getKey());

    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM
            + "Load default project I/O (in \""
            + SystemSettingPath.DefaultPrjIOFile
            + "\") and common setting parameters from files in $SET_PATH");
    paramHolder.loadDefaultFiles(problemSettings.getKey());
    GradedOut.showNORMALMessage("$TASKPATH=" + paramHolder.prjIOPath.getProjectPath());

    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM + "Load problem instance \"" + args[0] + "\"");
    // initialize the problem task
    AbsProblemData problemData =
        maosInitializer.initProblemData(problemSettings, paramHolder.prjIOPath);

    GradedOut.showNORMALMessage(
        "Type="
            + problemSettings.getKey()
            + " description=\""
            + problemData.getDescription()
            + "\"");
    String problemInfo = "Instance: " + problemData.getSummary();
    GradedOut.showNORMALMessage(problemInfo);
    String initInfo = problemInfo + BasicTag.RETURN_TAG;

    // initialize internal representation (IR): primary landscape and auxiliary knowledge
    //    GradedOut.showNORMALMessage(MessageTags.MSGTAG_ACTION_NORM+"Initialize internal
    // representation (landscape)");
    AbsLandscape virtualLandscape = maosInitializer.initLandscape(problemData);

    if (args.length > 1) {
      GradedOut.showNORMALMessage(
          MessageTags.MSGTAG_ACTION_NORM + "Parse common command-line parameters: [NAME=VALUE]");
      paramHolder.parseSwarmSettings(ObjectMatrix.removeElementAt(args, 0));
    }

    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_PLAIN
            + "Common Setting information in the command line & \""
            + SystemSettingPath.DefaultSwarmFile
            + "\"");

    // show input (including default) parameters
    SwarmSettings swarmSettings = paramHolder.getSwarmSettings();
    String swarmInfo = swarmSettings.getSummary();
    GradedOut.showNORMALMessage(swarmInfo);
    initInfo += swarmInfo;

    // *** for the swarm topology
    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM
            + "Initialize the topology information (TOPO) in \""
            + SystemSettingPath.DefaultTopologyFile
            + "\"");
    TopologyHandler topologyHandler = new TopologyHandler();
    AbsTopology topologyEngine = topologyHandler.initTopology(swarmSettings.topology);
    String initTopologyInfo = "Topology: " + topologyEngine.getSummary();
    GradedOut.showNORMALMessage(initTopologyInfo);

    // *** for the swarm behaviors
    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM
            + "Initialize the components (R_INI, R_G, and R_T) in the behavioral toolbox \""
            + swarmSettings.solver
            + "\"");
    BehaviorBoxHandler behaviorHolder =
        new BehaviorBoxHandler(problemSettings.getKey(), virtualLandscape);
    behaviorHolder.parseBehaviorScript(swarmSettings.solver);
    //    SystemSettingPath.submitUsedFile("Solver", behaviorFileName);
    //    GradedOut.showNORMALMessage(MessageTags.MSGTAG_PLAIN+"Information for real behaviors in
    // the solver toolbox \""+swarmSettings.solver+"\"");
    String initBehaviorInfo = behaviorHolder.getBehaviorsString();
    //    GradedOut.showNORMALMessage(initBehaviorInfo);

    // *** initialize the multi-agent optimization framework
    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM + "Initialize the multiagent optimization framework (MAOS)");
    MAFramework maSolver = new MAFramework(virtualLandscape);
    maSolver.initSwarmShell(swarmSettings.N, swarmSettings.Nact);
    maSolver.initInteractionMode(topologyEngine);
    maSolver.initBehaviors(
        behaviorHolder.absConstructor, behaviorHolder.absStateUpdater, behaviorHolder.absGenerator);
    maSolver.initTerminationCondition(swarmSettings.T, swarmSettings.Tcon);

    // Retrieve history solution information
    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM + "Retrieve history solution information in $SOL_PATH");
    HistoricalStateHandler historicalStateHandler =
        new HistoricalStateHandler(
            virtualLandscape, maosInitializer.getSolutionIOHandler(), paramHolder.prjIOPath);
    historicalStateHandler.setLowerBound(maosInitializer.getLowerBound());
    historicalStateHandler.setOptimalBound(swarmSettings.opt);
    GradedOut.showNORMALMessage(historicalStateHandler.printKnownSolutionInfo());

    // For output result in runs
    ResultOutputHandler resultOutputHandler = new ResultOutputHandler();
    String outfileName =
        resultOutputHandler.setResultFile(
            paramHolder.getResultFileDir(problemSettings.getKey()),
            paramHolder.getResultFileName());
    SystemSettingPath.submitUsedFile("$RES_FILE", outfileName);

    CycleResult cycleResult = maosInitializer.getCycleResult();
    cycleResult.setInfo(virtualLandscape);

    OutputIntervalChecker normalScreenOutputHandler = new OutputIntervalChecker();
    normalScreenOutputHandler.setOutputInterval(swarmSettings.Tout);

    // initialize the termination condition

    // initialize CycleInfoManager for outputting to screen and result file
    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_NORM
            + "Initialize CycleInfoManager for outputing screen information, saving results, and specifying termination conditions");
    CycleInfoManager cycleChecker =
        new CycleInfoManager(
            virtualLandscape,
            cycleResult,
            historicalStateHandler,
            normalScreenOutputHandler,
            resultOutputHandler,
            maSolver.getTerminateCycleCheckEngine());

    // initialize cycle analyzer
    //    AbsCycleAnalysizer cycleAnalysizer = maosInitializer.getCycleAnalysizer();
    //    if (cycleAnalysizer!=null) cycleAnalysizer.setInfo(virtualLandscape);
    //    cycleChecker.setCycleAnalysizer(cycleAnalysizer);

    // show involved input/output files and paths
    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_PLAIN + "Involved input/output files and paths ...");
    GradedOut.showNORMALMessage(SystemSettingPath.getAllUsedFilesString());

    // show the preprocessing time
    GlobalTools.CPUTimeCostCounter.setEnd("initTime");
    GradedOut.showIMPORTANTMessage(
        MessageTags.MSGTAG_PLAIN
            + "Total preprocessing time: "
            + GlobalTools.CPUTimeCostCounter.getTotalTimeInSeconds("initTime")
            + "(s)");
    GlobalTools.CPUTimeCostCounter.removeCounter("initTime");

    // write head information to result file
    resultOutputHandler.writeCommentString(
        "[Initialization Information]"
            + BasicTag.RETURN_TAG
            + initInfo
            + BasicTag.RETURN_TAG
            + BasicTag.RETURN_TAG
            + initTopologyInfo
            + BasicTag.RETURN_TAG
            + initBehaviorInfo
            + BasicTag.RETURN_TAG);

    // run MAOS
    GradedOut.showNORMALMessage(MessageTags.MSGTAG_ACTION_SECT + "[Runtime Information]");
    resultOutputHandler.writeCommentString(BasicTag.RETURN_TAG + "[Runtime Information]");

    runMAOS(maSolver, cycleChecker, swarmSettings.DUP_TIMES);

    // output final statistics information
    GradedOut.showNORMALMessage(
        MessageTags.MSGTAG_ACTION_SECT + "[Statistics Information]" + BasicTag.RETURN_TAG);
    String finalStats = cycleChecker.finalStats();
    GradedOut.showNORMALMessage(finalStats);
    resultOutputHandler.writeCommentString(
        BasicTag.RETURN_TAG + "[Statistics Information]" + BasicTag.RETURN_TAG + finalStats);

    //    GradedOut.showNORMALMessage(MessageTags.MSGTAG_ACTION_SECT+"The system was terminated
    // successfully.");
    //    GlobalTools.CPUTimeCostCounter.printSelf();
  }