Skip to content

Commit

Permalink
Fixing gigaspaces object registration. Very annoying, but makes sense.
Browse files Browse the repository at this point in the history
  • Loading branch information
U-hp-dv73165dx\joeo committed Dec 23, 2010
1 parent 7329b14 commit fb90d5e
Show file tree
Hide file tree
Showing 26 changed files with 273 additions and 53 deletions.
2 changes: 1 addition & 1 deletion ci-bayes/ci-bayes.iml
Expand Up @@ -31,7 +31,7 @@
<orderEntry type="library" scope="TEST" name="Maven: org.apache.ant:ant:1.7.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apache.ant:ant-launcher:1.7.0" level="project" />
<orderEntry type="module" module-name="model" />
<orderEntry type="library" name="Maven: com.enigmastation.dao:interfaces:3.0.0-SNAPSHOT" level="project" />
<orderEntry type="module" module-name="interfaces" />
<orderEntry type="module" module-name="db4o-dao" scope="TEST" />
<orderEntry type="library" scope="TEST" name="Maven: com.db4o:db4o-full-java5:8.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: commons-math:commons-math:1.2" level="project" />
Expand Down
13 changes: 9 additions & 4 deletions ci-bayes/pom.xml
Expand Up @@ -4,12 +4,12 @@
<parent>
<groupId>com.enigmastation.ci-bayes</groupId>
<artifactId>ci-bayes-parent</artifactId>
<version>3.0.0-SNAPSHOT</version>
<version>3.0.1-SNAPSHOT</version>
</parent>

<groupId>com.enigmastation.ci-bayes</groupId>
<artifactId>ci-bayes</artifactId>
<version>3.0.0-SNAPSHOT</version>
<version>3.0.1-SNAPSHOT</version>

<packaging>jar</packaging>
<name>ci-bayes</name>
Expand Down Expand Up @@ -72,12 +72,17 @@
<dependency>
<groupId>com.enigmastation.ci-bayes</groupId>
<artifactId>model</artifactId>
<version>[3.0.0-SNAPSHOT,)</version>
<version>3.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.enigmastation.ci-bayes.dao</groupId>
<artifactId>interfaces</artifactId>
<version>3.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.enigmastation.ci-bayes.dao</groupId>
<artifactId>db4o-dao</artifactId>
<version>[3.0.0-SNAPSHOT,)</version>
<version>3.0.1-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
Expand Up @@ -7,7 +7,7 @@

public interface NeuralNetwork {
void trainNaive(String inputs, String output);
public void train(String corpus, String result);
void train(String corpus, String result);

List<Pair<Neuron, Double>> getOutputs(String corpus);
}
Expand Up @@ -11,6 +11,7 @@
import com.enigmastation.neuralnet.service.NeuralNetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

Expand All @@ -23,8 +24,10 @@ public class Perceptron implements NeuralNetwork {
}};
String[] ignoredWords = {"the", "a", "an", "and",};

