> I have not yet built OpenCog on my home machine; however, I have read
> the paper linked to in the project idea, and this sounds right up my
> alley.
> My primary interests in CS are AI/machine learning (with which I have
> little experience), functional programming (fascinated by the lambda
> calculus),
> and the analysis of algorithms. This project appeals to me
> specifically because
> it sounds like an opportunity to use my limited knowledge of LISP to
> some
> practical purpose (Combo, which I would be extending, is a lightweight
> LISP
> dialect, no?).
pretty close yes, but not as fully fledged of course. Only boolean,
continuous types and operators are supported + some home brewed loops
and sequencing operators for acting in a virtual world.
>
> I would like to submit a patch to demonstrate my abilities, but I am
> unsure
> of where to begin (I have zero experience in open source development).
I can't think of anything useful that would take just a couple of
hours of work to a newcomer. I'll try to think about it...
What you could do in the mean time is compile, install and try MOSES
on some toy problems, see moses --help for more information.
> Any
> guiding suggestions would be most welcome. Also, any other papers on
> the
> algebra of fold that I could read?
I don't know except trying Google.
Nil
>
> Be Well,
> Oren Leiman
>
> --
> You received this message because you are subscribed to the Google Groups "opencog" group.
> To post to this group, send email to ope...@googlegroups.com.
> To unsubscribe from this group, send email to opencog+u...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/opencog?hl=en.
>
On Sat, Mar 31, 2012 at 9:54 AM, Oren <mumblem...@gmail.com> wrote:
> Hi All,
>
> So, I've been fiddling with MOSES all day, and I
> think I've arrived at some meaningful questions about
> the proposed project.
>
> It seems that, as stated on the ideas page, items 1
> and 2 (adding lists and a fold builtin to combo)
> would be not absurdly difficult. I have been rooting
> through the existing Combo code base and, although the
> closest thing I've seen to a Combo interpreter written
> in C++ is Mr. Norvig's SCHEME interpreter written in
> Java, it seems pretty intuitive. Obviously, this would
> be hard work, but it doesn't seem beyond my grasp.
>
> With regard to this first part, I am wondering how
> robust the list/fold implementations should be. For
> example, should there be support for nested lists?
> Would there need to be 'public' methods for operations
> like car, cdr, and cons (or equivalent)? That is, I'm
> struggling to conceptualize whether the Combo programs
> that MOSES pops out will ever include these things or
> if they would basically just take place under the hood.
> Is there a general specification that somebody has
> in mind?
It hasn't been decided. We're aiming to a minimal set of operators, I
suppose the constructors and access functions will simply be public as
you anticipate.
>
> Item 3 is probably the most interesting-sounding to
> me at this time. Would I have the opportunity to piece
> together the reduction rules myself (this sounds like
> the interesting part), or would this be done for me,
> leaving only the actual implementation?
Yeah, you've got to design them too.
>
> As far as item 4 is concerned, I would certainly be
> interested in attempting it, but the representation-
> building phase seems to me by far the most mysterious
> part of MOSES. How does the initial exemplar, the sort
> of protozoa of the genetic algorithm get created? Is this
> process randomized, like the knob placement?
If it's too big it can be randomized. Have you watch that lecture I
gave on MOSES? It includes an overview of representation building
http://agi-school.org/2009/dr-nil-geissweiller-automated-program-learning-the-moses-algorithm
Nil
>
> Alright that's all for now. Sorry for the length.
>
> Thanks,
> Oren
>
Hi Oren,
pretty close yes, but not as fully fledged of course. Only boolean,
> I have not yet built OpenCog on my home machine; however, I have read
> the paper linked to in the project idea, and this sounds right up my
> alley.
> My primary interests in CS are AI/machine learning (with which I have
> little experience), functional programming (fascinated by the lambda
> calculus),
> and the analysis of algorithms. This project appeals to me
> specifically because
> it sounds like an opportunity to use my limited knowledge of LISP to
> some
> practical purpose (Combo, which I would be extending, is a lightweight
> LISP
> dialect, no?).
continuous types and operators are supported + some home brewed loops
and sequencing operators for acting in a virtual world.
> I would like to submit a patch to demonstrate my abilities, but I amI can't think of anything useful that would take just a couple of
> unsure
> of where to begin (I have zero experience in open source development).
hours of work to a newcomer. I'll try to think about it...
I don't know except trying Google.
> algebra of fold that I could read?
I'm not sure I know what you mean by testing this...I have definitely
> This might be hard because -- it will take you a while to figure out how to
> test this; then you'd have to findthe right code to read (and that not
> trivial) and then you have to fix it (and there will be many places where a
> first-row type of assumption is made) It might be very tangled. Not sure.
> Might take you a day or a week.
seen it happen and, since you mentioned it, am experimenting with
*making* it happen, but I might be missing something.
I just produced the bug, and I see that MOSES crashes on an
assertion exception generated in table.cc (located in
opencog/comboreduct/combo). I see a method there called
'infer_data_type_tree' which seems to handle input-table I/O, so I
think I'm on the right track. Since Nil seems to have authored this
module, perhaps he can provide some insight into the problem...
you might want to use get_intersection in file
opencog/comboreduct/combo/type_tree.h
Nil
>
> Oren
More specificly, you could say that 1 or 0 has type union(contin
boolean), and other stuff that can be casted into float have type
contin. At each row you perform their intersection and at the end
anything that is still union(contin boolean) becomes boolean. That's
the way I would do it, but of course if you come up a simpler code go
ahead with it.
Nil
--
Jared Wigmore <jared....@gmail.com>
Yeah I thought of using T/F instead of 1/0 at some point, but since I
haven't encountered the contin vs bool ambiguity yet I didn't bother
to change it. And I think the user expects to have moses handles 0 and
1 as representing booleans. But we could certainly support T/F,
True/False, etc as well, and possibly add an option to deactivate the
0/1 coding when it gets really annoying, but again so far I never had
such annoyance.
Nil
Yeah, that sounds cheaper.
>
> My goal here is to make as few changes as possible
> to the existing code. I don't think this approach will
> cause any serious efficiency hit,
If the hit is really unavoidable (though I don't think it is), it
could eventually be parallelized, with the new C++11 standard and
gnu's OMP parallelization is really painless
http://wiki.opencog.org/w/Multithreading
> so I'm going to finish
> implementing and see if it works. On the other hand, I
> might be missing something, so any feedback is always
> appreciated.
Let us know when you're done.
Hi,
I finished the code for the type-inference fix
yesterday evening. 'table.cc' compiles without
issue, but, during the linking phase, I get an error
originating from a file called 'libcomboreduct.so'.
The error claims an undefined reference to the
function that I overloaded (infer_row_type_tree).
I modified the function prototype in 'table.h'
(opencog/comboreduct/combo), but I may have
done so incorrectly or incompletely. Also,
libcomboreduct.so appears to be an executable
binary, so I don't really know how to interpret the
error.
> If you specified the code in a header file, then you probably forgot to sayI only added a function prototype to the header file, and I
> "inline" Otherwise, be sure to put it in a C file, and make sure the C
> file list listed in the CMakefile so that it gets built.
put my definition in the same source file as the original.
Is it better form to create a whole new C file? In any case,
I know my code is getting built because it's in a file already
listed in the CMakefile.
I'm entering week two of my quarter atuniversity, and things are starting to heat up. I spent acouple solid days on this last week, but now I can onlylook at it sporadically. I'll see what I can get done in the
next few days.