How to increase the acceptance ratio

Click For Summary
SUMMARY

The discussion focuses on increasing the acceptance ratio in a random distribution generated using Python. The user employs an exponential distribution defined by the formula λe-λy and utilizes libraries such as NumPy and Matplotlib for data generation and visualization. The user seeks to improve the acceptance ratio by implementing a linear function f(x) = 1 - ax, questioning the optimal choice for the parameter 'a'. The conversation also references a duplicate thread for further exploration of the topic.

PREREQUISITES
  • Understanding of exponential distributions in statistics
  • Familiarity with Python programming, specifically NumPy and Matplotlib libraries
  • Knowledge of acceptance-rejection sampling methods
  • Basic calculus concepts related to functions and distributions
NEXT STEPS
  • Research "Python NumPy random sampling techniques"
  • Explore "Matplotlib histogram visualization methods"
  • Study "Acceptance-rejection sampling in statistics"
  • Investigate "Linear functions in probability distributions"
USEFUL FOR

Data scientists, statisticians, and Python developers interested in enhancing random sampling techniques and optimizing acceptance ratios in probabilistic models.

Othman0111
Messages
27
Reaction score
0
I trying to generate a random distribution

λe-λy
Which distributed exponentially.
Python:
%matplotlib inline
import numpy as np
from matplotlib import pyplot

N = 1000
r = np.random.random(N)

xlambda = 0.1
x = -np.log(r)/xlambda

binwidth=xlambda*5
pyplot.hist(x,bins=np.arange(0.,100., binwidth),density=True);
pyplot.plot(np.arange(0.,100.,binwidth),xlambda*np.exp(-xlambda*np.arange(0.,100.,binwidth)),ls='-',c='red',lw=3);N = 10000

xmax = 100
ymax = xlambda

rx = np.random.random(N)*xmax
ry = np.random.random(N)*ymax

values = []

Nin = 0
for i in range(N):
    if(ry[i] <= xlambda*np.exp(-xlambda*rx[i])):
        # Accept
        values.append(rx[i])
        Nin += 1    

x = np.asarray(values)

print("Acceptance Ratio: ",Nin/float(N))

binwidth=xlambda*5
pyplot.hist(x,bins=np.arange(0.,100., binwidth),density=True);
pyplot.plot(np.arange(0.,100.,binwidth),xlambda*np.exp(-xlambda*np.arange(0.,100.,binwidth)),ls='-',c='red',lw=3);

I want to Improve the acceptance ratio by using a linear function f(x)=1-ax. is there a certain choice for a?
 
Technology news on Phys.org
This homework ? Then please post in the homework forum.

Do you know that if ##F'=f## then a flat distribution of F yields a distribution like ##f## ?
 
BvU said:
This homework ? Then please post in the homework forum.

Do you know that if ##F'=f## then a flat distribution of F yields a distribution like ##f## ?
I didn't get what you're saying
 
Thread closed. There's a duplicate of the question here: https://www.physicsforums.com/threads/how-to-increase-the-acceptance-ratio-in-python.966421/
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K