Hi,

On Mon, Oct 15, 2018 at 10:05 AM Dagim Sisay <[email protected]> wrote:

> From the new spacetime wiki article here
> <https://wiki.opencog.org/w/SpaceServer> position representation look
> clear.
> The way I understand it, one should do something like this.
> Valuation
>    PredicateNode "position"
>    ConceptNode "face"
>       LinkValue
>          FloatValue $X
>          FloatValue $Y
>          FloatValue $Z
>
> or
>
>    PredicateNode "position"
>    ConceptNode "face"
>       FloatSeqValue $X $Y $Z
>
> ^ if FloatValue and FloatSeqValue are going to be separate things after 
> atomspace
> #1880 <https://github.com/opencog/atomspace/issues/1880>
>

Use FloatSeqValue ... Doing the LinkValue and three FloatValues is
horribly, terribly inefficient, both for RAM usage and runtime usage and
for storage complexity.  The reason that FloatSeqValue was invented was to
avoid the horrors of using singleton floats.  The reason that
singleton-floats do NOT exist is to prevent people from making such a
terrible design mistake.


>
> and this looks great... continually updating the values is much simpler and
> they can be easily queried.
>

Yes, conceptually, this is what it will seem like, if you use the spacetime
server.  However, under the covers, that is not what actually happens. It
won't matter to you, the user, because, for the user, it will seem like the
above is what is happening...

The spacetime server will store the positions in an octree, and, whenever
you ask for the value, you will always get the latest and greatest value.
For efficiency reasons, the values attached to the atoms never actually
change; instead, things inside the octomap change.  But, for you, it will
behave as if the values were changing all the time.

To make this work, you will use PositionValue instead of FloatSeqValue.
The PositionValue c++ class "automatically knows" to look in the octomap to
get the current location.

So the API might be:

   PredicateNode "current-position"
   ConceptNode "face 42"
      PositionValue

Notice that $X $Y $Z is gone ... if you want to get the position (in C++)
you first get your hands on an instance of the C++ class PositionValue and
then call method `value()` which returns  std::vector<double> which holds
the position. Under the covers, the value() method looks into the octomap
to find what it needs.

Now comes the tricky part: how do you get your hands on a PositionValue?
More importantly, one that knows where to find the right position?  There
are several ways to do this, I worked this out with Misgana a month ago,
and don't recall quite what we agreed to.  This should be in some github
issue ... !?

I think we agreed to a two-part implementation.

Part A)  The PositionValue constructor takes two arguments: "what", and
"when". For example: "what" could be (Concept "face 42") and "when" could
be (Predicate "right-now").   Once you run the constructor, you can save
this PositionValue wherever you want; it always knows how to respond.

Part B) There is a GroundedPredicateNode "octomap-object-tracking-value"
which you use like this:

EvaluationLink
    GroundedPredicateNode "octomap-object-tracking-value"
    ListLink
         Concept "face 42"
         Predicate "right now"

and when you evaluate it, you get back a pointer to a PositionValue from
Part A)

Part B) is needed, because Part A) alone is not atomese: calling the
constructor is awkward, the scheme bindings are awkward, the python
bindings are awkward.  Part B) eliminates this awkwardness.  Part B) is
pure atomese.

 If you want the position one-half hour ago, it will be something like this:

EvaluationLink
    GroundedPredicateNode "octomap-object-tracking-value"
    ListLink
         Concept "face 42"
        TimeNode "-00:30:00"   ;;; understood as a half-hour offset from
"right now"

Misgana is working out the exact details of this.  I don't recall if it's
called PostionValue or LocationValue.  I'm not sure of what the AtTimeLink
syntax is supposed to be.

I'm not sure what github issue this is covered under.



> how is time suppose to be represented though?
>

The spacetime server will have a way of attaching timestamps to atoms,
without using positions.  I don't remember the proposed API to it.


> for example to remember (recall) some
> occurrence along with the time of its incidence and also to pay something
> attention to
> when it repeatedly occurs?
>

Good question.  Short answer is "I don't know, but could probably make
something up".  Right now, I strongly advise you to try to make something
up, yourself. Its good practice.  Then describe it; we can talk about it,
and see if we can find a better way (or at least, a way that is consistent
with the current system).

Please remember to think of values as being interactive and dynamic,
instead of being static data stores. That is, all class Values have a c++
method value() on it. You can overload that method, and, when you call it,
it can go off and do arbitrarily-complicated things, before returning
std::vector<double>.  A working example can be found in RandomValue.cc,
which creates a magic number every time it is called.

Please also imagine an API that looks like Part B), so that  it works like
this:

EvaluationLink
     GroundedPredicateNode "recall some occurrence"
     ListLink
          Concept "somehow"
          Concept "somewhat"
          Concept "anything else"

That is, the API should be in Atomese.  The somehow/somewhat gets passed to
some special Value that does the right thing to recall things.  I don't
know what somehow/somewhat might be -- you have to invent that part.

For example:

EvaluationLink
     GroundedPredicateNode "when is the last time I saw this?"
     ListLink
          Concept "red dress"

or

EvaluationLink
     GroundedPredicateNode "how many times have I seen this before?"
     ListLink
          Concept "red dress"

or

EvaluationLink
     GroundedPredicateNode "how many times have I seen this before?"
     ListLink
          InheritanceLink
                 Concept "red"
                 Concept "dress"

I'm not sure how to boost the attention value of something that has been
seen X times before. That's a different problem.  How to attach values to
the attention system, I don't know.

-- Linas

p.s. What I wrote above should go into either some github issue, or some
wiki page, or some tutorial, or maybe all three.

-- 
cassette tapes - analog TV - film cameras - you

-- 
You received this message because you are subscribed to the Google Groups 
"opencog" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/opencog.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/opencog/CAHrUA36igmh8YfbcGjmqjQo-OMwB%2BP9wWnE%2B6p%2BstgBax-NOXA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to