[rules-users] Coarse Grained Moves

Geoffrey De Smet ge0ffrey.spam at gmail.com
Wed Jun 25 03:37:37 EDT 2014


1) There's 2 course grained moves out of the box in 6.1.0.CR1: 
pillarChangeMove and pillarSwapMove.
And in 6.1.0.CR1 they also include subpillars (which is important).
http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/index.html#pillarChangeMoveSelector
Start with trying those.

2) Then look into cartesianProduct selection and mimic selection (see docs).
The <cartesianProductMoveSelector> allows you to combine to existing 
moves into a new one.
The mimic selection allows you to make sure that those 2 moves change 
the same entity (if needed), but a different variable of course.
I am working on nearBySelection for 6.2 to allow it to select 2 entities 
that are somehow "nearBy" to each other (for example in the same service 
etc).

3) If the above don't help enough, there's always custom moves (see 
docs): total freedom, but the devil is in the details :)

On 24-06-14 01:58, DwProd . wrote:
> Hello there,
>
> I'm pretty new to OptaPlanner, and I must say I'm really impressed 
> with the maturity of it all. Great software with a great documentation !
>
> I've been working on a variation of the Cloud Balancing example, with 
> a few differences, which make it look like the Machine Reassignment 
> problem as well :
>
> - Some processes are already placed and are immovable (using a 
> Selection Filter checking a boolean property of the planning entity)
> - The Computer (the planning variable) is nullable (basically this is 
> Multiple Muti-Dimensional Knapsack problem) which means I added a soft 
> constraint penalty for processes with a null host.
> - Processes can only be of a few classes (which I called services, a 
> Problem Fact). Processes of a given service type have a certain amount 
> of required cpu and ram.
>
> Taking these elements into account, I do get very good results with 
> OptaPlanner. However, the following constraints always put me into a 
> score trap :
>
> - For some services, processes work in groups. For instance, if groups 
> are of size 3, having 7 processes is not any better than having 6 
> processes. If there were already 2 processes (immovable and placed), I 
> should only add 4 processes and not 5, even if there are enough 
> resources. For this constraint, I have tried using a rule (medium 
> constraint) accumulating processes of that service and using the 
> modulo operator with the group size.
> - Some services are dependant on one another. For instance, I know 
> that if I have n1 groups of processes of the service 1, I require 
> Math.ceil(2.5*n1) groups of processes of the service 2. I have 
> implemented this similarly with a medium constraint...
>
> With any (or both) of these constraints, little to no processes of the 
> concerned services are added and I fail to reach a good solution. I 
> have tried benchmarking with several local search methods and various 
> parameters, but all give the same results...
>
> I feel like the next logical step would be to used the often mentioned 
> in the documentation "Coarse Grained Moves" but I fail to locate any 
> simple example. The Nurse Rostering example seems to use that 
> technique to some extent but it seems like an overly complicated 
> example, is it not.
>
> Thank you very much for reading this far, if you have any question, 
> guideline, or just a trick, I'd be absolutely delighted to hear from you !
>
> Cheers,
>
> Woody
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140625/e59f157f/attachment.html 


More information about the rules-users mailing list