[gecode-users] Consecutive instances of Gecode produce different results

Pascal Francq (Mailing lists) mailing-list at francq.info
Thu May 23 22:51:41 CEST 2013


1. My propagator is very simple : It waits until all v and I are
assigned. Then, it computes a cost function (to optimize) depending from
these variables.


//-----------------------------------------------------------------------------
PropCost RChoquetPropagator::cost(const Space&, const ModEventDelta&) const
{
	return PropCost::binary(PropCost::HI);
}

//-----------------------------------------------------------------------------
ExecStatus RChoquetPropagator::propagate(Space& home, const ModEventDelta&)
{
	if((!v.assigned())||(!I.assigned()))
		return (ES_NOFIX);
	double Res(Compute(*this)); // Make some computation
	if(Res<-1.0||Res>1.0)
		throw std::range_error("Cost function must be in [-1,1]");
	if(Cost.eq(home,Res)==Float::ME_FLOAT_FAILED)
		return ES_FAILED;
	return home.ES_SUBSUMED(*this);
}

2. I don't have program any parallel searches.

I will check 22.9 in MPG (for the moment, I relaunch the program several
times rather than calling a function multiple times in the same program
run).

Le 23/05/13 21:27, Christian Schulte a écrit :
> Oh, I see. That means that there is most likely a bug (could also be ok) in
> your own propagator.
> 
> Normally, a propagator must be monotonic: it never propagates more when it
> is run on bigger variables domains. Or with other words: the smaller the
> domains the more it propagates.
> 
> Some propagation algorithms do not follow this which might lead to
> indeterminstic behavior as you observed. Check 22.9 in MPG.
> 
> But most likely it is a bug in your propagator.
> 
> Or do you use parallel search with several threads? This can also lead to
> non-deterministic behavior.
> 
> Cheers
> Christian
> 
> --
> Christian Schulte, www.ict.kth.se/~cschulte/
> 
> 
>> -----Original Message-----
>> From: Pascal Francq (Mailing lists) [mailto:mailing-list at francq.info]
>> Sent: Thursday, May 23, 2013 5:43 PM
>> To: cschulte at kth.se
>> Subject: Re: [gecode-users] Consecutive instances of Gecode produce
> different
>> results
>>
>> I use two Gecode::IntVarArray variables I and v. The code for the
> constraints and
>> the branching is the following one :
>>
>> // Maximal value <= 1
>> rel(*this,1>=sum(v));
>>
>> // Sum_(i)(2*v[i]-Sum_(j,j<>i)(I[i,j])>=0
>> for(size_t i=0;i<4;i++)
>> {
>>    IntVar tmp[3];
>>    size_t idx(0);
>>    for(size_t j=0;j<4;j++)
>>    {
>>       if(i==j)
>>          continue;
>>       if(idx)
>>          tmp[idx]=expr(*this,tmp[idx-1]-abs(I[i,j]));
>>       else
>>          tmp[idx]=expr(*this,-abs(I[i,j]));
>>       idx++;
>>     }
>>     rel(*this, 0<=2*v[i]+tmp[idx-1]);
>> }
>>
>> // Call my own propagator
>> choquetPropagator(*this,Test,v,I,Cost);
>>
>> // Make the branch
>> branch(*this,v,INT_VAR_SIZE_MIN(),INT_VAL_MIN());
>> branch(*this,I,INT_VAR_SIZE_MIN(),INT_VAL_MIN());
>>
>>
>> Le 23/05/13 17:23, Christian Schulte a écrit :
>>> Could you tell us which constraints and which branchings you are using?
>>>
>>> Best
>>> Christian
>>>
>>> --
>>> Christian Schulte, Professor of Computer Science, KTH,
>>> www.ict.kth.se/~cschulte/
>>>
>>>
>>> -----Original Message-----
>>> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On
>>> Behalf Of Pascal Francq (Mailing lists)
>>> Sent: Thursday, May 23, 2013 4:59 PM
>>> To: users at gecode.org
>>> Subject: [gecode-users] Consecutive instances of Gecode produce
>>> different results
>>>
>>> Hi,
>>> I have a strange problem : I have a function that runs a Gecode
>>> instance for a particular problem. When I call the function several
>>> times, the result of the first run sometimes differs from those of the
> other
>> ones.
>>> I have make some runs with valgrind, but I see nothing. Has anyone an
>>> idea where to search ?
>>> --
>>> Dr. Pascal Francq
>>> Belgium
>>>
>>> _______________________________________________
>>> Gecode users mailing list
>>> users at gecode.org
>>> https://www.gecode.org/mailman/listinfo/gecode-users
>>>
>>
>>
>> --
>> Dr. Pascal Francq
>> Belgium
> 


-- 
Dr. Pascal Francq
Belgium



More information about the users mailing list