Activities/Kandid
Kandid is a system to evolve graphical forms
Introduction
In Kandid a population consist of images looking like abstract art or patterns. These graphical forms are not drawn by hand. Instead new forms can be found using an interactive genetic algorithm.
Kandid is a combination of image rendering algorithms, genetic programming and interactive aesthetic selection. The program is missing a fitness function, a component you normally expect in an artificial genetic system. The lack of the built in fitness function is done by concept. No mathematical algorithm can decide if a graphic is meaningful for the user. The fitness function in Kandid is replaced by human aesthetic selection. In other words: The user tolds the program which images are 'cool' or never seen before.
Background
Darwinian evolution consists of a simple cycle. The most fit entities in a population reproduce. The resulting offspring are a combination of their parents with some random mutations. Some offspring may be improvements over their parents. The most fit of offspring continue to reproduce. In Kandid the definition of fitness comes from the users aesthetic preferences. The program is a working horse presenting the user proposals for new images letting the user the decision which one is preferable. The concept behind Kandid was introduced by Karl Sims 20 years ago. It is a combination of image rendering algorithms, genetic programming and interactive aesthetic selection. In 2003 I publish a different version based on fractal geometry at http://kandid.sourceforge.net. Kandid for the Sugar desktop is more than a simple port. It is based on different graphic algorithms and shows more introspection.
Pedagogical purpose
You can consider Kandid as a simulation of evolution. But compared with the evolution of live there are some differences. The first is how fitness is handled. It needs a human to select the proposed images. Next is the limited range of output. The program can produce lots of color combinations and geometrical shapes. But after using Kandid for a while the style of the images is predictable.
You can use Kandid to improve you aesthetic feeling. Most of the random images are too indifferent. But sometimes you find a surprisingly interesting composition of shapes or color combinations. Maybe you see things you never noticed before.
You can use Kandid to get in touch with art made by machines. Ore more precisely: Art made by humans trying to control an generative random process.
Kandid is also a matter of complexity. Ever single image produced by Kandid is made of simple shapes and color schema. But combining these parts will result in a complex looking image.
Usage
Where to get Kandid
You can download Kandid from http://activities.sugarlabs.org/en-US/sugar/addon/4254
Evolve an image population
You can start Kandid from your Home view by selecting Start new. The new image population starts with randomly generated images.
An other possibility is starting Kandid with an existing image population. You can load a former image population from Home view or from the journal.
A randomly produced image population looks mostly very dull. Its only a starting point from where the image population can be evolved in subsequent generations.
To evolve the new image population you must tell the program which images are interesting. There is a slider above every image. Use this slider to tell Kandid how aesthetic these images are. For an awfully bore image give 0 or 1 point. For images not to bad you can give 5 or 6 points. Your favorites needs 8 or 9 points.
Press the Random button and wait a few seconds. Some images will be replaced by other. You can repeat this for some rounds. Preserve interesting images by moving the slider to an value between 5 and 9 points. But the result is a little bit disappointing. Too much bore images. Finding good looking images is like finding a needle in an haystack. This is the point where evolution can help.
Press the Breed button instead of the Random button and wait a few seconds. Again images with low ratings will be replaced by new images. But there is one difference. These new images are offsprings of your favorite images. This means that the offspring genes are build from crossing over two parental genes and additionally mutating this new gene.
You can repeat this for a long run. Always marking the image you find most appealing with a high ranking and setting the images, that should not appear again in the next generation, with a low ranking.
Tweak the control
The „Flurry rate„ in Kandid is something like the mutation rate. Offspring images will be generated by crossing over the two parent images genes and mutating the new image gene. The Flurry rate influences the amount of randomness during reproduction. If you have a low "Flurry rate" its likely that offspring images looks similar to the image with the best ranking. If your population looks to uniform increase it to create more deviations.
Collaboration
Kandid supports collaboration by publishing a complete image population or by sharing the gene of single image.
A new image population starts in private mode. To share it select 'My Neighborhood'.
You can invite an other buddy to Kandid. If this buddy joins, your population will be send to your friends computer. Let explain this in detail: The gene of each image is send, not a bitmap of the image. In this way your friend can evolve an independent copy of your image population. I suppose your friend has an different aesthetic feeling. And after a few generations both populations will evolve in different directions.
These separated populations can share images by sending the gene of a single image to all friends. Above all images in your population you find a pull down menu. Selecting 'Publish to my friends' will send the gene of this image it to all joined friends.
Image genes send from friends will be first displayed in a separate box. You find this incoming box on the left side. If you accept an incoming image, its gene will replace one of the low rated genes in your population. An other possibility is to decline or to ignore an incoming image. Here you see white and pink colored images send from a friend. Maybe he prefers bright color. It is your decision to integrate these to your 'earth tones' image population or just to ignore it.
Exporting images to an image manipulation program
Looking inside the image generating process
What you see is a combination of simple signs
What you see is made of several layers
Releases, translation and known bugs
Developers can clone the source code repository from http://git.sugarlabs.org/projects/kandid/repos/mainline
Translations
Kandid is partial translated to 'de', 'el', 'en', 'es', 'fr', 'it', 'pt_BR' and 'vi'. The program is translatable using Pootle. See our Pootle server for details about how to translate Kandid into your language.
Bug tracking
Users can report bugs and suggest an enhancement to http://bugs.sugarlabs.org/. Use Trac component name 'Kandid'.
Version history
v5: Aplril 2010
- Added a simple ancestors view. The ancestors of newly generated will be displayed as a tree. This is only a temporary solution and should be replaced later.
- Added a layer for rendering quadtrees.
- Bug fixing samplers / rendering engine. The changes in the rendering engine are not backwards compatible.
- Saving and restoring the graphics context in modifier nodes. Maybe this bug fix is not backward compatible.
v4: February 2010
- Images generated by Kandid can be exported as PNG images to the journal. You can open an exported image with an image manipulation program.
- The details of a generated image can be explained.
- Improving the color scheme.
- Cancel obsolete rendering task during start up. This may reduce time when starting from journal.
v3: January 2010
- Some new views added to Kandid:
- Starting anew will show the 'Getting started' view.
- The zoom view shows a selected protozoon with higher resolution.
- The status view is for monitoring the programs internal state.
- Scalable vector graphics (SVG) and Unicode characters will be used as stamps.
v2: December 2009
- first public release