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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

Z-ha0Om)5_@FMz%L`zB5Qq=zn!G#!=6iwo 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 (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)