Archives: February 2006

Sat Feb 25, 2006

Heaven and Hell and Artificial Worlds

I've noticed that many of the things my characters have done over a long time of role playing games have manifested in my life. The Bible says "Now the deeds of the flesh are evident, which are: immorality, impurity, sensuality, idolatry, sorcery, enmities, strife, jealousy, outbursts of anger, disputes, dissensions, factions, envying, drunkenness, carousing, and things like these, ... that those who practice such things will not inherit the kingdom of God." Galatians 5:19-21 NASB. One meaning I see in this is that if you practice something, even if you don't do it, it affects you.

An abstract map of Hell


My constant practice of killing things in the Dungeons and Dragons game has caused me to actually LIKE it sometimes when something bad happens to someone. This is not a good thing. One theme continually running through the Bible is the theme that what you do in your heart, you have actually done in a spiritual sense. Jesus said "but I say to you that every one who looks at a woman with lust for her has already committed adultery with her in his heart" Matthew 5:28 NASB. I believe that this happened to me, as my character killed enemies in the game, I must have done it at least somewhat in my heart also.

Every thing that you do in a game has the potential to become a practice, the results of which reside in your heart. This is especially true of role-playing games. You identify with your character. This puts gaming in a whole new light. What you do in a game may become part of you and what you do often is likely to. Killing is problematic. Lying may cause lying in real life. The glorification of magic may lead toward the actual use of actual magic. And this is of the Devil. What you do in a game is glorified. This is because you get points and can win by the actions you take. In addition, the environment you are in the game is one that you get used to, and sart at least at some level desiring.

An abstract map of Earth


So how to create a game that works for you rather than against you. I have noticed something about Dungeons and Dragons type games, that you travel through a dungeon. Quake, and Doom, and D&D and lots of other games have this type of setting. Essentially this is a series or rooms and hallways with obstacles. The dungeon is a place that you are exposed to and begin to get used to. But in essence it is really a place where you are controlled.

I think that a Dungeon is really a representation of Hell. It makes sense that in Hell, a person will be controlled by walls and obstacles and doorways. The layout will give just enough promise of freedom to be frustrating, and Satan will restrict a person's movement in a way that is most painful. Picture a person who is trapped in one dungeon room for eternity. And we are getting used to this environment by playing these games. My abstract representation of Hell is something like this: Each room is only connected to one or perhaps a very few others.

An abstract map of Heaven


My abstract representation of Earth is somewhat less restrictive. Rooms are generally accessible to the ones next to them and the entire building has multiple access to the outdoors. Though you are still restricted to two dimensions:

In my abstract representation of Heaven, all rooms are accessible to all other rooms. What is important is the relationships between what are in the rooms, and the relationships between the player and what is in the rooms. Relationships become the key mechanical characteristic in the game, leading all the way up, if this is a Heaven game to the character's and hence the player's relationship with Jesus. It is possible or course to recreate something like the Dungeon scenario by having something that each creature in a room wants and will only give if they get something else, so you still have to travel through a particular sequence of rooms to win, but there are many more possible relationships than that.

Creatures in one room vs. another can love each other, want something from another, want to kill another, depend on another, trade with another, fear another, like another, avoid another, control another, work with each other, work for another, know about another, know another's secrets, be related or married to another, be searching for another and so on. Each of these relationships is grist for a game, and a state between creatures that can be used to build stories and adventures in an artificial world. And the artificial world generated would be more like Heaven than like Hell.

Posted by: Jon Grover on Feb 25, 06 | 11:40 am | Profile

[0] Trackbacks   [0] Pingbacks

Tue Feb 21, 2006

What is Artificial Creativity Good For?

I think Artificial Creativity can be used for test scripts, game worlds, game boards, business empowerment, document generation, art, design, marketing, sales.

Test scripts are used to validate programs and systems, and to insure the integrity of already developed code as it is modified and more is added. Systems with large numbers of states, that can combine with each other, can be tested by artificially generating combinations of states, and using these as test input. Systems that operate off of very complex data can be tested by artificially generating example data.

Game worlds can be generated using artificially creative means including generating characters, maps, societies, histories, settings, plots, situations, dialog, and artificially intelligent strategies for the generated characters. One area that Artificial Intelligence practitioners have long experimented with are toy universes. These are easier than the real world. They are also easier for AC systems because things are easier to generate within controlled contexts, and things generated also have meanings that are easier to interpret within contexts. Also, both areas find toy universes easier because the universes can be designed around the things that are easiest to do. An example of this for AC is the game Mine Sweeper. Which leads us to game boards.

