[jboss-svn-commits] JBL Code SVN: r16900 - in labs/jbossrules/contrib/benchmarks/src: java/benchmarks/dispatch/fact/derived and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Nov 28 11:11:08 EST 2007


Author: shabino
Date: 2007-11-28 11:11:08 -0500 (Wed, 28 Nov 2007)
New Revision: 16900

Added:
   labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/AbstractGenerator.java
Modified:
   labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/DispatchBenchmark.java
   labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/derived/ScoreComponent.java
   labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/independent/Job.java
   labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/JobGenerator.java
   labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/WorkerGenerator.java
   labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/ScoreManagement.dslr
   labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/Scoring.dslr
Log:
Generate randomized jobs/workers

Modified: labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/DispatchBenchmark.java
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/DispatchBenchmark.java	2007-11-28 16:10:19 UTC (rev 16899)
+++ labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/DispatchBenchmark.java	2007-11-28 16:11:08 UTC (rev 16900)
@@ -31,6 +31,8 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.spi.Activation;
+import org.drools.spi.AgendaFilter;
 
 import benchmarks.dispatch.fact.independent.DispatchState;
 import benchmarks.dispatch.fact.independent.Worker;
@@ -84,6 +86,7 @@
 		ruleBase.addPackage(builder.getPackage());
 
 		wm = ruleBase.newStatefulSession();
+
 	}
 
 	private Reader getReader(String resourceName) {
@@ -92,13 +95,12 @@
 	}
 
 	public void go(int numWorkers, int numJobs) throws Exception {
-		createWM();
-		
+
 		DispatchState ds = new DispatchState();
 		ds.setCurrentTime(new Date());
 		FactHandle dsfh = wm.insert(ds);
 
-		WorkerGenerator wg = new WorkerGenerator(100);
+		WorkerGenerator wg = new WorkerGenerator(100, ds.getCurrentTime());
 
 		for (int i = 0; i < numWorkers; i++) {
 			Worker w = wg.generateWorker();
@@ -107,7 +109,7 @@
 			wm.insert(wp);
 		}
 
-		JobGenerator jg = new JobGenerator(100);
+		JobGenerator jg = new JobGenerator(100, ds.getCurrentTime());
 
 		for (int i = 0; i < numJobs; i++) {
 			wm.insert(jg.generateJob());
@@ -119,15 +121,23 @@
 	public static void main(String args[]) throws Exception {
 		int numWorkers = 1;
 		int numJobs = 1;
-		
-		
+
 		if (args.length == 2){
 			numWorkers = new Integer(args[0]);
 			numJobs = new Integer(args[1]);
 		}
 		
+		System.out.println("Running benchmark with " + numWorkers + " workers and " + numJobs + " jobs.");
+		
 		DispatchBenchmark db = new DispatchBenchmark();
+		
+		db.createWM();
+		
+		long startTime = System.currentTimeMillis();
+		
 		db.go(numWorkers, numJobs);
+		
+		System.out.println("Completed in " + (System.currentTimeMillis() - startTime)+ "ms");
 	}
 
 }

Modified: labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/derived/ScoreComponent.java
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/derived/ScoreComponent.java	2007-11-28 16:10:19 UTC (rev 16899)
+++ labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/derived/ScoreComponent.java	2007-11-28 16:11:08 UTC (rev 16900)
@@ -21,55 +21,65 @@
 
 public class ScoreComponent extends Compatibility {
 
-    private static final long serialVersionUID = 1L;
+	private static final long serialVersionUID = 1L;
 
-    public enum Type {
-        LATE_TO_JOB, EXCESSIVE_DISTANCE_TO_JOB, DEFAULT
-    }
+	public enum Type {
+		LATE_TO_JOB, EXCESSIVE_DISTANCE_TO_JOB, DEFAULT
+	}
 
-    private Double contribution;
-    private Type   type;
+	private Double contribution;
+	private Type type;
 
-    public ScoreComponent(Job job,
-                          Worker worker) {
-        super( job,
-               worker );
-    }
+	public ScoreComponent(Job job, Worker worker) {
+		super(job, worker);
 
-    public void setContribution(Double scoreContribution) {
-        this.contribution = scoreContribution;
-    }
+	}
 
-    public Double getContribution() {
-        return contribution;
-    }
+	public ScoreComponent(Job job, Worker worker, Type type, Double contribution) {
+		super(job, worker);
+		this.type = type;
+		this.contribution = contribution;
+	}
 
-    public Type getType() {
-        return type;
-    }
+	public void setContribution(Double scoreContribution) {
+		this.contribution = scoreContribution;
+	}
 
-    public void setType(Type type) {
-        this.type = type;
-    }
+	public Double getContribution() {
+		return contribution;
+	}
 
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = super.hashCode();
-        result = prime * result + ((type == null) ? 0 : type.hashCode());
-        return result;
-    }
+	public Type getType() {
+		return type;
+	}
 
-    @Override
-    public boolean equals(Object obj) {
-        if ( this == obj ) return true;
-        if ( !super.equals( obj ) ) return false;
-        if ( getClass() != obj.getClass() ) return false;
-        final ScoreComponent other = (ScoreComponent) obj;
-        if ( type == null ) {
-            if ( other.type != null ) return false;
-        } else if ( !type.equals( other.type ) ) return false;
-        return true;
-    }
+	public void setType(Type type) {
+		this.type = type;
+	}
 
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result + ((type == null) ? 0 : type.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final ScoreComponent other = (ScoreComponent) obj;
+		if (type == null) {
+			if (other.type != null)
+				return false;
+		} else if (!type.equals(other.type))
+			return false;
+		return true;
+	}
+
 }

