PictureOptimizer: Ein Programm zur Generierung von Bitmap-Grafiken


Erzeugen eines neuen Projektes

java -jar PictureOptimizer.jar new projectname targetimage images_per_generation mutations selection_type

Parameter

java -jar PictureOptimizer.jar
der Programmaufruf
new projectname
Schlüsselwort zur Erzeugung eines neuen Projektes mit Namen projectname
targetimage
Datei mit dem Bild, das per Evolution nachgebildet werden soll. Erlaubt sind alle Grafikformate, die die Java Klasse Image verarbeiten kann.
images_per_generation
Generationsgröße s. Zahl der mutierten Repliken des Vorgängers, die pro Generation erzeugt werden.
mutations
Zahl der Mutationen bei der Erzeugung einer Replik.
selection_type
WinnerTakesItAll
Nur die beste (oder genau eine der besten) Mutante der erzeugten Generation werden als Vorlage für die nächste Generation verwendet. Momentan ist das das einzige realisierte Schlüsselwort!

Eine Beispielsitzung:

thomaskneisel@potosi:~/programming/NetBeansProjects/PictureOptimizer/dist$ java -jar PictureOptimizer.jar new test target.jpg 5 1 WinnerTakesItAll
Creating new project "test_000000000.zip"...
        Source File:    "target.jpg"
                width:  500 px
                height: 333 px
        Images per generation:  5
        Mutations per Generation:       1
        Selection Type: WinnerTakesItAll
Generation 0    1999330 1999330
Generation 1    1999332 1999332
Generation 2    1999335 1999335
Generation 3    1999339 1999339
Generation 4    1999344 1999344
Generation 5    1999349 1999349
Generation 6    1999352 1999352
Generation 7    1999354 1999354
Generation 8    1999359 1999359
Generation 9    1999362 1999362
Generation 10   1999370 1999370
Generation 11   1999374 1999374
Generation 12   1999380 1999380
^Cthomaskneisel@potosi:~/programming/NetBeansProjects/PictureOptimizer/dist$ ^C
thomaskneisel@potosi:~/programming/NetBeansProjects/PictureOptimizer/dist$ 

Nach jeweils 1000 Generationen wird eine Datei mit dem Zustand der jeweiligen Generation gespeichert, wobei die Nummer der Generation an den Dateinamen angehängt wird. Wird der Programmablauf unfreiwillig oder, wie im Beispiel per ctrl-C abgebrochen, dann kann mit Hilfe der letzten Sicherungsdatei die Berechnung fortgesetzt werden. Im schlimmsten Fall können jedoch die letzten 999 Generationen verloren gehen. Die Speicherung nach jeder 1000. Generation ist im Quellcode fest kodiert und kann momentan nur dort geändert werden.


Speicherformat (Version 21-Jan-2016)

Die Projektdateien sind einfache zip-Archive. Ein Archiv enthält die folgenden Einzeldateien:

  1. basedata.txt
  2. member0.bmp, member1.bmp etc.
  3. statistic.txt
  4. target.bmp

basedata.txt

Beinhaltet die Basisdaten des Projektes und der konkreten Generation innerhalb des Projektes. Die Daten sind als primitive CSV-Datei gespeichert, wobei als Trennungszeichen der Semikolon ";" verwendet wird.

version;21-Jan-2016
Das Versionsdatum des Speicherformats. Sollte es irgendwann einmal eine überabeitung des Dateidatums geben, dann würde sie über das Datum des Formats identifiziert. Zur Zeit existiert nur das Dateiformat vom 21. Januar 2016.
generation;6000
Die Nummer der Generation in der diese Datei geschrieben wurde.
mutationRate;2
Die Mutationsrate, als Zahl der Mutationen, die bei Erzeugung eines Individuums stattfinden.
size;2
Die Zahl der Individiuen innerhalb einer Generation.
selection;WinnerTakesItAll
Der Typus des Selektionsmechanismus. Zur Zeit ist nur der Wert WinnerTakesItAll implementiert, bei dem immer nur das beste Element einer Generation zur Erzueugung der nächsten Generation herangezogen wird.

member0.bmp, member1.bmp, etc.

Sämtliche Bilder die in der Generation erzeugt wurden. Die Bilder werden zur Vermeidung von Kompressionsverlusten im bmp-Format gespeichert. Die Bilder sind in absteigender Reihenfolge nach der Fitneß sortiert, d.h. member0.bmp ist immer das Mitglied der Generation mit der höchsten Fitneß.

statistic.txt

Krude Zusammenstellung einiger Kennzahlen der einzelnen Individuen. Die Datei ist im CSV-Format gespeichert, das Trennzeichen ist der Semikolon ";". Wird ein Projekt von PictureOptimizer gelesen, werden die Daten in dieser Datei ignoriert, statt dessen beim Einlesen neu berechnet.

n;similarity;fitness;rouletteWheel
Die Spaltentitel der Tabelle. Es bedeuten:
n
Nummer des Individuums. Die Individuuen sind absteigend nach Fitneß sortiert, d.h. Individuum #0 ist das Individuum mit der höchsten Fitneß.
similarity
ähnlichkeit zum Ziel der Optimierung. Es werden die Bits gezählt die mit dem Ziel übereinstimmen.
fitness
Die errechnete Fitness. Während die ähnlichkeit lediglich die Zahl übereinstimmender Bits zählt, könnte die Fitneß kompliziertere, vielleicht auch nichtlineare Eigenschaften des jeweiligen Bitmusters wiedergegeben. Zur Zeit ist jedoch ähnlichkeit (similarity) = Fitneß.
rouletteWheel
Die Gewichte für das zufällige Auswahlverfahren bei der Erzeugung einer neuen Generation
0;2001778;2001778;1.0
Die entsprechenden Daten des ersten Individuums. Das erste Individuum ist automatisch auch das Inividuum mit der höchsten Fitneß.
1;2001776;2001776;0.0
Die Daten des zweitbesten Individuums

target.bmp

Das Optimierungsziel. Zur Vermeidung weiterer Kompressionsverluste wird das Bild immer im bmp-Format gespeichert.


Laden eines gespeicherten Projektes

Mit dem Kommando open kann mit Hilfe einer alten Projektdatei die Erzeugung des Bildes fortgesetzt werden.

java -jar PictureOptimizer.jar open projectname

Parameter

java -jar PictureOptimizer.jar
der Programmaufruf
open
Schlüsselwort zum Laden eines neuen Projektes
projectname
Der Dateiname des gespeicherten Projekts

Beispielsitzung

thomaskneisel@potosi:~/programming/NetBeansProjects/PictureOptimizer/dist$ java -jar PictureOptimizer.jar open test_000000000.zip 
Generation 0    1999330 1999330
Generation 1    1999335 1999335
Generation 2    1999339 1999339
Generation 3    1999343 1999343
Generation 4    1999349 1999349
Generation 5    1999359 1999359
Generation 6    1999363 1999363
Generation 7    1999366 1999366
Generation 8    1999373 1999373


Navigation

Vorhergehendes Kapitel

übersicht

Nächstes Kapitel (Extractor)