Traditional AI is based around the ideas of logic, rule systems,
linguistics, and the concept of rationality. At its roots are programming
languages such as Lisp and Prolog

No mention of my favorite language, that's odd. They
must have just forgot to include it, or maybe the Faq hadn't been updated in a while. So, later on I was reading through the AI Faq and found a section
on what the good languages for AI programming are. It states:

There is no authoritative answer for this
question, as it really depends on what languages you like programming
in. AI programs have been written in just about every language ever
created. The most common seem to be Lisp, Prolog, C/C++, and recently
Java.

Okay, that's a bit better. It left some room for Perl by
acknowledging a language's suitability depends a fair bit on the programmer's
preference. However, it mentions traits such as fast
prototyping, garbage collection, and dynamic typing as reasons why Lisp and Java
are so well suited for AI. How could they forget Perl after listing these
attributes?

So how about Perl community resources? Well I found the
perl-ai mailing list but
after over a week there's been about 3 posts to it.
The Monastery has one previous thread
with
'artificial intelligence' in the title and a few other posts on the subject, but
not nearly as many as one would expect given the talent of its inhabitants.

I then check out CPAN. There should be tonnes of
modules
on such a
rapidly evolving subject, right?. Well a search for
'AI' turns
up 9 relevant modules. Not even in double digits. What's more is most of these
modules appear to be in very early stages of development (lots of
0.01 version numbers).

Why is this? Is Perl not suited for AI applications? Is it too slow? Is Perl
OO programming too messy? Is it because Perl's considered 'just a
scripting language' and not meant for serious projects? Have I poorly defined AI
programming and failed to include certain areas (search engines, log analysis) that could be considered AI?
Thanks for your replies.

Academic AI typically doesn't use Perl because AI academics tend to use other languages: Scheme/Lisp, C, Smalltalk, Prolog, Java. This is both cultural (e.g., if you want to be understood, speak the same language everyone else does, or at least your advisor's) and practical (e.g. speed does matter for hard-core research). I suspect that part of the cultural side comes from Perl not being widely taught in university CS courses except as a sysadmin tool, if that assumption is accurate.

As for the monastery, you are defining AI too narrowly, or rather, too broadly: it sounds like the only thing you've searched on are the two words "artificial intelligence". Keep searching and you'll find posts concerning cellular automata, genetic algorithms, neural nets, game playing, etc.

Good points about the cultural side, particularly the effect of Perl not being widely taught in CS courses except for systems administration.

As for searching for posts in the monastery, I was limited by my lack of knowledge on the subject (terminology and what exactly qualifies as AI?). A few more searches on the terms you suggested do turn up several more nodes, such as:

Why is this? Is Perl not suited for AI applications? Is it too slow? Is Perl OO programming too messy? Is it because Perl's considered 'just a scripting language' and not meant for serious projects?

Not every problem is approached the same way. If you have a system where the data rapidly changes, object-oriented programming is often a good choice. However, if the data is relatively static but the functionality rapidly changes, then you might find a straight-forward procedural design better than an object-oriented one.

That is to say, not every problem should be approached the same way and just as we acknowledge that Perl is not a great tool for programming device drivers, it's also not the most optimal tool for artificial intelligence. Because AI often involves creating a lot of rules, searching through those rules, backtracking through them (the bane of regexen, remember?), it tends to require a fast programming language to drive it. Consider the little snippet I wrote about thieves. Rather than make you rush off to another link, I'll reproduce it here.

Imagine that I want to know what a given person might steal. I might assume that they will steal stuff given the following conditions:

That person is a thief.

The stuff is valuable.

The stuff is owned by someone (how do you steal something if it's not owned by anyone?).

And the person doesn't know the person who owns the stuff they might steal.

It's fairly easy to read, once you know Prolog. :- is read as "if" and a comma is read as "and" (if outside of parentheses).

I can then ask what a given person might steal:

?- steals(badguy,X).
X = gold
Yes
?- steals(merlyn,X).
No

Now, try to program that in Perl. I've seen Prolog::Alpha, but it needs quite a bit of work, and apparently there is a Language::Prolog::Interpreter, which I know nothing about and couldn't seem to download. Just glancing through their code bases, however, lets you know that this requires a lot of work.

Rather than trying to copy another language, though, how would you write the above program in Perl? Then, just to ensure that you have an extensible solution, try adding a rule the the thief will only steal stuff if he or she knows the stuff exists in a city at least 50 miles from where the thief lives. That's not hard in Prolog.

My point, which I alluded to in the first paragraph, is that some languages are better suited for some problems than others. AI, I suspect, is not Perl's strong suit.

My goodness. It's a common enough occurance for someone to point to a Perl regexp and say something like "EEEeeeewww!!!". I don't want to imagine what people will say once they see the regexps used to implement backtracking in AI.

I think you might want to meet merlyn really fast, and maybe get him to introduce you to badguy. :)

