[jboss-svn-commits] JBL Code SVN: r35686 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples: data/cloudbalancing and 13 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Oct 24 03:46:27 EDT 2010
Author: ge0ffrey
Date: 2010-10-24 03:46:26 -0400 (Sun, 24 Oct 2010)
New Revision: 35686
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/data/cloudbalancing/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/data/cloudbalancing/solved/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/data/cloudbalancing/unsolved/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/app/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/app/CloudBalancingApp.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/persistence/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/persistence/CloudBalancingDaoImpl.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudAssignmentSwitchMove.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudBalancingMoveHelper.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudComputerChangeMove.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudAssignmentSwitchMoveFactory.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudComputerChangeMoveFactory.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/solution/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/solution/initializer/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/solution/initializer/CloudBalancingStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/swingui/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/swingui/CloudBalancingPanel.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingScoreRules.drl
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingSolverConfig.xml
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java
Log:
new example: cloudbalancing dao, initialization and first rules
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/app/CloudBalancingApp.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/app/NurseRosteringApp.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/app/CloudBalancingApp.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/app/CloudBalancingApp.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.app;
+
+import org.drools.planner.config.XmlSolverConfigurer;
+import org.drools.planner.core.Solver;
+import org.drools.planner.examples.cloudbalancing.persistence.CloudBalancingDaoImpl;
+import org.drools.planner.examples.cloudbalancing.swingui.CloudBalancingPanel;
+import org.drools.planner.examples.common.app.CommonApp;
+import org.drools.planner.examples.common.persistence.SolutionDao;
+import org.drools.planner.examples.common.swingui.SolutionPanel;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudBalancingApp extends CommonApp {
+
+ public static final String SOLVER_CONFIG
+ = "/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingSolverConfig.xml";
+
+ public static void main(String[] args) {
+ new CloudBalancingApp().init();
+ }
+
+ @Override
+ protected Solver createSolver() {
+ XmlSolverConfigurer configurer = new XmlSolverConfigurer();
+ configurer.configure(SOLVER_CONFIG);
+ return configurer.buildSolver();
+ }
+
+ @Override
+ protected SolutionPanel createSolutionPanel() {
+ return new CloudBalancingPanel();
+ }
+
+ @Override
+ protected SolutionDao createSolutionDao() {
+ return new CloudBalancingDaoImpl();
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java 2010-10-24 02:09:42 UTC (rev 35685)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -53,6 +53,18 @@
return cloudProcess.getName();
}
+ public int getMinimalCpuPower() {
+ return cloudProcess.getMinimalCpuPower();
+ }
+
+ public int getMinimalMemory() {
+ return cloudProcess.getMinimalMemory();
+ }
+
+ public int getMinimalNetworkBandwidth() {
+ return cloudProcess.getMinimalNetworkBandwidth();
+ }
+
public int compareTo(CloudAssignment other) {
return new CompareToBuilder()
.append(cloudProcess, other.cloudProcess)
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java 2010-10-24 02:09:42 UTC (rev 35685)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -63,6 +63,10 @@
this.minimalNetworkBandwidth = minimalNetworkBandwidth;
}
+ public int getMinimalMultiplicand() {
+ return minimalCpuPower * minimalMemory * minimalNetworkBandwidth;
+ }
+
public int compareTo(CloudProcess other) {
return new CompareToBuilder()
.append(name, other.name)
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/persistence/CloudBalancingDaoImpl.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringDaoImpl.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/persistence/CloudBalancingDaoImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/persistence/CloudBalancingDaoImpl.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.persistence;
+
+import org.drools.planner.examples.cloudbalancing.domain.CloudBalance;
+import org.drools.planner.examples.common.persistence.XstreamSolutionDaoImpl;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudBalancingDaoImpl extends XstreamSolutionDaoImpl {
+
+ public CloudBalancingDaoImpl() {
+ super("cloudbalancing", CloudBalance.class);
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudAssignmentSwitchMove.java (from rev 35674, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/AssignmentSwitchMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudAssignmentSwitchMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudAssignmentSwitchMove.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.solver.move;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.WorkingMemory;
+import org.drools.planner.core.localsearch.decider.acceptor.tabu.TabuPropertyEnabled;
+import org.drools.planner.core.move.Move;
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudComputer;
+import org.drools.planner.examples.nurserostering.domain.Assignment;
+import org.drools.planner.examples.nurserostering.domain.Employee;
+import org.drools.planner.examples.nurserostering.solver.move.NurseRosteringMoveHelper;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudAssignmentSwitchMove implements Move, TabuPropertyEnabled {
+
+ private CloudAssignment leftCloudAssignment;
+ private CloudAssignment rightCloudAssignment;
+
+ public CloudAssignmentSwitchMove(CloudAssignment leftCloudAssignment, CloudAssignment rightCloudAssignment) {
+ this.leftCloudAssignment = leftCloudAssignment;
+ this.rightCloudAssignment = rightCloudAssignment;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ return !ObjectUtils.equals(leftCloudAssignment.getCloudComputer(), rightCloudAssignment.getCloudComputer());
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new CloudAssignmentSwitchMove(rightCloudAssignment, leftCloudAssignment);
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ CloudComputer oldLeftCloudComputer = leftCloudAssignment.getCloudComputer();
+ CloudComputer oldRightCloudComputer = rightCloudAssignment.getCloudComputer();
+ CloudBalancingMoveHelper.moveCloudComputer(workingMemory, leftCloudAssignment, oldRightCloudComputer);
+ CloudBalancingMoveHelper.moveCloudComputer(workingMemory, rightCloudAssignment, oldLeftCloudComputer);
+ }
+
+ public Collection<? extends Object> getTabuProperties() {
+ return Arrays.<CloudAssignment>asList(leftCloudAssignment, rightCloudAssignment);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof CloudAssignmentSwitchMove) {
+ CloudAssignmentSwitchMove other = (CloudAssignmentSwitchMove) o;
+ return new EqualsBuilder()
+ .append(leftCloudAssignment, other.leftCloudAssignment)
+ .append(rightCloudAssignment, other.rightCloudAssignment)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(leftCloudAssignment)
+ .append(rightCloudAssignment)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return leftCloudAssignment + " <=> " + rightCloudAssignment;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudBalancingMoveHelper.java (from rev 35674, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosteringMoveHelper.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudBalancingMoveHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudBalancingMoveHelper.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.solver.move;
+
+
+import org.drools.WorkingMemory;
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudComputer;
+import org.drools.runtime.rule.FactHandle;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudBalancingMoveHelper {
+
+ public static void moveCloudComputer(WorkingMemory workingMemory, CloudAssignment cloudAssignment,
+ CloudComputer toCloudComputer) {
+ FactHandle factHandle = workingMemory.getFactHandle(cloudAssignment);
+ cloudAssignment.setCloudComputer(toCloudComputer);
+ workingMemory.update(factHandle, cloudAssignment);
+ }
+
+ private CloudBalancingMoveHelper() {
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudComputerChangeMove.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/EmployeeChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudComputerChangeMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/CloudComputerChangeMove.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.solver.move;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.WorkingMemory;
+import org.drools.planner.core.localsearch.decider.acceptor.tabu.TabuPropertyEnabled;
+import org.drools.planner.core.move.Move;
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudComputer;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudComputerChangeMove implements Move, TabuPropertyEnabled {
+
+ private CloudAssignment cloudAssignment;
+ private CloudComputer toCloudComputer;
+
+ public CloudComputerChangeMove(CloudAssignment cloudAssignment, CloudComputer toCloudComputer) {
+ this.cloudAssignment = cloudAssignment;
+ this.toCloudComputer = toCloudComputer;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ return !ObjectUtils.equals(cloudAssignment.getCloudComputer(), toCloudComputer);
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new CloudComputerChangeMove(cloudAssignment, cloudAssignment.getCloudComputer());
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ CloudBalancingMoveHelper.moveCloudComputer(workingMemory, cloudAssignment, toCloudComputer);
+ }
+
+ public Collection<? extends Object> getTabuProperties() {
+ return Collections.singletonList(cloudAssignment);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof CloudComputerChangeMove) {
+ CloudComputerChangeMove other = (CloudComputerChangeMove) o;
+ return new EqualsBuilder()
+ .append(cloudAssignment, other.cloudAssignment)
+ .append(toCloudComputer, other.toCloudComputer)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(cloudAssignment)
+ .append(toCloudComputer)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return cloudAssignment + " => " + toCloudComputer;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudAssignmentSwitchMoveFactory.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/AssignmentSwitchMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudAssignmentSwitchMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudAssignmentSwitchMoveFactory.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.solver.move.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.drools.planner.core.move.Move;
+import org.drools.planner.core.move.factory.CachedMoveFactory;
+import org.drools.planner.core.solution.Solution;
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudBalance;
+import org.drools.planner.examples.cloudbalancing.solver.move.CloudAssignmentSwitchMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudAssignmentSwitchMoveFactory extends CachedMoveFactory {
+
+ public List<Move> createCachedMoveList(Solution solution) {
+ CloudBalance cloudBalance = (CloudBalance) solution;
+ List<CloudAssignment> cloudAssignmentList = cloudBalance.getCloudAssignmentList();
+ List<Move> moveList = new ArrayList<Move>();
+ for (ListIterator<CloudAssignment> leftIt = cloudAssignmentList.listIterator(); leftIt.hasNext();) {
+ CloudAssignment leftCloudAssignment = leftIt.next();
+ for (ListIterator<CloudAssignment> rightIt = cloudAssignmentList.listIterator(leftIt.nextIndex()); rightIt.hasNext();) {
+ CloudAssignment rightCloudAssignment = rightIt.next();
+ moveList.add(new CloudAssignmentSwitchMove(leftCloudAssignment, rightCloudAssignment));
+ }
+ }
+ return moveList;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudComputerChangeMoveFactory.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeChangeMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudComputerChangeMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/move/factory/CloudComputerChangeMoveFactory.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.solver.move.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.planner.core.move.Move;
+import org.drools.planner.core.move.factory.CachedMoveFactory;
+import org.drools.planner.core.solution.Solution;
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudBalance;
+import org.drools.planner.examples.cloudbalancing.domain.CloudComputer;
+import org.drools.planner.examples.cloudbalancing.solver.move.CloudComputerChangeMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudComputerChangeMoveFactory extends CachedMoveFactory {
+
+ public List<Move> createCachedMoveList(Solution solution) {
+ CloudBalance cloudBalance = (CloudBalance) solution;
+ List<Move> moveList = new ArrayList<Move>();
+ List<CloudComputer> cloudComputerList = cloudBalance.getCloudComputerList();
+ for (CloudAssignment cloudAssignment : cloudBalance.getCloudAssignmentList()) {
+ for (CloudComputer cloudComputer : cloudComputerList) {
+ moveList.add(new CloudComputerChangeMove(cloudAssignment, cloudComputer));
+ }
+ }
+ return moveList;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/solution/initializer/CloudBalancingStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/solution/initializer/CloudBalancingStartingSolutionInitializer.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/solver/solution/initializer/CloudBalancingStartingSolutionInitializer.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.solver.solution.initializer;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.planner.core.localsearch.LocalSearchSolverScope;
+import org.drools.planner.core.score.DefaultHardAndSoftScore;
+import org.drools.planner.core.score.Score;
+import org.drools.planner.core.solution.initializer.AbstractStartingSolutionInitializer;
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudBalance;
+import org.drools.planner.examples.cloudbalancing.domain.CloudComputer;
+import org.drools.planner.examples.cloudbalancing.domain.CloudProcess;
+import org.drools.planner.examples.common.domain.PersistableIdComparator;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CloudBalancingStartingSolutionInitializer extends AbstractStartingSolutionInitializer {
+
+ @Override
+ public boolean isSolutionInitialized(LocalSearchSolverScope localSearchSolverScope) {
+ CloudBalance cloudBalance = (CloudBalance) localSearchSolverScope.getWorkingSolution();
+ return cloudBalance.isInitialized();
+ }
+
+ public void initializeSolution(LocalSearchSolverScope localSearchSolverScope) {
+ CloudBalance cloudBalance = (CloudBalance) localSearchSolverScope.getWorkingSolution();
+ initializeCloudAssignmentList(localSearchSolverScope, cloudBalance);
+ }
+
+ private void initializeCloudAssignmentList(LocalSearchSolverScope localSearchSolverScope,
+ CloudBalance cloudBalance) {
+ List<CloudComputer> cloudComputerList = cloudBalance.getCloudComputerList();
+ WorkingMemory workingMemory = localSearchSolverScope.getWorkingMemory();
+
+ List<CloudAssignment> cloudAssignmentList = createCloudAssignmentList(cloudBalance);
+ for (CloudAssignment cloudAssignment : cloudAssignmentList) {
+ FactHandle cloudAssignmentHandle = null;
+ Score bestScore = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE);
+ CloudComputer bestCloudComputer = null;
+ for (CloudComputer cloudComputer : cloudComputerList) {
+ if (cloudAssignmentHandle == null) {
+ cloudAssignment.setCloudComputer(cloudComputer);
+ cloudAssignmentHandle = workingMemory.insert(cloudAssignment);
+ } else {
+ cloudAssignment.setCloudComputer(cloudComputer);
+ workingMemory.update(cloudAssignmentHandle, cloudAssignment);
+ }
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ if (score.compareTo(bestScore) > 0) {
+ bestScore = score;
+ bestCloudComputer = cloudComputer;
+ }
+ }
+ if (bestCloudComputer == null || bestCloudComputer == null) {
+ throw new IllegalStateException("The bestCloudComputer (" + bestCloudComputer + ") cannot be null.");
+ }
+ cloudAssignment.setCloudComputer(bestCloudComputer);
+ workingMemory.update(cloudAssignmentHandle, cloudAssignment);
+ logger.debug(" CloudAssignment ({}) initialized for starting solution.", cloudAssignment);
+ }
+
+ Collections.sort(cloudAssignmentList, new PersistableIdComparator());
+ cloudBalance.setCloudAssignmentList(cloudAssignmentList);
+ }
+
+ public List<CloudAssignment> createCloudAssignmentList(CloudBalance cloudBalance) {
+ List<CloudProcess> cloudProcessList = cloudBalance.getCloudProcessList();
+
+ List<CloudProcessInitializationWeight> cloudProcessInitializationWeightList
+ = new ArrayList<CloudProcessInitializationWeight>(cloudProcessList.size());
+ for (CloudProcess cloudProcess : cloudProcessList) {
+ cloudProcessInitializationWeightList.add(new CloudProcessInitializationWeight(cloudBalance, cloudProcess));
+ }
+ Collections.sort(cloudProcessInitializationWeightList);
+
+ List<CloudAssignment> cloudAssignmentList = new ArrayList<CloudAssignment>(cloudProcessList.size());
+ int cloudAssignmentId = 0;
+ for (CloudProcessInitializationWeight cloudProcessInitializationWeight : cloudProcessInitializationWeightList) {
+ CloudProcess cloudProcess = cloudProcessInitializationWeight.getCloudProcess();
+ CloudAssignment cloudAssignment = new CloudAssignment();
+ cloudAssignment.setId((long) cloudAssignmentId);
+ cloudAssignment.setCloudProcess(cloudProcess);
+ cloudAssignmentList.add(cloudAssignment);
+ cloudAssignmentId++;
+ }
+ Collections.sort(cloudAssignmentList);
+ return cloudAssignmentList;
+ }
+
+ private class CloudProcessInitializationWeight implements Comparable<CloudProcessInitializationWeight> {
+
+ private CloudProcess cloudProcess;
+
+ private CloudProcessInitializationWeight(CloudBalance cloudBalance, CloudProcess cloudProcess) {
+ this.cloudProcess = cloudProcess;
+ }
+
+ public CloudProcess getCloudProcess() {
+ return cloudProcess;
+ }
+
+ public int compareTo(CloudProcessInitializationWeight other) {
+ return new CompareToBuilder()
+ .append(other.cloudProcess.getMinimalMultiplicand(), cloudProcess.getMinimalMultiplicand()) // Descending
+ .toComparison();
+ }
+
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/swingui/CloudBalancingPanel.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/swingui/NurseRosteringPanel.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/swingui/CloudBalancingPanel.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/swingui/CloudBalancingPanel.java 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.swingui;
+
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudBalance;
+import org.drools.planner.examples.cloudbalancing.domain.CloudComputer;
+import org.drools.planner.examples.cloudbalancing.domain.CloudProcess;
+import org.drools.planner.examples.cloudbalancing.solver.move.CloudComputerChangeMove;
+import org.drools.planner.examples.common.swingui.SolutionPanel;
+import org.drools.planner.examples.nurserostering.domain.Assignment;
+import org.drools.planner.examples.nurserostering.domain.Employee;
+import org.drools.planner.examples.nurserostering.domain.ShiftDate;
+import org.drools.planner.examples.nurserostering.solver.move.EmployeeChangeMove;
+
+/**
+ * TODO this code is highly unoptimized
+ * @author Geoffrey De Smet
+ */
+public class CloudBalancingPanel extends SolutionPanel {
+
+ private static final Color HEADER_COLOR = Color.YELLOW;
+
+
+ public CloudBalancingPanel() {
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+ }
+
+ private CloudBalance getCloudBalance() {
+ return (CloudBalance) solutionBusiness.getSolution();
+ }
+
+ public void resetPanel() {
+ removeAll();
+ CloudBalance cloudBalance = getCloudBalance();
+ List<CloudComputer> cloudComputerList = cloudBalance.getCloudComputerList();
+ Map<CloudComputer, CloudComputerPanel> computerToPanelMap
+ = new HashMap<CloudComputer, CloudComputerPanel>(cloudComputerList.size());
+ for (CloudComputer cloudComputer : cloudComputerList) {
+ CloudComputerPanel cloudComputerPanel = new CloudComputerPanel(cloudComputer);
+ computerToPanelMap.put(cloudComputer, cloudComputerPanel);
+ add(cloudComputerPanel);
+ }
+ if (cloudBalance.isInitialized()) {
+ for (CloudAssignment cloudAssignment : cloudBalance.getCloudAssignmentList()) {
+ CloudComputer cloudComputer = cloudAssignment.getCloudComputer();
+ CloudComputerPanel cloudComputerPanel = computerToPanelMap.get(cloudComputer);
+ cloudComputerPanel.addCloudAssignment(cloudAssignment);
+ }
+ }
+ }
+
+ private class CloudComputerPanel extends JPanel {
+
+ private final CloudComputer cloudComputer;
+
+ public CloudComputerPanel(CloudComputer cloudComputer) {
+ setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
+ this.cloudComputer = cloudComputer;
+ setBorder(BorderFactory.createCompoundBorder(
+ BorderFactory.createLineBorder(Color.DARK_GRAY),
+ BorderFactory.createEmptyBorder(2, 2, 2, 2)));
+ JLabel cloudComputerLabel = new JLabel(cloudComputer.getName());
+ cloudComputerLabel.setBorder(BorderFactory.createCompoundBorder(
+ BorderFactory.createLineBorder(Color.DARK_GRAY),
+ BorderFactory.createEmptyBorder(2, 2, 2, 2)));
+ cloudComputerLabel.setBackground(HEADER_COLOR);
+ cloudComputerLabel.setOpaque(true);
+ add(cloudComputerLabel);
+ }
+
+ public void addCloudAssignment(CloudAssignment cloudAssignment) {
+ JButton button = new JButton(new CloudAssignmentAction(cloudAssignment));
+ add(button);
+ }
+
+ }
+
+ private class CloudAssignmentAction extends AbstractAction {
+
+ private CloudAssignment cloudAssignment;
+
+ public CloudAssignmentAction(CloudAssignment cloudAssignment) {
+ super(cloudAssignment.getLabel());
+ this.cloudAssignment = cloudAssignment;
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ List<CloudComputer> cloudComputerList = getCloudBalance().getCloudComputerList();
+ JComboBox cloudComputerListField = new JComboBox(cloudComputerList.toArray());
+ cloudComputerListField.setSelectedItem(cloudAssignment.getCloudComputer());
+ int result = JOptionPane.showConfirmDialog(CloudBalancingPanel.this.getRootPane(), cloudComputerListField,
+ "Select cloud computer", JOptionPane.OK_CANCEL_OPTION);
+ if (result == JOptionPane.OK_OPTION) {
+ CloudComputer toCloudComputer = (CloudComputer) cloudComputerListField.getSelectedItem();
+ solutionBusiness.doMove(new CloudComputerChangeMove(cloudAssignment, toCloudComputer));
+ workflowFrame.updateScreen();
+ }
+ }
+
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingScoreRules.drl (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingScoreRules.drl (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingScoreRules.drl 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,113 @@
+/**
+ * Copyright 2010 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.
+ */
+
+package org.drools.planner.examples.cloudbalancing.solver;
+ dialect "java"
+
+import org.drools.planner.core.score.calculator.HardAndSoftConstraintScoreCalculator;
+import org.drools.planner.core.score.constraint.IntConstraintOccurrence;
+import org.drools.planner.core.score.constraint.ConstraintType;
+
+import org.drools.planner.examples.cloudbalancing.domain.CloudAssignment;
+import org.drools.planner.examples.cloudbalancing.domain.CloudBalance;
+import org.drools.planner.examples.cloudbalancing.domain.CloudComputer;
+import org.drools.planner.examples.cloudbalancing.domain.CloudProcess;
+
+// @author Geoffrey De Smet
+
+global HardAndSoftConstraintScoreCalculator scoreCalculator;
+
+// ############################################################################
+// Hard constraints
+// ############################################################################
+
+rule "minimalCpuPowerTotal"
+ when
+ $cloudComputer : CloudComputer($cpuPower : cpuPower)
+ $minimalCpuPowerTotal : Number(intValue > $cpuPower) from accumulate(
+ CloudAssignment(
+ cloudComputer == $cloudComputer,
+ $minimalCpuPower : minimalCpuPower),
+ sum($minimalCpuPower)
+ )
+ then
+ insertLogical(new IntConstraintOccurrence("minimalCpuPowerTotal", ConstraintType.NEGATIVE_HARD,
+ $minimalCpuPowerTotal.intValue() - $cpuPower,
+ $cloudComputer));
+end
+
+rule "minimalMemoryTotal"
+ when
+ $cloudComputer : CloudComputer($memory : memory)
+ $minimalMemoryTotal : Number(intValue > $memory) from accumulate(
+ CloudAssignment(
+ cloudComputer == $cloudComputer,
+ $minimalMemory : minimalMemory),
+ sum($minimalMemory)
+ )
+ then
+ insertLogical(new IntConstraintOccurrence("minimalMemoryTotal", ConstraintType.NEGATIVE_HARD,
+ $minimalMemoryTotal.intValue() - $memory,
+ $cloudComputer));
+end
+
+rule "minimalNetworkBandwidthTotal"
+ when
+ $cloudComputer : CloudComputer($networkBandwidth : networkBandwidth)
+ $minimalNetworkBandwidthTotal : Number(intValue > $networkBandwidth) from accumulate(
+ CloudAssignment(
+ cloudComputer == $cloudComputer,
+ $minimalNetworkBandwidth : minimalNetworkBandwidth),
+ sum($minimalNetworkBandwidth)
+ )
+ then
+ insertLogical(new IntConstraintOccurrence("minimalNetworkBandwidthTotal", ConstraintType.NEGATIVE_HARD,
+ $minimalNetworkBandwidthTotal.intValue() - $networkBandwidth,
+ $cloudComputer));
+end
+
+// ############################################################################
+// Soft constraints
+// ############################################################################
+
+
+// ############################################################################
+// Calculate score
+// ############################################################################
+
+// Accumulate hard constraints
+rule "hardConstraintsBroken"
+ salience -1 // Do the other rules first (optional, for performance)
+ when
+ $hardTotal : Number() from accumulate(
+ IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD, $weight : weight),
+ sum($weight) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
+ )
+ then
+ scoreCalculator.setHardConstraintsBroken($hardTotal.intValue());
+end
+
+// Accumulate soft constraints
+rule "softConstraintsBroken"
+ salience -1 // Do the other rules first (optional, for performance)
+ when
+ $softTotal : Number() from accumulate(
+ IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_SOFT, $weight : weight),
+ sum($weight) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
+ )
+ then
+ scoreCalculator.setSoftConstraintsBroken($softTotal.intValue());
+end
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingSolverConfig.xml (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingSolverConfig.xml (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingSolverConfig.xml 2010-10-24 07:46:26 UTC (rev 35686)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2010 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.
+ -->
+
+<localSearchSolver>
+ <environmentMode>DEBUG</environmentMode>
+ <scoreDrl>/org/drools/planner/examples/cloudbalancing/solver/cloudBalancingScoreRules.drl</scoreDrl>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
+ <startingSolutionInitializerClass>org.drools.planner.examples.cloudbalancing.solver.solution.initializer.CloudBalancingStartingSolutionInitializer</startingSolutionInitializerClass>
+ <termination>
+ <maximumSecondsSpend>120</maximumSecondsSpend>
+ </termination>
+ <selector>
+ <selector>
+ <moveFactoryClass>org.drools.planner.examples.cloudbalancing.solver.move.factory.CloudComputerChangeMoveFactory</moveFactoryClass>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.planner.examples.cloudbalancing.solver.move.factory.CloudAssignmentSwitchMoveFactory</moveFactoryClass>
+ </selector>
+ </selector>
+ <acceptor>
+ <completeSolutionTabuSize>1000</completeSolutionTabuSize>
+ <completePropertyTabuSize>7</completePropertyTabuSize>
+ </acceptor>
+ <forager>
+ <minimalAcceptedSelection>800</minimalAcceptedSelection>
+ </forager>
+</localSearchSolver>
More information about the jboss-svn-commits
mailing list