Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -2065,13 +2065,34 @@
"cell_type": "markdown",
"id": "2277837f",
"metadata": {},
"source": "**Lien avec la formalisation Lean**\n\nL'equilibre de sous-jeux parfaits (SPE) raffine le concept d'equilibre de Nash en imposant la rationalite dans chaque sous-jeu. La structure `GameTree` et l'algorithme de minimax dans [`lean_game_defs/Combinatorial.lean`](lean_game_defs/Combinatorial.lean) formalisent l'induction a rebours pour les jeux a information parfaite -- le cas particulier zero-somme du backward induction que SPE generalise. Les concepts de forward induction et de perfection en main tremblante restent a formaliser."
"source": [
"**Lien avec la formalisation Lean**\n",
"\n",
"L'equilibre de sous-jeux parfaits (SPE) raffine le concept d'equilibre de Nash en imposant la rationalite dans chaque sous-jeu. La structure `GameTree` et l'algorithme de minimax dans [`lean_game_defs/Combinatorial.lean`](lean_game_defs/Combinatorial.lean) formalisent l'induction a rebours pour les jeux a information parfaite -- le cas particulier zero-somme du backward induction que SPE generalise. Les concepts de forward induction et de perfection en main tremblante restent a formaliser."
]
},
{
"cell_type": "markdown",
"id": "cfa25ede",
"metadata": {},
"source": "## Resume et perspectives\n\nCe notebook a constitue une étude approfondie des raffinements d'equilibre pour les jeux sous forme extensive, en progressant dans une hiérarchie de pouvoir discriminant croissant. L'equilibre parfait de sous-jeux (SPE) a elimine les menaces non credibles en exigeant un Nash dans chaque sous-jeu, comme l'a illustre le jeu d'entree ou la menace de combat n'est pas soutenable. La perfection en mains tremblantes a renforce cette sélection en eliminant les equilibres reposant sur des stratégies faiblement dominees, ne conservant que les profils robustes aux petites erreurs. L'induction avant a introduit un raisonnement d'une nature différente : plutot que de partir de la fin du jeu, elle exploite les actions observees en debut de partie pour inferer les intentions des joueurs, selectionnant ainsi l'equilibre efficient dans la Chasse au Cerf avec option exterieure.\n\nLe jeu du \"Burn Money\" a synthetise ces concepts de maniere frappante : la simple possibilite de bruler de l'argent modifie l'equilibre même si personne ne brule effectivement, un phenomene qui rappelle que les options non utilisees peuvent etre aussi informatives que les actions realisees. La hiérarchie des raffinements -- Nash, SPE, trembling-hand, forward induction -- forme un outil d'analyse progressif dont le choix depend du contexte et de la richesse informationnelle du jeu etudie.\n\nL'étape suivante introduit les jeux bayesiens et l'information incomplete, ou les joueurs ne connaissent pas les types de leurs adversaires : [GameTheory-11-BayesianGames](GameTheory-11-BayesianGames.ipynb).\n\n\n\n### References academiques\n\n- Selten, R. (1965). Spieltheoretische Behandlung eines Oligopolmodells mit Nachfragetragheit. Jahrbucher fur Nationalokonomie und Statistik 183:301-324.\n- Selten, R. (1975). Reexamination of the Perfectness Concept for Equilibrium Points in Extensive Games. International Journal of Game Theory 4(1):25-55.\n- Kohlberg, E. & Mertens, J.-F. (1986). On the Strategic Stability of Equilibria. Journal of Economic Theory 41(2):353-379.\n\n"
"source": [
"## Resume et perspectives\n",
"\n",
"Ce notebook a constitue une étude approfondie des raffinements d'equilibre pour les jeux sous forme extensive, en progressant dans une hiérarchie de pouvoir discriminant croissant. L'equilibre parfait de sous-jeux (SPE) a elimine les menaces non credibles en exigeant un Nash dans chaque sous-jeu, comme l'a illustre le jeu d'entree ou la menace de combat n'est pas soutenable. La perfection en mains tremblantes a renforce cette sélection en eliminant les equilibres reposant sur des stratégies faiblement dominees, ne conservant que les profils robustes aux petites erreurs. L'induction avant a introduit un raisonnement d'une nature différente : plutot que de partir de la fin du jeu, elle exploite les actions observees en debut de partie pour inferer les intentions des joueurs, selectionnant ainsi l'equilibre efficient dans la Chasse au Cerf avec option exterieure.\n",
"\n",
"Le jeu du \"Burn Money\" a synthetise ces concepts de maniere frappante : la simple possibilite de bruler de l'argent modifie l'equilibre même si personne ne brule effectivement, un phenomene qui rappelle que les options non utilisees peuvent etre aussi informatives que les actions realisees. La hiérarchie des raffinements -- Nash, SPE, trembling-hand, forward induction -- forme un outil d'analyse progressif dont le choix depend du contexte et de la richesse informationnelle du jeu etudie.\n",
"\n",
"L'étape suivante introduit les jeux bayesiens et l'information incomplete, ou les joueurs ne connaissent pas les types de leurs adversaires : [GameTheory-11-BayesianGames](GameTheory-11-BayesianGames.ipynb).\n",
"\n",
"\n",
"\n",
"### References academiques\n",
"\n",
"- Selten, R. (1965). Spieltheoretische Behandlung eines Oligopolmodells mit Nachfragetragheit. Jahrbucher fur Nationalokonomie und Statistik 183:301-324.\n",
"- Selten, R. (1975). Reexamination of the Perfectness Concept for Equilibrium Points in Extensive Games. International Journal of Game Theory 4(1):25-55.\n",
"- Kohlberg, E. & Mertens, J.-F. (1986). On the Strategic Stability of Equilibria. Journal of Economic Theory 41(2):353-379.\n",
"\n"
]
}
],
"metadata": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,80 @@
}
},
"outputs": [],
"source": "import json\nimport sys\nimport os\nfrom io import StringIO\nimport traceback\n\ncwd = os.getcwd()\nfiles = sorted(os.listdir('.'))\nprint(f'Working directory: {cwd}')\nprint(f'Files: {files}')\n\nnotebooks = [\n 'research_asset_class_momentum.ipynb',\n 'research_volatility_regime_ml.ipynb',\n 'research_defensive_etf_rotation.ipynb',\n 'research_commodity_term_structure.ipynb',\n 'research_piotroski_fscore.ipynb',\n 'research_long_short_harvest.ipynb',\n 'research_macro_factor_rotation.ipynb',\n 'research_puppies_of_dow.ipynb',\n]\n\nfor nb_name in notebooks:\n print(f'\\n{\"=\" * 60}')\n print(f'Processing: {nb_name}')\n try:\n with open(nb_name, 'r') as f:\n nb = json.load(f)\n except FileNotFoundError:\n print(f'SKIP: {nb_name} not found')\n continue\n exec_count = 0\n success = 0\n errors = 0\n for cell in nb['cells']:\n if cell['cell_type'] != 'code':\n continue\n exec_count += 1\n code = ''.join(cell['source'])\n old_stdout, old_stderr = sys.stdout, sys.stderr\n sys.stdout, sys.stderr = StringIO(), StringIO()\n try:\n exec(code, globals())\n cell['execution_count'] = exec_count\n out = sys.stdout.getvalue()\n err = sys.stderr.getvalue()\n outputs = []\n if out:\n lines = out.splitlines(True)\n if lines and not lines[-1].endswith('\\n'):\n lines[-1] += '\\n'\n outputs.append({'output_type': 'stream', 'name': 'stdout', 'text': lines})\n if err:\n outputs.append({'output_type': 'stream', 'name': 'stderr', 'text': err.splitlines(True)})\n cell['outputs'] = outputs\n success += 1\n except Exception as e:\n cell['execution_count'] = exec_count\n cell['outputs'] = [{\n 'output_type': 'error',\n 'ename': type(e).__name__,\n 'evalue': str(e),\n 'traceback': [traceback.format_exc()]\n }]\n errors += 1\n finally:\n sys.stdout, sys.stderr = old_stdout, old_stderr\n out_name = nb_name.replace('.ipynb', '_executed.ipynb')\n with open(out_name, 'w') as f:\n json.dump(nb, f, indent=1)\n print(f' {success} OK, {errors} ERR -> {out_name}')\nprint('\\n\\nALL DONE')"
"source": [
"import json\n",
"import sys\n",
"import os\n",
"from io import StringIO\n",
"import traceback\n",
"\n",
"cwd = os.getcwd()\n",
"files = sorted(os.listdir('.'))\n",
"print(f'Working directory: {cwd}')\n",
"print(f'Files: {files}')\n",
"\n",
"notebooks = [\n",
" 'research_asset_class_momentum.ipynb',\n",
" 'research_volatility_regime_ml.ipynb',\n",
" 'research_defensive_etf_rotation.ipynb',\n",
" 'research_commodity_term_structure.ipynb',\n",
" 'research_piotroski_fscore.ipynb',\n",
" 'research_long_short_harvest.ipynb',\n",
" 'research_macro_factor_rotation.ipynb',\n",
" 'research_puppies_of_dow.ipynb',\n",
"]\n",
"\n",
"for nb_name in notebooks:\n",
" print(f'\\n{\"=\" * 60}')\n",
" print(f'Processing: {nb_name}')\n",
" try:\n",
" with open(nb_name, 'r') as f:\n",
" nb = json.load(f)\n",
" except FileNotFoundError:\n",
" print(f'SKIP: {nb_name} not found')\n",
" continue\n",
" exec_count = 0\n",
" success = 0\n",
" errors = 0\n",
" for cell in nb['cells']:\n",
" if cell['cell_type'] != 'code':\n",
" continue\n",
" exec_count += 1\n",
" code = ''.join(cell['source'])\n",
" old_stdout, old_stderr = sys.stdout, sys.stderr\n",
" sys.stdout, sys.stderr = StringIO(), StringIO()\n",
" try:\n",
" exec(code, globals())\n",
" cell['execution_count'] = exec_count\n",
" out = sys.stdout.getvalue()\n",
" err = sys.stderr.getvalue()\n",
" outputs = []\n",
" if out:\n",
" lines = out.splitlines(True)\n",
" if lines and not lines[-1].endswith('\\n'):\n",
" lines[-1] += '\\n'\n",
" outputs.append({'output_type': 'stream', 'name': 'stdout', 'text': lines})\n",
" if err:\n",
" outputs.append({'output_type': 'stream', 'name': 'stderr', 'text': err.splitlines(True)})\n",
" cell['outputs'] = outputs\n",
" success += 1\n",
" except Exception as e:\n",
" cell['execution_count'] = exec_count\n",
" cell['outputs'] = [{\n",
" 'output_type': 'error',\n",
" 'ename': type(e).__name__,\n",
" 'evalue': str(e),\n",
" 'traceback': [traceback.format_exc()]\n",
" }]\n",
" errors += 1\n",
" finally:\n",
" sys.stdout, sys.stderr = old_stdout, old_stderr\n",
" out_name = nb_name.replace('.ipynb', '_executed.ipynb')\n",
" with open(out_name, 'w') as f:\n",
" json.dump(nb, f, indent=1)\n",
" print(f' {success} OK, {errors} ERR -> {out_name}')\n",
"print('\\n\\nALL DONE')"
]
}
],
"metadata": {
Expand Down
Loading
Loading