Kısıtlı rastgele vektörler oluşturma


10

Aşağıdaki kısıtlamaları tatmin gerçek sayılar a_i rasgele vektörler oluşturmak gerekir:

abs(a_i) < c_i;      
sum(a_i)< A;        # sum of elements smaller than A
sum(b_i * a_i) < B; # weighted sum is smaller than B 
aT*A*a < D          # quadratic multiplication with A smaller than D

where c_i, b_i, A, B, D are constants.

Bu tür bir vektörü verimli bir şekilde üretmek için tipik algoritma ne olurdu?


1
Dördüncü kısıtlama ile ne demek istersiniz, "
a'nın

Benim hatam. Açıklama tamamlandı. Geri dönüşünüz için teşekkür ederiz.
LouisChiffre

Bu a_idağılımı nasıl takip eder p_ive daha azdır c? Çünkü dağıtım p_ida daha az cmı? Hangi dağıtımda düşünüyorsun?
deps_stats

@deps_stats. Çok iyi noktalar. Sahte kod çok açık değildi. Aklımdaki dağıtım poisson dağılımıdır. Her element farklı bir lambda ile bir poisson dağılımını takip eder. Bunu göz önünde bulundurarak, ilk koşulu (a_i <c) gerekli değildir, çünkü tatmin etmek için neslin sonunda sadece a_i'yi yeniden ölçeklendirebilirim.
LouisChiffre

Başka bir şey sorayım ... Are c, A, Bve lambda'lar sabit?
deps_stats

Yanıtlar:


4

Seni doğru anlarsam, sadece küçük boyutlu n boyutlu uzaydaki noktalar kısıtlamalarınızı karşılar.

İlk kısıtlamanız, bunu hiperferin iç kısmıyla sınırlar, bu da bana comp.graphics.algoritmalar hakkında SSS "Küre üzerinde tekdüze rastgele noktalar" ve 3 boyutlu birim topunda eşit dağılmış noktalar nasıl oluşturulur? İkinci kısıtlama, hiper kürenin biraz dışına çıkar ve diğer kısıtlamalar, kısıtlamalarınızı karşılayan hacimde daha da az ısınır.

Sanırım yapılacak en basit şey SSS tarafından önerilen yaklaşımlardan biri:

  • tüm birimi içerdiğinden emin olduğumuz, eksenle hizalanmış bazı sınırlayıcı kutuları seçin . Bu durumda, -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c, ilk kısıtlama tarafından açıklanan hiper küreyi içerdiğinden ve diğer kısıtlamalar titremeye devam ettiğinden, tüm kısıtlanmış birimi içerir uzakta.
  • Algoritma, sınırlayıcı kutudaki noktaları eşit olarak seçer. Bu durumda, algoritma bağımsız olarak bir aday vektörün her bir koordinatını -c ila + c arasındaki bağımsız olarak eşit dağıtılmış bazı rasgele sayılara ayarlar. (Bu birim boyunca eşit yoğunlukta dağılmış noktalar istediğinizi varsayıyorum. Bunu yapmak için bir nedeniniz varsa algoritmanın Poisson dağılımı veya başka bir düzgün olmayan dağılım ile bazı veya tüm koordinatları seçmesini sağlayabilirsiniz).
  • Bir aday vektörünüz olduğunda, her bir kısıtlamayı kontrol edin. Bunlardan herhangi biri başarısız olursa, geri dönün ve başka bir nokta seçin.
  • Bir aday vektörünüz olduğunda, daha sonra kullanmak üzere bir yerde saklayın.
  • Yeterli depolanmış vektörünüz yoksa, geri dönüp başka bir vektör oluşturmaya çalışın.

Yeterince yüksek kaliteli rasgele sayı üreteci ile, (beklenen) tekdüze yoğunluk ile ölçütlerinizi karşılayan bir dizi kayıtlı koordinat sağlar.

Ne yazık ki, nispeten yüksek bir boyutsallığınız n varsa (yani, her vektörü nispeten uzun bir koordinat listesinden oluşturursanız), yazılı kürenin (çok daha az azaltılmış hacminiz) toplam hacminin şaşırtıcı derecede küçük bir kısmı vardır. toplam sınırlama kutusu, bu nedenle çoğu kısıtlı alanınızın dışında bir nokta bulmadan önce çoğu kısıtlı alanınızın dışında reddedilen noktalar oluşturan birçok yinelemenin yürütülmesi gerekebilir. Günümüzde bilgisayarlar oldukça hızlı olduğu için bu yeterince hızlı olacak mı?


Yani önerdiğiniz şey alanı örneklemektir. Bir sınırlama kutusu statik olarak (IE, sabit kodlu olamaz) bulmak dışında benzer bir sorun var. Deneyimlerinizden, kısıtlamalarınız şu şekildeyse bu durum bozulur. f1(x1) + f2(x2) == CBurada herhangi bir öneriniz var mı?
Groostav

Evet, eşitlik ("==") kısıtlamalarınız varsa örnekleme yöntemi çalışmaz. Kürenin içinde (yarıçap <= R) değil, kürenin yüzeyinde veya bir silindirin yüzeyinde vb. (Yarıçap == R) noktalar gibi kısıtlamalar. Tüm hacim üzerinde eşit bir şekilde nokta seçmek, asla "asla" (0'a yakın olasılık) istediğiniz yüzeye çarpacaktır. Bu yüzden bir şekilde sadece o yüzeydeki noktaları seçmeniz gerekir - yani, f1 (x1) + f2 (x2) == C olan noktaları bulmak için [x1, x2, x3] noktalarını bulmak için rastgele x1 seçebilir ve ardından zorlayabilirsiniz x2 = ters_f2 (C - f1 (x1)).
David Cary

Bir kürenin yüzeyinde eşit olarak dağılmış noktaların özel durumu için, bkz. "Küre üzerinde tekdüze rastgele noktalar" .
David Cary

@ Groostav: Belki de sorunuz yeni bir üst düzey soru olarak gönderebileceğiniz orijinal sorudan yeterince farklı mı? "Bana bir takip sorusu göndermem gerektiği söylendi, neden ve nasıl?"
David Cary
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.