refactor internals to allow paper to use an

(otherwise) internal helper function to illustrate
what distributions search uses
This commit is contained in:
Robby Findler 2014-10-13 20:55:49 -05:00
parent 47b7a28ce3
commit 60cb6fb8cd

View File

@ -15,7 +15,8 @@
(struct-out eqn) (struct-out eqn)
(struct-out dqn) (struct-out dqn)
search/next search/next
(struct-out gen-trace)) (struct-out gen-trace)
get-dist)
;; search tracing facility ;; search tracing facility
(provide enable-gen-trace! (provide enable-gen-trace!
@ -191,24 +192,24 @@
#:key (λ (cls) (length (clause-prems cls))))) #:key (λ (cls) (length (clause-prems cls)))))
(define (random-order l depth max-depth #:key [key values]) (define (random-order l depth max-depth #:key [key values])
(define bd (get-dist l depth max-depth)) (define len (length l))
(define bd (get-dist len depth max-depth))
(define n (round ((distribution-sample bd)))) (define n (round ((distribution-sample bd))))
(define perm (nth-lexico-perm (length l) (define perm (nth-lexico-perm len (inexact->exact n)))
(inexact->exact n)))
(define l-sorted (reverse (sort (shuffle l) < #:key key))) (define l-sorted (reverse (sort (shuffle l) < #:key key)))
(for/list ([i (in-list perm)]) (for/list ([i (in-list perm)])
(list-ref l-sorted i))) (list-ref l-sorted i)))
(define get-dist (define get-dist
(let ([cache (make-hash)]) (let ([cache (make-hash)])
(λ (l depth max-depth) (λ (number-of-choices depth max-depth)
(hash-ref cache (list (length l) depth max-depth) (hash-ref cache (list number-of-choices depth max-depth)
(λ () (λ ()
(define nperms (factorial (length l))) (define nperms (factorial number-of-choices))
(define d (binomial-dist (sub1 nperms) (define d (binomial-dist (sub1 nperms)
(+ (/ depth max-depth) (+ (/ depth max-depth)
(* 0.05 (- 0.5 (/ depth max-depth)))))) (* 0.05 (- 0.5 (/ depth max-depth))))))
(hash-set! cache (list (length l) depth max-depth) d) (hash-set! cache (list number-of-choices depth max-depth) d)
d))))) d)))))
(define (nth-lexico-perm len n) (define (nth-lexico-perm len n)