|
38 | 38 | }, |
39 | 39 | { |
40 | 40 | "cell_type": "code", |
41 | | - "execution_count": 1, |
| 41 | + "execution_count": null, |
42 | 42 | "id": "c58d382d", |
43 | 43 | "metadata": {}, |
44 | 44 | "outputs": [], |
|
50 | 50 | }, |
51 | 51 | { |
52 | 52 | "cell_type": "code", |
53 | | - "execution_count": 2, |
| 53 | + "execution_count": null, |
54 | 54 | "id": "2060c1ed", |
55 | 55 | "metadata": {}, |
56 | | - "outputs": [ |
57 | | - { |
58 | | - "data": { |
59 | | - "text/plain": [ |
60 | | - "pygambit.gambit.Game" |
61 | | - ] |
62 | | - }, |
63 | | - "execution_count": 2, |
64 | | - "metadata": {}, |
65 | | - "output_type": "execute_result" |
66 | | - } |
67 | | - ], |
| 56 | + "outputs": [], |
68 | 57 | "source": [ |
69 | 58 | "n_strategies = [2, 2]\n", |
70 | 59 | "g = gbt.Game.new_table(n_strategies, title=\"Prisoner's Dilemma\")\n", |
|
83 | 72 | }, |
84 | 73 | { |
85 | 74 | "cell_type": "code", |
86 | | - "execution_count": 3, |
| 75 | + "execution_count": null, |
87 | 76 | "id": "9d8203e8", |
88 | 77 | "metadata": {}, |
89 | 78 | "outputs": [], |
|
111 | 100 | }, |
112 | 101 | { |
113 | 102 | "cell_type": "code", |
114 | | - "execution_count": 4, |
| 103 | + "execution_count": null, |
115 | 104 | "id": "61030607", |
116 | 105 | "metadata": {}, |
117 | 106 | "outputs": [], |
|
135 | 124 | }, |
136 | 125 | { |
137 | 126 | "cell_type": "code", |
138 | | - "execution_count": 5, |
| 127 | + "execution_count": null, |
139 | 128 | "id": "caecc334", |
140 | 129 | "metadata": {}, |
141 | | - "outputs": [ |
142 | | - { |
143 | | - "data": { |
144 | | - "text/html": [ |
145 | | - "<center><h1>Prisoner's Dilemma</h1></center>\n", |
146 | | - "<table><tr><td></td><td align=center><b>Cooperate</b></td><td align=center><b>Defect</b></td></tr><tr><td align=center><b>Cooperate</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>Defect</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table><table><tr><td></td><td align=center><b>Cooperate</b></td><td align=center><b>Defect</b></td></tr><tr><td align=center><b>Cooperate</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>Defect</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table><table><tr><td></td><td align=center><b>Cooperate</b></td><td align=center><b>Defect</b></td></tr><tr><td align=center><b>Cooperate</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>Defect</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table><table><tr><td></td><td align=center><b>Cooperate</b></td><td align=center><b>Defect</b></td></tr><tr><td align=center><b>Cooperate</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>Defect</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table>\n" |
147 | | - ], |
148 | | - "text/plain": [ |
149 | | - "Game(title='Prisoner's Dilemma')" |
150 | | - ] |
151 | | - }, |
152 | | - "execution_count": 5, |
153 | | - "metadata": {}, |
154 | | - "output_type": "execute_result" |
155 | | - } |
156 | | - ], |
| 130 | + "outputs": [], |
157 | 131 | "source": [ |
158 | 132 | "# View the payout matrix\n", |
159 | 133 | "g" |
|
189 | 163 | }, |
190 | 164 | { |
191 | 165 | "cell_type": "code", |
192 | | - "execution_count": 6, |
| 166 | + "execution_count": null, |
193 | 167 | "id": "843ba7f3", |
194 | 168 | "metadata": {}, |
195 | | - "outputs": [ |
196 | | - { |
197 | | - "data": { |
198 | | - "text/html": [ |
199 | | - "<center><h1>Another Prisoner's Dilemma</h1></center>\n", |
200 | | - "<table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>2</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table><table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>2</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table><table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>2</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table><table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>-1,-1</td><td align=center>-3,0</td></tr><tr><td align=center><b>2</b></td><td align=center>0,-3</td><td align=center>-2,-2</td></tr></table>\n" |
201 | | - ], |
202 | | - "text/plain": [ |
203 | | - "Game(title='Another Prisoner's Dilemma')" |
204 | | - ] |
205 | | - }, |
206 | | - "execution_count": 6, |
207 | | - "metadata": {}, |
208 | | - "output_type": "execute_result" |
209 | | - } |
210 | | - ], |
| 169 | + "outputs": [], |
211 | 170 | "source": [ |
212 | 171 | "player1_payoffs = np.array([[-1, -3], [0, -2]])\n", |
213 | 172 | "player2_payoffs = np.transpose(player1_payoffs)\n", |
|
233 | 192 | }, |
234 | 193 | { |
235 | 194 | "cell_type": "code", |
236 | | - "execution_count": 7, |
| 195 | + "execution_count": null, |
237 | 196 | "id": "5ee752c4", |
238 | 197 | "metadata": {}, |
239 | | - "outputs": [ |
240 | | - { |
241 | | - "name": "stdout", |
242 | | - "output_type": "stream", |
243 | | - "text": [ |
244 | | - "-1\n", |
245 | | - "<class 'pygambit.gambit.Rational'>\n" |
246 | | - ] |
247 | | - } |
248 | | - ], |
| 198 | + "outputs": [], |
249 | 199 | "source": [ |
250 | 200 | "tom_payoffs, jerry_payoffs = g.to_arrays(\n", |
251 | 201 | " # dtype=float\n", |
|
270 | 220 | }, |
271 | 221 | { |
272 | 222 | "cell_type": "code", |
273 | | - "execution_count": 8, |
| 223 | + "execution_count": null, |
274 | 224 | "id": "a81c06c7", |
275 | 225 | "metadata": {}, |
276 | | - "outputs": [ |
277 | | - { |
278 | | - "data": { |
279 | | - "text/plain": [ |
280 | | - "pygambit.nash.NashComputationResult" |
281 | | - ] |
282 | | - }, |
283 | | - "execution_count": 8, |
284 | | - "metadata": {}, |
285 | | - "output_type": "execute_result" |
286 | | - } |
287 | | - ], |
| 226 | + "outputs": [], |
288 | 227 | "source": [ |
289 | 228 | "result = gbt.nash.enumpure_solve(g)\n", |
290 | 229 | "type(result)" |
|
300 | 239 | }, |
301 | 240 | { |
302 | 241 | "cell_type": "code", |
303 | | - "execution_count": 9, |
| 242 | + "execution_count": null, |
304 | 243 | "id": "bd395180", |
305 | 244 | "metadata": {}, |
306 | | - "outputs": [ |
307 | | - { |
308 | | - "data": { |
309 | | - "text/plain": [ |
310 | | - "1" |
311 | | - ] |
312 | | - }, |
313 | | - "execution_count": 9, |
314 | | - "metadata": {}, |
315 | | - "output_type": "execute_result" |
316 | | - } |
317 | | - ], |
| 245 | + "outputs": [], |
318 | 246 | "source": [ |
319 | 247 | "len(result.equilibria)" |
320 | 248 | ] |
|
329 | 257 | }, |
330 | 258 | { |
331 | 259 | "cell_type": "code", |
332 | | - "execution_count": 10, |
| 260 | + "execution_count": null, |
333 | 261 | "id": "76570ebc", |
334 | 262 | "metadata": {}, |
335 | | - "outputs": [ |
336 | | - { |
337 | | - "data": { |
338 | | - "text/latex": [ |
339 | | - "$\\left[\\left[0,1\\right],\\left[0,1\\right]\\right]$" |
340 | | - ], |
341 | | - "text/plain": [ |
342 | | - "[[Rational(0, 1), Rational(1, 1)], [Rational(0, 1), Rational(1, 1)]]" |
343 | | - ] |
344 | | - }, |
345 | | - "execution_count": 10, |
346 | | - "metadata": {}, |
347 | | - "output_type": "execute_result" |
348 | | - } |
349 | | - ], |
| 263 | + "outputs": [], |
350 | 264 | "source": [ |
351 | 265 | "msp = result.equilibria[0]\n", |
352 | 266 | "msp" |
353 | 267 | ] |
354 | 268 | }, |
355 | 269 | { |
356 | 270 | "cell_type": "code", |
357 | | - "execution_count": 11, |
| 271 | + "execution_count": null, |
358 | 272 | "id": "6e8cfcde", |
359 | 273 | "metadata": {}, |
360 | | - "outputs": [ |
361 | | - { |
362 | | - "data": { |
363 | | - "text/plain": [ |
364 | | - "pygambit.gambit.MixedStrategyProfileRational" |
365 | | - ] |
366 | | - }, |
367 | | - "execution_count": 11, |
368 | | - "metadata": {}, |
369 | | - "output_type": "execute_result" |
370 | | - } |
371 | | - ], |
| 274 | + "outputs": [], |
372 | 275 | "source": [ |
373 | 276 | "type(msp)" |
374 | 277 | ] |
|
385 | 288 | }, |
386 | 289 | { |
387 | 290 | "cell_type": "code", |
388 | | - "execution_count": 12, |
| 291 | + "execution_count": null, |
389 | 292 | "id": "980bf6b1", |
390 | 293 | "metadata": {}, |
391 | | - "outputs": [ |
392 | | - { |
393 | | - "name": "stdout", |
394 | | - "output_type": "stream", |
395 | | - "text": [ |
396 | | - "Tom plays the equilibrium strategy:\n", |
397 | | - "Probability of cooperating: 0\n", |
398 | | - "Probability of defecting: 1\n", |
399 | | - "Payoff: -2\n", |
400 | | - "\n", |
401 | | - "Jerry plays the equilibrium strategy:\n", |
402 | | - "Probability of cooperating: 0\n", |
403 | | - "Probability of defecting: 1\n", |
404 | | - "Payoff: -2\n", |
405 | | - "\n" |
406 | | - ] |
407 | | - } |
408 | | - ], |
| 294 | + "outputs": [], |
409 | 295 | "source": [ |
410 | 296 | "for player in g.players:\n", |
411 | 297 | " print(f\"{player.label} plays the equilibrium strategy:\")\n", |
|
430 | 316 | }, |
431 | 317 | { |
432 | 318 | "cell_type": "code", |
433 | | - "execution_count": 13, |
| 319 | + "execution_count": null, |
434 | 320 | "id": "e1b060fb-94cc-432d-a9cc-4ccae5908f79", |
435 | 321 | "metadata": {}, |
436 | | - "outputs": [ |
437 | | - { |
438 | | - "data": { |
439 | | - "text/html": [ |
440 | | - "<div>\n", |
441 | | - "<style scoped>\n", |
442 | | - " .dataframe tbody tr th:only-of-type {\n", |
443 | | - " vertical-align: middle;\n", |
444 | | - " }\n", |
445 | | - "\n", |
446 | | - " .dataframe tbody tr th {\n", |
447 | | - " vertical-align: top;\n", |
448 | | - " }\n", |
449 | | - "\n", |
450 | | - " .dataframe thead th {\n", |
451 | | - " text-align: right;\n", |
452 | | - " }\n", |
453 | | - "</style>\n", |
454 | | - "<table border=\"1\" class=\"dataframe\">\n", |
455 | | - " <thead>\n", |
456 | | - " <tr style=\"text-align: right;\">\n", |
457 | | - " <th></th>\n", |
458 | | - " <th>Game</th>\n", |
459 | | - " <th>Title</th>\n", |
460 | | - " </tr>\n", |
461 | | - " </thead>\n", |
462 | | - " <tbody>\n", |
463 | | - " <tr>\n", |
464 | | - " <th>0</th>\n", |
465 | | - " <td>2smp</td>\n", |
466 | | - " <td>Two-stage matching pennies game</td>\n", |
467 | | - " </tr>\n", |
468 | | - " <tr>\n", |
469 | | - " <th>1</th>\n", |
470 | | - " <td>pd</td>\n", |
471 | | - " <td>Two person Prisoner's Dilemma game</td>\n", |
472 | | - " </tr>\n", |
473 | | - " </tbody>\n", |
474 | | - "</table>\n", |
475 | | - "</div>" |
476 | | - ], |
477 | | - "text/plain": [ |
478 | | - " Game Title\n", |
479 | | - "0 2smp Two-stage matching pennies game\n", |
480 | | - "1 pd Two person Prisoner's Dilemma game" |
481 | | - ] |
482 | | - }, |
483 | | - "execution_count": 13, |
484 | | - "metadata": {}, |
485 | | - "output_type": "execute_result" |
486 | | - } |
487 | | - ], |
| 322 | + "outputs": [], |
488 | 323 | "source": [ |
489 | 324 | "gbt.catalog.games()" |
490 | 325 | ] |
|
499 | 334 | }, |
500 | 335 | { |
501 | 336 | "cell_type": "code", |
502 | | - "execution_count": 14, |
| 337 | + "execution_count": null, |
503 | 338 | "id": "9ee2c3bd-22d1-4c8e-996c-cd9e0dfd64cc", |
504 | 339 | "metadata": {}, |
505 | | - "outputs": [ |
506 | | - { |
507 | | - "data": { |
508 | | - "text/html": [ |
509 | | - "<center><h1>Two person Prisoner's Dilemma game</h1></center>\n", |
510 | | - "<table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>9,9</td><td align=center>0,10</td></tr><tr><td align=center><b>2</b></td><td align=center>10,0</td><td align=center>1,1</td></tr></table><table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>9,9</td><td align=center>0,10</td></tr><tr><td align=center><b>2</b></td><td align=center>10,0</td><td align=center>1,1</td></tr></table><table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>9,9</td><td align=center>0,10</td></tr><tr><td align=center><b>2</b></td><td align=center>10,0</td><td align=center>1,1</td></tr></table><table><tr><td></td><td align=center><b>1</b></td><td align=center><b>2</b></td></tr><tr><td align=center><b>1</b></td><td align=center>9,9</td><td align=center>0,10</td></tr><tr><td align=center><b>2</b></td><td align=center>10,0</td><td align=center>1,1</td></tr></table>\n" |
511 | | - ], |
512 | | - "text/plain": [ |
513 | | - "Game(title='Two person Prisoner's Dilemma game')" |
514 | | - ] |
515 | | - }, |
516 | | - "execution_count": 14, |
517 | | - "metadata": {}, |
518 | | - "output_type": "execute_result" |
519 | | - } |
520 | | - ], |
| 340 | + "outputs": [], |
521 | 341 | "source": [ |
522 | 342 | "g = gbt.catalog.load(\"pd\")\n", |
523 | 343 | "g" |
|
539 | 359 | }, |
540 | 360 | { |
541 | 361 | "cell_type": "code", |
542 | | - "execution_count": 15, |
| 362 | + "execution_count": null, |
543 | 363 | "id": "f58eaa77", |
544 | 364 | "metadata": {}, |
545 | 365 | "outputs": [], |
|
557 | 377 | }, |
558 | 378 | { |
559 | 379 | "cell_type": "code", |
560 | | - "execution_count": 16, |
| 380 | + "execution_count": null, |
561 | 381 | "id": "4119a2ac", |
562 | 382 | "metadata": {}, |
563 | 383 | "outputs": [], |
|
0 commit comments