Muszę utworzyć losowe wektory liczb rzeczywistych, spełniające następujące ograniczenia:
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.
Jaki byłby typowy algorytm do wydajnego generowania tego rodzaju wektora?
random-generation
LouisChiffre
źródło
źródło
a_i
dzieje po dystrybucji,p_i
a także mniejc
? To dlatego, że rozkładp_i
jest mniejszyc
? W jakiej dystrybucji myślisz?c
,A
,B
a lambdas stałe?Odpowiedzi:
Jeśli dobrze cię rozumiem, tylko punkty w niewielkiej objętości n-wymiarowej przestrzeni spełniają twoje ograniczenia.
Twoje pierwsze ograniczenie ogranicza je do wnętrza hipersfery, co przypomina mi comp.graphics.algorytmy FAQ „Jednolite losowe punkty na kuli” i jak generować równomiernie rozmieszczone punkty w trójwymiarowej kuli? Drugie ograniczenie nieco wycina się z hipersfery, a pozostałe ograniczenia dalej zmniejszają objętość, która spełnia twoje ograniczenia.
Myślę, że najprostszą rzeczą jest jedno z podejść sugerowanych przez FAQ:
Dzięki wystarczająco wysokiej jakości generatorowi liczb losowych daje to zestaw zapisanych współrzędnych, które spełniają twoje kryteria z (oczekiwaną) jednolitą gęstością.
Niestety, jeśli masz stosunkowo wysoką wymiarowość n (tj. Jeśli konstruujesz każdy wektor ze stosunkowo długiej listy współrzędnych), wpisana sfera (znacznie mniej zmniejszonej objętości) ma zaskakująco małą część całkowitej objętości całkowitą ramkę ograniczającą, więc może być konieczne wykonanie wielu iteracji, z których większość generuje odrzucone punkty poza ograniczonym obszarem, zanim znajdzie punkt w ograniczonym obszarze. Skoro komputery w dzisiejszych czasach są dość szybkie, czy to będzie wystarczająco szybkie?
źródło
f1(x1) + f2(x2) == C
wynika , że załamuje się, jeśli twoje ograniczenia mają formę Jakieś sugestie tutaj?