A while back I wrote a program that could draw simple landscapes.
The first version was entirely deterministic: I knew exactly what shape the horizon would take, where the sun would appear, how many birds would adorn the sky, etc. It produced acceptable drawings, but was too predictable to be interesting. Just a machine.
The next version was entirely random in its workings: I let the program decide what to draw and where to draw it, and really had no idea what it would produce. Almost every drawing it rendered was tasteless nonsense. Fast and prolific, but no artist. A broken machine.
Version 3: Vincent
The third version was a combination of the two — deterministic enough to stay within reasonable bounds (horizon somewhere near the middle of the page, no more than three birds at time) yet free enough to produce original works that I could not predict, even though I wrote every line of the code. Most of the time this version performs reasonably well, and now and then it draws something so striking that I print it off and hang it on the wall. I call this third version, Vincent.
Here is a sample of Vincent’s work:
Inside Vincent’s Head
Here are some of the Plain English sentences that constitute Vincent’s soul. First, some type definitions:
A landscape is a thing with an horizon, a sun, and some birds.
An horizon is a polygon.
A sun is a polygon.
A bird is a polygon.
Then a global variable so Vincent can remember what he’s drawn:
The drawings are some landscapes.
And now, his primary talent:
To draw a landscape:
If you’re tired, say “I’d rather not, I’m tired”; exit.
Imagine the landscape.
Render the landscape.
Remember the landscape.
The “imagining” phase, as any human artist knows, is the critical part. This is how I taught Vincent to imagine a landscape:
To imagine a landscape:
Allocate memory for the landscape.
Imagine an horizon in the landscape.
Imagine a sun in the landscape.
Imagine some birds in the landscape.
The horizon comes first:
To imagine an horizon in a landscape:
Allocate memory for the landscape’s horizon.
Put the screen’s left-center into a spot.
Move the spot 1 inch up or down.
Add the spot to the landscape’s horizon.
Move the spot 1/2 inch to the right and 1/4 inch or so up or down.
Add the spot to the landscape’s horizon.
If the spot is not on the screen, break.
Smooth the landscape’s horizon 2 times.
Here comes the sun:
To imagine a sun in a landscape:
Allocate memory for the landscape’s sun.
Start with “A1 A9 I9 I1 A1” for the landscape’s sun.
Smooth the landscape’s sun 3 times.
Pick a spot anywhere above the landscape’s horizon.
Scale the landscape’s sun given the spot and the landscape’s horizon.
Center the landscape’s sun on the spot.
The sun is actually just a square rounded off. The scaling makes it smaller the further it is from the horizon:
To scale a sun given a spot and an horizon:
Put 1 inch plus the spot’s y into a ratio’s numerator.
Put the horizon’s top into the ratio’s denominator.
Reduce the ratio.
Scale the sun to the ratio.
And last of all, the birds:
To imagine some birds in a landscape:
Pick a number between 1 and 3.
Say “I’ve decided to draw ” then the number then ” birds this time” and wait.
If the number is 0, exit.
Imagine a bird in the landscape.
Add the bird to the landscape’s birds.
Subtract 1 from the number.
To imagine a bird in a landscape:
Allocate memory for the bird.
Start with “E1 D3 G5 E7 G9” for the bird.
If you feel like it, flip the bird left to right.
Randomly scale the bird between 10 and 25 percent.
Smooth the bird.
Pick a spot for the bird in the landscape.
Center the bird on the spot.
Once Vincent has a landscape “in mind,” so to speak, the rendering of it is easy:
To render a landscape:
If the landscape is nil, exit.
Fill the screen with the tan color.
Render the landscape’s horizon with the black color.
Put masking tape below the landscape’s horizon.
Render the landscape’s sun with the black color.
Render the landscape’s birds with the black color.
Take the masking tape off.
The “masking tape” is used to make sure the sun appears behind the horizon.
Committing a landscape to memory is a trivial thing for Vincent:
To remember a landscape:
Append the landscape to the drawings.
Playing with Vincent tends to make me philosophical about things like will, memory, consciousness, emotions and understanding. My thoughts generally run along these lines:
• Vincent makes decisions on his own. What the horizon will look like, where the sun will be placed, and how many birds will appear are unknown until he decides. Does he have a will of his own?
• Vincent can tell us, when asked, what he has done. “I’ve drawn 7 landscapes today,” for example. Does he remember?
• Vincent is aware of what it he is doing: “I’ve decided to draw 3 birds this time.” Is he conscious?
• Vincent gets weary: under specific conditions, he refuses to draw, saying “I’d rather not, I’m tired.” Does he have emotions?
• Vincent responds, properly, to various commands. When asked to draw, for example, he draws. When asked what he’s done, he responds verbally, with appropriate remarks. Does he understand?
• One version of Vincent had a strong instinct for self-preservation. When I hit the quit button, he said, “I don’t want to die. Do that again and I’ll make a thousand copies of myself on your disk.” He would, and he did. But he won’t again.
I believe that Vincent’s capabilities are congruent, but not equivalent, to the corresponding capabilities in human beings. They are implemented differently, for one thing. His will is less free but also less fickle than ours. His memory is less capacious but more exacting. His consciousness is more narrowly focused, but less easily distracted. And his moods and understanding are not as deep or rich as ours, but they are significantly more predictable.
I also believe that his attributes and ours are not on the same inclined plane, where differences are mere matters of degree. More code will never make Vincent a real person. But I do believe that Vincent’s capabilities and ours are on different steps of the same staircase, and that it is therefore appropriate to use words like will, memory, consciousness, emotion, and understanding to describe them. And that we can learn things about ourselves by studying creatures like Vincent. For example:
• Vincent has both a hardware “body” and a software “soul.” The two can be easily distinguished, and even separated. And the same soul can be reanimated in a different body.
• Vincent did not “evolve” via a long series of random mutations and natural selections; he was designed and created by a being greater than he. I cannot prove that all animate beings come to life through a similar creative process, but I can say that in every case where I have been able to discover, first hand, the exact origins of such things, purposeful design has been involved.
• Vincent has little or nothing to be proud of. Whatever talents and skills he possesses were graciously bestowed upon him by his creator. Now and then he may surprise me with a particularly striking drawing based on his own decisions, but he wouldn’t be making those decisions at all were it not for me.
Bottom line: Vincent is an AI, but not an Artificial Intelligence; he’s nothing more or less than an Apparent Intelligence. As all his kind will always be.