Ok, then that's not the problem indeed.Geoffrey, thanks for response.The the Customer "toRemove" instance IS the same instance as which is in the workingSolution's Customer list. In fact, in the test example I have attached, I get that instance via:
final Customer toRemove = workingSolution.getCustomerList().get(0);
Ah, that explains it.I try to reproduce the hack in CloudBalancing's problemFactChange implementation, but with no success. I mean, I tried:
// to clean the next variable of previous in the chain
Standstill prev = toRemove.getPreviousStandstill();but this throw an exception like:
scoreDirector.beforeEntityRemoved(prev);
prev.setNextCustomer(null);
scoreDirector.afterEntityRemoved(prev);
java.lang.IllegalStateException: The entity (1(after 66)) has a variable (previousStandstill) with value (66(after 51)) which has a mappedBy variable (nextCustomer) with a value (null) which is not that entity.
Also, i try to clean the previous variable of the following item in the chain:
// to clean the previous variable of the following customer in the chain
Customer nextCustomer = toRemove.getNextCustomer();
if (nextCustomer != null) {
scoreDirector.beforeEntityRemoved(nextCustomer);
nextCustomer.setPreviousStandstill(null);
scoreDirector.beforeEntityRemoved(nextCustomer);
}
but this throw an exception like:
java.lang.IllegalStateException: The ScoreDirector (class org.optaplanner.core.impl.score.director.common.TrailingEntityMapSupport) is corrupted, because the entity (10(after null)) for chained planningVariable (previousStandstill) cannot be retracted: it was never inserted.
Can you take a look to the test I have attached and guide me to solve this?
Thanks a lot.
Regards
2013/11/4 Geoffrey De Smet <ge0ffrey.spam@gmail.com>
the remove() method will make no difference because the Customer "toRemove" instance
On 01-11-13 19:38, Juan Ignacio Barisich wrote:
The fact removing that I made is like:Hi everybodyI am using optaplanner in real-time style. My application domain is similar to the "Vehicle Routing" example (http://docs.jboss.org/drools/release/6.0.0.CR5/optaplanner-docs/html_single/index.html#vehicleRouting). I mean, I am using chained variables and shadow variables. I have a problem while trying to remove a fact (an entity), via a ProblemFactChange:
java.lang.IllegalArgumentException: The entity instance (...) was never added to this ScoreDirector. Usually the cause is that that specific instance was not in your Solution's entities.
solver.addProblemFactChange(new ProblemFactChange() {
@Override
public void doChange(ScoreDirector scoreDirector) {
...
scoreDirector.beforeEntityRemoved(toRemove);
workingSolution.getCustomerList().remove(toRemove);
is not the same instance as which is in the workingSolution's Customer list.
See the CloudBalancing's PRoblemFactChange implementation how to solve this.
And one of the warnings in the Real-time planning section of the docs to understand it better:)
Juan Ignacio BarisichBest regards,I'd appreciate any ideas on how to resolve this.I have attached a test case based on the "Vehicle Routing". To run it, just put that file into the optaplanner-distribution-6.0.0.CR5/examples/sources/src/test/java/org/optaplanner/examples/vehiclerouting/app/ directory.scoreDirector.afterEntityRemoved(toRemove);I think the problem is there. Do you know what I'm doing wrong?
}
});
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users