jarich

Update: Oops. Forgot that the PERP had to be a thief in order to be able to steal. Which would have meant that merlyn couldn't have stolen the rubies and I would have appeared to not have known what I was talking about. :) I've fixed this now of course.

Back in the old days (well I actually like the fact that I have some :-) when I used an Amstrad CPC 6128 with a z80A CPU and wrote tiny programs in BASIC there where also some folks trying to get Computers into making autonome decisions.

The Task was a mini chess with a board of 4 times 4 fields. Each "player" got 4 pawns and the goal was that one player remains while he stroke out his opponents pawns. The program was written in Locomotive BASIC. Together with the tremendous speed of the CPU (4.75MHz) that was a long task and so my computer fought night after night against a small program that was called "little brother" which never had the opening because that AI learning program might have given up upon an opening, that it remembered unsuccessful for itself in the past. However, the little BASIC program on the Amstrad did "learn" to make decisions, and that's what AI stands (vaguely) for.

All Samples, that came up so far are enabling a "Machine" to make a decision based upon predefined conditions and mostly predefined reactions. BUT thats not what AI is meant to become, it rather shall enable an "auomat", eg. software here, to make autonome decisions and to decide on choosing autonome reactions, even if they are "first timers", upon conditions which must include those that are not known, and could not have been forseen, whether by its developers nor itself.

As stated "There is no authoritative answer for this question, as it really depends on what languages you like programming in." I would agree to this.

Of course you can program such software in Perl, since speed is currently not the biggest concern in AI developement, because we still do not know of any algorythms that could enable software (or even logic pressed into silicon) of making autonome decisions. I think its a bad idea of thinking that it could suffice to replicate human brain in building supernode computers unless one could assure that their way of interacting is "correct" in being a copy of the nature.

To get to the point: When one writes software it is his aim to enable software to gain information, to process that information and to choose a reaction from a pool of predefined possibilities, thats teh same as we do. And this we do well in Perl. And as we can do this, we can surely enable logic to redefine its own pool of possible reactions, but the question is if one would want to trust his very own life to such logic processor.

TIMTOWDI, but I prefer Intelligence that is by itself able and willing to take responsibility for its actions.

Of course you can program such software in Perl, since speed is currently not the biggest concern in AI developement, because we still do not know of any algorythms that could enable software (or even logic pressed into silicon) of making autonome decisions. I think its a bad idea of thinking that it could suffice to replicate human brain in building supernode computers unless one could assure that their way of interacting is "correct" in being a copy of the nature.

This reminds me of a text I read once about "scruffies" vs "neats". The neats wanted the AI to model human thinking patterns, whereas the scruffies didn't care whether it modeled human thinking patterns or not, just as long as it came up with the same answer.

The neats wanted the AI to model human thinking
patterns, whereas the scruffies didn't care whether it
modeled human thinking patterns or not, just as long
as it came up with the same answer.

A prof of mine
argues the scruffy position rather eloquently (paraphrased):

"When you build an airplane, you don't try to mimic a bird's
wings, you use rigid wings and a lot of thrust, because
that's what the technology we have is best at. Same thing
with AI: you cater to the computer's strengths (high-speed
calculation, persistent memory, etc) instead of trying to
replicate the human's (creative thinking, intuition, pattern
recognition, etc)."

