rpgoldman / europa-pso

Automatically exported from code.google.com/p/europa-pso
0 stars 0 forks source link

Specify misbehaving in the temporal network #77

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
From Paul:

For an ordinary numerical Constrained Variable (not a temporal 
variable), the following works ok.

client.reset(var);
client.specify(var, 10);
--propagate--
client.reset(var);
client.specify(var, 20);
--propagate--

However, for temporal variables, the same sequence:

client.reset(tvar);
client.specify(tvar, 10);
--propagate--
client.reset(tvar);
client.specify(tvar, 20);
--propagate--

results in a checkError failure something like this:

TemporalNetwork/component/TemporalPropagator.cc:546: Error: 
dom.isMember(lb) && dom.isMember(ub) is false
        Updated bounds [10 10] from timepoint id_3788 are outside of 
int:CLOSED[20 20] for tvar
terminate called after throwing an instance of 'Error'

The reason is that the specified bounds become tnet constraints that 
conflict with the new specify.

It's worth noting that propagating between the reset and the specify
(causing a synchronization with the tnet) fixes the problem.

Original issue reported on code.google.com by miata...@gmail.com on 7 May 2010 at 5:53

GoogleCodeExporter commented 8 years ago
Okay I think I understand the issue better now.  The temporal network 
synchronizes
with the constraint engine at propagation and at no other time, so

<specify>
<propagate>
<reset>
<specify>
<propagate>

will cause a problem because the tnet doesn't know the constraint caused by
specification is gone, but
<specify>
<propagate>
<reset>
<propagate>
<specify>

works fine because the synchronization at the second propagate will remove the
constraint.  It sounds like maybe the temporal propagator isn't buffering all 
the
events it needs to.

Original comment by miata...@gmail.com on 7 May 2010 at 5:53

GoogleCodeExporter commented 8 years ago

Original comment by javier.barreiro@gmail.com on 22 Nov 2010 at 10:29