[rules-users] Coarse Grained Moves

Geoffrey De Smet ge0ffrey.spam at gmail.com
Wed Jun 25 07:18:49 EDT 2014


On 25-06-14 12:58, DwProd . wrote:
> Thanks a lot for your answer !
>
> 1) I don't think pillar based moves are what I'm looking for, except 
> if I can select a pillar based on a Problem Fact (its service in my 
> case) and then spread the different entities of the pillar on the 
> available hosts (basically setting possibly different planning 
> variables for the entities of the pillar).
>
> 2) cartesianProductMoveSelector seem more like it, but the number of 
> moves to combine is somewhat static is it not ? I can't for instance 
> specify in a Planning Entity (using a property) that its move should 
> be combined with n other moves of processes of the same type ?
That would be nearBySelection... (note: the name might change before I 
implement).
You need to be able to tell optaplanner that processes of the same type 
are "near" (~related) to each other and should be moved together.
As stated before, I am working on this for 6.2.
>
> 3) I feel like my usecase is complicated enough to have to resort to 
> that if there is no built in way to handle it... Does this work by 
> implementing a MoveListFactory, or a CompositeMove ? I don't think I 
> quite get the difference to be honest...
If you write a custom MoveListFactory (or MoveIteratorFactory), you 
could still opt to go with the build-in moves (such as ChangeMove) or 
combinations of those with CompositeMove. However, because those 
build-in moves require reflection stuff (VariableDescriptor etc), it's 
probably easier to just to write a domain-specific Move.
See the examples that have custom moves.
>
> Thanks again for your time,
>
> Cheers,
>
> Woody
>
>
> 2014-06-25 9:37 GMT+02:00 Geoffrey De Smet <ge0ffrey.spam at gmail.com 
> <mailto:ge0ffrey.spam at gmail.com>>:
>
>     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  <mailto:rules-users at lists.jboss.org>
>>     https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>     _______________________________________________
>     rules-users mailing list
>     rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>     https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> _______________________________________________
> 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/b7992302/attachment.html 


More information about the rules-users mailing list