@Transactional
public void trainNaive(String inputs, String output) {
List<String> sortedWords = new ArrayList<String>(getWords(inputs));

List<Neuron> outputNeurons = new ArrayList<Neuron>();
Collections.sort(sortedWords);
List<Neuron> inputNeurons = new ArrayList<Neuron>();
Expand Down Expand Up @@ -107,9 +110,9 @@ public void backPropagate(String corpus, String target) {
//System.out.println("bp target: " + target);
Actor actor = new Actor(); // we discard these results...
Set<String> targetSequence = getWords(target);
//System.out.println("Target Sequence: " + targetSequence);
System.out.println("Target Sequence: " + targetSequence);
target = getWords(target).toArray(new String[targetSequence.size()])[0];
//System.out.println("backpropagating with " + target);
System.out.println("backpropagating with " + target);

trainNaive(corpus, target);

Expand All @@ -119,7 +122,9 @@ public void backPropagate(String corpus, String target) {
setupNeuronLists(corpus, inputNeurons, hiddenNeurons, outputNeurons);

Neuron targetNeuron = neuralNetService.getNeuron(target, Visibility.VISIBLE);

System.out.println(inputNeurons);
System.out.println(hiddenNeurons);
System.out.println(outputNeurons);
WeightsMatrix weightsMatrix = new WeightsMatrix(inputNeurons, hiddenNeurons, outputNeurons, actor, null).invoke();
double[] targets = new double[outputNeurons.size()];
double[] outputDeltas = new double[outputNeurons.size()];
Expand Down Expand Up @@ -191,6 +196,10 @@ private void setupNeuronLists(String corpus, List<Neuron> inputNeurons, List<Neu
Set<Synapse> synapses = neuralNetService.getSynapsesFrom(inputNeuron);
for (Synapse synapse : synapses) {
Neuron hiddenNeuron = neuralNetService.getNeuronById(synapse.getTo());
if (hiddenNeuron == null) {
showSynapseLookupError(synapse.getTo());
throw new Error("Neuron with id " + synapse.getTo() + " doesn't exist.. but should!");
}
if (!hiddenNeurons.contains(hiddenNeuron)) {
hiddenNeurons.add(hiddenNeuron);
}
Expand All @@ -199,6 +208,9 @@ private void setupNeuronLists(String corpus, List<Neuron> inputNeurons, List<Neu
Set<Synapse> outputSynapses = neuralNetService.getSynapsesFrom(hiddenNeuron);
for (Synapse outputSynapse : outputSynapses) {
Neuron outputNeuron = neuralNetService.getNeuronById(outputSynapse.getTo());
if (outputNeuron == null) {
throw new Error("Neuron with id " + outputSynapse.getTo() + " doesn't exist.. but should!");
}
if (!outputNeurons.contains(outputNeuron)) {
outputNeurons.add(outputNeuron);
}
Expand All @@ -207,6 +219,22 @@ private void setupNeuronLists(String corpus, List<Neuron> inputNeurons, List<Neu
}
}

private void showSynapseLookupError(String to) {
System.out.printf("Couldn't find neuron with id %s%n", to);
System.out.println("Neurons----------------------");
Neuron n=new Neuron();
List<Neuron> neurons=neuralNetService.getNeuronDAO().readMultiple(n);
for(Neuron ns:neurons) {
System.out.println(ns);
}
System.out.println("Synapses---------------------");
Synapse t=new Synapse();
List<Synapse> synapses=this.neuralNetService.getSynapseDAO().readMultiple(t);
for(Synapse s:synapses) {
System.out.println(s);
}
}

public Set<Neuron> getHiddenNeuronsForInput(String corpus) {
Set<Neuron> neurons = new HashSet<Neuron>();
for (String payload : getWords(corpus)) {
Expand Down
@@ -1,5 +1,7 @@
package com.enigmastation.neuralnet.service;

import com.enigmastation.dao.NeuronDAO;
import com.enigmastation.dao.SynapseDAO;
import com.enigmastation.dao.model.Neuron;
import com.enigmastation.dao.model.Synapse;
import com.enigmastation.dao.model.Visibility;
Expand All @@ -20,4 +22,8 @@ public interface NeuralNetService {
double getStrength(Neuron from, Neuron to, Visibility v);

void reset();

SynapseDAO getSynapseDAO();

NeuronDAO getNeuronDAO();
}
Expand Up @@ -10,7 +10,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
Expand All @@ -23,9 +22,10 @@ public class NeuralNetServiceImpl implements NeuralNetService {
SynapseDAO synapseDAO;

public Neuron getNeuronById(String id) {
Neuron template=new Neuron();
template.setId(id);
return neuronDAO.read(template);
if(id==null) {
throw new IllegalArgumentException();
}
return neuronDAO.readById(id);
}

public Neuron getNeuron(String payload, Visibility visibility) {
Expand All @@ -34,6 +34,7 @@ public Neuron getNeuron(String payload, Visibility visibility) {

@Transactional
public void setStrength(Neuron from, Neuron to, double strength) {
checkArguments(from, to, Visibility.VISIBLE);
Synapse template = new Synapse();
template.setFrom(from.getId());
template.setTo(to.getId());
Expand All @@ -57,7 +58,9 @@ public Set<Synapse> getSynapsesFrom(Neuron neuron) {
return synapses;
}

@Transactional
public double getStrength(Neuron from, Neuron to, Visibility visibility) {
checkArguments(from, to, visibility);
Synapse template = new Synapse();
template.setFrom(from.getId());
template.setTo(to.getId());
Expand All @@ -68,11 +71,25 @@ public double getStrength(Neuron from, Neuron to, Visibility visibility) {
return r.getStrength();
}

private void checkArguments(Neuron from, Neuron to, Visibility visibility) {
if(to==null || from==null || visibility==null) {
throw new IllegalArgumentException(from+","+to+","+visibility);
}
}

public void reset() {
synapseDAO.takeMultiple(new Synapse());
neuronDAO.takeMultiple(new Neuron());
}

public SynapseDAO getSynapseDAO() {
return synapseDAO;
}

public NeuronDAO getNeuronDAO() {
return neuronDAO;
}

@Transactional
public Neuron getNeuron(String payload, Visibility visibility, boolean createIfNecessary) {
Neuron template = new Neuron();
Expand Down
35 changes: 35 additions & 0 deletions ci-bayes/src/test/java/com/enigmastation/neuralnet/DZoneTest.java
@@ -0,0 +1,35 @@
package com.enigmastation.neuralnet;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;

import static org.testng.Assert.assertNotNull;

/**
* User: joeo
* Date: 12/15/10
* Time: 12:17 PM
* <p/>
* Copyright
*/
@ContextConfiguration(locations = {"/ci-bayes-context.xml"})
public class DZoneTest extends AbstractTestNGSpringContextTests {
@Autowired
NeuralNetwork network;

@Test
public void testConfig() {
assertNotNull(network);
}

@Test
public void testTrain() {
network.train("cats. Cats are nice. They're feline animals who excel as they hunt vermin.", "t00001");
network.train("dogs. Dogs are canine and related to wolves. They dislike cats, usually.", "t00002");
for(Object o:network.getOutputs("cats are nice")) {
System.out.println(o);
}
}
}
12 changes: 4 additions & 8 deletions db4o-dao/db4o-dao.iml
Expand Up @@ -10,17 +10,13 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:5.14.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.beanshell:bsh:2.0b4" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.google.inject:guice:2.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: aopalliance:aopalliance:1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.beust:jcommander:1.10" level="project" />
<orderEntry type="module" module-name="model" />
<orderEntry type="module" module-name="interfaces" />
<orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:5.14.4" level="project" />
<orderEntry type="library" name="Maven: com.enigmastation.ci-bayes:model:3.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.enigmastation.ci-bayes.dao:interfaces:3.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.db4o:db4o-full-java5:8.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-context:3.0.4.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-aop:3.0.4.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: aopalliance:aopalliance:1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-asm:3.0.4.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-beans:3.0.4.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-core:3.0.4.RELEASE" level="project" />
Expand Down
4 changes: 2 additions & 2 deletions db4o-dao/pom.xml
Expand Up @@ -6,11 +6,11 @@
<parent>
<artifactId>ci-bayes-parent</artifactId>
<groupId>com.enigmastation.ci-bayes</groupId>
<version>3.0.0-SNAPSHOT</version>
<version>3.0.1-SNAPSHOT</version>
</parent>
<groupId>com.enigmastation.ci-bayes.dao</groupId>
<artifactId>db4o-dao</artifactId>
<version>3.0.0-SNAPSHOT</version>
<version>3.0.1-SNAPSHOT</version>
<name>base</name>
<url>http://maven.apache.org</url>
<properties>
Expand Down
11 changes: 8 additions & 3 deletions gigaspaces-dao/pom.xml
Expand Up @@ -3,9 +3,14 @@
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>ci-bayes-parent</artifactId>
<groupId>com.enigmastation.ci-bayes</groupId>
<version>3.0.1-SNAPSHOT</version>
</parent>
<groupId>com.enigmastation.ci-bayes.dao</groupId>
<artifactId>gigaspaces-dao</artifactId>
<version>1.0-SNAPSHOT</version>
<version>1.0.1-SNAPSHOT</version>
<name>gigaspaces-dao</name>
<url>http://maven.apache.org</url>
<properties>
Expand All @@ -17,7 +22,7 @@
<dependency>
<groupId>com.enigmastation.ci-bayes</groupId>
<artifactId>model</artifactId>
<version>3.0.0-SNAPSHOT</version>
<version>3.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.gigaspaces</groupId>
Expand Down Expand Up @@ -51,7 +56,7 @@
<artifactId>ci-bayes</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springVersion}</version>
Expand Down
Expand Up @@ -2,15 +2,6 @@
<!DOCTYPE gigaspaces-mapping PUBLIC "-//GIGASPACES//DTD GS//EN"
"http://www.gigaspaces.com/dtd/7_1/gigaspaces-metadata.dtd">
<gigaspaces-mapping>
<class name="com.enigmastation.dao.model.Category" replicate="true" persist="true">
<property name="category"/>
<property name="count" />
</class>
<class name="com.enigmastation.dao.model.Feature" replicate="true" persist="true">
<property name="category"/>
<property name="feature" />
<property name="count" />
</class>
<class name="com.enigmastation.dao.BaseEntity" replicate="true" persist="true">
<property name="createTime"/>
<property name="lastUpdateTime"/>
Expand Down
Expand Up @@ -32,6 +32,7 @@ public T read(T template) {
return space.read(template);
}

@SuppressWarnings({"unchecked"})
public T readById(String id) {
return (T) space.readById(persistentClass, id);
}
Expand Down Expand Up @@ -59,6 +60,7 @@ public T take(T template) {
return space.take(template);
}

@SuppressWarnings({"unchecked"})
public T takeById(String id) {
return (T) space.takeById(persistentClass, id);
}
Expand Down
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE gigaspaces-mapping PUBLIC "-//GIGASPACES//DTD GS//EN"
"http://www.gigaspaces.com/dtd/7_1/gigaspaces-metadata.dtd">
<gigaspaces-mapping>
<class name="com.enigmastation.dao.model.Category" replicate="true" persist="true">
<property name="category"/>
<property name="count"/>
</class>
</gigaspaces-mapping>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE gigaspaces-mapping PUBLIC "-//GIGASPACES//DTD GS//EN"
"http://www.gigaspaces.com/dtd/7_1/gigaspaces-metadata.dtd">
<gigaspaces-mapping>
<class name="com.enigmastation.dao.model.Feature" replicate="true" persist="true">
<property name="category"/>
<property name="feature"/>
<property name="count"/>
</class>
</gigaspaces-mapping>
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE gigaspaces-mapping PUBLIC "-//GIGASPACES//DTD GS//EN"
"http://www.gigaspaces.com/dtd/7_1/gigaspaces-metadata.dtd">
<gigaspaces-mapping>
<class name="com.enigmastation.dao.model.Neuron" replicate="true" persist="true">
<property name="payload"/>
<property name="visibility"/>
</class>
</gigaspaces-mapping>

0 comments on commit fb90d5e

Please sign in to comment.