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);
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();
scoreDirector.beforeEntityRemoved(prev);
prev.setNextCustomer(null);
scoreDirector.afterEntityRemoved(prev);
but this throw an exception like:
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(a)gmail.com>
On 01-11-13 19:38, Juan Ignacio Barisich wrote:
Hi everybody
I 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_sing...).
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.
The fact removing that I made is like:
solver.addProblemFactChange(new ProblemFactChange() {
@Override
public void doChange(ScoreDirector scoreDirector) {
...
scoreDirector.beforeEntityRemoved(toRemove);
workingSolution.getCustomerList().remove(toRemove);
the remove() method will make no difference because the Customer
"toRemove" instance
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:)
scoreDirector.afterEntityRemoved(toRemove);
}
});
I think the problem is there. Do you know what I'm doing wrong?
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.
<
http://drools.46999.n3.nabble.com/file/n4017760/serverlog.zip>I'd
appreciate any ideas on how to resolve this.
Best regards,
Juan Ignacio Barisich
_______________________________________________
rules-users mailing
listrules-users@lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users