Thanks! 
It turns out that it was bad data in my factory to create the initial solution 
that made some of 


On Fri, Dec 13, 2013 at 11:51 AM, Geoffrey De Smet <ge0ffrey.s...@gmail.com> 
wrote:
> 
> On 13-12-13 10:39, Mats Norén wrote:
>> Bad choice of words. Entities. :-)
>> 
>> I've got three classes:
>> 
>> @PlanningEntity(movableEntitySelectionFilter = 
>> MovableWorkersSelectionFilter.class)
>> public class Person extends Property {
>> 
>>     String signature;
>>     String name;
>>     Desk desk;
>>     boolean movable;
>>     ...
>> }
>> 
>> Fact:
>> 
>> public class Desk extends Property {
>> 
>>     double x;
>>     double y;
>> 
>>     public Desk() {
>>     }
>>     ...
>> }
>> 
>> Solution:
>> 
>> @PlanningSolution
>> public class DeskAssignmentSolution implements Solution<HardSoftScore>  {
>> 
>>     private List<Person> persons;
>>     private List<Desk> desks;
>>     private HardSoftScore score;
>> 
>>     @PlanningEntityCollectionProperty
>>     public List<Person> getPersons() {
>>         return persons;
>>     }
>> 
>>     public void setPersons(List<Person> persons) {
>>         this.persons = persons;
>>     }
>> 
>>     public void setDesks(List<Desk> desks) {
>>         this.desks = desks;
>>     }
>> 
>>     @ValueRangeProvider(id="deskRange")
>>     public List<Desk> getDesks() {
>>         return desks;
>>     }
>>     ...
>> 
>> }
>> 
>> A desk is assigned to a person and makes up a desk assignment solution. 
>> 
>> Certain desks should not be assigned since the are all ready occupied. The 
>> are correctly assigned to the right person in the initial solution.
> Ah.
> So there are 2 requirements:
> - Some persons are immovable: they are already assigned to a desk 
> (MovableWorkersSelectionFilter somehow recognizes those and filters them 
> out). 
> - Since no 2 persons can share the same desk, there's little point in putting 
> a desk that is already assigned to an immovable person in the value range. 
> You can filter them out of the value range (by putting filters in the CH and 
> local search etc), but I wouldn't bother with that improvement: your original 
> hard constraint "no 2 persons can share the same desk" will gives those moves 
> an infeasible score, so they are unlikely to be picked anyway (and if they 
> are picked it can actually be a good thing: tunnel through an infeasible 
> solution to a better feasible solution).
> 
>> 
>> Does the SelectionFilter prevent the desk being assigned somehow?  I thought 
>> a SelectionFilter<Person> would only prevent a move of the Person but it's 
>> the Desk being assigned?
>> 
>> Regards,
>> Mats
>> 
>> 
>> On Fri, Dec 13, 2013 at 9:32 AM, Geoffrey De Smet <ge0ffrey.s...@gmail.com> 
>> wrote:
>>> 
>>> On 12-12-13 18:11, Mats Norén wrote:
>>>> Hi,
>>>> I've got a domain with the following entities:
>>> entities? you mean classes?
>>>> - Person (planning entity)
>>>> - Desk (planning variable)
>>> a class cannot be a variable. This probably a problem fact that and 
>>> person.getDesk() nor DeskAssignement.getPerson() is the planning variables.
>>>> - DeskAssignment (solution)
>>> Now I am totally confused :)
>>> in the official examples, something called Assignment is a planning entity.
>>>> 
>>>> All persons should be assigned to a desk according to some rules. 
>>>> What I would like to do is to make certain Persons and their Desk 
>>>> immovable, ie, they are assigned a desk in the initial solution and should 
>>>> be fixed there. They are only there for the score calculation.
>>> agreed, "immovable" is the correct concept to use for that
>>>> 
>>>> I looked at 14.3.1 Immovable planning entities but couldn't really see how 
>>>> I would apply it to my use case.
>>> Take a look at the course scheduling example.
>>> Here's a demo of immovable planning entities in that example:
>>>   http://www.youtube.com/watch?v=4meWIhPRVn8
>>>> Why is the filter applied at the planning entity level? Since it's the 
>>>> planning variable that changes I thought that I should somehow filter the 
>>>> allowed values for the Desk.
>>> Don't mix the concept of "(im)movable entities" (which is what you want) 
>>> with the concept of "limiting value ranges per entity" or the concept of 
>>> "filtering specific move selectors" (which is overkill and convoluted for 
>>> your needs).
>>>> 
>>>> Regards, 
>>>> Mats
>>>> 
>>>> 
>>>> 
>>>>  
>>>> 
>>>> 
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users@lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>> 
>>> 
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>> 
>> 
>> 
>> _______________________________________________
>> rules-users mailing list
>> rules-users@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
> 
> 
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to