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(); } } + }