Games can get more interesting if the game boards are different every time. Players who do not play set scenarios so well often hit a wall beyond which they can not progress. If the game board is different every time they won't get bored playing the same three easiest levels over and over again.

I have developed 'Rule of Twenty' models for human cognition, which can empower businesses by matching up the right person with the right job function. This can also be used to match people with careers. In addition AC can generate documents such as offer letters, proposals, form letters, marketing strategies, and sales copy, design tradeoffs etc.

Posted by: Jon Grover on Feb 21, 06 | 8:26 pm | Profile

[0] Trackbacks   [0] Pingbacks

Sun Feb 19, 2006

Instincts right, Instincts wrong

I've been a programmer for about 20 years. Over that time I've noticed that my instincts are all wrong. When it comes to user interface I've always wanted users to be able to do more, whereas they want to do less. Having more functionality than they need would confuse them. I've always been really interested in what the programs do, not how they work, not the technology. All other programmers that I have encountered, care deeply about the technology, and not what the programs do. I have always wanted to work with command line interfaces, or better yet code. And yet the general trend of programs over this period has been toward more and more graphic interfaces. My favorite language of all time was Forth, a language which few people pay any attention to anymore.

I think what's going on is I have seen computer science for my whole career through the filter of artificial creativity. It's what I care about, and I have judged each new technology and trend by whether it can be easily used for artificial creativity, or whether it will get in the way. Object oriented programming is a good thing. It's just modular programming on steroids. Modular programming is important because you can create individual modules around AC models. I've been having oodles of fun at work with the new C# DataTable class. Using it you can have a micro database inside your program. And yet I have found no one on the web who has inherited from it into an enhanced class, and then inherited from that into specific classes to manage individual database tables as I have. Why is that? Maybe it has something to do with my instincts.

My instincts are finely honed for artificial creativity. I would not go back and use Forth because it did not make it though the object oriented revolution, needless to say through the Web scripting revolution. But it did have some characteristics which could well behoove us for artificial creativity work. The way I see Forth, it has something I call Concept oriented programming. Each concept can be distilled into a 'word' in Forth (which is like a module in any other language), and the words are strung together using spaces for syntax. The main syntactic element of Forth is a space. Spaces divide words and the relationships between modules (words) are handled by ordering and a stack. This system is so simple that even a computer could theoretically handle it. That's a key ingredient for artificial creativity programs.

User empowerment is more central to my desires than anyone I have ever worked with will allow. Artificial creativity is hard. And it is complex. It could be built piece by piece by dozens or hundreds or thousands of people. Picture a network of thousands of users each building a few pieces working together and sharing bits of model. I guess that's what the Internet is for. It is also extremely concept oriented which means it is very content oriented. In other words the users of artificial creativity programs would be the ones to build the models. What does that take? That takes being able to both use and modify the tools you use to create things. I have a concept called 'Artificial Creativity Enhancement' which would be the enhancement of human creativity activities by artificial creativity.

For example in a word processor artificial creativity enhancement would mean that some of a document written by a user would actually be written by the computer. The user would give the computer a description of what is wanted for some part of the document, and the program would write it. The user would have to be able to get down inside the word processor program and instill concepts into it for how the computer would write that part.

But it would have to be simple. For the user. This means that the syntax would have to be excruciatingly simple - like Forth. There would have to be some way to specify what they want. This sort of functionality would have to be designed in from the very beginning for this ever to work. The tool would have to be modifiable to conform to how each user thinks.

Also, the program would have to be of such a nature that the user could dig as deeply as they needed to into the substrate of the program to make the changes they need to get the results they need. The system would have to be designed so that the user could start with something they could understand readily, and then expose its complexity as the user evolved to learn more of its functionality. And it would have to be users not programmers who would do this because they are the only ones who know what they want to write. This is very different than the sort of programming we do today.

I have lived in that strange nether region between users and programmers, being very technical and yet caring about what programs do. My instincts are geared toward artificial creativity and not standard programming. Which I'm not knocking. Standard programming is critical to our civilization. So part of my goal is to extract from myself what those instincts tell me and write it here. Some of my instincts will be right for AC and wrong for other kinds of programming. Some of them will be wrong just because they are wrong and I will do my best to tell the difference. Some of them will be just plain right. You are welcome, come along for the ride.

Posted by: Jon Grover on Feb 19, 06 | 3:35 pm | Profile

[0] Trackbacks   [0] Pingbacks

