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