From a6fd4bce7f5a966e2de759d52b9e2fa0bdb99ff6 Mon Sep 17 00:00:00 2001 From: osmarks Date: Thu, 18 Feb 2021 23:33:56 +0000 Subject: [PATCH] random dilemma stuff, mazes --- dilemma2.scm | 5 +- itpd3 | Bin 0 -> 41896 bytes itpd3.scm | 134 +++++++++++++++++++++++++++++++++++++++++++++ maze.py | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++ maze2.py | 94 ++++++++++++++++++++++++++++++++ pd2.scm | 89 ++++++++++++++++++++++++++++++ srbf.scm | 2 +- 7 files changed, 471 insertions(+), 2 deletions(-) create mode 100755 itpd3 create mode 100644 itpd3.scm create mode 100755 maze.py create mode 100755 maze2.py create mode 100644 pd2.scm diff --git a/dilemma2.scm b/dilemma2.scm index b59d8d5..76de2d6 100644 --- a/dilemma2.scm +++ b/dilemma2.scm @@ -76,12 +76,15 @@ (define actually-forgiving-grudge (lambda (x y) (let* ( (defection-count (length (filter (lambda (m) (= m 1)) x))) + ; TODO: tune 1.8 there, or maybe entirely switch out formula (lookback (+ 1 (inexact->exact (floor (expt 1.8 defection-count))))) + ; should maybe be (zip (append x '(-1)) (cons -1 y)) - current version compares actions at the same time, but it may not be "betrayal" unless the defecting by the opponent comes AFTER our cooperating + ; this does seem to worsen its score so maybe not (result (if (member '(1 0) (take lookback (zip x y))) 1 0)) ) result))) (define apiomemetics - (lambda (x y) (random-seed 334278294) ; NOTE TO SELF: 3227883998 (0/1) + (lambda (x y) (random-seed 334278294) ; NOTE TO SELF: 3227883998 (0/2) or 2324865786 (48/50) (if (null? x) (begin 0) (if (> (length x) 93) diff --git a/itpd3 b/itpd3 new file mode 100755 index 0000000000000000000000000000000000000000..e5998504cbe9448ff227229e6de5f2a42176fcb8 GIT binary patch literal 41896 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 iX!6>u_Hi$1$D=5^Ud=cSk+Jgozb`qm9T^-+ (car (prisond 1 if-defect)) (car (prisond 0 if-cooperate))) 1 0))) + +(define iter-prisond + (lambda (x y z) + (define scores '(0 0)) + (define moves-x '()) + (define moves-y '()) + (define current-moves '()) + (define helper + (lambda (x y z) + (if (= z 0) + scores + (begin + (set! current-moves (list (x moves-x moves-y y) (y moves-y moves-x x))) + (set! moves-x (cons (cadr current-moves) moves-x)) + (set! moves-y (cons (car current-moves) moves-y)) + (set! scores (map + scores (prisond (car current-moves) (cadr current-moves)))) + (helper x y (- z 1)))))) (helper x y z))) + +(define get-strategy-scores + (lambda (x) + (define score 0) + (define helper + (lambda (y) + (if (eqv? (car x) (car y)) + 0 + (set! score (+ score (car (iter-prisond (cdr x) (cdr y) (+ 100 iters)))))))) + (map helper strategies) + score)) + +(define get-all-scores + (lambda () + (define helper + (lambda (x) + (write (list (car x) (get-strategy-scores x))) + (newline))) + (map helper strategies))) + +(add-strategy 'angel angel) +(add-strategy 'tit-for-tat tit-for-tat) +(add-strategy 'mean-tit-for-tat mean-tit-for-tat) +(add-strategy 'devil devil) +(add-strategy 'grudger grudger) +(add-strategy 'gollariosity gollariosity) +(add-strategy 'reflector reflector) +(add-strategy 'metagollariosity metagollariosity) +(add-strategy 'alt alt) +(add-strategy 'maybe-tit-for-tat-or-grudger maybe-tit-for-tat-or-grudger) + +(set-pseudo-random-seed! (random-bytes)) +(set! iters (pseudo-random-integer 50)) + +(get-all-scores) +(exit) diff --git a/maze.py b/maze.py new file mode 100755 index 0000000..42bd56b --- /dev/null +++ b/maze.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 + +from z3 import * + +def chunks(lst, n): + for i in range(0, len(lst), n): + yield lst[i:i + n] + +def main_solver(maze): + MAX_PATH_LENGTH = 80 + walls = [ix for ix, cell in enumerate(maze) if cell] + #path_components = [ Int("path" + str(i)) for i in range(MAX_PATH_LENGTH) ] + #path_component_constraints = [ Or(c == -10, c == 10, c == -1, c == 1, c == 0) for c in path_components ] + #print(path_component_constraints) + #print(solve(path_component_constraints)) + """ + positions = [Int("pos" + str(i)) for i in range(MAX_PATH_LENGTH)] + pos_constraints = [] + solver = Solver() + for ix, pos in enumerate(positions): + if ix == 0: + pos_constraints.append(pos == 0) + else: + last = positions[ix - 1] + pos_constraints.append(Or(pos == (last + 10), pos == (last - 10), If(pos % 10 != 0, pos == (last + 1), False), If(pos % 10 != 9, pos == (last - 1), False))) + pos == (last + 1), pos == (last - 1))) + pos_constraints.append(pos < 100) + pos_constraints.append(pos >= 0) + for cell in walls: + pos_constraints.append(pos != cell) + pos_constraints.append(positions[-1] == 99) + print(pos_constraints) + for c in pos_constraints: constraints.append(c)""" + solver = Solver() + xs = [Int(f"x{i}") for i in range(MAX_PATH_LENGTH)] + ys = [Int(f"y{i}") for i in range(MAX_PATH_LENGTH)] + things = list(zip(xs, ys)) + constraints = [] + for ix, (x, y) in enumerate(things): + if ix == 0: + constraints.append(x == 0) + constraints.append(y == 0) + else: + last_x, last_y = things[ix - 1] + constraints.append(Or( + And(x == last_x + 1, y == last_y), + And(x == last_x - 1, y == last_y), + And(x == last_x, y == last_y + 1), + And(x == last_x, y == last_y - 1), + And(x == last_x, y == last_y) + )) + constraints.append(x >= 0) + constraints.append(x <= 9) + constraints.append(y >= 0) + constraints.append(y <= 9) + + for wall_pos in walls: + constraints.append(Not(And(x == (wall_pos % 10), y == (wall_pos // 10)))) + + constraints.append(xs[-1] == 9) + constraints.append(ys[-1] == 9) + #print(constraints) + for constraint in constraints: solver.add(constraint) + print(solver.check()) + model = solver.model() + out = [] + for ix, (x, y) in enumerate(zip(xs, ys)): + xp, yp = model.evaluate(x), model.evaluate(y) + #print(ix, xp, yp) + out.append(xp.as_long() + yp.as_long() * 10) + return out + +def fail(e): raise Exception(e) + +def print_maze(m, p): + out = [ [ "█" if x else "_" for x in row ] for row in chunks(m, 10) ] + for ix, pc in enumerate(p): + out[pc // 10][pc % 10] = chr(ix % 26 + 97) if m[pc] == 0 else fail("all is bees") + print("\n".join([ " ".join(row) for row in out ])) + assert p[-1] == 99 + +def entry(maze): + p = main_solver(maze) + print_maze(maze, p) + print([{-10:1,1:2,10:3,-1:4}[y-x] for x,y in zip(p,p[1:]) if x != y]) + +print(entry([ +0,1,0,0,0,1,0,0,0,1, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,1,0, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,0,1, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,1,0, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,0,1, +0,0,0,1,0,0,0,1,0,0])) + +print(entry([ +0,1,0,0,0,1,0,0,0,1, +0,1,0,1,0,1,0,1,0,0, +0,0,0,1,0,1,0,1,1,0, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,0,1, +0,1,0,1,0,1,0,1,0,0, +0,1,0,0,0,1,0,1,1,0, +0,1,0,0,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,1,0, +0,0,0,1,0,0,0,0,1,0 +])) + +print(entry([ +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0 +])) + +print(entry([ +0,1,0,0,0,0,0,0,1,0, +0,0,0,0,0,1,1,0,0,0, +1,1,1,0,1,1,0,0,1,0, +0,1,1,0,0,0,1,0,0,1, +0,0,0,0,1,0,1,1,0,0, +1,0,0,0,0,1,0,0,0,1, +0,0,1,1,1,0,1,0,1,0, +1,0,0,0,1,0,1,0,0,0, +0,0,0,0,1,0,0,1,1,1, +1,0,1,0,0,0,0,0,0,0 +])) + +print(entry([ +0,0,0,0,0,0,1,0,0,0, +0,0,1,0,1,0,0,0,1,0, +0,0,1,1,0,0,1,1,1,0, +0,0,0,0,1,0,0,0,0,0, +0,1,0,0,1,0,1,0,0,0, +0,0,1,0,0,0,0,0,0,0, +0,1,0,0,0,0,1,0,1,0, +0,0,0,1,0,0,0,1,0,0, +0,0,0,1,0,0,0,0,0,0, +1,0,0,0,0,1,0,0,0,0 +])) diff --git a/maze2.py b/maze2.py new file mode 100755 index 0000000..20f4b9b --- /dev/null +++ b/maze2.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 + +T=10 +def R(m,p=[0]): + *_,c=p + if c==99:return p + a=[c+T,c-T] + if e:=c%T:a+=~-c, + if e!=9:a+=-~c, + for b in a: + if 99>=b>=0and b not in p and m[b]==0and (r:=R(m,p+[b])):return r +def entry(m): + p=R(m) + return [{-T:1,1:2,T:3,-1:4}[y-x] for x,y in zip(p,p[1:])] + +def divide_chunks(l, n): + # looping till length l + for i in range(0, len(l), n): + yield l[i:i + n] + +def fail(e): raise Exception(e) + +def print_maze(m, p): + out = [ [ "█" if x else "_" for x in row ] for row in divide_chunks(m, 10) ] + for ix, pc in enumerate(p): + out[pc // 10][pc % 10] = chr(ix % 26 + 97) if m[pc] == 0 else fail("all is bees") + print("\n".join([ " ".join(row) for row in out ])) + assert p[-1] == 99 + +def directions(x): return list(map({1: "up", 3: "down", 2: "right", 4: "left" }.get, x)) + +print(entry([ +0,1,0,0,0,1,0,0,0,1, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,1,0, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,0,1, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,1,0, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,0,1, +0,0,0,1,0,0,0,1,0,0])) + +print(entry([ +0,1,0,0,0,1,0,0,0,1, +0,1,0,1,0,1,0,1,0,0, +0,0,0,1,0,1,0,1,1,0, +0,1,0,1,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,0,1, +0,1,0,1,0,1,0,1,0,0, +0,1,0,0,0,1,0,1,1,0, +0,1,0,0,0,1,0,1,0,0, +0,1,0,1,0,1,0,1,1,0, +0,0,0,1,0,0,0,0,1,0 +])) + +print(entry([ +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0 +])) + +print(entry([ +0,1,0,0,0,0,0,0,1,0, +0,0,0,0,0,1,1,0,0,0, +1,1,1,0,1,1,0,0,1,0, +0,1,1,0,0,0,1,0,0,1, +0,0,0,0,1,0,1,1,0,0, +1,0,0,0,0,1,0,0,0,1, +0,0,1,1,1,0,1,0,1,0, +1,0,0,0,1,0,1,0,0,0, +0,0,0,0,1,0,0,1,1,1, +1,0,1,0,0,0,0,0,0,0 +])) + +print(entry([ +0,0,0,0,0,0,1,0,0,0, +0,0,1,0,1,0,0,0,1,0, +0,0,1,1,0,0,1,1,1,0, +0,0,0,0,1,0,0,0,0,0, +0,1,0,0,1,0,1,0,0,0, +0,0,1,0,0,0,0,0,0,0, +0,1,0,0,0,0,1,0,1,0, +0,0,0,1,0,0,0,1,0,0, +0,0,0,1,0,0,0,0,0,0, +1,0,0,0,0,1,0,0,0,0 +])) \ No newline at end of file diff --git a/pd2.scm b/pd2.scm new file mode 100644 index 0000000..6078405 --- /dev/null +++ b/pd2.scm @@ -0,0 +1,89 @@ +;; pd2.scm - iterated prisoner's dilemma simulation but you know your opponent's strategy +;; by matt +;; this program is in the public domain + +(import (chicken random)) + +(define strategies '()) + +(define iters 0) + +(define add-strategy + (lambda (x y) + (set! strategies (cons (cons x y) strategies)))) + +(define prisond + (lambda (x y) + (if (= x y) + (if (= x 1) + '(-2 -2) + '(-1 -1)) + (if (= x 1) + '(0 -3) + '(-3 0))))) + +(define iter-prisond + (lambda (x y z) + (define scores '(0 0)) + (define moves-x '()) + (define moves-y '()) + (define current-moves '()) + (define helper + (lambda (x y z) + (if (= z 0) + scores + (begin + (set! current-moves (list (x moves-x moves-y y) (y moves-y moves-x x))) + (set! moves-x (cons (cadr current-moves) moves-x)) + (set! moves-y (cons (car current-moves) moves-y)) + (set! scores (map + scores (prisond (car current-moves) (cadr current-moves)))) + (helper x y (- z 1)))))) (helper x y z))) + +(define get-strategy-scores + (lambda (x) + (define score 0) + (define helper + (lambda (y) + (if (eqv? (car x) (car y)) + 0 + (set! score (+ score (car (iter-prisond (cdr x) (cdr y) (+ 100 iters)))))))) + (map helper strategies) + score)) + +(define get-all-scores + (lambda () + (define helper + (lambda (x) + (write (list (car x) (get-strategy-scores x))) + (newline))) + (map helper strategies))) + +(define angel + (lambda (x y z) + 0)) + +(define devil + (lambda (x y z) + 1)) + +(define tit-for-tat + (lambda (x y z) + (if (null? x) + 0 + (car x)))) + +(define grudger + (lambda (x y z) + (if (memq 1 y) + 1 + 0))) + +(add-strategy 'angel angel) +(add-strategy 'devil devil) +(add-strategy 'tit-for-tat tit-for-tat) +(add-strategy 'grudger grudger) + +(set-pseudo-random-seed! (random-bytes)) +(set! iters (pseudo-random-integer 50)) + +(get-all-scores) diff --git a/srbf.scm b/srbf.scm index 0d46835..91635fb 100644 --- a/srbf.scm +++ b/srbf.scm @@ -1,5 +1,5 @@ (define count-zeros - (lambda (x) (if (= (random 50) 0) (count-zeros (+ 1 x)) x))) + (lambda (x) (if (= (random 50) 48) (count-zeros (+ 1 x)) x))) (define try-sequentially (lambda (x max) (random-seed x) (let ((zeros (count-zeros 0))) (if (> zeros max)