Wed Feb 15, 2006

Simplicity

Simplicity is important in artificial creativity because the most important characteristic of a model or a subsystem, is that the computer understand it. Simplicity helps the computer to understand. Models need to be optimally simple, and they need to be mostly correct. When you have a model that fits both criteria, you have a model that is elegant.

As an example by analogy, I have long had and interest in developing a layout for LEDs that is minimal in number, simple in configuration and which shows the letters and numbers easy to read. My layout is shown in the Artificial Creativity Blog logo: Artificial Creativity Blog Logo. This is minimal in number with only nine LEDs per character. It is simple in configuration. It is rectilinear. It shows 25 of the 26 letters fairly well, and the letter V is manageable. And it does not distinguish between upper and lower case. So it is mostly correct. It shows an elegant tradeoff between simplicity and correctness.

If a model is easier for a computer it is easier for a programmer. Easy for a computer means it can grab onto it through something like a parameter list. That gets me to thinking. Perhaps I could develop a generalized interface so that the program can manipulate the models as objects. The interface might include 1) what it's for, 2) what its parameters mean in terms a computer can understand . We then need a model for parameter lists. Perhaps something like the English language. Does a computer need to be able to write simple code? Will the Rule of 20 profile system work for the parameters?

The key reason for simplicity is the need to integrate artificially creative subsystems. Integration necessity defines what simplicity is.

What I right now have is a bunch of little programs, and models and proofs of concept and they need to be drawn together by the computer and used as needed. Maybe scheme would work. But does it have graphics? Maybe Forth would work. But it does not have objects. Maybe the profile system would work. I need to work on a profile for parameters. I need to start cranking out profiles and then design a higher level profile or model. In order to find this higher level model for integration, I need lots of simple models for various things and then see what integration scheme will work to integrate them. hmmm.

Posted by: Jon Grover on Feb 15, 06 | 9:25 pm | Profile

[0] Trackbacks   [0] Pingbacks

Sat Feb 11, 2006

The Rule of Twenty (or 21 or 22)

AC models for concepts are a different challenge than models for physical things like mythological creatures or even for events. Special purpose models work very well for concrete things like mythological creatures, terrain, or time periods. How do you model something like emotions or colors or cognitive types or English words?

To model concepts for artificial creativity, list them. For example a list of emotions might be fear, love, anger, sadness, happiness, joy etc. I call this a first order list. This list can be useful if you have a small set of concepts each of which your program interprets directly. The intelligence is in the interpretation, and somewhat in the list. The computer doesn't really understand anything except that there is a list, and it has a set of equally important items. The problem is most concepts are more complicated than this.

A second order list can be much more useful. The second order list gives the computer something to chew on. A second order list is a list of concepts that are combined with each other to produce the concepts that you want to model. Each item in the list can be combined with one or more of the others to generate a unique result. When they are combined you get the list you were actually interested in. By making a list of 20 concepts that can combine in any way, this results in 190 possible pairs, and 1140 triplets. The triplets have enough different results to start looking like creativity.

One easy example of a list of 20 is color. I have developed a set of color concepts which when combined should result in every color. Each one is attached to a different letter to make them easy to store and manipulate. They are:

LetterColor Effect SymbolInterpreter Action
AAchromatic Aqua [->] or (><)desaturate
BBlue (_\)average with blue
CCold Cyan (->)move around the color wheel toward blue
DDark olive [/_]darken and saturate
EyEllow (/\)average with yellow
FFaded brown [_/]lighten and desaturate
GGreen (_/)average with green
HHot pink (<-)move around the color wheel toward red
IInfuscated Indigo [||]move away from saturate and desaturate toward the center
JJaded jade [><]move away from all extremes toward the center
KblacK [\/]move toward black maintaining saturation
LLight Lavender [\_]lighten and saturate
MMurky Mustard [_\]darken and desaturate
NNeutral gray [--]move away from white and black toward the center
OOrange (\_)average with orange
PPurple (\/)average with purple
QQuixotic chartreuse(^^)move around the color wheel toward yellow
RRed (/_)average with red
SSaturated Salmon [<-]saturate
TwhiTe [/\]move toward white maintaining saturation
UUgly magenta (vv)move around the color wheel toward purple


Each of these colors has an initial state and then an effect upon another color. A profile is a list of letters left to right from most important to least important. For example CLAGT is a profile. To interpret which color a profile represents, start with the least important and then affect it with the next most important. For example with CLAGT, . In this case you will end up with sort of a partly saturated turquoise.

