[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