Archives: March 2006

Sun Mar 26, 2006

Career Choice Based on Cognitive Profiling

I've been thinking of building a little online utility to help people identify which careers and jobs would be appropriate for them. I've actually done quite a bit of work on this subject, building a model using Artificial Creativity concepts. I have used this model to profile over 1000 jobs and careers and now all I need to do is build a little two table four field database so that people can type in their profiles, and get a list of appropriate careers. I could use a one table, two field solution but this would not be expandable in the future. The model is:


LetterCharacteristicDefinitionA.I. Action
AAppearance Ability to make things look good
BBravery Ability to manage pressure well
CCreativity Ability to create well
DDeduction Ability to reason from the general to the specific wellExpert Systems
EEmotional Intelligence Ability to handle self and others emotions well
FFinancial Intelligence Ability to handle money and wealth well
GGrowth Ability to grow and help others' growth well
HHeroism Ability to manage presence well
IInduction Ability to reason from the specific to the general well
JJ-physical intelligenceAbility to use one's body well
KKinetic Intelligence Ability to function well in frenetic situations
LLanguage Ability to use language well
MMechanical IntelligenceAbility to use machines well
NNavigation Ability to search and network well
OOrders Ability to organize and delegate well
PPracticality Ability to be Practical
QQ-matching Ability to match or recognize things wellSearch
RRamifications Ability to imagine cause and effect well
SService Ability to serve people well
TTeamwork Ability to function well in a groupIntelligent Agents

Posted by: Jon Grover on Mar 26, 06 | 2:51 pm | Profile

[2] comments (2493 views) |  [0] Trackbacks   [0] Pingbacks

Sat Mar 25, 2006

Design for a Saltbox House

In the spirit of digression, here is a topic that only has to do with Artificial Creativity in that it takes some of the design principles I use for AC and applies them to architecture, specifically the design principles of simplicity and elegance.

