diff --git a/README.md b/README.md
index 162bac1..b838471 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,17 @@
-The Blocks World
-===========
+# The Blocks World
The Blocks World is a classic and famous toy domain in Artificial Intelligence.
-Starting from an initial configuration of blocks the aim is to move blocks to a new goal configuration. Blocks are
-instantaneously moved by means of a virtual gripper. A block can only be moved if there is no other block sitting
-on top of it. A block can always be moved to the table.
+Starting from an initial configuration of blocks the aim is to move blocks to a new goal configuration. Blocks are instantaneously moved by means of a virtual gripper. A block can only be moved if there is no other block sitting on top of it. A block can always be moved to the table.
+
+## Releases
+
+Releases can be found [here](https://github.com/eishub/blocksworld/releases) and include the Blocks World environment, a random generator for Block's World configurations, and a manual for the environment.
+
+Releases can also be found in eishub's maven repository [here](https://github.com/eishub/mvn-repo/tree/master/eishub/blocksworld).
+
+## Generate Jars from Source
+
+Run `mvn clean install`
+
+Run `mvn clean pre-site install` to also generate the pdf manual from the tex source.
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index aba497a..7196743 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
eishub
blocksworld
- 1.0.0
+ ${version}
blocksworld
The classic Blocks World from AI with an interactive user interface.
http://github.com/eishub/blocksworld/
@@ -21,10 +21,48 @@
+ 1.0.0
+
+ BWEnvironment
+ eisinterface
UTF-8
+ github
+
+
+ eishub-mvn-repo
+ https://raw.github.com/eishub/mvn-repo/master
+
+ true
+ always
+
+
+
+
+
+
+ apleis
+ eis
+ 0.3
+
+
+ commons-io
+ commons-io
+ 2.1
+
+
+
+
+
+ internal.repo
+ Temporary Staging Repository
+ file://${project.build.directory}/mvn-repo
+
+
+
+
scm:git:https://github.com/eishub/blocksworld.git
@@ -51,6 +89,63 @@
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.5
+
+
+
+ true
+ ${main.class.package}.${main.class}
+
+
+
+
+
+
+
+
+
+ blocksworld
+ jar
+ package
+
+
+
+ true
+ ${main.class.package}.${main.class}
+
+
+ blocksworld
+
+ **/worldgenerator*
+
+
+
+
+
+ worldgenerator
+ jar
+ package
+
+
+
+ true
+ worldgenerator.RandomWorldGenerator
+
+
+ worldgenerator
+
+ **/eishub
+ **/environment
+
+
+
+
+
+
org.apache.maven.plugins
maven-source-plugin
@@ -64,6 +159,7 @@
+
org.apache.maven.plugins
maven-javadoc-plugin
@@ -77,31 +173,68 @@
-
-
-
-
- eis-releases
- https://raw.github.com/eishub/eis/releases/
-
- true
- always
-
-
-
+
+
+ de.akquinet.jbosscc.latex
+ maven-latex-plugin
+ 1.2
+ false
+
+
+
+ ${basedir}/src/main/latex
+
+ ../doc
+
+
+
+
+ pre-site
+
+ latex
+
+
+
+
+
+
+ maven-deploy-plugin
+ 2.8.1
+
+ internal.repo::default::file://${project.build.directory}/mvn-repo
+
+
+
+
+ com.github.github
+ site-maven-plugin
+ 0.9
+
+ Maven artifacts for ${project.name} environment version ${project.version}
+ true
+ true
+ ${project.build.directory}/mvn-repo
+ refs/heads/master
+
+ **/*
+
+ mvn-repo
+ eishub
+ true
+
+
+
+
+
+ site
+
+ deploy
+
+
+
+
-
-
- apleis
- eis
- 0.3
-
-
- commons-io
- commons-io
- 2.1
-
-
+
\ No newline at end of file
diff --git a/src/main/java/nl/tudelft/blocksworld/BWEnvironment.java b/src/main/java/eisinterface/BWEnvironment.java
similarity index 92%
rename from src/main/java/nl/tudelft/blocksworld/BWEnvironment.java
rename to src/main/java/eisinterface/BWEnvironment.java
index 8fc7c64..b6f12a5 100644
--- a/src/main/java/nl/tudelft/blocksworld/BWEnvironment.java
+++ b/src/main/java/eisinterface/BWEnvironment.java
@@ -1,4 +1,4 @@
-package nl.tudelft.blocksworld;
+package eisinterface;
import java.io.File;
import java.io.FileNotFoundException;
@@ -9,9 +9,6 @@
import org.apache.commons.io.FilenameUtils;
-import blocksworld.BlocksWorldModel;
-import blocksworld.BlocksWorldPainter;
-import blocksworld.Cube3D;
import eis.eis2java.environment.AbstractEnvironment;
import eis.exceptions.EntityException;
import eis.exceptions.ManagementException;
@@ -21,6 +18,9 @@
import eis.iilang.Numeral;
import eis.iilang.Parameter;
import eis.iilang.ParameterList;
+import environment.BlocksWorldModel;
+import environment.BlocksWorldPainter;
+import environment.Cube3D;
/**
* EIS2Java layer for the 3D Blocks World environment.
@@ -42,7 +42,10 @@ public BWEnvironment() {
@Override
protected boolean isSupportedByEnvironment(Action action) {
- return true;
+ if (action.getName().equals("move") && action.getParameters().size()==2) {
+ return true;
+ }
+ return false;
}
@Override
@@ -61,10 +64,12 @@ public void init(Map parameters)
.getValue().equals("true"))) {
gui = new BlocksWorldPainter(model);
}
+
+ // Try creating and registering an entity called gripper.
try {
registerEntity("gripper", new Gripper(model));
} catch (EntityException e) {
- throw new ManagementException("failed to create new entity", e);
+ throw new ManagementException("Could not create a gripper", e);
}
}
diff --git a/src/main/java/nl/tudelft/blocksworld/Gripper.java b/src/main/java/eisinterface/Gripper.java
similarity index 93%
rename from src/main/java/nl/tudelft/blocksworld/Gripper.java
rename to src/main/java/eisinterface/Gripper.java
index 24646d8..dc02bee 100644
--- a/src/main/java/nl/tudelft/blocksworld/Gripper.java
+++ b/src/main/java/eisinterface/Gripper.java
@@ -1,14 +1,14 @@
-package nl.tudelft.blocksworld;
+package eisinterface;
import java.util.ArrayList;
import java.util.List;
-import nl.tudelft.blocksworld.BWEnvironment;
-import blocksworld.BlocksWorldModel;
-import blocksworld.Cube3D;
import eis.eis2java.annotation.AsAction;
import eis.eis2java.annotation.AsPercept;
import eis.exceptions.ActException;
+import eisinterface.BWEnvironment;
+import environment.BlocksWorldModel;
+import environment.Cube3D;
/**
* this is the EIS entity that is plugged into the EIS2Java environment.
diff --git a/src/main/java/blocksworld/BlocksWorldModel.java b/src/main/java/environment/BlocksWorldModel.java
similarity index 99%
rename from src/main/java/blocksworld/BlocksWorldModel.java
rename to src/main/java/environment/BlocksWorldModel.java
index dea87fd..6acba10 100644
--- a/src/main/java/blocksworld/BlocksWorldModel.java
+++ b/src/main/java/environment/BlocksWorldModel.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/src/main/java/blocksworld/BlocksWorldPainter.java b/src/main/java/environment/BlocksWorldPainter.java
similarity index 99%
rename from src/main/java/blocksworld/BlocksWorldPainter.java
rename to src/main/java/environment/BlocksWorldPainter.java
index 4c95ba1..5e73e07 100644
--- a/src/main/java/blocksworld/BlocksWorldPainter.java
+++ b/src/main/java/environment/BlocksWorldPainter.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
/** BlocksWorld.java, version 1.11, December 9, 1998.
Applet for interactive blocks world.
@@ -32,7 +32,7 @@
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import nl.tudelft.blocksworld.BWEnvironment;
+import eisinterface.BWEnvironment;
/**
* This is an educational example of object oriented design for a 3D graphics
diff --git a/src/main/java/blocksworld/BlocksWorldSettings.java b/src/main/java/environment/BlocksWorldSettings.java
similarity index 98%
rename from src/main/java/blocksworld/BlocksWorldSettings.java
rename to src/main/java/environment/BlocksWorldSettings.java
index 87ab368..e7696ce 100644
--- a/src/main/java/blocksworld/BlocksWorldSettings.java
+++ b/src/main/java/environment/BlocksWorldSettings.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
import java.util.prefs.Preferences;
diff --git a/src/main/java/blocksworld/Cube3D.java b/src/main/java/environment/Cube3D.java
similarity index 99%
rename from src/main/java/blocksworld/Cube3D.java
rename to src/main/java/environment/Cube3D.java
index 5dd03fa..e5c37b0 100644
--- a/src/main/java/blocksworld/Cube3D.java
+++ b/src/main/java/environment/Cube3D.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
/** BlocksWorld.java, version 1.11, December 9, 1998.
Applet for interactive blocks world.
diff --git a/src/main/java/blocksworld/HMatrix3D.java b/src/main/java/environment/HMatrix3D.java
similarity index 97%
rename from src/main/java/blocksworld/HMatrix3D.java
rename to src/main/java/environment/HMatrix3D.java
index e82d71a..2f4bd7e 100644
--- a/src/main/java/blocksworld/HMatrix3D.java
+++ b/src/main/java/environment/HMatrix3D.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
/** BlocksWorld.java, version 1.11, December 9, 1998.
Applet for interactive blocks world.
diff --git a/src/main/java/blocksworld/Point3D.java b/src/main/java/environment/Point3D.java
similarity index 97%
rename from src/main/java/blocksworld/Point3D.java
rename to src/main/java/environment/Point3D.java
index 80290fd..a9aa06a 100644
--- a/src/main/java/blocksworld/Point3D.java
+++ b/src/main/java/environment/Point3D.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
/** BlocksWorld.java, version 1.11, December 9, 1998.
Applet for interactive blocks world.
diff --git a/src/main/java/blocksworld/Square3D.java b/src/main/java/environment/Square3D.java
similarity index 98%
rename from src/main/java/blocksworld/Square3D.java
rename to src/main/java/environment/Square3D.java
index a83289a..5fd938a 100644
--- a/src/main/java/blocksworld/Square3D.java
+++ b/src/main/java/environment/Square3D.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
/** BlocksWorld.java, version 1.11, December 9, 1998.
Applet for interactive blocks world.
diff --git a/src/main/java/blocksworld/THMatrix3D.java b/src/main/java/environment/THMatrix3D.java
similarity index 99%
rename from src/main/java/blocksworld/THMatrix3D.java
rename to src/main/java/environment/THMatrix3D.java
index 815c0bf..3d42059 100644
--- a/src/main/java/blocksworld/THMatrix3D.java
+++ b/src/main/java/environment/THMatrix3D.java
@@ -1,4 +1,4 @@
-package blocksworld;
+package environment;
/** BlocksWorld.java, version 1.11, December 9, 1998.
Applet for interactive blocks world.
diff --git a/src/main/java/generator/RandomWorldGenerator.java b/src/main/java/worldgenerator/RandomWorldGenerator.java
similarity index 85%
rename from src/main/java/generator/RandomWorldGenerator.java
rename to src/main/java/worldgenerator/RandomWorldGenerator.java
index bd112bf..b69543e 100644
--- a/src/main/java/generator/RandomWorldGenerator.java
+++ b/src/main/java/worldgenerator/RandomWorldGenerator.java
@@ -1,12 +1,13 @@
-package generator;
+package worldgenerator;
import java.util.HashMap;
import java.util.Random;
import java.util.Vector;
/**
- * Class to generate random worlds for Blocks World. This class is an adapted
- * version of the C program by John Slaney at
+ * Generates random configurations for the Blocks World.
+ *
+ * This generator has been adapted from the C program written by John Slaney at
* http://users.cecs.anu.edu.au/~jks/bwstates.html.
*
* @author D.Singh
@@ -23,6 +24,15 @@ public class RandomWorldGenerator {
private HashMap stats;
+ /**
+ * Random configuration generator.
+ *
+ * @param N
+ * number of blocks
+ * @param seed
+ * random seed
+ * @param buildStatistics
+ */
public RandomWorldGenerator(int N, long seed, boolean buildStatistics) {
if (buildStatistics) {
this.stats = new HashMap();
@@ -36,29 +46,37 @@ public RandomWorldGenerator(int N, long seed, boolean buildStatistics) {
}
/**
- * Convenience function to test the class. Note that n>6 with i>100000 will
- * already take a long tim to run. The reason is that the bookkeeping
- * search/updates takes longer. For normal use, statisitcs should be
- * disabled.
- * */
+ * Generate configurations from command line.
+ *
+ * Usage:
+ *
+ * Note that n>6 with i>100000 will already take a long time to run.
+ * The reason is that the bookkeeping search/updates takes longer.
+ * For this reason, by default, statistics has been disabled.
+ *
+ */
public static void main(String[] args) {
- int n = 5, seed = 0, loop = 1;
- if (args.length > 0) {
- try {
- n = Integer.parseInt(args[0]);
- seed = Integer.parseInt(args[1]);
- loop = Integer.parseInt(args[2]);
- } catch (Exception e) {
- System.err.println("usage: numblocks seed iterations");
- System.exit(0);
+ int n, seed, loop;
+
+ try {
+ n = Integer.parseInt(args[0]);
+ seed = Integer.parseInt(args[1]);
+ loop = Integer.parseInt(args[2]);
+
+ RandomWorldGenerator r = new RandomWorldGenerator(n, seed, false);
+ for (int i = 0; i < loop; i++) {
+ System.out.println(r.nextState());
}
- }
- RandomWorldGenerator r = new RandomWorldGenerator(n, seed, false);
- for (int i = 0; i < loop; i++) {
- System.out.println(r.nextState());
+ } catch (Exception e) {
+ System.err.println("usage: ");
+ System.exit(0);
}
}
+ /**
+ *
+ * @return
+ */
public String nextState() {
make_state(sigma, ratio);
String state = print_state(sigma);
@@ -71,7 +89,7 @@ public String nextState() {
}
/**
- * This function is called during initialisation.
+ * This function is called during initialization.
*
* The function g is easily defined recursively:
* g(0,k) = 1
@@ -189,21 +207,22 @@ private float Ratio(Vector ratio, int N, int x, int y) {
}
/**
- * convert generated state to a comman-separated string. This matches
- * Slaney's original output format.
+ * Convert generated state to a comma-separated string.
+ * This matches Slaney's original output format.
*
* @param sigma
- * @return slaney-style block configuration list.
+ * @return Slaney-style block configuration list.
*/
private String print_state(Sigma sigma) {
String out = "";
+
for (int x = 0; x < sigma.N; x++) {
out += sigma.S.get(x) + 1;
if (x < sigma.N - 1)
out += ",";
}
+
return out;
-
}
/**
@@ -248,7 +267,7 @@ private String print_state_towers(Sigma sigma) {
* using MATLAB for instance.
*
* @author D.Singh
- * **/
+ */
public String print_statistics() {
if (stats == null) {
return "No statistics are available. Must be enabled at startup.";
@@ -280,6 +299,9 @@ public String print_statistics() {
return str;
}
+ /**
+ *
+ */
class Tower {
int top;
int bottom;
@@ -290,6 +312,9 @@ public Tower(int t, int b) {
}
}
+ /**
+ *
+ */
class Sigma {
int N;
Vector S;
@@ -305,4 +330,5 @@ public Sigma(int N) {
floating = new Vector();
}
}
+
}