Inhalt
Aktueller Ordner:
/.ipynb (pretty JSON)
{
"metadata": {
"language_info": {
"codemirror_mode": {
"name": "python",
"version": 3
},
"file_extension": ".py",
"mimetype": "text\/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8"
},
"kernelspec": {
"name": "python",
"display_name": "Python (Pyodide)",
"language": "python"
}
},
"nbformat_minor": 4,
"nbformat": 4,
"cells": [
{
"cell_type": "markdown",
"source": "Ein mΓΆgliches Multiagentensystem, das die Grammatik mit zwei wechselseitig handelnden Softwareagenten Agent-K fΓΌr \"KΓ€ufer\" und Agent-V fΓΌr \"VerkΓ€ufer\" nutzt, kΓΆnnte folgendermaΓen implementiert werden:",
"metadata": []
},
{
"cell_type": "code",
"source": "import random\n\n# Definition der Grammatikregeln\nw3 = {\n \"anfang\": [(100, [\"s\", \"vkg\"])],\n (\"s\", \"vkg\"): [(100, \"ende\")]\n}\n\nbbd = {(\"kbbd\",): [(100, \"vbbd\")]}\n\nba = {(\"kba\",): [(100, \"vba\")]}\n\nae = {(\"kae\",): [(100, \"vae\")]}\n\naa = {(\"kaa\",): [(100, \"vaa\")]}\n\nb = {(\"s\", \"bbd\"): [(100, (\"s\", \"ba\"))]}\n\na = {(\"s\", \"ae\"): [(50, (\"s\", \"ae\")), (100, (\"s\", \"aa\"))]}\n\nvt = {(\"s\", \"b\"): [(50, (\"s\", \"b\")), (100, (\"s\", \"a\"))]}\n\nbg = {(\"kbg\",): [(100, \"vbg\")]}\n\nav = {(\"kav\",): [(100, \"vav\")]}\n\nvkg = {(\"s\", \"bg\"): [(100, (\"s\", \"vt\"))],\n (\"s\", \"vt\"): [(50, (\"s\", \"vt\")), (100, (\"s\", \"av\"))]}\n\n# Definition der Agentenklasse\nclass Agent:\n def __init__(self, name, grammar, starting_rule):\n self.name = name\n self.grammar = grammar\n self.rule_probs = self.compute_rule_probs()\n self.current_rule = starting_rule\n \n def compute_rule_probs(self):\n rule_probs = {}\n for rule in self.grammar:\n rule_probs[rule] = [x[0] for x in self.grammar[rule]]\n total_prob = sum(rule_probs[rule])\n rule_probs[rule] = [x \/ total_prob for x in rule_probs[rule]]\n return rule_probs\n \n def update_rule(self, input_symbol):\n possible_rules = [x for x in self.rule_probs if input_symbol in x]\n if not possible_rules:\n return\n self.current_rule = random.choices(possible_rules, weights=self.rule_probs[possible_rules[0]])[0]\n \n def generate_output(self):\n output = []\n for symbol in self.current_rule:\n if isinstance(symbol, tuple):\n output.extend(Agent(symbol[0], globals()[symbol[0]], symbol))\n else:\n output.append(symbol)\n return output\n \n# Definition des Multiagentensystems\nclass MultiAgentSystem:\n def __init__(self, agent_k, agent_v):\n self.agents = {\"K\": agent_k, \"V\": agent_v}\n \n def communicate(self, input_sequence):\n agent_k_output = self.agents[\"K\"].generate_output()\n agent_v_output = self.agents[\"V\"].generate_output()\n \n current_agent = self.agents[\"K\"]\n output_sequence = []\n \n for symbol in input_sequence:\n current_agent.update_rule(symbol)\n output_sequence.extend(current_agent.generate_output())\n if current_agent == self.agents[\"K\"]:\n current_agent = self.agents[\"V\"]\n else:\n current_agent = self.agents[\"K\"]\n \n return output_sequence\n\n# Beispielanwendung\nagent_k = Agent(\"s\", globals()[\"s\"], (\"s\", \"vkg\"))\nagent_v = Agent(\"s\", globals()[\"s\"], (\"s\", \"vkg\"))\n\nmas = MultiAgentSystem(agent_k, agent_v)\n\ninput_sequence\n",
"metadata": [],
"execution_count": null,
"outputs": []
}
]
}