I think saltbox houses are cool (Completely Out Of the Loop - OK I couldn't resist the acronym). They are rare and interesting, and I have tried a number of times to lay one out. Here is a 30' X 30' X 30' saltbox I have desgned with accessability, safety, mobility and an open feeling in mind. The doors are all 3' wide, there are 25 windows, 5 bedrooms, and 3.5 baths. There is also a safe area on each floor, and a large open area in the center with room for an elevator or a multistory artwork, or a multistory indoor plant or Christmas tree etc. The house is designed as one solid unit that could be dragged around the lot.


Saltbox house ground floor plan
Saltbox house second floor plan
Saltbox house third floor plan


Saltbox house plan side view
Saltbox house plan legend


 


It's called a saltbox because some old saltboxes back on the east coast of America during colonial times looked like this.

Posted by: Jon Grover on Mar 25, 06 | 11:50 am | Profile

[0] comments (582 views) |  [0] Trackbacks   [0] Pingbacks

Thu Mar 23, 2006

Where Next

I actually find blogging quite difficult. The first rush of writing has spent and now I'm trying to figure out where to go next. I find that I have motivation and then it ends. A lot of this probably has to do with fear. I have trouble posting without fear.

I seem to deal with this problem generally through digression. I quit working on the topic that scares me for a while and move to one where I am inspired with the hope that the first topic will come back around and I will be able to work on it again in the future.

After all this is a blog and it is not only a place for me to do my work, but also a place for me to relate the struggle I go through to do it.

So I digress, intentionally.

Posted by: Jon Grover on Mar 23, 06 | 8:20 pm | Profile

[0] comments (718 views) |  [0] Trackbacks   [0] Pingbacks

Sun Mar 12, 2006

Algorithmic Sublanguages for Artificial Creativity

Creative people want to create. It is the nature of creativity that it "moves outside the box". It is the nature of compiled code that it is a box. You can't modify it, and if you are creative, you want to. I have many times looked at a program I'm using and said to myself. I wish I could modify the algorithm.

I was just playing Civilization II tonight and I remember that I have often wanted to modify the time sequencing and the circumstances under which various advancements were available when, to match my history theory, but I can not. At least Civilization II allows some user modification. You have to learn the Civilization II modification language, because they do not use a standard algorithm control language, and I would have if I could have done what I want. In many programs, I often wish I could modify the algorithm and see what it would look like this way.

Access to the algorithms would seem to be the objective of the open source movement but for some reason it doesn't seem to work very well in Artificial Creativity, and I wish it did. We need users to access the algorithm not just programmers. Just as we have a principle of separating data from presentation and data from code and code from presentation, we need to separate algorithm from code. I want to see division of the algorithm and the technology. We have the division of presentation and control in many programs now days, but we still have the relevant algorithms that people might want to try to modify tightly wrapped up with the technological substrate of the program.

The business rules movement has done some of this. Even though I like business rules and presently separate them from technology code at work, but there is a lot more to algorithms than business rules. For example, if I tried to modify the rules for Draw Something, I don't think that Business Rules could help me. Business rules are one in a short list of sublanguages, which I think should be much longer.

We need a whole series of algorithmic sublanguages embedded into each of the major languages like Java and C#. We already have Regex, SQL, XSLT, and Business Rules. in these major languages. We could also put simple versions of Perl, Forth. Lisp, Prolog and a few others into these languages. We also need an algorithm editor in each AC program with an embedded multi-language algorithm interpreter since most creative non-technical or semi-technical algorithm developers will probably not want to learn mover than one or two languages.

We also need to start digging through all of the various experimental languages that CS grad students and professors have experimented with over the years, not just the type oriented languages I mentioned above that made it to the big time.. I bet that the experimental language space is chock full of languages that could be used as algorithmic sublanguages. Who knows, maybe we could even find a use for BeFunge.

Posted by: Jon Grover on Mar 12, 06 | 9:07 pm | Profile

[0] Trackbacks   [0] Pingbacks

Sat Mar 11, 2006

The Principles of Coverage and Balance

I'm interested in making a system that makes worlds that are interesting and different. One of the implications of the Conservation of Creativity is that after a few worlds are built they may all start to look sort of the same. To fix this problem, I want to introduce the concept of coverage that then use it to avoid the repetitiveness problem.

Coverage
An artificial generator covers a possible outcome if it could create it or something like it with a reasonable probability.
Good Coverage
If a model has good coverage then it covers most of the possible outcomes that are interesting, and it does not cover a lot of others that are not.
Balance
If it has good balance then the outcomes that it covers are probably all roughly equally likely.

What I need to do is come up with a list of possible worlds that I would like my generator to cover and then build my system so that it can create each of them with a reasonable probability. And we hope that some other creative possibilities show up in the mix. The Conservation of Creativity will make that less satisfying than it seems it would be, but it is still a worthy goal. On the other hand, since creativity is put into the machine as well as the model there might be more than expected.

Here are the worlds I want to cover:

Posted by: Jon Grover on Mar 11, 06 | 7:06 pm | Profile

[0] Trackbacks   [0] Pingbacks

Wed Mar 08, 2006

The Conservation of Creativity

The Conservation of Creativity means that you get out of a system the same amount of creativity you put into it (or less).

You can for example take one hundred names, and build a name generator out of them that resembles your input name set. For example, you could take 100 names from the Arthurian legends and create and Arthurian name generator.

Here is the Algorithm to generate names:

  1. Pick one at random and take the first two characters as the first two characters of your new name.

  2. Pick randomly amongst the occurrences of the end character pair in your new name, and append the letter following your pick to the new name.

  3. Repeat until you pick a pair that is at the end of a name.

  4. You are done.
This is a good generator algorithm for creating names but that's not my point. My point is that if you create this system and start grinding out names, the first 100 are likely to seem creative. Along about name 100, you will start to see that pattern and the names will seem like just rehashes of the ones that came before, i.e. not creative. Humans have an exceptional ability to detect patterns. The curious thing is that the pattern becomes apparent at about 100. And we started with 100 names.

This is the conservation of creativity. I get this term from the physics term the Conservation of Energy. You can get no more energy from a system that you put in or than also exists in the system, and the energy that a system ends with, will equal its original energy plus what was put in minus what was taken out. Similarly you get no more creativity out of an artificially creative system than you put into it. This means in the name example, after 100 names the resulting names become boring.


Reading the yellow series of five books in an artificially created set of ten

This means that an author who wants to experiment with writing ten books that can be read in the sequences shown in the diagram probably needs to put into an artificial creativity book generation system as much creativity as it takes to write five books, and then generate the ten. In this example the author's intention is that a reader will only read one sequence, and if the reader reads a different sequence later on it would be boring.

Posted by: Jon Grover on Mar 08, 06 | 8:38 pm | Profile

[0] Trackbacks   [0] Pingbacks

Sat Mar 04, 2006

Creatures in an Artificially Created World

Worlds will also have a species profile. To pick a profile for a particular species, generate two profiles and match them to the world profile to see which is closest. Pick that one.

To show how I build a profile, here is my original 'Rule of Twenty' profile table for species:

A.A C            P    .=Aggression - Hostility/Violence vs Peace - 
B. B     H   L      S .-Body Segments vs Heads
C.  C    H   L        .+Civilization - Advancement / History Level
D.   D         N    S .+Divine or Demonic / Supernatural vs Natural
E. BC    HI           .-E-Hiddenness, Blending, Camouflage, inconspicuous, coloration
F.  CD F H       P    .=Food Chain - Diet - carnivour - scavenger - omnivour - herbavour - plant
G.    E G             .=Good/God oriented vs Evil/Satan Oriented
H.A      HI      P  S .-Hardness/armor/insect/plates/Shell
I.        I           .=Intelligence
J. B   F  (J)L        .-J-Wings vs. Legs
K.A      H (K)L       .-K-Arms  vs. Legs
L.A          L        .+Land vs Water/amphibian/ vs Land
M.    E       M       ./Movement, Energy - 
N.             N      .=Nocturnal
O. BC  F        O    T.=Openness, boldness, curiosity vs Timidity, fear, wariness
P.               P    .=Protectiveness, nests
Q.                QR  ./Quickness - reaction
R.                 R  .=Relationship
S.                  S .-Size
T.                   T.-Toughness

These characteristics combine in various ways. For example, strength is a combination of toughness, size, movement. Speed is a combination of movement, size, quickness, -hardness. Gracile is a combination of quickness, movement, -hardness. This profile contains a specifier for the generation machine described in 'the Centaur Problem'. Body type Generator uses a combination of body, and arms

At this point I notice there are various things the model still needs to be able to do. This table did not have room for tails or horns, two fairly important aspects of a species. I combine wings and arms to make a space for tails. I combine toughness and hardness to make a space for Horns. I also need arboreal and fliers, I can roll it into land/water amphib with a value like 'height' with the spectrum being: fliers-arboreal-ground-semiaquatic-aquatic-mud. I could call this niche, ecosphere.

Here is my current table:
A.A C       K   -P    .Aggression, Attack, Hostility, Violence, killer vs Peace - 
B. B    -H   L      S .Body Segments vs Heads (part of the body type machine)
C.  C    H   L        .Civilization - Advancement / History Level (see below)
D.   D   H            .Domain, Altitude - space-fliers-arboreal-ground-burrowing-semiaquatic-aquatic-mud-deep sea
E. BC(E) HI           .E-Hiddenness, Blending, Camoflage, inconspicuous, coloration
F.  C  F              .Food Chain - Diet - carnivour - scavenger - omnivour - herbavour - plant
G.    E G             .Good/God oriented vs Evil/Satan Oriented
H.       H            .Horns
I.        I           .Intelligence
J.        (J)  N    S .J-Supernatural vs. Natural
K.A        (K)        .K-Arms(or wings) vs. Legs (part of the body type machine)
L.           L       T.Length, Tail length, long vs compact
M.    E       M       .Movement, Energy, warm blooded, metabolism vs cold blooded, slow
N.             N      .Nocturnal
O. BC  F        O    T.Openness, boldness, curiosity vs Timidity, fear, wariness
P.               P    .Protectiveness, Relationship
Q.                QR  .Quickness - reaction
R.                 R  .Reproduction - womb, pouch, eggs/seeds, eggs in water, division, virus
S.                  S .Size (see below)
T.                   T.Toughness - shell, armor, tough, leather, soft, jelly

Wings is now a combination of arms, and flight. Species have another profile for terrain. Species also have another profile for cognition.

S. Size

S  position:    0    1    2   3   4   5   6   7   8  9 10  11 12 13 14 15 16 17 18 19
         cm: 2048 1448 1024 724 512 362 256 181 128 91 64  45 30 23 16 11  8  6  4  3
      ft/in:   64   45   32  23  16  11   8   6   4  3  2 1.5  1/ 9  6  4  3  2  2  1

C. Levels of Civilization

Position of C in profile:   0 1 2 3 4 5 6 7 8 910111213141516171819
Species Advancement Level:  F E D C B A T S R Q P O N M L K J I H G


Posted by: Jon Grover on Mar 04, 06 | 3:24 pm | Profile

[0] Trackbacks   [0] Pingbacks

Thu Mar 02, 2006

Time Period in an Artificially Created World

So, I'm going to build a world. I guess the first thing to decide is what sort of time period I'm going to use as my setting. Or I could make the time period be part of the AC decision making. I have over the last thirty years been developing a theory of history that could be used here. I hope it has gotten developed enough to actually use.

History Levels for a world:


LevelNameAge Succeeds and AdvancesAge Fails but still AdvancesAge Fails and DeclinesWeaponsOther
20True XXXbow, spearboats, fishing
21Agric XXXaxeFarms, husbandry
22Baal XXXarmyReligions, trade
23Civ XXXbronze, chariotBuildings, writing
24Dark XXXiron, catapult, lanceZero, alphabet
25Enlight XXXgun, cannonphilosophy, mathematics, science
26Federal XXship of the lineInstitutions
27G-Industry machine gun, battle shipEngines, professions
28Holocaust nuke, WMDComputers
29Internet suicide bomberInternet

Each age can have three possibilities. It can succeed and advance, it can fail but still advance, or it can fail and decline. The Federal level and above will be too hard to model. Below True humans, and we are not human. So an artificially created world will be programmable at one of the 20 marked advancement levels

Posted by: Jon Grover on Mar 02, 06 | 8:51 pm | Profile

[0] Trackbacks   [0] Pingbacks

Wed Mar 01, 2006

Choosing a Computer Language

I've started getting a hankering to start working on an artificial creativity project. The one I want to work on is the artificially created universe for real, not just a prototype. To do this I need to pick a computer language. It needs to handle all of the basic requirements for an artificial creativity language. There are two things to talk about regarding picking a language - what are my requirements, and how does each match up.

Requirements. A computer language for artificial creativity needs to have:



Nice to have:


Computer Languages:

The first one I think of is Forth. It would be good for having a program write programs however it does not handle strings well, is not object oriented, does not handle graphics well and does not play well on the Internet. Its most difficult drawback is that it is very unportable. This is mostly because it addresses memory directly rather than indirectly. It's very fast though. Its profile: (EFM)

There are two kinds of computer languages - type oriented languages and object oriented languages. Forth is type oriented. It is oriented around the stack type.

The next one I think of is Perl. It is string oriented. This is good for having a program writing programs that it can then run. It has an eval statement, and it has the best string manipulation abilities. Its problems are that its object orientation mechanisms are extremely clunky. It wasn't designed for it. My programming abilities are not enough to use them well. Perl is also hard to maintain. IT also has weak graphics, but through TK it can handle widgets. It also does OK on the Internet. Its profile: (SEMICd).

OK, next is Java. Java is object oriented. This means that I won't ever be able to write a program that will be able to write programs in the language itself, however conceivable one could write a class that contained a sublanguage (regex is an example of a sub-language) specifically for artificial creativity. I once developed a very simple sublanguage called Codex, which was type oriented around the character type. Each character had its own meaning and the programs looked like gibberish. I found that the challenging part of making the language was variables, parameter passing, and control structures. I think I will eveutually build a little language for AC but I'm going to take sort of an extreme programming approach to it. I'm going to start with a class first, and then build a language as needed.

Back to Java. Java is one of the hardest languages I have ever tried to learn. If I choose it I will definitely need to find an API that as a minimum has something like Intelli-sense, single stepping, widget dragging, and initial program templating. Java has good graphics of all three kinds (CGP) and has excellent Internet abilities. It handles strings and databases well. Its profile: (OICGSDMPe).

Speaking of Intelli-sense, there is C#. It is also object oriented, and is similar to Java. I find the Visual Studio API fairly easy and it meets my needs. ASP.NET covers the Internet side of the equation. It's also very good with databases. Its problem is that it is expensive to set up and expensive to host. It's the language I am most productive with right now. It's also faster than Java PHP and Perl. Its profile score: (ODCGSPIFe).

PHP is both object and type oriented. It special type is the database table. The problem is, I'm not going to be focusing on database apps, and its pixel level graphics are sort of weak. Its profile score: (DISCOGM)

OK other languages: C - not object oriented, but very fast. I may need speed when I start doing AI searches (FMP). LISP - so many parentheses, I would have trouble maintaining the programs, but it would probably be good for executing programs that the programs write (EM). C++ - I never can seem to figure out what's causing the memory leaks, and the lockups. The best way to use it is through Visual Studio, which is expensive. It's fast and object oriented though (FOS).

Python is a possibility that I am just learning now, so it is still too soon to make an evaluation of it. Python would be the worst for having a program write and execute a program because programs have a notoriously difficult time understanding two dimensions and Python is written using two dimensions.

I don't know scheme, but I would guess that is like Forth and Lisp (EFM).

So I guess I am stuck with Java if I can find an inexpensive API that meets my needs. If I can't my next step is to evaluate scheme. I really need pixel level graphics, so I may have to buy C#, and use mono. I hope Java works and I hope I can stand it.

Posted by: Jon Grover on Mar 01, 06 | 9:31 pm | Profile

[0] Trackbacks   [0] Pingbacks