PictureOptimizer
: Ein Programm zur Generierung von Bitmap-Grafiken
- Sprache: JAVA
- Autor: Thomas Kneisel
- Lizenz: GPL V2
- Download Source: PictureOptimizer
- Dokumentation: javadoc
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 . 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:
basedata.txt
member0.bmp
,member1.bmp
etc.statistic.txt
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
Nächstes Kapitel (Extractor
)