Dear Mark,

I wrote "simple", because this solution might be very efficient if many of
the preferences are conflicting.  The issue is that a propagator like

   B = (X =<: Y)

will perform no propagation until either B is known, or both X and Y are
known.  To get maximal performance, you need to have as much propagation as
possible.  A good heuristics might be to determine the B's as soon as
possible.  Something like

Bs = for X in Scenes collect:Collect do
        for Y in Scenes do
           if X\=Y andthen {IsPreced X Y} then %X is a precedent of Y
              {Collect (Position.X=<:Position.Y)}
           end
        end
     end
{FD.sum Bs '=:' NumPrec}

%% determine NumPrec, then the Bs, trying high values first, then the
positions
{FD.distribute generic(order:naive value:max) NumPrec|Bs}
{FD.distribute ff Position}

I haven't tried it, but that's something you could give a try at.

Cheers,
Raphael

On Thu, Feb 25, 2010 at 1:00 PM, mark richardson <[email protected]>wrote:

>  Hi,
>
> Thank you so much for your help with this.
> I did have another small problem that I have now solved - I had {IsPreced X
> Y} returning true if Y had no precedences at all which was causing chaos.
> (Oh and I deliberately left the distribution of the position vector out of
> the message, but thank you for your reminder :+) )
>
> You say that this approach is a 'simple way to maximize the number of
> preferences'.
> I might regret asking this, but is there a way which is less simple, but
> perhaps better?
>
>
> Regards
>
> Mark
>
>
> Raphael Collet wrote:
>
> Dear Mark,
>
>  Yes, I think you got it right.  That is a simple way to maximize the
> number of preferences.  (Just don't forget to distribute the vector Position
> in your script.)
>
>  Cheers,
> Raphael
>
> On Thu, Feb 25, 2010 at 12:26 PM, mark richardson <[email protected]
> > wrote:
>
>> Hi,
>>
>> I've modified the script slightly to this:
>>
>> {FD.sum
>>  for X in Scenes collect:Collect do
>>
>>     for Y in Scenes do
>>         if X\=Y andthen {IsPreced X Y} then %X is a precedent of Y
>>           {Collect (Position.X=<:Position.Y)}
>>        end
>>     end
>>   end '=:' NumPrec}
>>
>> I realised the mistake I was making with X and Y instead of Position.X and
>> Position.Y and mistyping 'and' instead of 'andthen'
>>
>> Regards
>>
>> Mark
>>
>>
>> --
>> Mark Richardson MBCS
>> Research Assistant
>> University of Teesside, UK
>> Email: [email protected]
>>      [email protected]
>> Skype: mark.richardson.
>>
>>
>> _________________________________________________________________________________
>> mozart-users mailing list
>> [email protected]
>> http://www.mozart-oz.org/mailman/listinfo/mozart-users
>>
>
>  ------------------------------
>
> _________________________________________________________________________________
> mozart-users mailing list                               
> [email protected]http://www.mozart-oz.org/mailman/listinfo/mozart-users
>
>
>
> --
> Mark Richardson MBCS
> Research Assistant
> University of Teesside, UK
> Email: [email protected]
>        [email protected]
> Skype: mark.richardson.
>
>
>
> _________________________________________________________________________________
> mozart-users mailing list
> [email protected]
> http://www.mozart-oz.org/mailman/listinfo/mozart-users
>
_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to