Thanks a lot, it works now. Some strange spaces inserted during copying/pasting but not visible in eclipse.
Best regards Michenaud Laurent -------- Message d'origine-------- De: [email protected] de la part de Geoffrey De Smet Date: mar. 30/06/2009 20:06 À: [email protected] Objet : Re: RE : RE : [rules-users] Re: [drools-solver] help for definingmy droolsmodel/ moves 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: [email protected] de la part de Geoffrey De Smet > Date: lun. 29/06/2009 21:25 > À: [email protected] > 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: [email protected] de la part de Geoffrey De Smet >> Date: lun. 29/06/2009 19:00 >> À: [email protected] >> 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 >>> [email protected] >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >> _______________________________________________ >> rules-users mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> rules-users mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > > > ------------------------------------------------------------------------ > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
<<winmail.dat>>
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
