[
https://issues.jboss.org/browse/JBRULES-2873?page=com.atlassian.jira.plug...
]
Wolfgang Laun commented on JBRULES-2873:
----------------------------------------
After setting up an activation event listener for the rule "column elimination"
and with specific cells, I see that the rule fires correctly, saying
column elimination due to [8,2]: remove 5 from [4,2]
This update creates two erroneous activations:
ActivationCreatedEventImpl: column elimination: $i=$i=5, $c=[5,0]: /$c.free=[3, 4, 5, 9],
in org.drools.examples.sudoku.CellSqr@f70ee1 and in column 0, $cx: [2,0]: /$cx.free=[1,
2, 3, 4, 5], in org.drools.examples.sudoku.CellSqr@1bbd583 and in column 0, not: [5,1]:
/not.free=[4, 5, 9], in org.drools.examples.sudoku.CellSqr@f70ee1 and in column 1
ActivationCreatedEventImpl: column elimination: $i=$i=5, $c=[3,0]: /$c.free=[3, 5, 9], in
org.drools.examples.sudoku.CellSqr@f70ee1 and in column 0, $cx: [2,0]: /$cx.free=[1, 2,
3, 4, 5], in org.drools.examples.sudoku.CellSqr@1bbd583 and in column 0, not: [5,1]:
/not.free=[4, 5, 9], in org.drools.examples.sudoku.CellSqr@f70ee1 and in column 1
The second one fires (this is the error):
BeforeActivationFiredEventImpl: column elimination: $i=$i=5, $c=[3,0]: /$c.free=[3, 5,
9], in org.drools.examples.sudoku.CellSqr@f70ee1 and in column 0, $cx: [2,0]:
/$cx.free=[1, 2, 3, 4, 5], in org.drools.examples.sudoku.CellSqr@1bbd583 and in column 0,
not: [5,1]: /not.free=[4, 5, 9], in org.drools.examples.sudoku.CellSqr@f70ee1 and in
column 1
This firing removes the other activation.
Rule fires unexpectedly - not CE fails
--------------------------------------
Key: JBRULES-2873
URL:
https://issues.jboss.org/browse/JBRULES-2873
Project: Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: drools-core
Affects Versions: 5.1.1.FINAL
Reporter: Wolfgang Laun
Assignee: Mark Proctor
Priority: Critical
Attachments: sudokubug.tgz, sudokubug1.tgz, sudokubug2.tgz
The rule shown below fires, and then the code on the RHS prints "But cell ...
matches" which is only possible when there is a Cell according to the constraints in
the "not" CE. - The full Sudoku code is available.
rule "column elimination"
when
not Setting()
$i: Integer()
# occurs in a Cell
$c: Cell( free contains $i, $cs: cellSqr, $cc: cellCol )
# but not in another cell of the same square and a different column
not Cell( this != $c, free contains $i, cellSqr == $cs, cellCol != $cc )
## not ( $oc: Cell( this != $c )
## and
## eval( $oc.getFree().contains( $i ) &&
## $oc.getCellSqr().equals( $cs ) &&
## ! $oc.getCellCol().equals( $cc ) ) )
# but there is a cell in the same column and another square containing this value
$cx: Cell( freeCount > 1, free contains $i, cellCol == $cc, cellSqr != $cs )
then
# remove the value from that other cell
System.out.println( "column elimination due to " + $c.posAsString() +
": remove " + $i + " from " +
$cx.posAsString() );
for( int iRow = 0; iRow < 9; iRow++ ){
for( int iCol = 0; iCol < 9; iCol++ ){
Cell cell = Sudoku.sudoku.cells[iRow][iCol];
if( ! cell.equals( $c ) &&
cell.getCellSqr().equals( $cs ) &&
! cell.getCellCol().equals( $cc ) &&
cell.getFree().contains( $i ) ){
System.out.println( "But cell " + cell.toString() + "
matches!" );
}
}
}
for( Cell c: $cs.getCells() ){
System.out.print( c.posAsString() + ": " + c.getFree() +
" cc="+c.getCellCol() + " cs="+c.getCellSqr() + ";
" );
}
System.out.println();
modify( $cx ){ blockValue( $i ) }
end
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira