[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