Browse Source

final

master Abgabe
Tom 5 years ago
parent
commit
95222e2808
1 changed files with 23 additions and 19 deletions
  1. +23
    -19
      README.md

+ 23
- 19
README.md View File

@ -4,13 +4,13 @@ git clone --recursive http://sargas.org:3000/QA_SAT/BA_Reproduzierbarkeit_Anleit
~~~ ~~~
## Setup ## Setup
Zuerst muss das virtual environment für Python eingerichtet werden. Gehen sie hierfür in das Hauptverzeichnis des Projekts und führen
Zuerst muss ein virtual environment für Python eingerichtet werden. Gehen Sie hierfür in das Hauptverzeichnis des Projekts und führen Sie
~~~bash ~~~bash
pipenv install pipenv install
~~~ ~~~
aus. Anschließend muss noch ein kernel für jupyter erstellt werden, hierzu führen sie
aus. Anschließend muss noch ein kernel für jupyter erstellt werden, hierzu führen Sie
~~~bash ~~~bash
python -m ipykernel install --user --name=BA_Reproduzierbarkeit_Anleitung python -m ipykernel install --user --name=BA_Reproduzierbarkeit_Anleitung
~~~ ~~~
@ -22,10 +22,10 @@ pipenv shell
aktiviert werden. aktiviert werden.
## Kompilieren ## Kompilieren
Führen sie folgende Anweisungen aus, um die notwendigen libraries zu kompilieren.
Führen Sie folgende Anweisungen aus, um die notwendigen libraries und Tools zu kompilieren.
~~~bash ~~~bash
qubo_lab/SconsLocal/scons.py -C ./qubo_lab/ --init
./qubo_lab/SconsLocal/scons.py -C ./qubo_lab/ --init
~~~ ~~~
~~~bash ~~~bash
@ -33,7 +33,7 @@ qubo_lab/SconsLocal/scons.py -C ./qubo_lab/ --init
~~~ ~~~
## Datenbanken einrichten ## Datenbanken einrichten
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.
~~~python ~~~python
from qubo_lab.util import script from qubo_lab.util import script
@ -111,7 +111,7 @@ instance_db = script.connect_to_instance_pool()
script.extract_instance_parameters() script.extract_instance_parameters()
~~~ ~~~
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.
~~~python ~~~python
from qubo_lab.util import data_extraction from qubo_lab.util import data_extraction
@ -179,12 +179,12 @@ qubos.query("scope_name")
script.find_embeddings_for_scope(instance_db, solver_graph, qubos) script.find_embeddings_for_scope(instance_db, solver_graph, qubos)
~~~ ~~~
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:
Abfrage | Erklärung Abfrage | Erklärung
--------- |-------------- --------- |--------------
@ -216,7 +216,7 @@ CREATE TABLE `wmis_qpu_results` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1; ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
~~~ ~~~
um anschließend daten aus den Ergebnissen des D-Wave Solvers zu extrahieren:
um anschließend Daten aus den Ergebnissen des D-Wave Solvers zu extrahieren:
~~~python ~~~python
from qubo_lab.util import script from qubo_lab.util import script
@ -261,15 +261,15 @@ qubos.query("scope_name")
script.find_embeddings_for_scope(instance_db, solver_graph, qubos) script.find_embeddings_for_scope(instance_db, solver_graph, qubos)
~~~ ~~~
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.

Loading…
Cancel
Save