[CM] variables for weights
tiago.videira at gmail.com
Tue Mar 27 01:29:20 PDT 2012
So far the nifty function of Prof Taube has worked fine with numbers:
However it seems it can't handle variables in the place of weights.
How can I change that so I can use for instance the command
(setq z 30)
(gn-weight 2 '((a z) (b 5) (c 50)))
having defined z previously?
Basically i'm trying to achieve a function that can handle a list of
weighted probabilities, in which the weights can be variables.
Many thanks and Kind regards
;;MAKES A PROBABILITY-WEIGHTED LIST
(defun make-ptable (data)
(let ((total (loop for d in data sum (second d)))
;; total holds sum of weights in data
(loop for d in data
for v = (first d) ; outcome to return
for w = (second d) ; relative weight
do (setq sum (+ sum w))
;; collect outcome and normalized probability
collect (list v (/ sum total)))))
(defun pick-tbl (table)
;; return outcome in table according
;; to its weighted probability
(let ((x (rnd2 0 1)))
;; x is uniform number < 1.
(loop for d in table
for p = (second d)
when (< x p ) ; x in this segment.
return (first d))))
(defun gn-weight (nb tbl)
(loop for i from 0 to (- nb 1)
collect (pick-tbl (make-ptable tbl))))
More information about the Cmdist