Archiv:2011/AG Demokratie/Projekt Diskussionsplattform/Komponenten/Debatte Backend
Dieser Artikel ist keine offizielle Aussage der Piratenpartei; die Idee ist von Wobble 18:14, 23. Dez. 2009 (CET) Wenn du meinst diese Idee erweitern zu können, tu es. Diskutiert ihr zu mehreren an der Idee, könnt ihr auch die Vorlage:Diskussion setzen. |
Inhaltsverzeichnis
Debatte Backend
Für die Problemanalyse wurde folgendes UML-Diagramm erstellt:
Dieses spiegelt denke ich, relativ gut die Struktur der Debatte dar, die in dieser Komponente realisiert werden soll.
Indirekte Assoziation
Allerdings sollen im Frontend nicht nur direkt assoziierte Begründungen und äquivalente Behauptungen angezeigt werden, sondern auch indirekt assoziierte.
Äquivalenz ist eine transitive und symmetrische Relation. Diese Eigenschaften können ausgenutzt werden um weitere äquivalente Thesen zu finden.
Indirekte Begründungen
Wenn eine Begründung für eine zu <math>A</math> äquivalente These <math>B</math> funktioniert, dann funktioniert sie vermutlich auch für <math>A</math>. Durch die Aufteilung in Argumente und Schlussfolgerung kann die Begründung fast komplett übernommen werden, da die Gültigkeit der Argumente erhalten bleibt, also nur die Schlussfolgerung ausgetauscht werden muss. Dies Schlussfolgerung wird immer automatisch generiert, somit ist die Neugenerierung auch kein Problem.
Interferenz zwischen Abstimmungsergebnissen
Angenommen zwei Thesen <math>A,B</math> sind äquivalent und Begründung <math>C</math> existiert sowohl für <math>A</math> als auch <math>B</math>. Dann gilt das Abstimmergebnis von der Schlussfolgerung <math>C \to A</math> auch für <math>C \to B</math>. Wenn das Abstimmverhalten bei <math>A</math> niedrig ist, so kann es passieren, dass dort das Ergebnis nicht repräsentativ ist. Diese Diskrepanz kann dann durch das Abstimmergebnis von <math>B</math> ausgeglichen werden. Dadurch können auch neue Begründungen für die noch niemand abgestimmt hat sinnvoll in die Begründungsliste einsortiert werden.
Die Interferenz wirkt aber auch in der anderen Richtung. Wenn die Schlussfolgerung <math>C \to A</math> positiv ausfällt, aber <math>C \to B</math> nicht, so kann <math>A</math> nicht <math>B</math> implizieren, also kann <math>A</math> auch nicht äquivalent zu <math>B</math> sein. Dies kann benutzt werden um geringe Abstimmbeteiligung bei den Äquivalenzen auzugleichen.
Theoretisch kann damit die Plattform auch eigenständig andere Thesen als äquivalent vorschlagen. Das wäre quasi ein künstlicher Diskussionsgärtner.
Mathematische Modellierung der indirekten Assoziation / Begründung
Assoziationen sind Ergebnis von Abstimmungen der Nutzer <math>\Omega</math> zu einer Menge von Wahlergebnisse <math>R</math>. In der Menge der Wahlergebnisse gibt es auch die Möglichkeit sich zu enthalten: <math>\epsilon \in R</math>. Eine konkrete Abstimmung über eine Assoziation (oder Schlussfolgerung) <math>A</math> kann also folgendermaßen modelliert werden:
<math> Poll(A) \in (\Omega \to R) </math>
Hat man auf <math>R</math> die Operatoren <math>+,*</math> definiert, so kann man für <math>x,y \in (\Omega \to R)</math> ebenfalls <math>+,*</math> definieren
- <math> x+y = \omega \mapsto x(\omega)+y(\omega)</math>
- <math> x*y = \omega \mapsto x(\omega)*y(\omega)</math>
und damit die indirekte Abstimmung folgendermaßen rekursiv definieren:
<math> \overline{Poll}(B) := Poll(B) + \sum_C Poll(A) * \overline{Poll}(A \to B) </math>
Damit das halbwegs sinnvoll ist, muss <math>R(+)</math> eine abelsche Halbgruppe sein (sonst wäre die Summe nicht wohldefiniert) und für alle <math>a \in R</math> folgendes gelten:
- <math>a*\epsilon = \epsilon*a = \epsilon</math>
Dieses Modell hat insofern Nachteile, dass Abstimmergebnisse nur verwendet werden, wenn die gleiche Person bei beiden Abstimmungen teilgenommen hat. Dies reduziert den Einfluss enorm. Außerdem ist der Abbruch der Rekursion nicht definiert und die Rekursion könnte nicht terminieren.
Interpolation für Wahlenthaltungen
Anstelle Wahlenthaltungen als keine Stimme zu interpretieren, kann man die Wahlenthaltung auch als Stimme wie der Rest interpretieren. Damit das geht, müssen bei <math>R</math> nicht die einzelnen Wahloptionen repräsentiert sein, sondern alle möglichen Verteilungen von Stimmabgaben. Sei also <math>Q</math> die Menge der Wahloptionen ohne Wahlenthaltung. Dann lässt sich <math>R</math> definieren als
<math> R = (Q \to [0,1]) \times [0,1] </math>
Sei <math>(V,r) \in R</math> dann ist
- <math>V</math> ist die Stimmverteilung. Dabei gelte <math>\sum_{q \in Q} V(q) = 1</math>
- <math>r</math> ist die Realität und gibt an, ob es sich um konkrete Stimme handelt, oder ob diese nur Ergebnisse aus Wahlenthaltungen sind. Desto indirekter die Stimme ist, desto geringer ist <math>r</math>.
Für eine konkrete Stimmabgabe gilt somit (im folgenden sei <math>Q \to [0,1]</math> als <math>\mathbb{R}</math>-Vektorraum aufgefasst, dabei muss man natürlich auf die anschließende Normalisierung aufpassen)
<math>Poll(A) \in \left(\Omega \to \left((Q \to [0,1]) \times \left\{1\right\} \cup \left\{Poll(A)^*,f\left(|Poll(A)^+|\right)\right\}\right)\right)</math>, wobei für alle <math>a \in (\Omega \to R)</math>
- <math>a^+ := \{\omega \in \Omega | \exist V : a(\omega) = (V,1)\} </math>
- <math>a^* := \frac{1}{|a^+|} \sum_{\omega \in a^+, (V,r) = a(\omega)} V</math>
- <math>f: \mathbb{N} \to [0,1)</math> streng monoton wachsend mit <math>f(0) = 0</math>.
Da die Definition von <math>Poll(A)^*</math> nicht die Werte der Elemente benutzt, die mit <math>Poll(A)^*</math> initialisiert werden, ist die Menge der konkreten Stimmabgaben wohldefiniert. Man bemerke, dass hier nicht nur ein Element für die Wahlenthaltung gibt, sondern eine ganze Menge von Elementen, die eine Wahlenthaltung repräsentieren. Es gilt also immer <math>\epsilon \in (Q \to [0,1]) \times [0,1)</math>. Für eine konkrete Umfrage <math>Poll(A)</math> selbst, gibt es aber immer nur ein Element für die Wahlenthaltung, nämlich <math>\epsilon = \{Poll(A)^*,f\left(|Poll(A)^+|\right)\}</math>.
Auf <math>Q</math> muss eine Multiplikation definiert sein, dann lassen sich für <math>(V_1,r_1),(V_2,r_2) \in R</math> die nötigen Operationen <math>+,*</math> definieren:
- <math>
(V_1,r_1)+(V_2,r_2) = \begin{cases} (V_1,r_1) & r_1 > r_2 \\ (V_2,r_2) & sonst \end{cases} </math>
- <math>
(V_1,r_1)*(V_2,r_2) = \left( \left( q \mapsto \sum_{q_1,q_2 \in Q, q_1*q_2 = q} V_1(q_1)*V_2(q_2) \right), r_1*r_2 \right) </math>
Beobachtungen
<math>R(+,*)</math> eingeschränkt auf die Realität bildet einen Halbring. Da <math>R(+)</math> keine abelsche Halbgruppe ist, kann es zu komischen Effekten führen. Da es sich aber nur um Meinungsbilder handelt, sollte der Effekt nicht allzu schlimm sein.
Mit jeder abgegebenen Stimme steigt die Realität in jeder Abstimmung monoton oder bleibt gleich. Stimmt Nutzer <math>\omega</math> ab, so werden nur seine interpolierten Werte geändert, die der anderen bleiben gleich. Dies hat folgende Konsequenzen:
- Bei der Aktualisierung der Werte gibt es keine Zyklen.
- Der Aufwand der Aktualisierung ist linear zur Anzahl der geänderten Werte. Der Aufwand ist somit optimal.
- Wenn nur Stimmen hinzugefügt werden können, so muss nicht gespeichert werden, wie das interpolierte Ergebnis zustande gekommen ist.
<math> a = \overline{Poll}(A) </math> ist viel zu komplex um direkt angezeigt zu werden, im Endeffekt möchte man ja nur eine Abstimmverteilung anzeigen. Eine kanonische Lösung dafür ist, wenn man die Verteilungen anhand der Realität gewichtet aufaddiert:
<math> S(a) := \frac{\sum_{\omega \in \Omega, (V,r) = a(\omega)} g_a(r)V}{\sum_{\omega \in \Omega, (V,r) = a(\omega)} g_a(r)} </math>
wobei <math>g_a:[0,1] \to \mathbb{R}^+</math> streng monoton wachsend ist.
Kalibrierung
Es müssen also nur noch <math>f,g</math> geeignet definiert werden. Dabei wäre es wünschenswert:
- interpolierte Stimmen, die aus Abstimmungen mit doppelt so viel abgegebenen Stimmen stammen haben doppeltes Gewicht. (evtl. auch anderer linearer Faktor)
- Diese Forderung ist in Kombination mit den anderen beiden Forderungen nicht realisierbar, da dafür <math>g</math> in <math>1</math> beliebig stark ansteigen müsste, dies wäre aber eine Singularität für die konkreten Stimmen.
- keine Singularitäten, wenn es zu einer Umfrage gar keine konkreten Stimmen gibt.
- keine Singularitäten durch konkrete Stimmen (Gefahr, weil Realität = 1 ist).
- Die interpolierten Stimmen zusammen sollen nicht viel mehr Stimmgewicht als die konkreten Stimmen zusammen haben.
Lösungsvorschlag:
- <math>f(x) = 1 - \frac{1}{x+1}</math>. Es wird durch <math>x+1</math> geteilt, damit es keine Singularitäten bei Umfragen ohne konkreter Stimmen gibt. Ansonsten ist <math>\frac{1}{x}</math> ideal dazu geeignet einen Wertebereich in <math>[0,1]</math> zu pressen.
- <math>g_a(x) = 1 - \sqrt[n]{1-x}, n = \frac{\log(|\Omega|) - \log(|\Omega|-|a^+|)}{\log(|a^+|+1)}</math>. Durch die Wurzelfunktion wird dafür gesorgt, dass die Ableitung von <math>g</math> in <math>1</math> nicht existiert, somit also auch ein gewisser Abstand der konkreten Stimmen zu den interpolierten gewahrt bleibt. Das <math>n</math> wird so gewählt, damit <math>g_a(f(|a^+|)) = \frac{|a^+|}{|\Omega|}</math>, also die indirekten Stimmen zusammen nicht stärker als die konkreten sind.
Ansonsten hilft vermutlich nur ausprobieren, ob die gewählten Funktionen sich bewähren.
Implementierung
Wenn zwei Aussagen <math>A,B</math> äquivalent sind, so kann das durch zwei Implikationen <math>A \to B, B \to A</math> modelliert werden. Auch die Zuordnung von Tags kann mittels Implikationen realisiert werden. Somit kann das Modell verwendet werden um überall interpolierte Abstimmergebnisse zu realisieren.
Algorithmisch bedeutet dies, dass für jeden Nutzer aus den bestehenden Implikationen ein gewichteter, gerichteter Graph gebildet wird, dessen Kanten die Implikationen repräsentieren. Dieser Graph kann mittels den oben beschriebenen Regeln um die transitive Hülle erweitert werden. Aussagen, die keine Implikationen sind, können als Implikationen von <math>True</math> aufgefasst werden. Somit können auch Abstimmungen zu solchen Aussagen in den Graphen integriert werden.
Gibt ein Nutzer dann eine Stimme ab, so wird der Wert einer Kante <math>A \to B</math> geändert. Diese Änderung kann genau die Gewichte der Kanten <math>A \to C</math> ändern, wo eine Kante <math>B \to C</math> existiert, da der Graph um die transitive Hülle erweitert wurde. Vermutlich ist es sinnvoll diese Änderung nebenläufig zu gestalten, da der Nutzer selbst die indirekten Änderungen nicht direkt sieht und sonst die Interaktivität leiden könnte.