All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.encog.Encog Maven / Gradle / Ivy

The newest version!
/*
 * Encog(tm) Core v3.4 - Java Version
 * http://www.heatonresearch.com/encog/
 * https://github.com/encog/encog-java-core
 
 * Copyright 2008-2017 Heaton Research, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *   
 * For more information on Heaton Research copyrights, licenses 
 * and trademarks visit:
 * http://www.heatonresearch.com/copyright
 */
package org.encog;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.encog.mathutil.randomize.factory.BasicRandomFactory;
import org.encog.mathutil.randomize.factory.RandomFactory;
import org.encog.plugin.EncogPluginBase;
import org.encog.plugin.EncogPluginLogging1;
import org.encog.plugin.system.SystemActivationPlugin;
import org.encog.plugin.system.SystemLoggingPlugin;
import org.encog.plugin.system.SystemMethodsPlugin;
import org.encog.plugin.system.SystemTrainingPlugin;
import org.encog.util.concurrency.EngineConcurrency;

/**
 * Main Encog class, does little more than provide version information. Also
 * used to hold the ORM session that Encog uses to work with Hibernate.
 * 
 * @author jheaton
 */
public final class Encog {

	/**
	 * The default encoding used by Encog.
	 */
	public static final String DEFAULT_ENCODING = "UTF-8";
	
	/**
	 * The current engog version, this should be read from the properties.
	 */
	public static final String VERSION = "3.4.0";
	
	/**
	 * The current engog version, this should be read from the properties.
	 */
	public static final String COPYRIGHT = "Copyright 2014 by Heaton Research, Inc.";
	
	/**
	 * The current engog version, this should be read from the properties.
	 */
	public static final String LICENSE = "Open Source under the Apache License";

	/**
	 * The current engog file version, this should be read from the properties.
	 */
	private static final String FILE_VERSION = "1";

	/**
	 * The default precision to use for compares.
	 */
	public static final int DEFAULT_PRECISION = 10;

	/**
	 * Default point at which two doubles are equal.
	 */
	public static final double DEFAULT_DOUBLE_EQUAL = 0.0000000000001;

	/**
	 * The version of the Encog JAR we are working with. Given in the form
	 * x.x.x.
	 */
	public static final String ENCOG_VERSION = "encog.version";

	/**
	 * The encog file version. This determines of an encog file can be read.
	 * This is simply an integer, that started with zero and is incremented each
	 * time the format of the encog data file changes.
	 */
	public static final String ENCOG_FILE_VERSION = "encog.file.version";
	
	/**
	 * Used to create random number generators, by default, use Java's Random class.
	 */
	private RandomFactory randomFactory = new BasicRandomFactory();
	
	private Set shutdownTasks = new HashSet();

	/**
	 * The instance.
	 */
	private static Encog instance = new Encog();
	
	/**
	 * Get the instance to the singleton.
	 * 
	 * @return The instance.
	 */
	public static Encog getInstance() {		
		return Encog.instance;
	}

	/**
	 * The current logging plugin.
	 */
	private EncogPluginLogging1 loggingPlugin;

	/**
	 * The plugins.
	 */
	private final List plugins 
		= new ArrayList();

	/**
	 * Get the properties as a Map.
	 * 
	 * @return The requested value.
	 */
	private final Map properties 
		= new HashMap();

	/**
	 * Private constructor.
	 */
	private Encog() {
		this.properties.put(Encog.ENCOG_VERSION, Encog.VERSION);
		this.properties.put(Encog.ENCOG_FILE_VERSION, Encog.FILE_VERSION);
		
		registerPlugin(new SystemLoggingPlugin());
		registerPlugin(new SystemMethodsPlugin());
		registerPlugin(new SystemTrainingPlugin());
		registerPlugin(new SystemActivationPlugin());
	}

	/**
	 * @return the properties
	 */
	public Map getProperties() {
		return this.properties;
	}

	/**
	 * Register a plugin. If this plugin provides a core service, such as
	 * calculation or logging, this will remove the old plugin.
	 * 
	 * @param plugin
	 *            The plugin to register.
	 */
	public void registerPlugin(final EncogPluginBase plugin) {
		// is it not a general plugin?
		if (plugin.getPluginServiceType() 
				!= EncogPluginBase.TYPE_SERVICE) {
			if (plugin.getPluginServiceType() 
					== EncogPluginBase.TYPE_LOGGING) {
				// remove the old logging plugin
				if (this.loggingPlugin != null) {
					this.plugins.remove(this.loggingPlugin);
				}
				this.loggingPlugin = (EncogPluginLogging1) plugin;
			}
		}
		// add to the plugins
		this.plugins.add(plugin);
	}

	/**
	 * Unregister a plugin. If you unregister the current logging or calc
	 * plugin, a new system one will be created. Encog will crash without a
	 * logging or system plugin.
	 * 
	 * @param plugin The plugin.
	 */
	public void unregisterPlugin(final EncogPluginBase plugin) {

		// is it a special plugin?
		// if so, replace with the system, Encog will crash without these
		if (plugin == this.loggingPlugin) {
			this.loggingPlugin = new SystemLoggingPlugin();
		}

		// remove it
		this.plugins.remove(plugin);
	}

	/**
	 * Provides any shutdown that Encog may need. Currently this shuts down the
	 * thread pool.
	 */
	public void shutdown() {
		while(this.shutdownTasks.size()>0) {
			Object[] list = this.shutdownTasks.toArray();
			for(int i=0;i getPlugins() {
		return this.plugins;
	}
	
	/**
	 * @return True, if running on OSX.
	 */
	public static boolean isOSX() {
	    String osName = System.getProperty("os.name");
	    return osName.contains("OS X");
	}

	/**
	 * @return the randomFactory
	 */
	public RandomFactory getRandomFactory() {
		return randomFactory;
	}

	/**
	 * @param randomFactory the randomFactory to set
	 */
	public void setRandomFactory(RandomFactory randomFactory) {
		this.randomFactory = randomFactory;
	}
	
	/**
	 * Add a shutdown task.
	 * @param task The shutdown task.
	 */
	public void addShutdownTask(EncogShutdownTask task) {
		this.shutdownTasks.add(task);
	}
	
	/**
	 * Remove a shutdown task.
	 * @param task The shutdown task.
	 */
	public void removeShutdownTask(EncogShutdownTask task) {
		this.shutdownTasks.remove(task);
	}
	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy