<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wikimirror.piraten.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=BE%3ANeuk%C3%B6lln%2FGebietsversammlungen%2F2010.3%2FProtokoll</id>
	<title>BE:Neukölln/Gebietsversammlungen/2010.3/Protokoll - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wikimirror.piraten.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=BE%3ANeuk%C3%B6lln%2FGebietsversammlungen%2F2010.3%2FProtokoll"/>
	<link rel="alternate" type="text/html" href="https://wikimirror.piraten.tools/wiki/index.php?title=BE:Neuk%C3%B6lln/Gebietsversammlungen/2010.3/Protokoll&amp;action=history"/>
	<updated>2026-04-24T22:30:13Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Piratenwiki Mirror</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wikimirror.piraten.tools/wiki/index.php?title=BE:Neuk%C3%B6lln/Gebietsversammlungen/2010.3/Protokoll&amp;diff=55689476&amp;oldid=prev</id>
		<title>imported&gt;Flobg: Schützte „BE:Neukölln/Gebietsversammlungen/2010.3/Protokoll“: Offizielles Dokument ([edit=berlinweb] (unbeschränkt) [move=berlinweb] (unbeschränkt))</title>
		<link rel="alternate" type="text/html" href="https://wikimirror.piraten.tools/wiki/index.php?title=BE:Neuk%C3%B6lln/Gebietsversammlungen/2010.3/Protokoll&amp;diff=55689476&amp;oldid=prev"/>
		<updated>2012-02-22T03:13:54Z</updated>

		<summary type="html">&lt;p&gt;Schützte „&lt;a href=&quot;/BE:Neuk%C3%B6lln/Gebietsversammlungen/2010.3/Protokoll&quot; title=&quot;BE:Neukölln/Gebietsversammlungen/2010.3/Protokoll&quot;&gt;BE:Neukölln/Gebietsversammlungen/2010.3/Protokoll&lt;/a&gt;“: Offizielles Dokument ([edit=berlinweb] (unbeschränkt) [move=berlinweb] (unbeschränkt))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Protokoll der dritten Neuköllner Gebietsversammlung am 19.12.2010 ==&lt;br /&gt;
