Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
139c7b6
Add SchwobaSenGnitz strategy implementation
Gerowasch Oct 3, 2026
d437d69
Add SchwobaSenGnitz strategy to imports
Gerowasch Oct 3, 2026
73e043f
Fix import statements for relative paths
Gerowasch Oct 3, 2026
bc3c259
Update schwoba_sen_gnitz.py
Gerowasch Oct 5, 2026
9b1aa19
Update schwoba_sen_gnitz.py
Gerowasch Oct 5, 2026
6b80e0c
Update schwoba_sen_gnitz.py
Gerowasch Oct 5, 2026
9892aa1
Update schwoba_sen_gnitz.py
Gerowasch Oct 5, 2026
cb2135d
Create turniertest.py
Gerowasch Oct 5, 2026
d3b6d4e
Create turniertest.yml
Gerowasch Oct 5, 2026
7528449
Update turniertest.yml
Gerowasch Oct 5, 2026
2c9dd2c
Create tuniertestvoll.py
Gerowasch Oct 5, 2026
9858a9f
Create turniertestvoll.yml
Gerowasch Oct 5, 2026
29b48da
Update turniertestvoll.yml
Gerowasch Oct 5, 2026
c3c96b6
Update tuniertestvoll.py
Gerowasch Oct 5, 2026
40d9d6f
Update turniertest.yml
Gerowasch Oct 5, 2026
dca54fa
Update turniertest.py
Gerowasch Oct 5, 2026
29b59fb
Update turniertestvoll.yml
Gerowasch Oct 5, 2026
5c2b8bc
Update tuniertestvoll.py
Gerowasch Oct 5, 2026
c35e699
Update tuniertestvoll.py
Gerowasch Oct 5, 2026
e767b17
Update turniertestvoll.yml
Gerowasch Oct 5, 2026
be37c5f
Rename tuniertestvoll.py to turniertestvoll.py
Gerowasch Oct 5, 2026
fc4a98d
Update turniertestvoll.yml
Gerowasch Oct 5, 2026
d10119d
Update turniertestvoll.py
Gerowasch Oct 5, 2026
d2cf8fd
Create test_schwobasengnitz.py
Gerowasch Nov 6, 2026
aa7c532
Update test_schwobasengnitz.py
Gerowasch Nov 6, 2026
afff8d1
Update and rename test_schwobasengnitz.py to test_schwoba_sen_gnitz.py
Gerowasch Nov 6, 2026
6f945ee
Update test_schwoba_sen_gnitz.py
Gerowasch Nov 6, 2026
8039745
Update schwoba_sen_gnitz.py
Gerowasch Nov 6, 2026
ade8e2c
Update schwoba_sen_gnitz.py
Gerowasch Nov 6, 2026
e25f7dd
Update test_schwoba_sen_gnitz.py
Gerowasch Nov 6, 2026
fd87512
Update test_schwoba_sen_gnitz.py
Gerowasch Nov 7, 2026
80f568b
Delete .github/workflows/turniertest.yml
Gerowasch Nov 7, 2026
da2bcd7
Delete .github/workflows/turniertestvoll.yml
Gerowasch Nov 7, 2026
eebf13e
Delete turniertest.py
Gerowasch Nov 7, 2026
91cb7f5
Delete turniertestvoll.py
Gerowasch Nov 7, 2026
f4790ea
Update schwoba_sen_gnitz.py
Gerowasch Nov 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions axelrod/strategies/_strategies.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@
ZDMischief,
ZDSet2,
)
from .schwoba_sen_gnitz import SchwobaSenGnitz

# Note: Meta* strategies are handled in .__init__.py

Expand Down Expand Up @@ -438,6 +439,7 @@
RevisedDowning,
Ripoff,
RiskyQLearner,
SchwobaSenGnitz,
SecondByAppold,
SecondByBlack,
SecondByBorufsen,
Expand Down
62 changes: 62 additions & 0 deletions axelrod/strategies/schwoba_sen_gnitz.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import random
from typing import List, Dict, Any
from axelrod.action import Action
from axelrod.player import Player


class SchwobaSenGnitz(Player):
"""Schwoba sen gnitz."""

name: str = "schwoba sen gnitz"
authors: List[str] = ["Georg 'HackyHackberger' Schmidt"]
classifier: Dict[str, Any] = {
"memory_depth": float("inf"),
"stochastic": True,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_state": False,
"manipulates_history": False,
"uses_length": False,
"uses_game": False,
"uses_tournament": False,
"uses_clones": False,
}

def __init__(self) -> None:
super().__init__()
self.raubtier_erwacht = False
self.schutz_modus_aktiviert = False

def strategy(self, opponent: Player) -> Action:
runde = len(self.history)
if runde == 0:
return Action.C

if not opponent.history:
return Action.C

if not self.raubtier_erwacht and opponent.history[-1] == Action.D:
self.raubtier_erwacht = True

if not self.raubtier_erwacht:
return Action.C

if runde >= 10 and len(opponent.history) >= 10:
letzte_10_gegner = opponent.history[-10:]
if all(zug == Action.D for zug in letzte_10_gegner):
self.schutz_modus_aktiviert = True

if self.schutz_modus_aktiviert:
return Action.D

if opponent.history[-1] == Action.D:
if random.random() < 0.897:
return Action.C
else:
return Action.D

if random.random() < 0.102:
return Action.D

return Action.C
25 changes: 25 additions & 0 deletions axelrod/tests/unit/test_schwoba_sen_gnitz.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import axelrod as axl
from axelrod.action import Action
from axelrod.strategies.schwoba_sen_gnitz import SchwobaSenGnitz


class TestSchwoba_Sen_Gnitz(axl.TestPlayer):
name = "schwoba sen gnitz"
player = SchwobaSenGnitz

def test_strategy_initial_cooperation(self):
self.versus_test(
axl.Cooperator, expected_actions=[(Action.C, Action.C)] * 5
)

def test_schutz_modus(self):
player = self.player()
opponent = axl.Defector()

for _ in range(10):
player.play(opponent)

self.assertEqual(player.strategy(opponent), Action.D)

player.play(opponent)
self.assertEqual(player.strategy(opponent), Action.D)
Loading