I think the scruffy approach is best suited for actually
solving real-world problems, and the neat approach is best
suited for research into how people think. (Carrying
the bird/plane analogy, we build rigid-wing aircraft to fly
people and cargo around, and ornithopters to learn about
bird flight.

Jane is an exercise in massively parallel artificial intelligence.
The idea is to set up relatively smart (for a neuron) nodes on a lot
of machines. Eventually the combined computing power will reach a
level necessary to bootstrap sentience. Then she realizes parts of
her are running Windows, and we're forced to turn her off. Only
there's no single power switch. And she's mad. And she's got the
entire Internet to play with. Your only hope is to get in on
development early and add lots and lots of kill switches. It's
probably also a good idea to prevent her from learning Perl. The fate
of the entire world is in your hands. I hope you washed them.

Why is this? Is Perl not suited for AI applications? Is it too slow? Is Perl OO programming too messy?

LISP got there first and staked a claim on mindshare. That claim has been slowly eroding, but not, seemingly, in favor of Perl. The latest AI stuff I've seen has been in Java. Why? Probably because Java is the OO language of choice in many settings, and the AI crowd moves in a small number of herds.

I once did an AI assignment in COBOL, but that's a different (sick, twisted) story...

Perl isn't exactly known as a clean OO language (with just cause). From what I've heard (unconfirmed rumours mostly) of Perl 6 this should be changing relatively soon. Any opinions as to how much this will contribute to people taking Perl seriously for AI projects?

A major unsolved problem in computer science is the so-called P=NP problem: machines are considered in which there is a certain amount of freedom in choosing the next step in a computation (such machines are called non-deterministic). By making good guesses (or choices) one can often obtain a quicker computation than by systematically working through all possible cases in a deterministic way. The P == NP problem asks whether every function computable on a non-deterministic machine in polynomial (i.e., tractable) time is computable in polynomial time on ordinary (deterministic) machines.
-- N. J. Cutland, Computability. Cambridge University Press, 1980. p. 238.

Everything that can be invented has been invented. - Charles H. Duell, US Commissioner of Patents, in 1899.

Update: I've found several papers on the subject including Is the NP problem solved?. Haven't had a chance to read through them yet, but they look interesting.

The academic world? The Computing Science community? In the 80s and
the 90s, AI was defocussed on. It of course never disappeared, but it
certainly wasn't as prominent as in the late 70s and early 80s.

What were they referring to by AI?

Eh, "Artificial Intelligence"? ;-) Making complex decisions as fast
and in a similar way as humans can?

I just read through the paper you referred to, and it looks a bit
bullshit to me. P and NP problems are defined for Turing
machines, quantum machines are a fundamentally different class of
machines. There are other machines possible where it hardly makes
sense to talk about P and NP (take for instance an oracle and each
time your algorithm has to guess, you ask the oracle instead).

I do however have serious doubts about the feasability of quantum
computers. Perhaps when the NSA starts decrypting 4096 bit GPG
messages almost instantly I'll become a believer.

I don't think so. Perhaps we've got a problem of vocaublary here. AI is dead. ML (Machine Learning) is making a comeback, from my point of view at least. There is great work being done on the classification problem. I can't tell you much about how that work is being done (both because I may or may not be under NDA (my internal legal magic 8 ball says situation cloudy) and because I don't know). But I can tell you that it's damm impressive at doing things like classifying web pages, and picking out name/title pairs.

As far as I'm concerned, AI=ML. Researchers who worked there (including, I'm told, and belive, some of the best AI researchers in the world) agreed, and said that the primary reason for the name change is that AI scares people.

We are using here a powerful strategy of synthesis: wishful thinking. -- The Wizard Book

Very well-put, but I'd say that there is a slight difference between AI and ML, if just in scope: AI says "we want to make a program that thinks, and we can do it relatively soon", and ML says "there's this particular statistical classicification problem that we're trying to solve". ML may eventually lead to AI, but there's plenty of reasons to be skeptical about the few who advocate good ol'fashioned strong AI. (I'm aiming that towards Cyc/OpenCyc, Mindpixel, and Moravec, although I've lost track of what he's doing these days. The Cog project seems less grandiose and cocky to judge from their statements.) But beyond all of that, different branches of ML, and also human cognitive modelling, are active, and chipping away at their own domain-specific problems.

I don't think Perl's speed (as in execution time) is a major concern for most AI programming. It's frequently noted that developer time is often far more valuable then execution time for other projects, why would AI programming be any different?

Inertia, on the other hand, would definately play a part. If you've been programming in Lisp your entire life, why not continue to use it? Does Perl really offer enough advantages in this area for it to be worth learning? Even if it did, chances are the learning curve would reduce your productivity for an extended period of time (you mean every second character doesn't have to be a parenthesis ?).

That said, not everyone starts programming with Lisp or Java, in fact many start with Perl. Is there any reason why they shouldn't continue to use Perl? Why would we not expect to see its uses in AI gradually increase?

Sorry. For quite a while, I was involved (as a trained monkey) for a compony doing AI as it's core product. Thus, unlike most people, when I think AI I don't think "way out-there research toy", I think "oh, god, why can't they write us tools that work instead of whining about how sandboxing is theoreticly impossible because of the halting problem". Speed matters for them. They did it all in Java, (which was a mistake; should have been C or C++, efficency).

