Es werden zwei Datenbanken benötigt, eine MySQL und eine MongoDB Datenbank. In der MongoDB Datenbank werden Objekte wie SAT-Instanzen, QUBOS, oder D-Wave SampleSets gespeichert. Die MySQL Datenbank wird dazu verwendet, um Daten aus diesen Objekten zu extrahieren und diese anschließend zu untersuchen. Damit die Datenbanken genutzt werden können muss im Hauptverzeichnis ein File namens **database.config** angelegt werden, welches folgende Struktur aufzuweisen hat.
Es werden zwei Datenbanken benötigt, eine MySQL und eine MongoDB Datenbank. In der MongoDB Datenbank werden Objekte wie SAT-Instanzen, QUBOS oder D-Wave SampleSets gespeichert. Die MySQL Datenbank wird dazu verwendet, um Daten aus diesen Objekten zu extrahieren und diese anschließend zu untersuchen. Damit die Datenbanken genutzt werden können muss im Hauptverzeichnis ein File namens **database.config** angelegt werden, welches folgende Struktur aufzuweisen hat.
~~~ini
~~~ini
[INSTANCE_POOL]
[INSTANCE_POOL]
@ -54,10 +54,10 @@ database = ...
Bei **[INSTANCE_POOL]** handelt es sich um die MongoDB Datenbank und bei **[EXPERIMENT_DB]** um die MySQL Datenbank.
Bei **[INSTANCE_POOL]** handelt es sich um die MongoDB Datenbank und bei **[EXPERIMENT_DB]** um die MySQL Datenbank.
## Verbindung zum D-Wave Solver
## Verbindung zum D-Wave Solver
Der Zugriff auf einen D-Wave Solver setzt ein **dwave.config** file im Hauptverzeichnis voraus. Weitere Informationen hierzu finden sie in der offiziellen [Dokumentation](https://docs.ocean.dwavesys.com/projects/cloud-client/en/latest/index.html) des D-Wave Cloud Clients :
Der Zugriff auf einen D-Wave Solver setzt ein **dwave.config** file im Hauptverzeichnis voraus. Weitere Informationen hierzu finden Sie in der offiziellen [Dokumentation](https://docs.ocean.dwavesys.com/projects/cloud-client/en/latest/index.html) des D-Wave Cloud Clients :
## Datensatz generieren
## Datensatz generieren
Ein k-SAT-Instanzen Datensatz mit einer fixer Klauselanzahl und logistisch verteilen Variablenanzahlen kann mit folgendem Python script erzeugt werden. Rufen sie hierzu einfach den interaktiven Modus von Python auf
Ein k-SAT-Instanzen Datensatz mit einer fixer Klauselanzahl und logistisch verteilen Variablenanzahlen kann mit folgendem Python script erzeugt werden.
~~~python
~~~python
from qubo_lab.util import script
from qubo_lab.util import script
@ -102,7 +102,7 @@ CREATE TABLE `instances` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
~~~
~~~
Anschließend können sie mit diesem Python code extrahiert werden.
Anschließend können Sie mit diesem Python code extrahiert werden.
Sie werden nun nach einigen dingen gefragt, folgende Tabelle erklärt die Bedeutungen der Abfragen:
Sie werden nun nach einigen Dingen gefragt, folgende Tabelle erklärt die Bedeutungen der Abfragen:
Abfrage| Erklärung
Abfrage| Erklärung
----------|---------------
----------|---------------
@ -120,11 +120,11 @@ table name: | Name der gerade erstellten Tabelle ("instances")
## Minisat ausführen
## Minisat ausführen
Als nächstes muss der Minisat Solver auf dem gerade generierten Datensatz gelaufen lassen werden.
Als nächstes muss der Minisat Solver auf dem gerade generierten Datensatz gelaufen lassen werden.
Hierzu führen sie vom Hauptverzeichnis
Hierzu führen Sie vom Hauptverzeichnis
~~~bash
~~~bash
./qubo_lab/build/release/runMinisat
./qubo_lab/build/release/runMinisat
~~~
~~~
aus. Wenn sie nach dem Datenbanken Konfigurationsfile gefragt werden, geben sie das oben beschriebene **database.config** file an. Als "Experiment scope" geben sie den **scope_name** aus dem Abschnitt *Datensatz generieren* an.
aus. Wenn Sie nach dem Datenbanken Konfigurationsfile gefragt werden, geben Sie das oben beschriebene **database.config** file an. Als "Experiment scope" geben Sie den **scope_name** aus dem Abschnitt *"Datensatz generieren"* an.
Anschließend müssen die Ergebnisse des Minisat Solvers extrahiert werden. Hierfür muss eine Tabelle in der Experiment Datenbank angelegt werden:
Anschließend müssen die Ergebnisse des Minisat Solvers extrahiert werden. Hierfür muss eine Tabelle in der Experiment Datenbank angelegt werden:
~~~sql
~~~sql
@ -136,7 +136,7 @@ CREATE TABLE `minisat_runs` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
~~~
~~~
Ist diese Tabelle angelegt, können die Ergebnisse extrahiert werden führen sie hierzu folgenden Python code aus.
Ist diese Tabelle angelegt, können die Ergebnisse extrahiert werden, führen Sie hierzu folgenden Python code aus.
Führen sie (**find_embeddings_for_scope(...)**) solange aus bis alle für alle qubos ein Embedding gefunden wurde. Sollte dies nicht möglich sein, sind die QUBOs zu groß für den Hardwaregraphen.
Nun können die QUBOs dem D-Wave Solver übergeben werden. Führen sie hierzu das script
Führen Sie (**find_embeddings_for_scope(...)**) solange aus bis alle für alle QUBOs ein Embedding gefunden wurde. Sollte dies nicht möglich sein, sind die QUBOs zu groß für den Hardwaregraphen.
Nun können die QUBOs dem D-Wave Solver übergeben werden. Führen Sie hierzu
~~~bash
~~~bash
./qubo_lab/run_sampler_on_scope.py
./qubo_lab/run_sampler_on_scope.py
~~~
~~~
aus. Folgende Tabelle erklärt wieder die Abfragen des scripts:
aus. Folgende Tabelle erklärt wieder die Abfragen des Scripts:
Nun können sie wieder den D-Wave Sampler über die Instanzen laufen lassen.
Nun können Sie wieder den D-Wave Sampler über die Instanzen laufen lassen.
~~~bash
~~~bash
./qubo_lab/run_sampler_on_scope.py
./qubo_lab/run_sampler_on_scope.py
~~~
~~~
Achten sie darauf bei der Abfrage der *"Ising/qubo collection"* diesmal "wmis_2_qubos" anzugeben.
Achten Sie darauf bei der Abfrage der *"Ising/qubo collection"* diesmal "wmis_2_qubos" anzugeben.
Nun erstellen sie erneut eine Tabelle für die zu extrahierenden Daten.
Nun erstellen Sie erneut eine Tabelle für die zu extrahierenden Daten.
~~~sql
~~~sql
CREATE TABLE `wmis_2_qpu_results` (
CREATE TABLE `wmis_2_qpu_results` (
`result_id` char(24) NOT NULL DEFAULT '',
`result_id` char(24) NOT NULL DEFAULT '',
@ -302,3 +302,7 @@ Abfrage| Erklärung
scope: | Name des Experiment-Scopes (**scope_name**)
scope: | Name des Experiment-Scopes (**scope_name**)
result collection: | "wmis_qubos"
result collection: | "wmis_qubos"
table name: | Name der gerade erstellten Tabelle ("wmis_2_qpu_results")
table name: | Name der gerade erstellten Tabelle ("wmis_2_qpu_results")
## Auswertung
Die extrahierten Daten befinden sich nun in zur Auswertung geeigneter Form in der MySQL Datenbank. Für weitere Erläuterungen zur Auswertung wird auf die Bachelorarbeit verwiesen.