&lt;br /&gt;
===Protokoll===&lt;br /&gt;
&lt;br /&gt;
====Begrüßung====&lt;br /&gt;
&lt;br /&gt;
Akkreditiert sind 13 Stimmberechtigte.&lt;br /&gt;
&lt;br /&gt;
Heide Hagen eröffnet die Versammlung um 19 Uhr.&lt;br /&gt;
&lt;br /&gt;
====Abstimmung über die Zulassung von Gästen und die Tagesordnung====&lt;br /&gt;
&lt;br /&gt;
Abstimmung über die Zulassung von Gästen: Einstimmig angenommen.&lt;br /&gt;
&lt;br /&gt;
Abstimmung über die Tagesordnung wie in der Einladung enthalten: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ddd;padding:23px&amp;quot;&amp;gt;&lt;br /&gt;
# Begrüßung  &lt;br /&gt;
# Abstimmung über die Zulassung von Gästen und die Tagesordnung  &lt;br /&gt;
# Wahl Versammlungsleitung u. Protokollanten   &lt;br /&gt;
# Vorstellung u. Bestimmung des Wahlleiters und seiner Helfer  &lt;br /&gt;
# Vorstellung/Abstimmung über Wahl- u. Geschäftsordnung   &lt;br /&gt;
# Meinungsaustausch über die Aufstellung von Direktkandidaten und gegebenenfalls Beschlußfassung/ Wahl   &lt;br /&gt;
# Wahl von Kandidaten für die BVV-Liste Neukölln &lt;br /&gt;
# Wahlkampfvorbereitung&lt;br /&gt;
# sonstige Anträge&lt;br /&gt;
# Beschlußfassung über den Termin der nächsten Gebietsversammlung   &lt;br /&gt;
# Verabschiedung&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Tagesordnung wird einstimmig angenommen.&lt;br /&gt;
&lt;br /&gt;
Antrag auf Änderung der Tagesordnung: Vorziehen der Kandidatenaufstellung für die BVV (TOP 7) vor die Aufstellung der Direktkandidaten zur Abgeordnetenhauswahl (TOP 6). Begründung: Es ist das Wichtigste. Keine Gegenrede, damit angenommen.&lt;br /&gt;
&lt;br /&gt;
====Wahl Versammlungsleitung u. Protokollanten====&lt;br /&gt;
&lt;br /&gt;
Wahl des Versammlungsleiters: Vorschlag Andreas Nitsche. Einstimmig angenommen.&lt;br /&gt;
&lt;br /&gt;
Wahl des Protokollanten: Vorschlag Simon Weiß. Einstimmig angenommen.&lt;br /&gt;
&lt;br /&gt;
====Vorstellung u. Bestimmung des Wahlleiters und seiner Helfer====&lt;br /&gt;
&lt;br /&gt;
Wahl des Wahlleiters: Vorschlag Jan Behrens. Einstimmig angenommen.&lt;br /&gt;
Der Wahlleiter bestimmt als Wahlhelfer Björn Swierczek und Martin Delius.&lt;br /&gt;
&lt;br /&gt;
====Vorstellung/Abstimmung über Wahl- u. Geschäftsordnung====&lt;br /&gt;
&lt;br /&gt;
Die Wahl- und Geschäftsordnung der Piratenpartei Berlin wird vorgestellt und von der Versammlung einstimmig als gültig bestätigt.&lt;br /&gt;
&lt;br /&gt;
Antrag auf Änderung der Wahlordnung, um die Listen und Direktkandidaten nach einem Präferenzwahlverfahren zu wählen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ddd;padding:23px&amp;quot;&amp;gt;&lt;br /&gt;
Die Gebietsversammlung Neukölln beschließt in Ergänzung zur Wahl- und Geschäftsordnung:&lt;br /&gt;
&lt;br /&gt;
Die Wahlen zur Einreichung von Wahlvorschlägen (Direktkandidaten und Liste) werden mittels eines Präferenzwahlverfahrens entsprechend der diesem Antrag beiliegenden Stimmzettelvorlagen durchgeführt. Kandidaten, die nicht mehr Zustimmungen als Ablehnungen auf sich vereinigen können, scheiden aus und finden im nachfolgend beschriebenen Prozess keine Berücksichtigung. Für die übrigen Kandidaten wird die im Folgenden beschriebene Schulze-Methode zur Ermittlung des Wahlgewinners bzw. der Kandidatenreihenfolge auf Listen verwendet:&lt;br /&gt;
&lt;br /&gt;
Jeder Kandidat wird mit jedem anderen Kandidaten verglichen und es wird für jeden Kandidaten ermittelt, wieviele Wähler diesen Kandidaten den jeweils anderen Kandidaten vorziehen.&lt;br /&gt;
&lt;br /&gt;
Definition: Jeder Kandidat kann jeden anderen Kandidaten mit einem Gewicht von n schlagen, wenn sich eine Abfolge von insgesamt mindestens zwei Kandidaten konstruieren lässt, die mit Kandidat A beginnt und mit Kandidat B endet, bei der für alle Paare direkt aufeinanderfolgender Kandidaten dieser Abfolge der jeweils eine Kandidat gegenüber seinem Nachfolger von einer einfachen Mehrheit, mindestens jedoch von n Wählern, bevorzugt wird.&lt;br /&gt;
&lt;br /&gt;
#Es wird für jedes Kandidatenpaar X und Y ermittelt, wie das größtmögliche Gewicht ist, mit dem ein Kandidat X nach obenstehender Definition den Kandidaten Y schlagen kann. Hierzu müssen alle der obenstehenden Definition genügenden Abfolgen von Kandidaten berücksichtigt werden. Gibt es keine solche Abfolge wird jeweils ein größtmögliches Gewicht von Null (0) angenommen.&lt;br /&gt;
#Ein Kandidat X ist dann Gewinner der Wahl, wenn für jeden anderen Kandidaten Y das größtmögliche Gewicht, mit dem der Kandidat X den Kandidaten Y schlagen kann, größer als das größtmögliche oder gleich dem größtmöglichen Gewicht ist, mit dem der Kandididat Y den Kandidaten X schlagen kann.&lt;br /&gt;
#Gibt es mehrere Gewinner, findet eine Stichwahl statt.&lt;br /&gt;
&lt;br /&gt;
Im Falle von Listenaufstellungen wird Schritt 2 unter Ausnahme der bisherigen Gewinner wiederholt, um die weiteren Plätze zu besetzen. Gleichplatzierte Kandidaten werden im Anschluss an die Auszählung mittels einer Stichwahl untereinander in eine Reihenfolge gebracht.&lt;br /&gt;
&lt;br /&gt;
Stichwahlen werden als Wahl durch Zustimmung durchgeführt. Es werden hierbei nur Zustimmungen gezählt und der Kandidat mit den meisten Stimmen gewinnt bzw. wird erstplatziert. Sind mehrere Kandidaten in eine Reihenfolge zu bringen, entscheidet die Anzahl der Zustimmungen über die Reihenfolge der Kandidaten. Ergibt die Stichwahl einen Gleichstand, dann entscheidet das Los oder ein Münzwurf.&lt;br /&gt;
&lt;br /&gt;
Technisch wird die Auszählung mit Ausnahme der Stichwahlen unter Verwendung des folgenden in der Programmiersprache Lua 5.1 geschriebenen Computerprogramms durchgeführt. Die Eingabedaten werden gemäß der Stimmzettel in einem öffentlichen Prozess erfasst. Eingaben und Ausgaben des Programms werden protokolliert und veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieser Beschluss behält Gültigkeit bis zum Abschluss der Gebietsversammlung, sofern er nicht vorher durch einen mehrheitlichen Beschluss aufgehoben wird.&lt;br /&gt;
Quellcode des verwendeten Computerprogramms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env lua&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
-- Helper functions --&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
function message(...)&lt;br /&gt;
  io.stderr:write(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------&lt;br /&gt;
-- Print notice related to tie-breaking --&lt;br /&gt;
------------------------------------------&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;NOTICE: This simplified version of the program does not perform tie-breaking.\n\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------&lt;br /&gt;
-- Command line argument processing --&lt;br /&gt;
--------------------------------------&lt;br /&gt;
&lt;br /&gt;
settings = {}&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  local next_arg&lt;br /&gt;
  do&lt;br /&gt;
    local argv = {...}&lt;br /&gt;
    local i = 0&lt;br /&gt;
    next_arg = function()&lt;br /&gt;
      i = i + 1&lt;br /&gt;
      return argv[i]&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  local function command_line_error()&lt;br /&gt;
    message(&amp;quot;Get help with -h or --help.\n&amp;quot;)&lt;br /&gt;
    os.exit(1)&lt;br /&gt;
  end&lt;br /&gt;
  for option in next_arg do&lt;br /&gt;
    local argument, lower_argument&lt;br /&gt;
    local function require_argument()&lt;br /&gt;
      argument = next_arg()&lt;br /&gt;
      if argument == nil then&lt;br /&gt;
        message('Command line option &amp;quot;', option, '&amp;quot; requires an argument.\n')&lt;br /&gt;
        command_line_error()&lt;br /&gt;
      end&lt;br /&gt;
      lower_argument = string.lower(argument)&lt;br /&gt;
    end&lt;br /&gt;
    local function set_setting_once(key, value)&lt;br /&gt;
      if settings[key] ~= nil then&lt;br /&gt;
        message('Command line option &amp;quot;', option, '&amp;quot; occurred multiple times.\n')&lt;br /&gt;
        command_line_error()&lt;br /&gt;
      end&lt;br /&gt;
      settings[key] = value&lt;br /&gt;
    end&lt;br /&gt;
    if option == &amp;quot;-h&amp;quot; or option == &amp;quot;--help&amp;quot; then&lt;br /&gt;
      io.stdout:write(&amp;quot;Usage:\n&amp;quot;)&lt;br /&gt;
      io.stdout:write(&amp;quot;schuool   -c|--candidates &amp;lt;candidates_file&amp;gt;\n&amp;quot;)&lt;br /&gt;
      io.stdout:write(&amp;quot;          -b|--ballots    &amp;lt;ballots_file&amp;gt;\n&amp;quot;)&lt;br /&gt;
      io.stdout:write(&amp;quot;        [ -d|--default    n|neutral|f|first|l|last            ]\n&amp;quot;)&lt;br /&gt;
      io.stdout:write(&amp;quot;        [ -o|--output     &amp;lt;output_file&amp;gt;                       ]\n&amp;quot;)&lt;br /&gt;
      os.exit(0)&lt;br /&gt;
    elseif option == &amp;quot;-c&amp;quot; or option == &amp;quot;--candidates&amp;quot; then&lt;br /&gt;
      require_argument()&lt;br /&gt;
      set_setting_once(&amp;quot;candidates_filename&amp;quot;, argument)&lt;br /&gt;
    elseif option == &amp;quot;-b&amp;quot; or option == &amp;quot;--ballots&amp;quot; then&lt;br /&gt;
      require_argument()&lt;br /&gt;
      set_setting_once(&amp;quot;ballots_filename&amp;quot;, argument)&lt;br /&gt;
    elseif option == &amp;quot;-d&amp;quot; or option == &amp;quot;--default&amp;quot; then&lt;br /&gt;
      require_argument()&lt;br /&gt;
      if lower_argument == &amp;quot;n&amp;quot; or lower_argument == &amp;quot;neutral&amp;quot; then&lt;br /&gt;
        set_setting_once(&amp;quot;default&amp;quot;, &amp;quot;n&amp;quot;)&lt;br /&gt;
      elseif lower_argument == &amp;quot;f&amp;quot; or lower_argument == &amp;quot;first&amp;quot; then&lt;br /&gt;
        set_setting_once(&amp;quot;default&amp;quot;, &amp;quot;f&amp;quot;)&lt;br /&gt;
      elseif lower_argument == &amp;quot;l&amp;quot; or lower_argument == &amp;quot;last&amp;quot; then&lt;br /&gt;
        set_setting_once(&amp;quot;default&amp;quot;, &amp;quot;l&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        message('Unknown default position &amp;quot;', argument, '&amp;quot; specified after ', option, ' switch.\n')&lt;br /&gt;
        command_line_error()&lt;br /&gt;
      end&lt;br /&gt;
    elseif option == &amp;quot;-o&amp;quot; or option == &amp;quot;--output&amp;quot; then&lt;br /&gt;
      require_argument()&lt;br /&gt;
      set_setting_once(&amp;quot;output_filename&amp;quot;, argument)&lt;br /&gt;
    else&lt;br /&gt;
      message('Illegal command line option &amp;quot;', option, '&amp;quot;\n')&lt;br /&gt;
      command_line_error()&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if settings.candidates_filename == nil then&lt;br /&gt;
    message(&amp;quot;Use -c or --candidates to specify file containing candidate information.\n&amp;quot;)&lt;br /&gt;
    command_line_error()&lt;br /&gt;
  end&lt;br /&gt;
  if settings.ballots_filename == nil then&lt;br /&gt;
    message(&amp;quot;Use -b or --ballots to specify file containing all ballot data.\n&amp;quot;)&lt;br /&gt;
    command_line_error()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------&lt;br /&gt;
-- I/O helper functions --&lt;br /&gt;
--------------------------&lt;br /&gt;
&lt;br /&gt;
function strip(str)&lt;br /&gt;
  return string.match(str, &amp;quot;^%s*(.-)%s*$&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function stripped_lines(filename)&lt;br /&gt;
  local file, errmsg = io.open(filename, &amp;quot;r&amp;quot;)&lt;br /&gt;
  if not file then&lt;br /&gt;
    message(errmsg, &amp;quot;\n&amp;quot;)&lt;br /&gt;
    os.exit(2)&lt;br /&gt;
  end&lt;br /&gt;
  local get_next_line = file:lines(filename)&lt;br /&gt;
  return function()&lt;br /&gt;
    if not file then return nil end&lt;br /&gt;
    local line&lt;br /&gt;
    repeat&lt;br /&gt;
      line = get_next_line()&lt;br /&gt;
      if line == nil then&lt;br /&gt;
        file:close()&lt;br /&gt;
        file = nil&lt;br /&gt;
        return nil&lt;br /&gt;
      end&lt;br /&gt;
      line = strip(string.match(line, &amp;quot;^[^#]*&amp;quot;))&lt;br /&gt;
    until line ~= &amp;quot;&amp;quot;&lt;br /&gt;
    return line&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function stripped_gmatch(str, pattern)&lt;br /&gt;
  local next_entry = string.gmatch(str, pattern)&lt;br /&gt;
  return function()&lt;br /&gt;
    local entry&lt;br /&gt;
    repeat&lt;br /&gt;
      entry = next_entry()&lt;br /&gt;
      if entry then entry = strip(entry) end&lt;br /&gt;
    until entry ~= &amp;quot;&amp;quot;&lt;br /&gt;
    return entry&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  local output_file&lt;br /&gt;
  if settings.output_filename == nil then&lt;br /&gt;
    output_file = io.stdout&lt;br /&gt;
  else&lt;br /&gt;
    local errmsg&lt;br /&gt;
    output_file, errmsg = io.open(settings.output_filename, &amp;quot;w&amp;quot;)&lt;br /&gt;
    if not output_file then&lt;br /&gt;
      message(errmsg, &amp;quot;\n&amp;quot;)&lt;br /&gt;
      os.exit(2)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  function output(...)&lt;br /&gt;
    output_file:write(...)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function padded_number(number, maximum)&lt;br /&gt;
  local str = tostring(number)&lt;br /&gt;
  local max_digits = 1&lt;br /&gt;
  local tmp = maximum&lt;br /&gt;
  while tmp &amp;gt;= 10 do&lt;br /&gt;
    tmp = math.floor(tmp / 10)&lt;br /&gt;
    max_digits = max_digits + 1&lt;br /&gt;
  end&lt;br /&gt;
  for i = 1, max_digits - #str do&lt;br /&gt;
    str = &amp;quot; &amp;quot; .. str&lt;br /&gt;
  end&lt;br /&gt;
  return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---------------------&lt;br /&gt;
-- Read candidates --&lt;br /&gt;
---------------------&lt;br /&gt;
&lt;br /&gt;
candidates = {}  -- mapping string to candidate number and vice versa&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  for line in stripped_lines(settings.candidates_filename) do&lt;br /&gt;
    for candidate in stripped_gmatch(line, &amp;quot;[^;,]+&amp;quot;) do&lt;br /&gt;
      if candidates[candidate] then&lt;br /&gt;
        message('Duplicate candidate in &amp;quot;', settings.candidates_filename, '&amp;quot;: &amp;quot;', candidate, '&amp;quot;.\n')&lt;br /&gt;
        os.exit(2)&lt;br /&gt;
      end&lt;br /&gt;
      candidates[#candidates+1] = candidate&lt;br /&gt;
      candidates[candidate] = #candidates&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------&lt;br /&gt;
-- Read and process ballots --&lt;br /&gt;
------------------------------&lt;br /&gt;
&lt;br /&gt;
ballots = {}&lt;br /&gt;
approval_counts = {}&lt;br /&gt;
disapproval_counts = {}&lt;br /&gt;
for i = 1, #candidates do&lt;br /&gt;
  approval_counts[candidates[i]] = 0&lt;br /&gt;
  disapproval_counts[candidates[i]] = 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for line in stripped_lines(settings.ballots_filename) do&lt;br /&gt;
  local ballot = {}&lt;br /&gt;
  local rank&lt;br /&gt;
  local processed = {}&lt;br /&gt;
  local approvals, neutrals, disapprovals = string.match(line, &amp;quot;^([^/]*)/([^/]*)/([^/]*)$&amp;quot;)&lt;br /&gt;
  if not approvals then&lt;br /&gt;
    approvals, neutrals, disapprovals = string.match(line, &amp;quot;^([^/]*)$&amp;quot;), &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  if not approvals then&lt;br /&gt;
    message('Ill formatted ballot: &amp;quot;', line, '&amp;quot;.\n')&lt;br /&gt;
    os.exit(2)&lt;br /&gt;
  end&lt;br /&gt;
  local function process_lists(candidate_lists, count_table)&lt;br /&gt;
    for candidate_list in string.gmatch(candidate_lists, &amp;quot;[^;]+&amp;quot;) do&lt;br /&gt;
      if rank == -1 then&lt;br /&gt;
        -- only happens when there are different rankings in the neutral section&lt;br /&gt;
        message('Different rankings (semicolon) found in neutral section of ballot &amp;quot;', line, '&amp;quot;.\n')&lt;br /&gt;
        os.exit(2)&lt;br /&gt;
      end&lt;br /&gt;
      local empty = true&lt;br /&gt;
      for candidate in stripped_gmatch(candidate_list, &amp;quot;[^,]+&amp;quot;) do&lt;br /&gt;
        empty = false&lt;br /&gt;
        if not candidates[candidate] then&lt;br /&gt;
          message('Unknown candidate &amp;quot;', candidate, '&amp;quot; contained in ballot &amp;quot;', line, '&amp;quot;.\n')&lt;br /&gt;
          os.exit(2)&lt;br /&gt;
        end&lt;br /&gt;
        if processed[candidate] then&lt;br /&gt;
          message('Duplicate candidate &amp;quot;', candidate, '&amp;quot; in ballot &amp;quot;', line, '&amp;quot;.\n')&lt;br /&gt;
          os.exit(2)&lt;br /&gt;
        end&lt;br /&gt;
        ballot[candidate] = rank&lt;br /&gt;
        if count_table then&lt;br /&gt;
          count_table[candidate] = count_table[candidate] + 1&lt;br /&gt;
        end&lt;br /&gt;
        processed[candidate] = true&lt;br /&gt;
      end&lt;br /&gt;
      if not empty then&lt;br /&gt;
        -- It is important to only decrease rank, when candidates have been processed.&lt;br /&gt;
        rank = rank - 1&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  rank = #candidates&lt;br /&gt;
  process_lists(approvals, approval_counts)&lt;br /&gt;
  rank = 0&lt;br /&gt;
  process_lists(neutrals)&lt;br /&gt;
  rank = -2  -- rank -1 is reserved for default=first&lt;br /&gt;
  process_lists(disapprovals, disapproval_counts)&lt;br /&gt;
  for i = 1, #candidates do&lt;br /&gt;
    local candidate = candidates[i]&lt;br /&gt;
    if not processed[candidate] then&lt;br /&gt;
      if settings.default == &amp;quot;n&amp;quot; then&lt;br /&gt;
        ballot[candidate] = 0&lt;br /&gt;
      elseif settings.default == &amp;quot;f&amp;quot; then&lt;br /&gt;
        ballot[candidate] = -1&lt;br /&gt;
        disapproval_counts[candidate] = disapproval_counts[candidate] + 1&lt;br /&gt;
      elseif settings.default == &amp;quot;l&amp;quot; then&lt;br /&gt;
        ballot[candidate] = -#candidates - 2&lt;br /&gt;
        disapproval_counts[candidate] = disapproval_counts[candidate] + 1&lt;br /&gt;
      else&lt;br /&gt;
        message('Candidate &amp;quot;', candidate, '&amp;quot; missing in ballot &amp;quot;', line, '&amp;quot;.\n')&lt;br /&gt;
        os.exit(2)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  ballots[#ballots+1] = ballot&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
-- Select approved candidates, who passed the hard-coded quota of 1/2+ --&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local approved_candidates = {}&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  local max_approval    = 0&lt;br /&gt;
  local max_disapproval = 0&lt;br /&gt;
  local max_neutral     = 0&lt;br /&gt;
  for i = 1, #candidates do&lt;br /&gt;
    local candidate = candidates[i]&lt;br /&gt;
    local approval_count    = approval_counts[candidate]&lt;br /&gt;
    local disapproval_count = disapproval_counts[candidate]&lt;br /&gt;
    local neutral_count     = #ballots - approval_count - disapproval_count&lt;br /&gt;
    max_approval    = math.max(max_approval,    approval_count)&lt;br /&gt;
    max_disapproval = math.max(max_disapproval, disapproval_count)&lt;br /&gt;
    max_neutral     = math.max(max_neutral,     neutral_count)&lt;br /&gt;
  end&lt;br /&gt;
  output(&amp;quot;Candidates:\n&amp;quot;)&lt;br /&gt;
  for i = 1, #candidates do&lt;br /&gt;
    local candidate = candidates[i]&lt;br /&gt;
    local approval_count    = approval_counts[candidate]&lt;br /&gt;
    local disapproval_count = disapproval_counts[candidate]&lt;br /&gt;
    local neutral_count     = #ballots - approval_count - disapproval_count&lt;br /&gt;
    local approved = approval_count &amp;gt; disapproval_count&lt;br /&gt;
    output(padded_number(i, #candidates), &amp;quot;. &amp;quot;, padded_number(approval_count, max_approval), ':', padded_number(disapproval_count, max_disapproval), '(:', padded_number(neutral_count, max_neutral), ') 1/2+ ', approved and &amp;quot;APPROVED&amp;quot; or &amp;quot;FAILED  &amp;quot;, ' ', candidates[i], &amp;quot;\n&amp;quot;)&lt;br /&gt;
    if approved then&lt;br /&gt;
      approved_candidates[#approved_candidates+1] = candidate&lt;br /&gt;
      approved_candidates[candidate] = #approved_candidates&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  output(&amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
-- Calculate battles and rankings according to Schulze method --&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
battles = {}  -- two dimensional array&lt;br /&gt;
max_pro_contra = 0&lt;br /&gt;
for i = 1, #approved_candidates do&lt;br /&gt;
  battles[i] = {}&lt;br /&gt;
end&lt;br /&gt;
ranking = {}  -- mapping candidate name to ranking number and ranking number to list of candidates&lt;br /&gt;
&lt;br /&gt;
function beating_weight(pro, contra)&lt;br /&gt;
  if pro &amp;gt; contra then&lt;br /&gt;
    return pro&lt;br /&gt;
  else&lt;br /&gt;
    return 0&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function approval_ratio(approval_count, disapproval_count)&lt;br /&gt;
  if approval_count &amp;gt; 0 and disapproval_count &amp;gt; 0 then&lt;br /&gt;
    return approval_count / (approval_count + disapproval_count)&lt;br /&gt;
  elseif approval_count &amp;gt; 0 then&lt;br /&gt;
    return approval_count&lt;br /&gt;
  elseif disapproval_count &amp;gt; 0 then&lt;br /&gt;
    return 1 - disapproval_count&lt;br /&gt;
  else&lt;br /&gt;
    return 1/2&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
  local matrix = {}&lt;br /&gt;
  for i = 1, #approved_candidates do&lt;br /&gt;
    matrix[i] = {}&lt;br /&gt;
  end&lt;br /&gt;
  for i = 1, #approved_candidates do&lt;br /&gt;
    for j = i+1, #approved_candidates do&lt;br /&gt;
      local pro, contra = 0, 0&lt;br /&gt;
      for k = 1, #ballots do&lt;br /&gt;
        local ballot = ballots[k]&lt;br /&gt;
        local rank1 = ballot[approved_candidates[i]]&lt;br /&gt;
        local rank2 = ballot[approved_candidates[j]]&lt;br /&gt;
        if rank1 &amp;gt; rank2 then&lt;br /&gt;
          pro = pro + 1&lt;br /&gt;
        elseif rank2 &amp;gt; rank1 then&lt;br /&gt;
          contra = contra + 1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      battles[i][j] = pro&lt;br /&gt;
      battles[j][i] = contra&lt;br /&gt;
      max_pro_contra = math.max(max_pro_contra, pro)&lt;br /&gt;
      matrix[i][j] = beating_weight(pro, contra)&lt;br /&gt;
      matrix[j][i] = beating_weight(contra, pro)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  for i = 1, #approved_candidates do&lt;br /&gt;
    for j = 1, #approved_candidates do&lt;br /&gt;
      if i ~= j then&lt;br /&gt;
        for k = 1, #approved_candidates do&lt;br /&gt;
          if i ~= k and j ~= k then&lt;br /&gt;
            matrix[j][k] = math.max(matrix[j][k], math.min(matrix[j][i], matrix[i][k]))&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  local count = 0&lt;br /&gt;
  repeat&lt;br /&gt;
    local winners = {}&lt;br /&gt;
    for i = 1, #approved_candidates do&lt;br /&gt;
      local candidate = approved_candidates[i]&lt;br /&gt;
      if ranking[candidate] == nil then&lt;br /&gt;
        local best = true&lt;br /&gt;
        for j = 1, #approved_candidates do&lt;br /&gt;
          if i ~= j then&lt;br /&gt;
            local other_candidate = approved_candidates[j]&lt;br /&gt;
            if ranking[other_candidate] == nil and matrix[j][i] &amp;gt; matrix[i][j] then&lt;br /&gt;
              best = false&lt;br /&gt;
              break&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
        if best then&lt;br /&gt;
          winners[#winners+1] = candidate&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    ranking[#ranking+1] = winners&lt;br /&gt;
    for i = 1, #winners do&lt;br /&gt;
      ranking[winners[i]] = #ranking&lt;br /&gt;
      count = count + 1&lt;br /&gt;
    end&lt;br /&gt;
  until count == #approved_candidates&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------&lt;br /&gt;
-- Output ranking --&lt;br /&gt;
--------------------&lt;br /&gt;
&lt;br /&gt;
output(&amp;quot;Ranking:\n&amp;quot;)&lt;br /&gt;
for rank = 1, #ranking do&lt;br /&gt;
  local list = ranking[rank]&lt;br /&gt;
  for i = 1, #list do&lt;br /&gt;
    local candidate = list[i]&lt;br /&gt;
    output(padded_number(rank, #ranking), &amp;quot;. &amp;quot;, candidate, &amp;quot;\n&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
output(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---------------------------&lt;br /&gt;
-- Output battle results --&lt;br /&gt;
---------------------------&lt;br /&gt;
&lt;br /&gt;
for rank = 1, #ranking do&lt;br /&gt;
  local list = ranking[rank]&lt;br /&gt;
  for i = 1, #list do&lt;br /&gt;
    local candidate = list[i]&lt;br /&gt;
    output(&amp;quot;Comparison of: &amp;quot;, padded_number(rank, #ranking), &amp;quot;. &amp;quot;, candidate, &amp;quot;\n&amp;quot;)&lt;br /&gt;
    for other_rank = 1, #ranking do&lt;br /&gt;
      local other_list = ranking[other_rank]&lt;br /&gt;
      for j = 1, #other_list do&lt;br /&gt;
        local other_candidate = other_list[j]&lt;br /&gt;
        if candidate ~= other_candidate then&lt;br /&gt;
          local pro    = battles[approved_candidates[candidate]][approved_candidates[other_candidate]]&lt;br /&gt;
          local contra = battles[approved_candidates[other_candidate]][approved_candidates[candidate]]&lt;br /&gt;
          output(padded_number(pro, max_pro_contra), &amp;quot;:&amp;quot;, padded_number(contra, max_pro_contra), &amp;quot;  &amp;quot;, padded_number(other_rank, #ranking), &amp;quot;. &amp;quot;, other_candidate, &amp;quot;\n&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    output(&amp;quot;\n&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlagen:&lt;br /&gt;
&lt;br /&gt;
* {{PDF|BE_Gebietsversammlung_Neukoelln_2010-12-19_Anlage_Praeferenzwahlzettel.pdf|Stimmzettelvorlage zur Wahl von Direktkandidaten}}&lt;br /&gt;
* {{PDF|BE_Gebietsversammlung_Neukoelln_2010-12-19_Anlage_Praeferenzwahlzettel.pdf|Stimmzettelvorlage zur Aufstellung einer Kandidatenliste}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vorgeschlagene Verfahren wird vorgestellt.&lt;br /&gt;
&lt;br /&gt;
Meinungsbild: Wer möchte das Verfahren verwenden? Deutlich positiv.&lt;br /&gt;
&lt;br /&gt;
Fragen zum Verfahren werden erörtert.&lt;br /&gt;
&lt;br /&gt;
Eine Nachakkreditierung findet statt.&lt;br /&gt;
&lt;br /&gt;
Der Antrag ist einstimmig angenommen.&lt;br /&gt;
&lt;br /&gt;
Antrag auf Änderung der Wahlordnung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ddd;padding:23px&amp;quot;&amp;gt;&lt;br /&gt;
Bei Wahlen zur Aufstellung von Direktkandidaten gibt es eine zusätzliche explizite Wahloption, keinen Kandidaten aufzustellen. Diese Wahloption wird genauso wie alle übrigen Kandidaten behandelt.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Antrag ist einstimmig angenommen.&lt;br /&gt;
&lt;br /&gt;
Antrag auf Änderung der Wahlordnung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ddd;padding:23px&amp;quot;&amp;gt;&lt;br /&gt;
Die selbe Person kann sich für mehrere Wahlkreise zur Wahl aufstellen lassen, jedoch nur für einen Wahlkreis die Wahl annehmen. Lehnt ein gewählter Direktkandidat die Annahme der Wahl für einen Wahlkreis ab, wird nach dem Auszählungssverfahren der Listenaufstellung aus den bereits abgegebenen Stimmen der nächstplatzierte ermittelt. Dieser ist dann gewählt.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Antrag ist einstimmig angenommen.&lt;br /&gt;
&lt;br /&gt;
====Wahl von Kandidaten für die BVV-Liste Neukölln====&lt;br /&gt;
&lt;br /&gt;
Diskussion über die Aufstellung von Kandidaten für die Bezirksverordnetenversammlung.&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten für die BVV-Liste werden erfasst:&lt;br /&gt;
&lt;br /&gt;
*Mathias Zaech&lt;br /&gt;
*Steffen Burger&lt;br /&gt;
*Philipp Ott&lt;br /&gt;
*Lisa Vanovitch&lt;br /&gt;
*Anne Helm&lt;br /&gt;
*Moritz Nibbrig&lt;br /&gt;
*Roland Heine&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten stellen sich vor, beantworten Fragen und nehmen spontante Beifallsbekundungen entgegen.&lt;br /&gt;
&lt;br /&gt;
Heide Hagen gibt zu Protokoll: &amp;quot;Neukölln Rules!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Wahlmodalitäten werden noch einmal vorgestellt und der Wahlgang wird eröffnet.&lt;br /&gt;
&lt;br /&gt;
Wahlergebnis (siehe Wahlprotokoll):&lt;br /&gt;
&lt;br /&gt;
#Steffen Burger&lt;br /&gt;
#Anne Helm&lt;br /&gt;
#Mathias Zaech&lt;br /&gt;
#Moritz Nibbrig&lt;br /&gt;
#Roland Heine&lt;br /&gt;
#Philipp Ott&lt;br /&gt;
#Lisa Vanovitch&lt;br /&gt;
&lt;br /&gt;
Die gewählten Kandidaten nehmen die Wahl an.&lt;br /&gt;
&lt;br /&gt;
====Meinungsaustausch über die Aufstellung von Direktkandidaten und gegebenenfalls Beschlußfassung/ Wahl====&lt;br /&gt;
&lt;br /&gt;
Diskussion über die Aufstellung von Direktkandidaten.&lt;br /&gt;
&lt;br /&gt;
Die Sitzung wird für 5 Minuten unterbrochen.&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten für Wahlkreis 1 werden erfasst:&lt;br /&gt;
&lt;br /&gt;
*Rik Aulfes&lt;br /&gt;
*Benjamin Meyer&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten stellen sich vor und beantworten Fragen.&lt;br /&gt;
&lt;br /&gt;
Die Wahlmodalitäten werden noch einmal vorgestellt und der Wahlgang wird eröffnet.&lt;br /&gt;
&lt;br /&gt;
Gewählt ist Benjamin Meyer (siehe Wahlprotokoll).&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten für Wahlkreis 2 werden erfasst:&lt;br /&gt;
&lt;br /&gt;
*Anne Helm&lt;br /&gt;
*Steffen Burger&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten beantworten Fragen.&lt;br /&gt;
&lt;br /&gt;
Die Wahlmodalitäten werden noch einmal vorgestellt und der Wahlgang wird eröffnet.&lt;br /&gt;
&lt;br /&gt;
Gewählt ist Anne Helm (siehe Wahlprotokoll).&lt;br /&gt;
&lt;br /&gt;
Meinungsbild: Kannst du dir vorstellen, dich für die restlichen Wahlkreise als Direktkandidat aufstellen zu lassen? Mehrere Meldungen.&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten für Wahlkreis 3 werden erfasst:&lt;br /&gt;
&lt;br /&gt;
*Philipp Ott&lt;br /&gt;
*Andre Trecksel&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten stellen sich vor und beantworten Fragen.&lt;br /&gt;
&lt;br /&gt;
Weitere Diskussion über die Aufstellung von Kandidaten.&lt;br /&gt;
&lt;br /&gt;
Die Wahlmodalitäten werden noch einmal vorgestellt und der Wahlgang wird eröffnet.&lt;br /&gt;
&lt;br /&gt;
Keiner der Kandidaten ist gewählt (siehe Wahlprotokoll).&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten für Wahlkreis 4 werden erfasst:&lt;br /&gt;
&lt;br /&gt;
*Mathias Zaech&lt;br /&gt;
*Rik Aulfes&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten stellen sich vor und beantworten Fragen.&lt;br /&gt;
&lt;br /&gt;
Die Wahlmodalitäten werden noch einmal vorgestellt und der Wahlgang wird eröffnet.&lt;br /&gt;
&lt;br /&gt;
Gewählt ist Mathias Zaech (siehe Wahlprotokoll).&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten für Wahlkreis 5 werden erfasst:&lt;br /&gt;
&lt;br /&gt;
*Stefan Berkner&lt;br /&gt;
*Rik Aulfes&lt;br /&gt;
*Lisa Vanovitch&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten stellen sich vor und beantworten Fragen.&lt;br /&gt;
&lt;br /&gt;
Die Wahlmodalitäten werden noch einmal vorgestellt und der Wahlgang wird eröffnet.&lt;br /&gt;
&lt;br /&gt;
Keiner der Kandidaten ist gewählt (siehe Wahlprotokoll).&lt;br /&gt;
&lt;br /&gt;
Der Wunsch nach der Wiederholung eines Wahlganges wird vom Wahlleiter erfragt und nicht geäußert.&lt;br /&gt;
&lt;br /&gt;
Die Kandidaten für Wahlkreis 6 werden erfasst.&lt;br /&gt;
&lt;br /&gt;
Keiner der Anwesenden kandidiert.&lt;br /&gt;
&lt;br /&gt;
Die Sitzung wird für 5 Minuten unterbrochen.&lt;br /&gt;
&lt;br /&gt;
Die gewählten Direktkandidaten Benjamin Meyer (WK1), Anne Helm (WK2) und Mathias Zaech (WK4) nehmen die Wahl an.&lt;br /&gt;
&lt;br /&gt;
Antrag auf Streichung des Tagesordnungspunkts &amp;quot;Wahlkampfvorbereitung&amp;quot;. Keine Gegenrede.&lt;br /&gt;
&lt;br /&gt;
====sonstige Anträge====&lt;br /&gt;
&lt;br /&gt;
Keine sonstigen Anträge.&lt;br /&gt;
&lt;br /&gt;
Antrag auf Streichung des Tagesordnungspunkts &amp;quot;Termin der nächsten GV&amp;quot;. Keine Gegenrede.&lt;br /&gt;
&lt;br /&gt;
====Verabschiedung====&lt;br /&gt;
&lt;br /&gt;
Die Versammlung wird um 00:14 geschlossen.&lt;br /&gt;
&lt;br /&gt;
===Wahlprotokoll===&lt;br /&gt;
&lt;br /&gt;
[http://wiki.piratenpartei.de/Datei:BE_Gebietsversammlung_Neukoelln_2010-12-19_Wahlprotokoll.pdf Wahlprotokoll (PDF)]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Gebietsversammlungen Neukölln|.2010.3 Protokoll]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Flobg</name></author>
	</entry>
</feed>