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

📄 driver.java

📁 模拟退火是一种启发式算法
💻 JAVA
字号:
package org.theblueplanet.annealing;import java.util.ArrayList;import org.apache.log4j.Logger;/** *  This is the middle layer between the UI and the algorithm. It runs the *  algorithm and maps the AnnealingScheme Object constructed by the *  UI client to a Schedule object. *  As of version 1.1 this runs in its own thread * * @author     Charles M間nin * @since    October 29, 2001 * @version    1.1 */public class Driver implements Runnable {    private final static int ITOL  = 10;    private final static long idum = -64;    private static Logger logger    = Logger.getLogger("org.theblueplanet.annealing");    private AnnealingScheme scheme;    private int loggerFrequency;    public Driver(AnnealingScheme scheme, int loggerFrequency) {        refresh(scheme);        this.loggerFrequency = loggerFrequency;        logger.debug("Logger frequency = " + loggerFrequency);    }    public void refresh(AnnealingScheme scheme) {        this.scheme = scheme;    }    /**     *  Main processing method for the Driver class     *     * @param  scheme                     The Object that encapsulates the annealing parameters     * @exception  InstantiationException  Description of Exception     * @exception  IllegalAccessException  Description of Exception     * @exception  ClassNotFoundException  Description of Exception     */    public void run() {        try {        double ybb               = 1.0e+30;        double temptr            = scheme.getTemperature();        int iiter                = scheme.getNIterations();        double coolingRate       = (double) scheme.getCoolingRate();        Schedule schedule        = new Schedule(scheme);        SimplexList simplexList  = new SimplexList(ITOL);        Simplex simplex;        logger.debug("Initializing annealing scheme with parameters\n" + scheme.toString());        schedule.initializeP();        int loopLevel = -1;        for (; ; ) {            loopLevel++;            schedule.setPDiagonal();            schedule.setY(scheme.getOffset());            schedule.setYb(1.0e+30);            int nit  = 0;            for (int jiter = 1; jiter <= 100; jiter++) {                schedule.setIter(iiter);                //Anneal.amebsa(schedule, scheme.getTolerance(), temptr, idum);                schedule.amebsa(scheme.getTolerance(), temptr, idum);                temptr *= (100. - coolingRate) / 100.;                nit += iiter - schedule.getIter();                if (schedule.getYb() < ybb) {                    ybb = schedule.getYb();                }                if (schedule.getIter() > 0) {                    break;                }            }            simplex = new Simplex(schedule.getPb(), schedule.getYb(), scheme.getNdim());            //Display the best simplex every loggerFrequency time            if(loggerFrequency != 0) {                if (loopLevel % loggerFrequency == 0) {                    logger.info("**** best solution iteration " + loopLevel);                    simplexList.toScreen();                    logger.info("****");                }            }            if (simplexList.size() == ITOL) {                simplexList.remove(simplexList.getIndexOfMax());            }            simplexList.add(simplex);            if (simplexList.size() == ITOL) {                if (simplexList.spread() < scheme.getTolerance()) {// Converged                    logger.info("Solutions set:");                    simplexList.toScreen();                    logger.info("Best solution:");                    simplexList.getMinSimplex().toScreen();                    scheme.setOffset(simplexList.getMinSimplex().getVertex());                    logger.info("***Converged with spread=" + simplexList.spread() + "***");                    break;                } else {                    if (loggerFrequency != 0) {                        if (loopLevel % loggerFrequency == 0) {                            logger.info("***Spread=" + simplexList.spread() + "***");                        }                    }                }            }        }        } catch(Exception ie) {            ie.printStackTrace();        }    }}

⌨️ 快捷键说明

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