[rules-users] Optaplan6.0.0Beta1:chaining-simpleScore OK, DRL Score corruption

Paul T pt_5432 at yahoo.com
Fri Apr 19 09:27:11 EDT 2013


Hi Geoffrey - thanks for the prompt reply.

Installed the latest OptaPlanner snapshot but did not resolve the error - no
change.
I have played around and made some incremental improvements and although I
can still replicate the error I described earlier the single constraint
match error appears easier to debug with this test data.

SimpleScore still works fine and comes up with best answer SOFT -2. DRL
score corruption (only 1 rule) occurs in local search - gets through
FIRST_FIT heuristics OK. 
I am still using 4 Plan entities,1 equipment(anchor) to schedule.
Equip idNo:44 fryer1
Plan  idNo:58 T1 fryer fry chips duration : 3 stand: 1
Plan  idNo:61 T1 fryer fry snitzel duration: 7 stand: 2
Plan  idNo:64 T2 fryer fry chips duration : 3 stand: 1
Plan  idNo:67 T2 fryer fry snitzel duration: 7 stand: 2
Table idNo:41 T1
Table idNo:42 T2


Exception in thread "main" java.lang.IllegalStateException: Score
corruption: the workingScore (0hard/0medium/-8soft) is not the
uncorruptedScore (0hard/0medium/-12soft):
  The corrupted scoreDirector has no ConstraintMatch(s) which are in excess.
  The corrupted scoreDirector has 1 ConstraintMatch(s) which are missing:
    com.umple.solver/standtime vs
maxendtime/level2/[org.drools.core.reteoo.InitialFactImpl at 4dde85f0,
[Table-41], 
	fryer1 44 T1	POS:4 Plan: id 58 fry chips, 
	fryer1 44 T1	POS:2 Plan: id 61 fry snitzel]=-4

rule "standtime vs maxendtime"
	salience 20
	when
		not Plan(previousItemTaskorEquip== null) 						// forces all plans to be
initialised
		$table : Table(id!=null,$tableName : name)						
               $latestplan : Plan(previousItemTaskorEquip!= null,tableName
==$tableName,
				 	$maxend : getEquipEndTime(),$maxid : id,$maxstandtime :
taskSeqStandTime 
				 	)   
		
// NB working - selects correct latestplan  - strange not all the
latestplans used in heuristics - but are used in local search 		 	
 		not Plan(previousItemTaskorEquip != null,tableName
==$tableName,getEquipEndTime() > $maxend)

// check all plans vs latestplan
	  	$plan : Plan(previousItemTaskorEquip!= null,id != null,equip!=null,
    			 	tableName ==$tableName,getEquipEndTime()<$maxend,id != $maxid,
    			 	$equip :equip,$endtime: getEquipEndTime(),$standtime :
taskSeqStandTime,$id : id)

    		eval ($endtime+$standtime-$maxend<0)      

	then
	       scoreHolder.addSoftConstraintMatch(kcontext,
$endtime+$standtime-$maxend); 
end

The part of xml config file which is most likely relevant:
<localSearch>
        <unionMoveSelector>
          <changeMoveSelector>
          </changeMoveSelector>
           <swapMoveSelector> 
           </swapMoveSelector>
        </unionMoveSelector>  
    <acceptor>
      <planningEntityTabuSize>6</planningEntityTabuSize>
    </acceptor>
    <forager>
      <minimalAcceptedSelection>2000</minimalAcceptedSelection>
    </forager>
  </localSearch>

If the Rule looks OK, I will manually step through the trace as it is doable
but am not sure how to do so or what to look for.

Thanks Paul





--
View this message in context: http://drools.46999.n3.nabble.com/Optaplan6-0-0Beta1-chaining-simpleScore-OK-DRL-Score-corruption-tp4023365p4023454.html
Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list