[Nacht 0]Die Rache der Buerger



  • Jester schrieb:

    was soll ich in der momentanen situation argumentieren? alle diskutieren nur über angervotes und tempovorteile, das bringt uns aber nicht weiter.

    Warum negierst Du das? Vernünftige Argumente?
    Stattdessen drückst Du mit µ einfach aufs Tempo.
    "Bauchgefühle" haben bisher immer der Mafia den Sieg geschenkt und wenn ich auch nur den Ansatz einer Strategie erörtern mag, soll's schon wieder nicht recht sein? Wenigstens hat mir µ noch nicht vorgeworfen, destruktiv zu spielen, kann ja noch kommen.
    Bin leider zur Gartenpflege abkommandiert und kann erst heute Abend wieder und werde mich wohl zu einem vote durchringen.



  • ipsec schrieb:

    PS: das ich auf eine (wie selbst zugegeben) geratene Verdächtigung nicht reagiere, ist wohl selbstverständlich.

    nein, ist es nicht. du beteiligst dich weiterhin nicht an der diskussion und gibst keine einschätzungen der situation ab. 👎

    ich zweifle übrigens die aussagekraft deiner simulation an. ich bezweifle nicht, dass die zahlen bei dir so rauskommen, aber ich bezweifle ganz stark, dass sich im echten spiel durch den frühen rächereinsatz die chancen für die bürger erhöhen.



  • ipsec schrieb:

    - Nachteil: der Rächer ist einfacher von der Mafia manipulierbar, als das Kollektiv

    Das hier noch, bevor ich Rasen mähen muß, wieso dürfte das so sein?



  • ipsec schrieb:

    - Nachteil: der Rächer muss lange genug überleben

    Ist natürlich Blödsinn, wenn der Rächer tot ist, spielen wir eben normal weiter, wie sonst ja auch.

    Aber möglicherweise auch Nachteil: der Rächer könnte leichter aufgedeckt werden. Spätestens nämlich dann, wenn er selbst durch Rächervote gewählt ist.



  • Jeder kann eine Simulation schreiben, aber um zu beweisen, dass die simulation auch aussagekräfig ist, sollte man den quellcode schon mitliefern.



  • pointercrash() schrieb:

    Jester schrieb:

    was soll ich in der momentanen situation argumentieren? alle diskutieren nur über angervotes und tempovorteile, das bringt uns aber nicht weiter.

    Warum negierst Du das? Vernünftige Argumente?
    Stattdessen drückst Du mit µ einfach aufs Tempo.

    hab ich ja schon erklärt, und du hast es auch schon nicht verstanden, das thema ist von meiner seite aus also durch und ich verfolge nun das patentrezept nach mafia zu fahnden, indem ich leute verdächtige und sie auffordere ihre sicht der dinge darzulegen.

    ja, ich drücke aufs tempo, aber nicht für einen schnellen lynch sondern für ein spiel in dem viel inhaltlich diskutiert wird und man nachher auch was draus ablesen kann.

    warum wollt ihr das nicht? pointercrash? ipsec?

    immerhin passiert ja so langsam was, auch wenn noch nicht alle mitziehen.



  • @ipsec, was hast du denn da genau reinprogrammiert? hatte TGGCs simulator nicht für 7 vs. 2 ohne sonderrollen schon fast 50:50? wieso wird das bei dir so grandios viel schlechter?



  • pointercrash() schrieb:

    ipsec schrieb:

    - Nachteil: der Rächer ist einfacher von der Mafia manipulierbar, als das Kollektiv

    Das hier noch, bevor ich Rasen mähen muß, wieso dürfte das so sein?

    Möglicherweise bringen z.B. die Mafiosi überzeugende Argumente, warum der Rächer an einem bestimmten Tag nicht den mit der Mehrheit, sondern vielleicht den Zweiten wählen sollte. Das Lynchen ist ja mehr oder weniger final, dort müssen die Mafiosi irgendwie alle (oder zumindest die meisten), die für sie voten, davon überzeugen, jemand anderen zu nehmen. Sollten sie auf der Abschussliste des Rächers stehen, beschränkt sich die Menge der zu überzeugenden Personen auf genau diesen.

    Jester schrieb:

    ipsec schrieb:

    PS: das ich auf eine (wie selbst zugegeben) geratene Verdächtigung nicht reagiere, ist wohl selbstverständlich.

    nein, ist es nicht.

    Ich bitte dich. Du räts irgendwelche Namen und meiner ist zufällig dabei. Was erwartest du? Das ich mich weitschweifend verteidige? Oder gar ein tränenreiches Geständnis, dass ich Mafioso sei und du mich ertappt hast? Wenn du konkrete Anhaltspunkte hast, die mich verdächtig machen, werde ich mich auch dazu äußern.

    Jester schrieb:

    du beteiligst dich weiterhin nicht an der diskussion und gibst keine einschätzungen der situation ab. 👎

    Wie ich schon sagte ich war unterwegs, bin vorhin gerade erst wiedergekommen. So viel Zeit bleibt da nicht, das Simulationsprogramm habe ich auch nur vorhin in 5min kurz runtergetippt.

    Jester schrieb:

    ich zweifle übrigens die aussagekraft deiner simulation an. ich bezweifle nicht, dass die zahlen bei dir so rauskommen, aber ich bezweifle ganz stark, dass sich im echten spiel durch den frühen rächereinsatz die chancen für die bürger erhöhen.

    Im Prinzip ist es mehr oder weniger logisch. Das Lynchen ist die Waffe der Bürger, also ist es (rein vom System her) besser, wenn sie mehr lynchen können. Allerdings gebe ich dir Recht, dass im realen Spiel noch viele weitere Faktoren eine Rolle spielen. Deshalb schlug ich auch vor, zumindest am Anfang des Spiels den Rächer noch nicht aktiv werden zu lassen. Und die Erhöhung der Gewinnwahrscheinlichkeit betrug schlussendlich auch nur 6 Prozentpunkte.



  • Jester schrieb:

    @ipsec, was hast du denn da genau reinprogrammiert? hatte TGGCs simulator nicht für 7 vs. 2 ohne sonderrollen schon fast 50:50? wieso wird das bei dir so grandios viel schlechter?

    nur damit du das nicht übersiehst, weil wir quasi zeitgleich gepostet haben. der code dürfte ja nicht so lang sein, magst du ihn irgendwo pasten?

    ich erwarte ganz einfach, dass du dich sinnvoll zum spielinhalt äußerst, solange das nicht passiert bleibt mein vote auf dir, so einfach ist das. da bis jetzt keiner drauf einsteigt dürfte es dir ja auch nicht besonders weh tun. wenn du dann aktiv bist, schauen wir weiter. 🙂



  • Ok, die Simulation: ist nicht sehr hübsch, wie gesagt nur runtergetippt. Zeile 73 einkommentieren, wenn man den Rächer simulieren will.

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cstdlib>
    #include <numeric>
    #include <ctime>
    
    const unsigned player_count = 10;
    const unsigned scum_count = 2;
    
    struct setup
    {
    	unsigned townies_alive;
    	unsigned scum_alive;
    
    	setup() : townies_alive(player_count - scum_count), scum_alive(scum_count) {}
    
    	unsigned players_alive()
    	{
    		return townies_alive + scum_alive;
    	}
    };
    
    bool town_wins(const setup& s)
    {
    	return s.scum_alive == 0;
    }
    
    bool scum_wins(const setup& s)
    {
    	return s.scum_alive >= s.townies_alive;
    }
    
    void do_murder(setup& s)
    {
    	// one townie is killed
    	if(s.townies_alive > 0)
    		--s.townies_alive;
    }
    
    void do_lynch(setup& s)
    {
    	std::vector<unsigned> votes(s.players_alive());
    
    	// scum votes exactly one townie
    	votes[0] += s.scum_alive;
    
    	for(unsigned i = 0; i < s.townies_alive; ++i)
    	{
    		unsigned vote;
    		while((vote = rand() % s.players_alive()) == i);
    
    		++votes[vote];
    	}
    
    	// find maximum
    	unsigned max_idx = std::max_element(votes.begin(), votes.end()) - votes.begin();
    
    	if(max_idx < s.townies_alive)
    		--s.townies_alive;
    	else
    		--s.scum_alive;
    }
    
    // returns true, when mafia has won
    bool game()
    {
    	setup s;
    	for(;;)
    	{
    		// simulate day and night
    		do_lynch(s);
    		//do_lynch(s);
    		if(town_wins(s))
    			return false;
    
    		do_murder(s);
    		if(scum_wins(s))
    			return true;
    	}
    }
    
    int main()
    {
    	const int games_count = 100000;
    
    	int scum_wins = 0;
    
    	std::srand(std::time(0));
    
    	for(int i = 0; i < games_count; ++i)
    	{
    		if(game())
    			++scum_wins;
    		if(i % 10000 == 0 && i > 0)
    			std::cout << i << '\n';
    	}
    
    	std::cout << static_cast<double>(scum_wins) / games_count * 100 << "% scum wins\n";
    }
    

    Die Mafioso setzen immer alle ihre Stimmen auf einen Bürger, die Bürger verteilen ihre zufällig außer auf sich.

    Fehler, die ich entdeckt habe:
    - wenn Mafioso und Bürger Gleichstand haben, wird immer der Bürger gelyncht
    - der Rächer wird auch aktiv, wenn ein Mafioso starb
    - der Rächer lebt bis zum Ende des Spiels

    Möglicherweise findet ihr auch noch Fehler. Allen Fehlern zum Trotz sinkt aber die Mafiasiegchance mit Rächer um wenige Prozentpunkt, das ist die wichtige Information.

    Viel schreiben kann ich heute aber nicht mehr, ich mache in einer halben Stunde schon wieder los und bin erst morgen wieder da.



  • Jester schrieb:

    du behauptest, dass jochens aussage, dass der geprüfte bürger bald stirbt glaskugellesen ist. das ist falsch, und die meisten hier wissen das auch. warum stellst du also die aussage in frage und tust auch noch so, als wolltest du jochen retten, der sich damit angeblich nur verdächtig macht?

    Trotzdem widerspreche ich dir, es ist Glaskugellesen. Soll ich jetzt dir über mathematische Weisheiten vorschwaffeln, dass man Aussagen von Mengen nicht auf Elemente übertragbar sind. Soll ich dir etwas über die Dynamik diesen Spiel erzählen, dass man seine Strategie nicht festsetzten soll. Auch wenn es so kommt, dass der enttarnte Bürger sofort von der Mafia kalt gemacht, dies ändert nix ein mein überzeugten Fehlwissen. Im letzten Spiel hat Jochen Sachverhalte zusammengereimt, die unvollständig und falsch schlussgefolgert waren. Auch ich hätte ihm damals gehängt - tja. Wie hoch ist die Wahrscheinlichkeit, dass die Mafia den enttarten Bürger hängen. Würdest du dein Kopf, darauf verwetten? Also, solch ein Irrtum verwirrt nur.

    Jester schrieb:

    warum willst du binggi unabhängig von seine fraktionszugehörigkeit prüfen?

    Ist eine Idee die ich hier reingeworfen habe. Hast du noch garnicht gemerkt, dass ich noch garnicht gevotet habe?



  • @ipsec: Kann es sein, dass in deiner Simulation die Bürger eventuell mit ihrer eigenen Stimme gelyncht werden?



  • Vergesst meinen letzten Post, ich hätte mal besser lesen sollen 🙄



  • /votecount

    3x Zeus - yahendrik, Jochen S., SideWinder
    1x yahendrik - alogheo
    1x ipsec - Jester
    1x Binggi - µ
    1x µ - Binggi

    6 Stimmen fuer eine Mehrheit noetig



  • @ipsec: in deinem Programm tötet der Rächer in jedem Fall einen Bürger. Und es ist klar, dass er den Bürgern nicht hilft, wenn er nur Bürger tötet.
    Angenommen wir verwenden das avengervote, dann müsste man für do_murder() die do_lynch()-funktion übernehmen, und leicht abändern (Anzahl Mitspieler+1 & Anzahl Bürger/Mafioso auf die Werte vor der Lynchung setzen, da auch der gelynchte Spieler vor seinem Tod sein avengervote abgeben kann).

    Das geänderte Programm (jetzt vlt. noch ein bisschen unschöner, aber naja...):

    #include <iostream> 
    #include <vector> 
    #include <algorithm> 
    #include <cstdlib> 
    #include <numeric> 
    #include <ctime> 
    
    const unsigned player_count = 10; 
    const unsigned scum_count = 2; 
    unsigned old_townies_alive;
    unsigned old_scums_alive;
    
    struct setup 
    { 
        unsigned townies_alive; 
        unsigned scum_alive; 
    
        setup() : townies_alive(player_count - scum_count), scum_alive(scum_count) {} 
    
        unsigned players_alive() 
        { 
            return townies_alive + scum_alive; 
        } 
    }; 
    
    bool town_wins(const setup& s) 
    { 
        return s.scum_alive == 0; 
    } 
    
    bool scum_wins(const setup& s) 
    { 
        return s.scum_alive >= s.townies_alive; 
    } 
    
    void do_murder(setup& s) 
    { 
        std::vector<unsigned> votes(s.players_alive()+1); 
    
        // scum votes exactly one townie 
        votes[0] += old_scums_alive; 
    
        for(unsigned i = 0; i < old_townies_alive; ++i) 
        { 
            unsigned vote; 
            while((vote = rand() % s.players_alive()+1) == i); 
    
            ++votes[vote]; 
        } 
    
        // find maximum 
        unsigned max_idx = std::max_element(votes.begin(), votes.end()) - votes.begin(); 
    
        if(max_idx < old_townies_alive) 
            --s.townies_alive; 
        else
            --s.scum_alive;
    } 
    
    void do_lynch(setup& s) 
    { 
        std::vector<unsigned> votes(s.players_alive()); 
    
        // scum votes exactly one townie 
        votes[0] += s.scum_alive; 
    
        for(unsigned i = 0; i < s.townies_alive; ++i) 
        { 
            unsigned vote; 
            while((vote = rand() % s.players_alive()) == i); 
    
            ++votes[vote]; 
        } 
    
        // find maximum 
        unsigned max_idx = std::max_element(votes.begin(), votes.end()) - votes.begin(); 
    
        old_townies_alive = s.townies_alive;
        old_scums_alive = s.scum_alive;
    
        if(max_idx < s.townies_alive) 
            --s.townies_alive;
        else
            --s.scum_alive;
    } 
    
    // returns true, when mafia has won 
    bool game() 
    { 
        setup s; 
        for(;;) 
        { 
            // simulate day and night 
            do_lynch(s); 
            //do_lynch(s); 
            if(town_wins(s)) 
                return false; 
            if(scum_wins(s)) 
                return true;
    
            do_murder(s);
            if(town_wins(s)) 
                return false; 
            if(scum_wins(s)) 
                return true; 
        } 
    } 
    
    int main() 
    { 
        const int games_count = 100000; 
    
        int scum_wins = 0; 
    
        std::srand(std::time(0)); 
    
        for(int i = 0; i < games_count; ++i) 
        { 
            if(game()) 
                ++scum_wins; 
            if(i % 10000 == 0 && i > 0) 
                std::cout << i << '\n'; 
        } 
    
        std::cout << static_cast<double>(scum_wins) / games_count * 100 << "% scum wins\n"; 
    }
    

    Ohne Doppellynchung: 85% - 86% Siegwahrscheinlichkeit für Mafia
    Mit Doppellynchung: 74% Siegwahrscheinlichkeit für Mafia

    Jochen S. schrieb:

    Ich verstehe nicht, warum die Mafia durch Doppellynchungen weniger leute töten könnte.

    Absolut gesehen, ändert sich da nichts. Aber relativ zu den Bürgern halbiert sich deren Anzahl an Morden.

    Also, neuer Versuch 🤡 :
    Man muss das so sehen: auf 2 Lynchungen kommt dann 1 Mord durch die Mafia. Das entspricht der Situation

    Tag 1 - Lynchung
    Nacht 1 - kein Mord
    Tag 2 - Lynchung
    Nacht 2 - Mord

    Und ihr könnt mir nicht erzählen, dass es einen Nachteil für die Bürger gibt, wenn die Mafia in einer Nacht keinen tötet.



  • Ne sry, alles unsinn hab murder als rächer angesehen



  • Ah prima, Nachmittag des Schwachsinns?
    Habe mir gerade zigfachen Mord an Zwiebeln vorhalten lassen müssen (bin mit dem Mäher drüber) und wahrscheinlich einen Totschlag an einem Mainboard begangen, genug für heute, mein vote wird noch warten müssen - morgen ganz sicher!



  • Zeus schrieb:

    Jester schrieb:

    warum willst du binggi unabhängig von seine fraktionszugehörigkeit prüfen?

    Ist eine Idee die ich hier reingeworfen habe. Hast du noch garnicht gemerkt, dass ich noch garnicht gevotet habe?

    das ist doch irrelevant, du hast einen vorschlag gemacht und ich habe nachgefragt was der hintergrund dazu ist. der vorschlag steht unabhängig von einem eventuellen vote in diesem thread drin, also erklär ihn mir bitte.

    @simulation: die modellierung des lynchens ist äußerst fragwürdig. die mafia arbeitet komplett fokussiert und der rest wählt komplett zufällig und die mafia muss überstimmt werden.

    bevor ihr weiterlest, schätzt mal, ganz subjektiv, was ist die ungefähre chance dass wir beim lynchen einen mafioso erwischen in Prozent.

    Beit? Los gehts!
    So, wir haben 7 zufällige stimmen, um den mafioso x zu erwischen braucht x im programm mindestens 3 stimmen. jede der 7 stimmen hat eine treffer-WK von 1/8 und eine daneben-WK von 7/8 (schließlich wählt sich keiner selbst). Das heißt, die Anzahl der Treffer k ist Binomialverteilt, mit Treffer-WK 1/8 und n=7 versuchen. Das heißt, die Wahrscheinlichkeit von genau k treffern ist (n über k) (1/8)^k (7/8)^(n-k).

    So, was ist die WK, dass x garkeine stimme bekommt?
    einsetzen liefert: (7/8)^7 = 0,3927

    genau eine stimme? 7* 1/8 * (7/8)^6 = 0,3927 (gleiches wie oben)

    genau zwei stimmen? 21 * (1/8)^2 * (7/8)^5 = 0,1683.

    Die WK, dass Mafioso x also höchstens zwei stimmen kriegt ist demnach 2*0,3927 + 0,1683 = 0,9537

    Also ist die WK, dass Mafioso x gelyncht wird (d.h. mind. 3 stimmen bekommt) 0,0463 also ca.4,6%. Da es zwei Mafiosi sind, können wir die WK einen der beiden zu erwischen großzügig nach oben abschätzen durch 9,2% (das ist eine obere schranke, bessernist die chance im programm sicher nicht!).

    So, jetzt Hände hoch, wer hat ungefähr das getippt? Wer hält das für eine realistische, gute Modellierung? Ich jedenfalls nicht. Wer das für toll hält, sollte offensichtlich dafür sein, dass wir leute auswürfeln, weil das die chancen drastisch erhöht.

    Wenn in der ersten Runde kein Mafioso erwischt wird, sinken die Chancen danach noch stärker ab, weil weniger stimmen im spiel sind und trotzdem einer der mafiosi noch drei stimmen braucht. die späteren runden sind also quasi zu vernachlässigen. dadurch erklärt sich auch der positive einfluss des rächers, weil nämlich zweimal bei "bester chance" gelyncht wird.

    zusammenfassend kann man sagen: die simulation ist völlig ungenügend.

    warum tischt uns ipsec sowas auf? mein vote bleibt, und so langsam erwarte ich ein paar erklärungen.

    @all: aufwachen! so kriegen wir garnichts hin, nicht mit und nicht ohne doppellynchung. mehr einsatz, mehr fahndung und weniger metagame sind der schlüssel.



  • Jester schrieb:

    warum tischt uns ipsec sowas auf? mein vote bleibt, und so langsam erwarte ich ein paar erklärungen.

    Ich erwähnte bereits mehrfach, dass eine Simulation nur nach Zufall nicht mit einem realen Spiel vergleichbar ist und die reale Gewinnwahrscheinlichkeit für die Mafia deutlich geringer ist, als die Simulation angibt (unabhängig dessen, dass die Simulation sowieso Fehler enthält und besagte Wahrscheinlichkeit zu hoch angibt). Die einzige Tatsache, die ich mit der Simulation zeigen wollte, ist, dass rein theoretisch die Gewinnwahrscheinlichkeit der Bürger leicht erhöht wird, wenn der Rächer jeden Tag (wenn möglich) aktiv wird und die Person, die er attakieren soll, vorher durch Mehrheitsentscheid bestimmt wurde. Ich habe pointercrash() gesagt, dass ich darüber nachdenken werde, das habe ich getan, zur Hilfe habe ich eine Simulation geschrieben und das ist mein Ergebnis. Mehr nicht. Niemand glaubt wirklich, dass die Mafia dieses Spiel zu 96% gewinnt.
    Ich stellte weiterhin in den Raum, ob sich die wenigen theoretischen Prozente (die sich im realen Spiel aber möglicherweise etwas höher auswirken) angesichts der Nachteile, die ein solcher Rächereinsatz mit sich bringt, lohnen und bin zu dem Schluss gekommen, dass das zumindest am Anfang nicht der Fall ist.

    Das alles habe ich aber schon (teils mehrfach) erwähnt. Umso mehr erstaunt mich deine offensichtliche Abneigung gegen mich, für deren Begründung du mir die Worte im Munde rumdrehst und damit grundlos Verdacht zu schüren versuchst. Hast du dafür eine Erklärung?



  • du versuchst ergebnisse, die du mit dieser simulation gewonnen hast auf das echte spiel zu übertragen. das ist doch völliger humbug, aus diesem müll kan man genau garnix ableiten, wer das trotzdem behauotet macht sich verdächtig.

    wenn du das alles weißt, warum verwendest du dann deine zeit drauf und gehst nicht auf das eigentliche spiel ein? warum reagierst du nicht? ich lasse es nichtnzu, dass du meinen vote einfach aussitzt, weil wenn das einreißt einfach keiner mehr was sagen muß und wir dann wirklich nurnnoch zufällig wählen können.

    und vielleicht wacht ja im laufe das tages noch der ein oder andere auf, und beschließt den druck zu erhöhen, wenn du es anders nicht verstehst.


Anmelden zum Antworten