Hi Raul,

Could you provide some context in which to run this code?

Thanks,

Mike

On Fri, Nov 16, 2012 at 6:52 PM, Raul Miller <rauldmil...@gmail.com> wrote:

> If you are talking about my post on the 10th, where I proposed
>
> arcn=:3 :0
>   'D c1 X'=: y
>   X1=. 1=X
>   ([:+./"1[: +./((|:c1) *"1 2~ (|:X1) *"1 2 ]) +. c1 *"1 2~ X1 *"1 2 ])^:_
> D
> )
>
> ... note that it works just fine when D is not square.
>
> And all I got out of Mike's 11/11 message was that D might not be square.
>
> Am I missing something?
>
> --
> Raul
>
> P.S. In the above code, X1=. 1 = X assumes that X had only 2s and 0s
> in the lower triangle.  Perhaps a better expression would have been X1
> =. (*X) * </&i./ $X
>
> On Fri, Nov 16, 2012 at 9:44 PM, Michal D. <michal.dobrog...@gmail.com>
> wrote:
> > Boss is Boss, I eventually arrived at the same (non-negative case)
> solution.
> >
> > Thanks km for the explanation of @ vs @: which I'm starting to slowly
> get.
> >
> > Linda: I think I prefer having it on three lines.  It better breaks down
> > the steps I'm trying to accomplish.  Maybe someday I'll be able to boil
> it
> > down to a single line ;-)
> >
> > Raul: please let me know if we should still pursue your previous
> definition
> > in light of Mike's commentary.
> >
> > Mike Day is right on with all his observations about what I'm trying to
> > accomplish.  Sorry for the long delay - I'm having trouble keeping up.
> > Notes:
> >
> > (0) Interesting {:: vs { and <
> >
> > (1) The J arc consistency algorithm I've presented is not AC-3 nor any of
> > the later AC algorithms.  AC-3 is simply another algorithm that
> > accomplishes the same thing.
> >
> > (2) Using the approach I do with the C-tables allows massive parallelism.
> > In particular using mostly logical-and and logical-or operations on
> boolean
> > arrays allows a single assembly level operation to have 32 or 64 way
> > parallelism (or larger if using vector registers).
> >
> > (3) A simpler algorithm that requires a single version of each C-table
> and
> > a revDom that reduces both it's input domains is possible but I haven't
> > gotten there yet.  I'm working on it along with code to randomly
> generate a
> > sudoku and generate the equivalent CSP.  It might be a while.
> >
> > Cheers,
> >
> > Mike
> >
> >
> > On Wed, Nov 14, 2012 at 3:11 PM, Mike Day <mike_liz....@tiscali.co.uk
> >wrote:
> >
> >> Thanks,  but my questions were rhetorical!  I was merely trying to
> comment
> >> on Linda's apparent aversion to @ and @: and her preference for [: which
> >> she has justified in a later post.  I'm not the Mike who started this
> >> thread on arc consistency.
> >>
> >> Incidentally,  I also commented in that message on 11/11 (still in the
> >> history below) about Raul Miller's question concerning the domain
> matrix D.
> >>
> >> Mike
> >>
> >>
> >> On 14/11/2012 11:24 AM, Linda Alvord wrote:
> >>
> >>> Kip's comments are helpful.
> >>>
> >>> Back to your problem, Mike:
> >>>
> >>>     X=:?(2#n)$2      NB. generate random matrix of [0,1]
> >>>     X=:X*(i.n)</i.n  NB. make it upper diagonal, zeros on diagonal
> >>>     ]X=:X+|:2*X
> >>> 0 0 0 0 1
> >>> 0 0 1 0 0
> >>> 0 2 0 0 0
> >>> 0 0 0 0 1
> >>> 2 0 0 2 0
> >>>
> >>> The three lines can be combined in one line.
> >>>
> >>>     ]X+|:2*X=:(?(2#n)$2)*(i.n)</i.**n
> >>> 0 1 1 0 1
> >>> 2 0 1 0 1
> >>> 2 2 0 1 0
> >>> 0 0 2 0 0
> >>> 2 2 0 0 0
> >>>
> >>> Linda
> >>>
> >>>
> >>> -----Original Message-----
> >>> From: programming-bounces@forums.**jsoftware.com<
> programming-boun...@forums.jsoftware.com>[mailto:
> >>> programming-bounces@**forums.jsoftware.com<
> programming-boun...@forums.jsoftware.com>]
> >>> On Behalf Of km
> >>> Sent: Wednesday, November 14, 2012 4:29 AM
> >>> To: programm...@jsoftware.com
> >>> Subject: Re: [Jprogramming] Arc consistency in J
> >>>
> >>> Responding to Mike's query about @
> >>>
> >>> Mathematical composition  f o g  means "do g first, then f" and is
> >>> expressed in J by the monadic use of  f @: g  or  [: f g .  The
> monadic use
> >>> of  f @ g  can surprise you, compare
> >>>
> >>>     |.@:+: 1 2 3
> >>> 6 4 2
> >>>     |.@+: 1 2 3
> >>> 2 4 6
> >>>
> >>> -- the first means double vector 1 2 3 then reverse the resulting
> vector,
> >>> the second means double and reverse each scalar then assemble the
> results.
> >>>
> >>> Kip Murray
> >>>
> >>> Sent from my iPad
> >>>
> >>>
> >>> On Nov 13, 2012, at 8:44 PM, "Linda Alvord" <lindaalv...@verizon.net>
> >>> wrote:
> >>>
> >>>  I can only give a personal response.  Maybe it is because I'm left
> >>>> handed.
> >>>>
> >>>> When I look at  ((<@#)&(i.n))@(0&<)  at or
> >>>>
> >>>> -----Original Message-----
> >>>> From: programming-bounces@forums.**jsoftware.com<
> programming-boun...@forums.jsoftware.com>
> >>>> [mailto:programming-bounces@**forums.jsoftware.com<
> programming-boun...@forums.jsoftware.com>]
> >>>> On Behalf Of Mike
> >>>> Day
> >>>> Sent: Monday, November 12, 2012 6:40 AM
> >>>> To: programm...@jsoftware.com
> >>>> Subject: Re: [Jprogramming] Arc consistency in J
> >>>>
> >>>> But what's wrong with @ that's preferable with [:   ?        (I think
> >>>> Th is has been asked before.)
> >>>>
> >>>> Aren't they both devices to represent what "ordinary" mathematicians
> >>>> just write as f g h ... for the composition of f g h ...   ?
> >>>>
> >>>> Since J cleverly allows hooks and forks and interprets unbracketed
> >>>> trains of verbs as such,  it needs some other way to recognise
> >>>> composition,  and that's what both @ (and @:) and [: do for us - so
> why
> >>>> avoid one or the other of them?   I agree it took a lot of time to get
> >>>> my head round the new way of seeing trains of verbs.
> >>>>
> >>>> Mike
> >>>>
> >>>> On 12/11/2012 7:57 AM, Linda Alvord wrote:
> >>>>
> >>>>> Well, it was possible, once I managed to get the rank right. Thanks
> >>>>> for providing hope that it could be done. Actually it is not too bad
> >>>>> looking after all.
> >>>>>
> >>>>>     A
> >>>>> 0 0 1 0 0
> >>>>> 0 0 0 0 0
> >>>>> 2 0 0 0 1
> >>>>> 0 0 0 0 1
> >>>>> 0 0 2 2 0
> >>>>>
> >>>>>     adj=:((<@#)&(i.n))@(0&<)
> >>>>>     adj
> >>>>> <@#&0 1 2 3 4@(0&<)
> >>>>>     adj A
> >>>>> --TT---T-T---┐
> >>>>> │2││0 4│4│2 3│
> >>>>> L-++---+-+----
> >>>>>
> >>>>>     f=: 13 :'(0<y)([:<#)"1 i.#y'
> >>>>>     f
> >>>>> (0 < ]) ([: < #)"1 [: i. #
> >>>>>     f A
> >>>>> --TT---T-T---┐
> >>>>> │2││0 4│4│2 3│
> >>>>> L-++---+-+----
> >>>>>
> >>>>>        5!:4 <'adj'
> >>>>>                          -- <
> >>>>>              -- @ -------+- #
> >>>>>        -- & -+- 0 1 2 3 4
> >>>>>        │
> >>>>> -- @ -+     -- 0
> >>>>>        L- & -+- <
> >>>>>
> >>>>>     5!:4 <'f'
> >>>>>          -- 0
> >>>>>    ------+- <
> >>>>>    │     L- ]
> >>>>>    │          -- [:
> >>>>>    │     -----+- <
> >>>>> --+- " -+    L- #
> >>>>>    │     L- 1
> >>>>>    │
> >>>>>    │     -- [:
> >>>>>    L-----+- i.
> >>>>>          L- #
> >>>>>
> >>>>> Linda
> >>>>>
> >>>>> -----Original Message-----
> >>>>> From: programming-bounces@forums.**jsoftware.com<
> programming-boun...@forums.jsoftware.com>
> >>>>> [mailto:programming-bounces@**forums.jsoftware.com<
> programming-boun...@forums.jsoftware.com>]
> >>>>> On Behalf Of Mike
> >>>>> Day
> >>>>> Sent: Sunday, November 11, 2012 7:15 AM
> >>>>> To: programm...@jsoftware.com
> >>>>> Subject: Re: [Jprogramming] Arc consistency in J
> >>>>>
> >>>>> I don't think you can remove the @, although you may use the cap, [:
> >>>>> , instead,  but then you need to force the rank:
> >>>>>      ([:<(#&0 1 2 3@(0&<)))"1 A
> >>>>> +-++---+-+
> >>>>> |2||0 3|2|
> >>>>> +-++---+-+
> >>>>>
> >>>>> I don't like using 0 1 2 3 explicitly since it presumes you know the
> >>>>> dimension of A, so I prefer either
> >>>>>         adja =: * <@# i.@#       NB. or use caps if @ is too
> horrible
> >>>>>      adja A
> >>>>> +-++---+-+
> >>>>> |2||0 3|2|
> >>>>> +-++---+-+
> >>>>>
> >>>>> or
> >>>>>
> >>>>>      adjI =: <@I.@:*
> >>>>>      adjI A
> >>>>> +-++---+-+
> >>>>> |2||0 3|2|
> >>>>> +-++---+-+
> >>>>>
> >>>>> I. is so useful that I've defined an I "dfn" in my Dyalog APL too!
> >>>>>
> >>>>> As for Raul's point about D,  I understood it to represent the
> >>>>> domains of the variables:  if there are m variables  and the domain
> >>>>> of all their possible values is i.n,  then 1 = D{~<i,j means that
> >>>>> variable number i may have value j .  m and n are likely to be
> >>>>> different.  So i<D is a boolean representing the a priori values that
> >>>>> variable i might
> >>>>>
> >>>> have.
> >>>>
> >>>>> The consistency algorithm apparently examines which of these a priori
> >>>>> values are consistent with the domains of the other variables given
> >>>>> certain unary and binary constraints which are also inputs to the
> >>>>> problem.
> >>>>>
> >>>>> Michal's example had m=n which tends to mislead the casual reader!
> >>>>>
> >>>>> I believe The m*m A array points to which constraints apply,  so
> >>>>> 0<l=A{<i,k means that binary constraint number l applies between
> >>>>> variables
> >>>>>
> >>>> i and k.
> >>>>
> >>>>> This is why A isn't just a boolean adjacency matrix nor do the
> >>>>> entries signify distances as they would in a weighted graph.
> >>>>>
> >>>>> I'm puzzled that the algorithm requires each binary relation to be
> >>>>> presented in both direct and transposed form  (this explains Michal's
> >>>>> need to patch in a new index (to a transposed C) in the lower
> >>>>> triangle of A for each index to a direct C in the upper triangle).
> >>>>> Perhaps the
> >>>>>
> >>>> later algorithms (arc-4...
> >>>>
> >>>>> ?) deal with this difficulty.
> >>>>>
> >>>>> It strikes me that for a real problem,  concise relations such as x
> <:
> >>>>> y,  or 2x+3y>5 can become pretty large and unwieldy C-tables, but
> >>>>> perhaps that's unavoidable when working in the integers.
> >>>>>
> >>>>> (The other) Mike
> >>>>>
> >>>>> On 11/11/2012 10:16 AM, Linda Alvord wrote:
> >>>>>
> >>>>> Mike, I think this will work as an alternative to  adj
> >>>>>
> >>>>>       A
> >>>>> 0 0 1 0
> >>>>> 0 0 0 0
> >>>>> 2 0 0 1
> >>>>> 0 0 2 0
> >>>>>      adj
> >>>>> <@#&0 1 2 3@(0&<)
> >>>>>      adj A
> >>>>> --TT---T-┐
> >>>>> │2││0 3│2│
> >>>>> L-++---+--
> >>>>>      h
> >>>>> 0 1 2 3 <@#~ 0 < ]
> >>>>>      h A
> >>>>> --TT---T-┐
> >>>>> │2││0 3│2│
> >>>>> L-++---+--
> >>>>>
> >>>>>    Can anyone remove the final  @  from  h  ?
> >>>>>
> >>>>> Linda
> >>>>>
> >>>>>
> >>>>> -----Original Message-----
> >>>>> From:programming-bounces@**forums.jsoftware.com<
> from%3aprogramming-boun...@forums.jsoftware.com>
> >>>>> [mailto:programming-bounces@**forums.jsoftware.com<
> programming-boun...@forums.jsoftware.com>]
> >>>>> On Behalf Of Raul
> >>>>> Miller
> >>>>> Sent: Saturday, November 10, 2012 12:44 PM
> >>>>> To:programm...@jsoftware.com
> >>>>> Subject: Re: [Jprogramming] Arc consistency in J
> >>>>>
> >>>>> On Sat, Nov 10, 2012 at 12:16 PM, Michal
> >>>>> D.<michal.dobrog...@gmail.com>
> >>>>> wrote:
> >>>>>
> >>>>>  Here X is telling us to use the constraint c1 (presumably b/c C is
> >>>>>> not
> >>>>>> shown) between the variables 1 and 3 (0 based).  Likewise, use the
> >>>>>> transpose going the other direction (3,1).
> >>>>>>
> >>>>> Ouch, you are correct, I did not specify C.  On retesting, though, it
> >>>>> looks like my results stay the same when I use:
> >>>>>
> >>>>> arccon=:3 :0
> >>>>>      'D c1 X'=: y
> >>>>>      'n d'=: $D
> >>>>>      adj =: ((<@#)&(i.n)) @ (0&<)
> >>>>>      A =: adj X
> >>>>>      C=: a: , c1 ; (|:c1)
> >>>>>      ac =: > @ (1&{) @ (revise^:_) @ ((i.n)&;)
> >>>>>      ac D
> >>>>> )
> >>>>>
> >>>>> For longer scripts like this, I really need to get into the habit of
> >>>>> restarting J for every test.  So that probably means I should be
> >>>>> using
> >>>>>
> >>>> jhs.
> >>>>
> >>>>> Given the structure of X, only variables 1 and 3 can possibly change.
> >>>>>> So if they are all changing something is definitely wrong.
> >>>>>>
> >>>>> This line of thinking does not make sense to me.  I thought that the
> >>>>> requirement was that a 1 in D exists only when there is a valid
> >>>>> relationship along a relevant arc.  If a 1 in D can also exist in the
> >>>>> absence of any relevant arc, I am back to needing a description of
> >>>>> the
> >>>>>
> >>>> algorithm.
> >>>>
> >>>>> Unfortunately I've run out of time to read the rest of your response
> >>>>>> but hopefully I can get through it soon.  I've also wanted to write
> >>>>>> a simpler version of the algorithm where the right argument of ac is
> >>>>>> only D and it runs through all the arcs in the problem instead of
> >>>>>> trying to be smart about which ones could have changed.
> >>>>>>
> >>>>> Yes... I am currently suspicious of the "AC-3 algorithm".
> >>>>>
> >>>>> In the case of symmetric consistency, I think that it's unnecessary
> >>>>> complexity, because the system converges on the initial iteration.
> >>>>>
> >>>>> In the case of asymmetric consistency, I think that the work involved
> >>>>> in maintaining the data structures needed for correctness will almost
> >>>>> always exceed the work saved.
> >>>>>
> >>>>> But I could be wrong.  I am not sure yet if I understand the
> >>>>> underlying algorithm!
> >>>>>
> >>>>> --
> >>>>> Raul
> >>>>>
> >>>>> ------------------------------**------------------------------**
> >>>>> ---------
> >>>>> - For information about J forums see
> >>>>> http://www.jsoftware.com/**forums.htm<
> http://www.jsoftware.com/forums.htm>
> >>>>> ------------------------------**------------------------------**
> >>>>> ---------
> >>>>> - For information about J forums see
> >>>>> http://www.jsoftware.com/**forums.htm<
> http://www.jsoftware.com/forums.htm>
> >>>>>
> >>>> ------------------------------**------------------------------**
> >>>> ----------
> >>>> For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> >>>>
> >>>> ------------------------------**------------------------------**
> >>>> ----------
> >>>> For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> >>>>
> >>> ------------------------------**------------------------------**
> >>> ----------
> >>> For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> >>>
> >>> ------------------------------**------------------------------**
> >>> ----------
> >>> For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> >>>
> >>
> >>
> ------------------------------**------------------------------**----------
> >> For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> >>
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to