// Path: leotask/src/core/org/leores/util/Logger.java
// public class Logger {
// 	protected final static int LOG_MAX = 100;
// 	protected final static int LOG_CRITICAL = 80;
// 	protected final static int LOG_ERROR = 70;
// 	protected final static int LOG_WARNING = 60;
// 	protected final static int LOG_INFO = 50; //default log level
// 	protected final static int LOG_CASUAL = 40;
// 	protected final static int LOG_TRIVIAL = 30;
// 	protected final static int LOG_MIN = 0;
// 
// 	protected String log = "";
// 	protected Integer logRecordLevel = LOG_MAX;
// 	protected Integer logOutputLevel = LOG_MIN;
// 	protected Processable2<String, Integer, String> logProcessor = null;
// 	protected static Logger tLogger = new Logger();
// 
// 	public static void setTLogger(Logger logger) {
// 		tLogger = logger;
// 	}
// 
// 	public static Logger getTLogger() {
// 		return tLogger;
// 	}
// 
// 	public String getLog() {
// 		return log;
// 	}
// 
// 	public void setLogProcessor(Processable2<String, Integer, String> logProcessor) {
// 		this.logProcessor = logProcessor;
// 	}
// 
// 	public Integer getLogRecordLevel() {
// 		return logRecordLevel;
// 	}
// 
// 	public void setLogRecordLevel(Integer logRecordLevel) {
// 		this.logRecordLevel = logRecordLevel;
// 	}
// 
// 	public Integer getLogOutputLevel() {
// 		return logOutputLevel;
// 	}
// 
// 	public void setLogOutputLevel(Integer logOutputLevel) {
// 		this.logOutputLevel = logOutputLevel;
// 	}
// 
// 	protected String process(int logLevel, String str) {
// 		String rtn = str;
// 		if (logProcessor != null) {
// 			rtn = logProcessor.process(logLevel, str);
// 		}
// 		return rtn;
// 	}
// 
// 	protected String _log(int logLevel, String str) {
// 		if (logLevel >= LOG_ERROR) {
// 			System.err.print(str);
// 		} else {
// 			System.out.print(str);
// 		}
// 		return str;
// 	}
// 
// 	protected String log(int logLevel, boolean addLineBreak, String str) {
// 		String rtn = process(logLevel, str);
// 		if (rtn != null) {
// 			String sEnd = "";
// 			if (addLineBreak) {
// 				sEnd = "\n";
// 			}
// 			if (logLevel >= logRecordLevel) {
// 				log += rtn + sEnd;
// 			}
// 			if (logLevel >= logOutputLevel) {
// 				if (getTLogger().equals(this)) {
// 					rtn = _log(logLevel, rtn + sEnd);
// 				} else {
// 					rtn = getTLogger().log(logLevel, addLineBreak, rtn);
// 				}
// 
// 			}
// 		}
// 		return rtn;
// 	}
// 
// 	protected String log(int logLevel, String str) {
// 		return log(logLevel, true, str);
// 	}
// 
// 	protected String log(boolean addLineBreak, String str) {
// 		return log(LOG_INFO, addLineBreak, str);
// 	}
// 
// 	protected String log(Exception e) {
// 		e.printStackTrace();
// 		return log(LOG_ERROR, true, e.toString());
// 	}
// 
// 	protected String log(String str) {
// 		return log(LOG_INFO, true, str);
// 	}
// 
// 	protected String log(String str, Object obj) {
// 		return log(str + U.toStr(obj));
// 	}
// 
// 	protected String log(String str, Object... objs) {
// 		return log(str + U.toStr(objs));
// 	}
// 
// 	protected String log(Object obj) {
// 		return log("", obj);
// 	}
// 
// 	protected String log(Object... objs) {
// 		return log("", objs);
// 	}
// 
// }
// 
// Path: leotask/src/core/org/leores/util/U.java
// public class U extends SerialUtil {
// 
// }


