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.spam(a)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.spam(a)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(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users