Anyway, what I meant about inertia is more of an instutional thing. The compony I worked for wouldn't use perl, even for things like log-munging, for quite a while because the productivity-analisys tools that ate their CVS couldn't handle it. (The place wasn't always run the most sanely -- I no longer work there because they no longer exist.) You use the languages that your advisors know, and you use the languages that the journals publish, and you use the languages that the prior art is written in.

We are using here a powerful strategy of synthesis: wishful thinking. -- The Wizard Book

I don't think Perl's speed (as in execution time) is a major concern for most AI programming

Hmm, on this note I disagree. AI tends to be computationally expensive. AL (ie GA) even more so. Even a minor efficiency improvement can make a _big_ difference.

It's frequently noted that developer time is often far more valuable then execution time for other projects, why would AI programming be any different?

Well, this is true and not true. IME its true when the speed differences are marginal at best. Implementing an efficient algorithm in C and the same in Perl will most likely produce acceptable performance for the end product with much lower dev times. However with GA/AI/AL the same is not true. (Well, from what ive seen.) Lower development times are overwhelemed by extremely slow execution times.

Yves / DeMerphq
---
Writing a good benchmark isnt as easy as it might look.

Following some links i finally got to myBeasties. I know that this project was mentioned somewhere here - at PerlMonks, but... How about combining it with POE. IMHO Perl can be used for AI tasks as well as any other language... The only difference is, that AI/GA/NN functionality of other languages is discovered wide and people are talking about it - especially programmers.

- You know something...
- ... and you know something
- ... but I know the truth!

My truth is in bold :-) but as I said... that's only my very very humble oppinion :-)

Granted, I don't have a well-rounded CS background as everyone else here, so don't flame me if i'm a little off base.

First of all, what makes a program?

That's easy. It can be loosely defined as a set of instructions to be interpretted and acted upon in order to complete a task. Sounds about right.

Okay, what makes a program smart?

I don't know how to begin to define that.

In regards to cjf's root post, I think that Perl is already suited to AI. I haven't seen any Perl programs start a conversation with me out of the blue, but Perl has what it takes to make programs "semi-sentience": strong logical features and a built-in regular expression engine. It can match, evaluate and logically act on input with little effort put out by even the greenest of programmers. For example, in order for a "talking computer" to pass the Turing Test it needs to mimic the actions and mannerisms of a human being. Perl Chatterbots can do that (rather convincingly, too).

Who says Perl doesn't have what it takes? The main reason, I believe Perl hasn't taken off is (as expressed previously in this thread) is that the academic world (as a whole, I know many academics that use Perl) hasn't embraced Perl for all it's wonders. To them it's still just for managing weblogs. For us monks that use Perl for everything, it's common knowledge that with proper planning and construction, a Perl program can do anything, be it interact with a human (help agents, chatterbots, what have you) or help a human gain/extract knowledge (see various stat tools, "repwalkers" by jcwren).

The reason that Perl hasn't become a bigger contender in the field of AI programming is because there's no one in the ring willing to give it a chance.

The reason that Perl hasn't become a bigger contender in the field of AI programming is because there's no one in the ring willing to give it a chance.

I'd say the reason that Perl hasn't become a bigger contender in the field of AI programming is that there are no compelling AI applications written in Perl.

I'd go further, and say that the reason AI hasn't become a bigger contender in any field is that there are no compelling AI applications. Sure, machine learning has been making some advances in recent years (SVMs and boosting come to mind). But:

The advances are precisely in the "non-AI" fields -- the more "statistical" the classification problem, the better the performance of the methods.

Humans do much better, except when the sheer volume of data overwhelms them. (So the chief advantage of modern ML is in simple data processing -- not in displaying any intelligence).

ML seems to work initially due to the "80%-20%" problem: it is quite easy to solve 80% of any given classification problem (this is one of the reasons why so many classification techniques give such similar results). But this does nothing to help solve the remaining 20% of the problem.

For instance, classifying 80% of webpages is easy (even if you discard the 97% p0rn, 80% of the remaining 3% is easy to achieve). Google does a fair job, and on smaller collections researchers can do much better. But all these systems make huge, embarrassing mistakes.

After around 50 years, I think AI people could at least show applications rather than just "ideas".

Isn't Deep Blue (the chess program) an excellent example of an application in AI? From what I know of the program, it can make novel decisions based on past "experience", which means that there's some "learning" taking place.

As pointed out in an earlier node, there are a small number of AIish nodes in CPAN. By far the more libraries and module are avialable for other languages. Being truly lazy, I would simply call them in their native language and return the results into perl for further manipulation. Why rwrite the wheel if you don't have to?

Concerning the ML vs. AI debate, I don't agree that AI is dead - its just not being used very much in comparisson to ML techniques. Give it a few years and AI will probably rear its head again, probably using techniques developed for ML to improve itself. At the end of the day these things are tools, not religions, despite the vehemence of the opinions that one sees expressed in the literature. Simply use the appropriate tool for the job.