Modified: labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/independent/Job.java
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/independent/Job.java	2007-11-28 16:10:19 UTC (rev 16899)
+++ labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/fact/independent/Job.java	2007-11-28 16:11:08 UTC (rev 16900)
@@ -26,7 +26,7 @@
 
     private String      jobId;
     private Status      status;
-    private Date        startTime, endTime;
+    private Date        startTime;
     private Double      latitude, longitude;
     private VehicleSize vehicleSizeRequired;
     private Boolean     wrenchRequired;
@@ -105,14 +105,6 @@
         this.startTime = startTime;
     }
 
-    public Date getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Date endTime) {
-        this.endTime = endTime;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;

Added: labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/AbstractGenerator.java
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/AbstractGenerator.java	                        (rev 0)
+++ labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/AbstractGenerator.java	2007-11-28 16:11:08 UTC (rev 16900)
@@ -0,0 +1,37 @@
+package benchmarks.dispatch.simulation;
+
+/*
+ * Copyright 2007 JBoss 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.
+ */
+
+import java.util.Date;
+
+import org.apache.commons.math.random.RandomDataImpl;
+
+public abstract class AbstractGenerator {
+
+	protected RandomDataImpl rdi;
+	protected Date now;
+
+	public AbstractGenerator(long seed, Date now) {
+
+		rdi = new RandomDataImpl();
+		rdi.reSeed(seed);
+
+		this.now = now;
+
+	}
+
+}

Modified: labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/JobGenerator.java
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/JobGenerator.java	2007-11-28 16:10:19 UTC (rev 16899)
+++ labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/JobGenerator.java	2007-11-28 16:11:08 UTC (rev 16900)
@@ -3,6 +3,9 @@
 import java.util.Date;
 import java.util.Random;
 
+import org.apache.commons.math.random.RandomDataImpl;
+import org.apache.commons.math.random.RandomGenerator;
+
 import benchmarks.dispatch.fact.independent.Job;
 import benchmarks.dispatch.fact.independent.VehicleSize;
 
@@ -22,26 +25,66 @@
  * limitations under the License.
  */
 
-public class JobGenerator {
-    Random random;
-    public JobGenerator(long seed){
-        random = new Random(seed);
-    }
-    
-    public Job generateJob(){
-        Job j = new Job();
-        
-        j.setEndTime( new Date() );
-        j.setStartTime( new Date() );
-        j.setJobId( new Integer(random.nextInt()).toString() );
-        j.setLatitude( -100D );
-        j.setLongitude( -100D );
-        j.setNumberOfRocksRequired( 1 );
-        j.setNumberOfSticksRequired( 1 );
-        j.setStatus( Job.Status.PENDING );
-        j.setVehicleSizeRequired( VehicleSize.SMALL );
-        j.setWrenchRequired( false );
-        return j;
-    }
+public class JobGenerator extends AbstractGenerator {
 
+	public JobGenerator(long seed, Date now) {
+		super(seed, now);
+	}
+
+	public Job generateJob() {
+		Job j = new Job();
+
+		j.setStartTime(nextFutureDate());
+
+		j.setJobId(rdi.nextHexString(10));
+
+		// Seattle 47.609722, -122.333056
+		// San Diego 32.78, -117.15
+		// Portland, ME 43.665116, -70.269086
+		// Talahassee, FL 29.07°, -81.14
+
+		// 30-48
+		j.setLatitude(rdi.nextUniform(30, 48));
+
+		// -75 - 120
+		j.setLongitude(rdi.nextUniform(-120, -75));
+		j.setNumberOfRocksRequired(nextUnitRequired());
+
+		j.setNumberOfSticksRequired(nextUnitRequired());
+
+		// For now, all are pending
+		j.setStatus(Job.Status.PENDING);
+		j.setVehicleSizeRequired(nextVehicleSize());
+		// 30% require wrenches
+		j.setWrenchRequired(rdi.nextUniform(0, 1) > 0.7);
+		return j;
+	}
+
+	public VehicleSize nextVehicleSize() {
+		switch (rdi.nextInt(0, 4)) {
+		case 0:
+			return VehicleSize.SMALL;
+		case 1:
+			return VehicleSize.MEDIUM;
+		case 2:
+			return VehicleSize.LARGE;
+		default: // 2x as likely
+			return VehicleSize.EXTRA_LARGE;
+		}
+	}
+
+	// two hours in the future + up to four days
+	public Date nextFutureDate() {
+		return new Date(now.getTime() + (120 + rdi.nextInt(0, 4 * 24 * 60))
+				* 60 * 1000);
+	}
+
+	public int nextUnitRequired() {
+		if (rdi.nextUniform(0, 1) < 0.9) {
+			return 0;
+		} else {
+			return rdi.nextInt(1, 3);
+		}
+	}
+
 }

Modified: labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/WorkerGenerator.java
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/WorkerGenerator.java	2007-11-28 16:10:19 UTC (rev 16899)
+++ labs/jbossrules/contrib/benchmarks/src/java/benchmarks/dispatch/simulation/WorkerGenerator.java	2007-11-28 16:11:08 UTC (rev 16900)
@@ -1,6 +1,6 @@
 package benchmarks.dispatch.simulation;
 
-import java.util.Random;
+import java.util.Date;
 
 import benchmarks.dispatch.fact.independent.VehicleSize;
 import benchmarks.dispatch.fact.independent.Worker;
@@ -22,32 +22,74 @@
  * limitations under the License.
  */
 
-public class WorkerGenerator {
+public class WorkerGenerator extends AbstractGenerator {
 
-    Random random;
+	public WorkerGenerator(long seed, Date now) {
+		super(seed, now);
+	}
 
-    public WorkerGenerator(long seed) {
-        random = new Random( seed );
-    }
+	public Worker generateWorker() {
 
-    public Worker generateWorker() {
+		Worker w = new Worker();
+		w.setWorkerId(rdi.nextHexString(10));
+		w.setHasWrench(rdi.nextUniform(0, 1) > 0.5);
+		w.setNumberOfRocks(nextUnitRequired());
+		w.setNumberOfSticks(nextUnitRequired());
+		w.setStatus(nextWorkerStatus());
+		w.setVehicleSize(nextVehicleSize());
 
-        Worker w = new Worker();
-        w.setWorkerId( new Integer( random.nextInt() ).toString() );
-        w.setHasWrench( false );
-        w.setNumberOfRocks( 1 );
-        w.setNumberOfSticks( 2 );
-        w.setStatus( Worker.Status.WAITING_FOR_JOB );
-        w.setVehicleSize( VehicleSize.SMALL );
+		if (w.getStatus() == Worker.Status.DISPATCHED_FOR_JOB) {;
+			w.setCurrentJobLatitude(rdi.nextUniform(30, 48));
+			w.setCurrentJobLongitude(rdi.nextUniform(-120, -75));
+			w.setTimeAvailable(nextFutureDate());
+		}
 
-        return w;
-    }
+		return w;
+	}
 
-    public WorkerPosition generateWorkerPosition(Worker w) {
-        WorkerPosition wp = new WorkerPosition();
-        wp.setLatitude( -90D );
-        wp.setLongitude( -90D );
-        wp.setWorkerId( w.getWorkerId() );
-        return wp;
-    }
+	public WorkerPosition generateWorkerPosition(Worker w) {
+		WorkerPosition wp = new WorkerPosition();
+		wp.setLatitude(rdi.nextUniform(30, 48));
+
+		// -75 - 120
+		wp.setLongitude(rdi.nextUniform(-120, -75));
+		wp.setWorkerId(w.getWorkerId());
+		return wp;
+	}
+
+	public Worker.Status nextWorkerStatus() {
+		switch (rdi.nextInt(0, 2)) {
+		case 0:
+			return Worker.Status.DISPATCHED_FOR_JOB;
+		default: // 2x as likely
+			return Worker.Status.WAITING_FOR_JOB;
+		}
+	}
+
+	public VehicleSize nextVehicleSize() {
+		switch (rdi.nextInt(0, 4)) {
+		case 0:
+			return VehicleSize.SMALL;
+		case 1:
+			return VehicleSize.MEDIUM;
+		case 2:
+			return VehicleSize.LARGE;
+		default: // 2x as likely
+			return VehicleSize.EXTRA_LARGE;
+		}
+	}
+
+	// two hours in the future + up to four days
+	public Date nextFutureDate() {
+		return new Date(now.getTime() + (120 + rdi.nextInt(0, 1 * 24 * 60))
+				* 60 * 1000);
+	}
+
+	public int nextUnitRequired() {
+		if (rdi.nextUniform(0, 1) < 0.9) {
+			return 0;
+		} else {
+			return rdi.nextInt(1, 3);
+		}
+	}
 }

Modified: labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/ScoreManagement.dslr
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/ScoreManagement.dslr	2007-11-28 16:10:19 UTC (rev 16899)
+++ labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/ScoreManagement.dslr	2007-11-28 16:11:08 UTC (rev 16900)
@@ -33,12 +33,11 @@
     #Don't score workers that aren't eligible
     not Exclusion(workerId == w.workerId, jobId == j.jobId)
 then
-		ScoreComponent sc = new ScoreComponent(j, w);
-		sc.setType(ScoreComponent.Type.DEFAULT);
-		sc.setContribution(0D);
-		insertLogical(sc);
+	ScoreComponent sc = new ScoreComponent(j, w, ScoreComponent.Type.DEFAULT, 0D);
+	insertLogical(sc);
 end
 
+ 
 rule "Accumulate Score"
 salience -50
 when
@@ -74,3 +73,6 @@
     }
     insertLogical(topWorkers);
 end
+
+
+

Modified: labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/Scoring.dslr
===================================================================
--- labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/Scoring.dslr	2007-11-28 16:10:19 UTC (rev 16899)
+++ labs/jbossrules/contrib/benchmarks/src/rules/benchmarks/dispatch/Scoring.dslr	2007-11-28 16:11:08 UTC (rev 16900)
@@ -30,13 +30,13 @@
 		i: DecimalInfo(workerId == w.workerId, jobId == j.jobId,
 			type == Info.Type.DISTANCE_TO_JOB_MILES, dist: value >= 100)
 	then 
-		ScoreComponent sc = new ScoreComponent(j, w);
-		sc.setType(ScoreComponent.Type.EXCESSIVE_DISTANCE_TO_JOB);
-		sc.setContribution(- 0.55 * (dist - 100));
+		ScoreComponent sc = new ScoreComponent(j,
+			w,
+			ScoreComponent.Type.EXCESSIVE_DISTANCE_TO_JOB,
+			- 0.55 * (dist - 100));
 		insertLogical(sc);
 end
 
-
 rule "Distance to Job Score - Regular"
 	when
 		j: Job()
@@ -45,9 +45,10 @@
 		i: DecimalInfo(workerId == w.workerId, jobId == j.jobId,
 			type == Info.Type.DISTANCE_TO_JOB_MILES, dist: value >= 100)
 	then 
-		ScoreComponent sc = new ScoreComponent(j, w);
-		sc.setType(ScoreComponent.Type.EXCESSIVE_DISTANCE_TO_JOB);
-		sc.setContribution(- 0.4 * (dist - 100));
+		ScoreComponent sc = new ScoreComponent(j,
+			w,
+			ScoreComponent.Type.EXCESSIVE_DISTANCE_TO_JOB,
+			- 0.4 * (dist - 100));
 		insertLogical(sc);
 end
 
@@ -59,8 +60,9 @@
 		i: DecimalInfo(jobId == j.jobId, workerId == w.workerId,
 			type == Info.Type.MINUTES_LATE_TO_JOB, minutesLate: value >= 0)
 	then 
-		ScoreComponent sc = new ScoreComponent(j, w);
-		sc.setType(ScoreComponent.Type.LATE_TO_JOB);
-		sc.setContribution(- 400 - minutesLate * 0.2);
+		ScoreComponent sc = new ScoreComponent(j,
+			w,
+			ScoreComponent.Type.LATE_TO_JOB,
+			- 400 - minutesLate * 0.2);
 		insertLogical(sc);
 end
\ No newline at end of file




More information about the jboss-svn-commits mailing list