Thanks Geoffrey
I solved this problem. In case anyone is interested, I have attached the
fixed test with your suggestions.
Best regards
2013/11/4 Geoffrey De Smet <ge0ffrey.spam(a)gmail.com>
On 04-11-13 14:24, Juan Ignacio Barisich wrote:
You are right.
Do you think that is a bug? Or is there a hack to solve this?
User problem :)
Do something like:
toRemove.getPreviousStandstill().setNextStandstill(toRemove.getNextStandstill);
toRemove.getNextStandstill().setPreviousStandstill(toRemove.getPreviousStandstill);
It might need a cast and instanceof check to Customer.
2013/11/4 Geoffrey De Smet <ge0ffrey.spam(a)gmail.com>
>
> On 04-11-13 13:10, Juan Ignacio Barisich wrote:
>
> 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);
>
> Ok, then that's not the problem indeed.
>
>
> 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.
>
> Ah, that explains it.
>
> Although you remove the customer instance toRemove,
> one of the other customers still has it as previousStandstill
> and/or one of the other customers still has it as nextStandstill.
>
>
> 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
>>
>
>
>
> _______________________________________________
> 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
>
_______________________________________________
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