📄 driver.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 + -