This list is more than just a color map. It gives the computer something to hang on to. It gives computers twenty color concepts, which can be safely combined with each other, and the combinations can be combined with other concepts. This means that, for example, if you tell it that certain color effects mean certain things with respect to some other model, the computer can generate appropriate colors.

I've demonstrated the rule of twenty (in this case 21) with the concept of color because it is simplest. In most cases, writing the interpreter is the hard part. I have profile systems for color, cognitive typing, terrain types and others. If you know of any profile systems or combinable lists I would much appreciate knowing about them.

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

[0] Trackbacks   [0] Pingbacks

Mon Feb 06, 2006

Simple Maps

Computers find rectilinear maps easier to understand than other types. The world however is a sphere. Artificial creativity relies on extreme simplicity. Think of the complexity of an artificial creativity project as C = E ^ N where C is complexity, E is the complexity of each individual part, and N is the number of parts. Therefore you want to keep complexity down as low as you can for every level. So a rectilinear map works best but the world is a sphere.

My solution is to use a cubic projection of the world I am working with. This can then unfold into a rectilinear map which a computer can easily handle. Because I am a Christian, I tend to like this particular unfolding:




It has the problem that the bottom-most square is upside down related to the rest of the squares on the equator. The next unfolding is probably just as good for the computer, and easier for those of us who expect North to be Up on the map:

(Note, these images have been blown down from a larger size. To see better images click here and here.

Posted by: Jon Grover on Feb 06, 06 | 7:40 pm | Profile

[0] Trackbacks   [0] Pingbacks

Thu Feb 02, 2006

The Centaur Problem

One class of problem, which I run in to when building artificial creativity model, is a problem I call the Centaur Problem. I call it this because I first ran into it while and it is well described by trying to build a model for creating mythical creatures. Mythical creatures generally have some regular creature's forequarters and some other creature's hind quarters, or they are some type of hominid, or they are some type of dragon. So an AC model for building them would be to randomly select a set of hind quarters (including human as a possibility) and a set of forequarters (including human arms and torso), roll 50% for wings, and randomly select a head, 25% it matches either the hind or the fore quarters. The lists can then be tweaked to make dragons and pegasi also possible (fire breathing, dragon body, horn etc.)

Here's the problem. The centaur is not one of the possible outcomes from this model. The reason is that the hindquarters of the human part of the centaur are also the forequarters of the horse part. This means that the model has incomplete coverage. The centaur is a pretty creative sort of concept, and so if you are making an artificially creative mythical creature generator it isn't really very creative if it can't make a centaur. The most fun generator would.

One possible fix for the Centaur Problem is to move to a meta level above the level you are modeling. Start with a list of body types: centauroid, humanoid, animoid, dragonoid, and then select the various parts. This doesn't work very well because you can't easily get say an eight legged animal. And the creativity of body style is all the work of the human making the list not the model itself. In addition it's not simple, and there is no way to tell what list (hindquarters of forequarters) to get the center pair of appendages from.

Finally and most troublingly, you have to tweak the probabilities of each body type so that centaurs do not overpower the list. If centaurs consist of 25% of your results then the creator is off balance since only about 2% of mythical creatures are centaurs. Without tweaking the probabilities the model will give you unsatisfying results. This is manageable in the case of mythical creatures but what would you do if you were modeling something really complex like, for example, construction equipment. If you start having to layer one model on top of another, missing the proper tweaking at any layer will have unsatisfying results.

Another and probably better fix for the Centaur Problem is to work at a lower level than the level you are modeling. Instead of lists of heads, fore, and hind quarters start with a random selection of the rear of the creature. Have then a list of things that can be attached moving forward to each thing you have at the present stage. So select hind quarters, then select a body type or a neck. At the body type stage, select from either the hindquarters or forequarters lists, at the forequarters stage select either a body type or a head. When you reach the head you are done. Some tweaking is still necessary but now you have a model that covers all of the basic mythical creatures, is simple and flexible. What we have done here is create the centaur possibility as an emergent property of a lower level model. It can also cerate eight legged creatures which you did not have with either of the earlier models. Very cool.

The centaur problem shows up repeatedly in many different forms in artificial creativity. Do you artificially create a building plan by modeling the spaces or the walls? Do you build terrain generators focusing on borders or regions? Do you make random names by jamming syllables together or by stringing vowels between a structure of consonants? There are many examples.

Posted by: Jon Grover on Feb 02, 06 | 7:50 pm | Profile

[0] Trackbacks   [0] Pingbacks