import java.util.Random;
import java.util.Arrays;
import java.util.Vector;
import java.util.Hashtable;
import org.leores.util.Logger;
import org.leores.util.U;
	 * of the target function
	 */
	private void order(double[][] simp, int[] worstNextBestArray) {
		int worst = 0, nextWorst = 0, best = 0;
		for (int i = 0; i < numVertices; i++) {
			if (value(simp[i]) < value(simp[best]))
				best = i;
			if (value(simp[i]) > value(simp[worst]))
				worst = i;
		}
		nextWorst = best;
		for (int i = 0; i < numVertices; i++)
			if (i != worst && value(simp[i]) > value(simp[nextWorst]))
				nextWorst = i;
		worstNextBestArray[WORST] = worst;
		worstNextBestArray[NEXT_WORST] = nextWorst;
		worstNextBestArray[BEST] = best;
	}

	//simplex [Iteration: s0(p1, p2....), s1(),....]
	private synchronized String sSimplex(double[][] simp) {
		String rtn = "";
		for (int i = 0; i < numVertices; i++)
			rtn += sVertex(simp[i]) + " | ";
		return rtn;
	}

	private synchronized String sVertex(double[] vertex) {
		String rtn = "";
		for (int j = 0; j < numParams; j++)
// Path: leotask/src/core/org/leores/util/Logger.java
// public class Logger {
// 	protected final static int LOG_MAX = 100;
// 	protected final static int LOG_CRITICAL = 80;
// 	protected final static int LOG_ERROR = 70;
// 	protected final static int LOG_WARNING = 60;
// 	protected final static int LOG_INFO = 50; //default log level
// 	protected final static int LOG_CASUAL = 40;
// 	protected final static int LOG_TRIVIAL = 30;
// 	protected final static int LOG_MIN = 0;
// 
// 	protected String log = "";
// 	protected Integer logRecordLevel = LOG_MAX;
// 	protected Integer logOutputLevel = LOG_MIN;
// 	protected Processable2<String, Integer, String> logProcessor = null;
// 	protected static Logger tLogger = new Logger();
// 
// 	public static void setTLogger(Logger logger) {
// 		tLogger = logger;
// 	}
// 
// 	public static Logger getTLogger() {
// 		return tLogger;
// 	}
// 
// 	public String getLog() {
// 		return log;
// 	}
// 
// 	public void setLogProcessor(Processable2<String, Integer, String> logProcessor) {
// 		this.logProcessor = logProcessor;
// 	}
// 
// 	public Integer getLogRecordLevel() {
// 		return logRecordLevel;
// 	}
// 
// 	public void setLogRecordLevel(Integer logRecordLevel) {
// 		this.logRecordLevel = logRecordLevel;
// 	}
// 
// 	public Integer getLogOutputLevel() {
// 		return logOutputLevel;
// 	}
// 
// 	public void setLogOutputLevel(Integer logOutputLevel) {
// 		this.logOutputLevel = logOutputLevel;
// 	}
// 
// 	protected String process(int logLevel, String str) {
// 		String rtn = str;
// 		if (logProcessor != null) {
// 			rtn = logProcessor.process(logLevel, str);
// 		}
// 		return rtn;
// 	}
// 
// 	protected String _log(int logLevel, String str) {
// 		if (logLevel >= LOG_ERROR) {
// 			System.err.print(str);
// 		} else {
// 			System.out.print(str);
// 		}
// 		return str;
// 	}
// 
// 	protected String log(int logLevel, boolean addLineBreak, String str) {
// 		String rtn = process(logLevel, str);
// 		if (rtn != null) {
// 			String sEnd = "";
// 			if (addLineBreak) {
// 				sEnd = "\n";
// 			}
// 			if (logLevel >= logRecordLevel) {
// 				log += rtn + sEnd;
// 			}
// 			if (logLevel >= logOutputLevel) {
// 				if (getTLogger().equals(this)) {
// 					rtn = _log(logLevel, rtn + sEnd);
// 				} else {
// 					rtn = getTLogger().log(logLevel, addLineBreak, rtn);
// 				}
// 
// 			}
// 		}
// 		return rtn;
// 	}
// 
// 	protected String log(int logLevel, String str) {
// 		return log(logLevel, true, str);
// 	}
// 
// 	protected String log(boolean addLineBreak, String str) {
// 		return log(LOG_INFO, addLineBreak, str);
// 	}
// 
// 	protected String log(Exception e) {
// 		e.printStackTrace();
// 		return log(LOG_ERROR, true, e.toString());
// 	}
// 
// 	protected String log(String str) {
// 		return log(LOG_INFO, true, str);
// 	}
// 
// 	protected String log(String str, Object obj) {
// 		return log(str + U.toStr(obj));
// 	}
// 
// 	protected String log(String str, Object... objs) {
// 		return log(str + U.toStr(objs));
// 	}
// 
// 	protected String log(Object obj) {
// 		return log("", obj);
// 	}
// 
// 	protected String log(Object... objs) {
// 		return log("", objs);
// 	}
// 
// }
// 
// Path: leotask/src/core/org/leores/util/U.java
// public class U extends SerialUtil {
// 
// }


// Path: leotask/src/core/org/leores/math/Minimizer.java
import java.util.Random;
import java.util.Arrays;
import java.util.Vector;
import java.util.Hashtable;
import org.leores.util.Logger;
import org.leores.util.U;

	 * of the target function
	 */
	private void order(double[][] simp, int[] worstNextBestArray) {
		int worst = 0, nextWorst = 0, best = 0;
		for (int i = 0; i < numVertices; i++) {
			if (value(simp[i]) < value(simp[best]))
				best = i;
			if (value(simp[i]) > value(simp[worst]))
				worst = i;
		}
		nextWorst = best;
		for (int i = 0; i < numVertices; i++)
			if (i != worst && value(simp[i]) > value(simp[nextWorst]))
				nextWorst = i;
		worstNextBestArray[WORST] = worst;
		worstNextBestArray[NEXT_WORST] = nextWorst;
		worstNextBestArray[BEST] = best;
	}

	//simplex [Iteration: s0(p1, p2....), s1(),....]
	private synchronized String sSimplex(double[][] simp) {
		String rtn = "";
		for (int i = 0; i < numVertices; i++)
			rtn += sVertex(simp[i]) + " | ";
		return rtn;
	}

	private synchronized String sVertex(double[] vertex) {
		String rtn = "";
		for (int j = 0; j < numParams; j++)
			rtn += "  " + U.valToStr(vertex[j], sPatNumOut);