Probably a typo (no ; after AppointmentSlot() ?), take a look at the
examination example's roomCapacity rule to compare.
With kind regards,
Geoffrey De Smet
Laurent Michenaud schreef:
Hi,
The jira web site doesnot work the moment. I will have a look later.
I have tried your wordround but it raises the exception :
java.lang.IllegalStateException: There are errors in the scoreDrl's:[63,0]: [ERR 101]
Line 63:0 no viable alternative at input ''[63,1]: [ERR 101] Line 63:1 no viable
alternative at input ''[63,2]: [ERR 101] Line 63:2 no viable alternative at input
''[63,3]: [ERR 101] Line 63:3 no viable alternative at input ''
at
org.drools.solver.config.localsearch.LocalSearchSolverConfig.buildRuleBase(LocalSearchSolverConfig.java:170)
at
org.drools.solver.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:138)
at
org.drools.solver.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:73)
rule "mySoftConstraint"
when
$appointmentSlot: AppointmentSlot()
not IntConstraintOccurrence(ruleId == "mySoftConstraint",
constraintType == ConstraintType.NEGATIVE_SOFT,
causes contains $appointmentSlot,
eval(weight != ($appointmentSlot.getCurrentDistance() + ($appointmentSlot.getNbShifts()
* 1000 )))
);
then
insertLogical(new IntConstraintOccurrence("mySoftConstraint",
ConstraintType.NEGATIVE_SOFT,
$appointmentSlot.getCurrentDistance() + ( $appointmentSlot.getNbShifts() * 1000
),
$appointmentSlot));
end
Best regards
Michenux
-------- Message d'origine--------
De: rules-users-bounces(a)lists.jboss.org de la part de Geoffrey De Smet
Date: lun. 29/06/2009 21:25
À: rules-users(a)lists.jboss.org
Objet : Re: RE : [rules-users] Re: [drools-solver] help for defining my droolsmodel/
moves
> rule "mySoftConstraint"
> when
> $appointmentSlot: AppointmentSlot()
> then
> insertLogical(new IntConstraintOccurrence("mySoftConstraint",
> ConstraintType.NEGATIVE_SOFT,
> $appointmentSlot.getCurrentDistance() + (
$appointmentSlot.getNbShifts() * 1000 ),
> $appointmentSlot));
> end
This rule probably runs into
https://jira.jboss.org/jira/browse/JBRULES-1804
Logical insertion lingers after the rule that inserted it no longer
supports it
Vote for the issue so Mark & Edson know it's annoying for us :) An
alternative drools-core configuration option will probably fix this
wierd issue for us, but it's unproven that it will have no negative side
effects...
A workaround (that will cost you performance) is to do something like this
when
$appointmentSlot: AppointmentSlot()
not IntConstraintOccurrence(
ruleId == "mySoftConstraint",
constraintType == ConstraintType.NEGATIVE_SOFT,
causes contains $appointmentSlot,
eval(weight != ($appointmentSlot.getCurrentDistance() + (
$appointmentSlot.getNbShifts() * 1000 )))
);
then
...
With kind regards,
Geoffrey De Smet
Laurent Michenaud schreef:
> Hi,
>
> Thanks for your answer. I will study it next.
>
> I have changed a little my solution and the solver
> seems to do more things and finds more solutions :
> - The move list are generated at each loop.
> - The init solution has no customer availability and
> the only possible move is to choose one.
> - When a customer availability is chosen, i initialize
> the resource shifts list of the solution myself.
> - Then, the only possible moves are to replace a resource shift
> by another one, or add one if the number of needed persons is not reached.
>
> My soft rules are the following:
> - sum of all distances between the resources and the appointment.
> - the number of resource shifts * 1000 ( less resource shifts is considered a better
solution ).
>
> I have configured a solution recaller to keep the n best solutions.
>
> Please look at the log of the solutions below because i think i
> have a problem :
>
> Solution 1 :
> score : 0hard/-102030soft
> CustomerAvailability : [start=2009-05-11 10:00:00.0,end=2009-05-11
12:00:00.0,duration=120]
> persons count : 3
> distance : 100030
> ResourceShift[id=1,period=[start=2009-05-11 08:00:00.0,end=2009-05-11
12:00:00.0,duration=240],resourceId=1,distance=100000]
> ResourceShift[id=3,period=[start=2009-05-11 09:00:00.0,end=2009-05-11
11:00:00.0,duration=120],resourceId=2,distance=30]
> /
> Solution 2 :
> score : 0hard/-104070soft
> CustomerAvailability : [start=2009-05-11 10:00:00.0,end=2009-05-11
12:00:00.0,duration=120]
> persons count : 3
> distance : 40
> ResourceShift[id=4,period=[start=2009-05-11 08:00:00.0,end=2009-05-11
12:00:00.0,duration=240],resourceId=3,distance=10]
> ResourceShift[id=3,period=[start=2009-05-11 09:00:00.0,end=2009-05-11
11:00:00.0,duration=120],resourceId=2,distance=30]
> /
>
> I understand the score of the solution 1 ( distance(10000 + 30) + (2 resourceShifts *
1000) = 102030
> but i don't understand the score of the solution 2, it is like if it has added
the score of
> solution 1 + ( distance(10+30) + 2 resourceShifts * 1000) = 104070
> It should be 2040.
>
> My soft rule constraints are :
>
> rule "mySoftConstraint"
> when
> $appointmentSlot: AppointmentSlot()
> then
> insertLogical(new IntConstraintOccurrence("mySoftConstraint",
> ConstraintType.NEGATIVE_SOFT,
> $appointmentSlot.getCurrentDistance() + ( $appointmentSlot.getNbShifts() * 1000
),
> $appointmentSlot));
> end
>
> It is quite hard to debug that part of the framework and your help would
> be welcomed.
>
> Best regards
> Michenux.
>
>
> -------- Message d'origine--------
> De: rules-users-bounces(a)lists.jboss.org de la part de Geoffrey De Smet
> Date: lun. 29/06/2009 19:00
> À: rules-users(a)lists.jboss.org
> Objet : [rules-users] Re: [drools-solver] help for defining my drools model/ moves
>
> I call this problem a "score trap".
>
> The problem is that your moves are to fine grained relatively to the
> rewarding aspect of the score function.
>
> Here are some options:
>
> 1) You could introduce an extra bigger move (with a seperate movefactory
> so you can configure relativeSelections independently of your currrent
> movefactories and evaluate the union of those generated moves) which
> creates a new availability and immediatly fills in appointments and
> resources too.
>
> In the examination problem for example, you 'll see 3 moves:
> RoomChangeMove & PeriodChangeMove (fine grained)
> ExamSwitchMove (course grained as it moves 2 exams, both in room and period)
>
> 2) You could also change the rewarding aspect of your score function to
> avoid score traps. Like a chosen availability with less then 5 resources
> doesn't trigger the constraint.
>
> In the manners2009 problem for example, you 'll see the extra score rule
> atLeastOneJobTypePerTableScoreGuider:
> - twoSameJobTypePerTable: punish all tables without 2 of a profession
> - atLeastOneJobTypePerTableScoreGuider: punish all tables with 1 of a
> profession even harder
> The SeatDesignationSwitchMove can only move 1 profession at a time at a
> table, so without atLeastOneJobTypePerTableScoreGuider it would have no
> insentive to move 1 profession to a table with 0 of that profession.
>
> 3) On trunk you can plug in a custom deciderScoreComparatorFactory and a
> custom ScoreDefinition. Keep the annoying constraint separately in the
> Score and make your deciderScoreComparatorFactory ignore it every 50
> steps for a duration of 10 steps.
>
> With kind regards,
> Geoffrey De Smet
>
>
> Laurent Michenaud schreef:
>> Hi,
>>
>> Here is my test :
>> I have an appointment to schedule on a customer availability.
>> I have a list of customer availabilities.
>> A customer availability is a period.
>> An appointment needs an exact number of persons.
>> A resource is composed of persons ( between 1 and n ) and has availabilities
too.
>>
>> The problem is to schedule the appointment : it has to choose the
>> right resource availabilities that matches one of the customer availabilities and
>> the total number of persons inside chosen resources must match exactly the
>> needed number of persons of the appointment.
>>
>> My moves are for the moment :
>> - Change the customer availability.
>> - Add a resource to the list of chosen resources.
>>
>> My init is :
>> - One of the customer availability is taken
>> - 0 resource taken.
>>
>> First, i don't know if my model and my init are ok.
>> Secondly, the solver does the following :
>>
>> - At the beginning, the score is bad because there is no resource.
>> So, it begins adding resource and the score is getting better
>> but when it changes the availability, the score gets very bad either because
>> the chosen resources don't match the new availability or it has no resource
>> inside. The solver doesnot seem to interest in the new chosen availibity with no
>> resource, but i wish it does.
>>
>> Thanks for your remarks/help
>>
>> Best regards
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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
------------------------------------------------------------------------
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users