我正在尝试使用 optaplanner 构建一个简单的分数计算器,但我的“OR”-Constraint 无法正常工作。Optaplanner 说分数是 -1,但分数必须是 0。” 解决方案应该是:“A”只可能在索引 2 处。
方法“no_A_at_Index3”效果很好。“A_at_Index2_or_Index3”似乎是错误的。有谁知道我做错了什么?
PS我将方法从“no_A_at_Index2”更改为“no_A_at_Index3”。
真奇怪:
- (!(this.A_at_Index2_or_Index3(nCells)) || !(this.no_A_at_Index2(nCells))) 效果很好。
(!(this.A_at_Index2_or_Index3(nCells)) || !(this.no_A_at_Index3(nCells))) 不起作用。
@Override public SimpleScore calculateScore(NCells nCells) { int score = 0; if (!(this.A_at_Index2_or_Index3(nCells))){ score--; } if (!(this.no_A_at_Index3(nCells))){ score--; } return SimpleScore.valueOf(score); } public boolean A_at_Index2_or_Index3(NCells nCells){ List<Cell> cellList = nCells.getCellList(); ChomskyRule ruleAtIndex2 = cellList.get(2).getRule(); ChomskyRule ruleAtIndex3 = cellList.get(3).getRule(); int a_counter = 0; if ( ruleAtIndex2 != null && ruleAtIndex2.getLeftSide().equals("A")){ a_counter++; } if ( ruleAtIndex3 != null && ruleAtIndex3.getLeftSide().equals("A")){ a_counter++; } if (a_counter==0 && ruleAtIndex2!=null && ruleAtIndex3!=null){ return false; } return true; } public boolean no_A_at_Index3(NCells nCells){ List<Cell> cellList = nCells.getCellList(); ChomskyRule ruleAtIndex3 = cellList.get(3).getRule(); if(ruleAtIndex3!=null && ruleAtIndex3.getLeftSide().equals("A")){return false;} return true; }