生成滿足約束的隨機數的方法

生成滿足約束的隨機數的方法

第一種問題和方法

有三個變量 x1x2x3\ x_1,x_2,x_3
生成滿足約束的值:
 x1+x2+x3=n \ x_1+x_2+x_3=n
 a1<x1<b1,a2<x2<b2,a3<x3<b3 \ a_1<x_1<b_1 , a_2<x_2<b_2,a_3<x_3<b_3
思路:
1、 a3<x3<b3\ a_3<x_3<b_3,所以 a3<nx1x2<b3\ a_3<n-x_1-x_2<b_3

2、由1得, nx1b3<x2<nx1a3\ n-x_1-b_3<x_2<n-x_1-a_3

3、由2得, nx1b3>a2,nx1a3<b2\ n-x_1-b_3>a_2,n-x_1-a_3<b_2,所以, x1[n(b2+b3),n(a2+a3)]\ x_1\in [n-(b_2+b_3),n-(a_2+a_3)]

步驟:
1、生成 x1[n(b2+b3),n(a2+a3)]\ x_1\in [n-(b_2+b_3),n-(a_2+a_3)]

2、生成 x2[n(x1+b3),n(x1+a3)]\ x_2\in [n-(x_1+b_3),n-(x_1+a_3)]

3、生成 x3=nx1x2\ x_3=n-x_1-x_2

第二種問題和方法

有三個變量 x1x2x3\ x_1,x_2,x_3
生成滿足約束的值:
 x1+x2+x3=n \ x_1+x_2+x_3=n
 a1<x1<b1,a2<x2<b2,a3<x3<b3 \ a_1<x_1<b_1, a_2<x_2<b_2,a_3<x_3<b_3
思路:
1、 x1=y1/(y1+y2+y3)n\ x_1=y_1/(y_1+y_2+y_3)*n,所以 a1<y1/(y1+y2+y3)n<b1\ a_1<y_1/(y_1+y_2+y_3)*n<b_1

2、若 a1<y1<b1\ a_1<y_1<b_1,所以 0<1/(y1+y2+y3)n<1\ 0<1/(y_1+y_2+y_3)*n<1

步驟:
1、生成 y1[a1,b1]\ y_1\in [a_1,b_1], y2[a2,b2]\ y_2\in [a_2,b_2], y3[a3,b3]\ y_3\in [a_3,b_3]

2、如果 y1+y2+y3>n\ y_1+y_2+y_3 >n, 生成 x1=y1/(y1+y2+y3)n\ x_1=y_1/(y_1+y_2+y_3)*n x2=y2/(y1+y2+y3)n\ x_2=y_2/(y_1+y_2+y_3)*n x3=y3/(y1+y2+y3)n\ x_3=y_3/(y_1+y_2+y_3)*n

3、如果 y1+y2+y3<n\ y_1+y_2+y_3 <n,生成 x1=y1n/(y1+y2+y3)\ x_1=y_1*n/(y_1+y_2+y_3) x2=y2n/(y1+y2+y3)\ x_2=y_2*n/(y_1+y_2+y_3) x3=y3n/(y1+y2+y3)\ x_3=y_3*n/(y_1+y_2+y_3)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章