/*
* Encog(tm) Workbench v3.0
* http://www.heatonresearch.com/encog/
* http://code.google.com/p/encog-java/
* Copyright 2008-2011 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.workbench.process;
import java.io.File;
import org.encog.bot.BotUtil;
import org.encog.engine.network.activation.ActivationTANH;
import org.encog.mathutil.rbf.RBFEnum;
import org.encog.ml.MLMethod;
import org.encog.ml.data.MLDataSet;
import org.encog.ml.svm.KernelType;
import org.encog.ml.svm.SVMType;
import org.encog.neural.networks.BasicNetwork;
import org.encog.neural.pattern.ADALINEPattern;
import org.encog.neural.pattern.ART1Pattern;
import org.encog.neural.pattern.BAMPattern;
import org.encog.neural.pattern.BoltzmannPattern;
import org.encog.neural.pattern.CPNPattern;
import org.encog.neural.pattern.ElmanPattern;
import org.encog.neural.pattern.FeedForwardPattern;
import org.encog.neural.pattern.HopfieldPattern;
import org.encog.neural.pattern.JordanPattern;
import org.encog.neural.pattern.PNNPattern;
import org.encog.neural.pattern.RadialBasisPattern;
import org.encog.neural.pattern.SOMPattern;
import org.encog.neural.pattern.SVMPattern;
import org.encog.workbench.EncogWorkBench;
import org.encog.workbench.dialogs.createnetwork.CreateADALINEDialog;
import org.encog.workbench.dialogs.createnetwork.CreateART1;
import org.encog.workbench.dialogs.createnetwork.CreateAutomatic;
import org.encog.workbench.dialogs.createnetwork.CreateBAMDialog;
import org.encog.workbench.dialogs.createnetwork.CreateBlotzmannDialog;
import org.encog.workbench.dialogs.createnetwork.CreateCPNDialog;
import org.encog.workbench.dialogs.createnetwork.CreateElmanDialog;
import org.encog.workbench.dialogs.createnetwork.CreateFeedforward;
import org.encog.workbench.dialogs.createnetwork.CreateHopfieldDialog;
import org.encog.workbench.dialogs.createnetwork.CreateJordanDialog;
import org.encog.workbench.dialogs.createnetwork.CreateNeuralNetworkDialog;
import org.encog.workbench.dialogs.createnetwork.CreatePNN;
import org.encog.workbench.dialogs.createnetwork.CreateRBFDialog;
import org.encog.workbench.dialogs.createnetwork.CreateSOMDialog;
import org.encog.workbench.dialogs.createnetwork.CreateSVMDialog;
import org.encog.workbench.dialogs.createnetwork.NeuralNetworkType;
import org.encog.workbench.tabs.incremental.IncrementalPruneTab;
public class CreateNeuralNetwork {
public static void process(File path) {
MLMethod network = null;
CreateNeuralNetworkDialog dialog = new CreateNeuralNetworkDialog(
EncogWorkBench.getInstance().getMainWindow());
dialog.setType(NeuralNetworkType.Feedforward);
if (dialog.process()) {
switch (dialog.getType()) {
case Automatic:
createAutomatic();
network=null;
break;
case Feedforward:
network = createFeedForward();
break;
case SOM:
network = createSOM();
break;
case Hopfield:
network = createHopfield();
break;
case Elman:
network = createElman();
break;
case Jordan:
network = createJordan();
break;
case RBF:
network = createRBF();
break;
case BAM:
network = createBAM();
break;
case CPN:
network = createCPN();
break;
case Boltzmann:
network = createBoltzmann();
break;
case ADALINE:
network = createADALINE();
break;
case ART1:
network = createART1();
break;
case SVM:
network = createSVM();
break;
case PNN:
network = createPNN();
break;
}
if (network != null) {
EncogWorkBench.getInstance().save(path,network);
EncogWorkBench.getInstance().refresh();
}
}
}
private static MLMethod createPNN() {
CreatePNN dialog = new CreatePNN();
if( dialog.process() ) {
PNNPattern pattern = new PNNPattern();
pattern.setInputNeurons(dialog.getInputCount().getValue());
pattern.setOutputNeurons(dialog.getOutputCount().getValue());
pattern.setKernel(dialog.getKernelType());
pattern.setOutmodel(dialog.getOutputModel());
return pattern.generate();
}
return null;
}
private static MLMethod createSVM() {
CreateSVMDialog dialog = new CreateSVMDialog(EncogWorkBench
.getInstance().getMainWindow());
dialog.setSVMType(SVMType.EpsilonSupportVectorRegression);
dialog.setKernelType(KernelType.RadialBasisFunction);
if (dialog.process()) {
SVMPattern svm = new SVMPattern();
svm.setInputNeurons(dialog.getInputCount().getValue());
svm.setOutputNeurons(dialog.getOutputCount().getValue());
svm.setKernelType(dialog.getKernelType());
svm.setSVMType(dialog.getSVMType());
return svm.generate();
} else
return null;
}
private static MLMethod createRBF() {
CreateRBFDialog dialog = new CreateRBFDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
RBFEnum type = dialog.getRBFType();
RadialBasisPattern rbf = new RadialBasisPattern();
rbf.setInputNeurons(dialog.getInputCount().getValue());
rbf.addHiddenLayer(dialog.getHiddenCount().getValue());
rbf.setOutputNeurons(dialog.getOutputCount().getValue());
rbf.setRBF(type);
return rbf.generate();
} else
return null;
}
private static MLMethod createJordan() {
CreateJordanDialog dialog = new CreateJordanDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
JordanPattern jordan = new JordanPattern();
jordan.setInputNeurons(dialog.getInputCount().getValue());
jordan.addHiddenLayer(dialog.getHiddenCount().getValue());
jordan.setOutputNeurons(dialog.getOutputCount().getValue());
jordan.setActivationFunction(new ActivationTANH());
return jordan.generate();
} else
return null;
}
private static MLMethod createElman() {
CreateElmanDialog dialog = new CreateElmanDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
ElmanPattern elman = new ElmanPattern();
elman.setInputNeurons(dialog.getInputCount().getValue());
elman.addHiddenLayer(dialog.getHiddenCount().getValue());
elman.setOutputNeurons(dialog.getOutputCount().getValue());
elman.setActivationFunction(new ActivationTANH());
return elman.generate();
} else
return null;
}
private static MLMethod createHopfield() {
CreateHopfieldDialog dialog = new CreateHopfieldDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
HopfieldPattern hopfield = new HopfieldPattern();
hopfield.setInputNeurons(dialog.getNeuronCount().getValue());
return hopfield.generate();
} else
return null;
}
private static MLMethod createSOM() {
CreateSOMDialog dialog = new CreateSOMDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
SOMPattern som = new SOMPattern();
som.setInputNeurons(dialog.getInputCount().getValue());
som.setOutputNeurons(dialog.getOutputCount().getValue());
return som.generate();
} else
return null;
}
private static MLMethod createFeedForward() {
CreateFeedforward dialog = new CreateFeedforward(EncogWorkBench
.getInstance().getMainWindow());
dialog.setActivationFunctionHidden(new ActivationTANH());
dialog.setActivationFunctionOutput(new ActivationTANH());
if (dialog.process()) {
FeedForwardPattern feedforward = new FeedForwardPattern();
feedforward.setActivationFunction(dialog.getActivationFunctionHidden());
feedforward.setActivationOutput(dialog.getActivationFunctionOutput());
feedforward.setInputNeurons(dialog.getInputCount().getValue());
for (int i = 0; i < dialog.getHidden().getModel().size(); i++) {
String str = (String) dialog.getHidden().getModel()
.getElementAt(i);
int i1 = str.indexOf(':');
int i2 = str.indexOf("neur");
if (i1 != -1 && i2 != -1) {
str = str.substring(i1 + 1, i2).trim();
int neuronCount = Integer.parseInt(str);
feedforward.addHiddenLayer(neuronCount);
}
}
feedforward.setInputNeurons(dialog.getInputCount().getValue());
feedforward.setOutputNeurons(dialog.getOutputCount().getValue());
return feedforward.generate();
}
return null;
}
private static BasicNetwork createAutomatic() {
CreateAutomatic dialog = new CreateAutomatic(EncogWorkBench
.getInstance().getMainWindow());
dialog.setActivationFunction(new ActivationTANH());
dialog.getWeightTries().setValue(5);
dialog.getIterations().setValue(25);
dialog.getWindowSize().setValue(10);
if (dialog.process()) {
MLDataSet training = dialog.getTraining();
if( training == null ) {
return null;
}
FeedForwardPattern pattern = new FeedForwardPattern();
pattern.setInputNeurons(training.getInputSize());
pattern.setOutputNeurons(training.getIdealSize());
pattern.setActivationFunction(dialog.getActivationFunction());
IncrementalPruneTab tab = new IncrementalPruneTab(
dialog.getIterations().getValue(),
dialog.getWeightTries().getValue(),
dialog.getWindowSize().getValue(),
training,
pattern);
for (int i = 0; i < dialog.getHidden().getModel().size(); i++) {
String str = (String) dialog.getHidden().getModel()
.getElementAt(i);
String lowStr = BotUtil.extract(str,"low=",".",0);
String highStr = BotUtil.extract(str,"high=",",",0);
int low = Integer.parseInt(lowStr);
int high = Integer.parseInt(highStr);
tab.addHiddenRange(low,high);
}
EncogWorkBench.getInstance().getMainWindow().getTabManager().openModalTab(tab, "Incremental Prune");
return null;
}
return null;
}
private static MLMethod createADALINE() {
CreateADALINEDialog dialog = new CreateADALINEDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
ADALINEPattern adaline = new ADALINEPattern();
adaline.setInputNeurons(dialog.getNeuronCount().getValue());
adaline.setOutputNeurons(dialog.getElementCount().getValue());
return adaline.generate();
} else
return null;
}
private static MLMethod createBAM() {
CreateBAMDialog dialog = new CreateBAMDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
BAMPattern bam = new BAMPattern();
bam.setF1Neurons(dialog.getLayerACount().getValue());
bam.setF2Neurons(dialog.getLayerBCount().getValue());
return bam.generate();
} else
return null;
}
private static MLMethod createBoltzmann() {
CreateBlotzmannDialog dialog = new CreateBlotzmannDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
BoltzmannPattern boltz = new BoltzmannPattern();
boltz.setInputNeurons(dialog.getNeuronCount().getValue());
return boltz.generate();
} else
return null;
}
private static MLMethod createCPN() {
CreateCPNDialog dialog = new CreateCPNDialog(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
CPNPattern cpn = new CPNPattern();
cpn.setInputNeurons(dialog.getInputCount().getValue());
cpn.setInstarCount(dialog.getInstarCount().getValue());
cpn.setOutstarCount(dialog.getOutstarCount().getValue());
return cpn.generate();
} else
return null;
}
private static MLMethod createART1() {
CreateART1 dialog = new CreateART1(EncogWorkBench
.getInstance().getMainWindow());
if (dialog.process()) {
ART1Pattern art1 = new ART1Pattern();
art1.setInputNeurons(dialog.getF1().getValue());
art1.setOutputNeurons(dialog.getF2().getValue());
return art1.generate();
} else
return null;
}
}