Używam funkcji random_element()
dostarczonej przez SAGE do generowania losowych partycji całkowitych dla danej liczby całkowitej (N
), które są określonej długości (S
). Próbuję generować nieobciążonych losowych próbek ze zbioru wszystkich partycji dla danych wartości N
i S
. Funkcja SAGE szybko zwraca losowe partycje dla N (to jest Partitions(N).random_element()
).Algorytm losowego generowania partycji całkowitych o określonej długości, w języku Python?
Powoduje jednak znaczne spowolnienie po dodaniu S
(tj. Partitions(N,length=S).random_element()
). Podobnie, filtrowanie losowych partycji N
, które mają długość S
, jest niesamowicie wolne.
jednak, i mam nadzieję, że to pomoże komuś, Znalazłem, że w przypadku, gdy funkcja zwraca rozbiór N
nie dopasowując długość S
, że partycja jest sprzężony często długości S. czyli:
S = 10
N = 100
part = list(Partitions(N).random_element())
if len(part) != S:
SAD = list(Partition(part).conjugate())
if len(SAD) != S:
continue
zwiększa to szybkość, z jaką zostały znalezione partycje długości S
i wydaje się produkować bezstronne próbek (mam badanie wyników wobec całych zestawów partycji dla różnych wartości N
i S
).
Jednak używam wartości N (np. 10,000
) i S (np. 300
), które powodują, że nawet to podejście jest niepraktycznie wolne. Komentarz związany z funkcją SAGE o random_element()
przyznaje, że jest mnóstwo miejsca na optymalizację. Czy istnieje sposób na szybsze generowanie bezstronnych (tj. Losowych) próbek partycji całkowitych pasujących do podanych wartości N
i S
, być może, nie generując partycji, które nie pasują do S
? Dodatkowo używanie sprzężonych partycji działa dobrze w wielu przypadkach w celu tworzenia bezstronnych próbek, ale nie mogę powiedzieć, że dokładnie rozumiem dlaczego.
Dzięki za odpowiedź, ale nie widzę jak ta funkcja daje partycje na podstawie jednolitych losowej próby. – klocey
@klocey, przegapiłem fakt, że generujesz losowe elementy z sekwencji, przepraszam. –
Zaimplementowałem tę funkcję i porównałem losowe próbki wygenerowane przez nią do pełnych zestawów partycji dla kilku kombinacji N i S. Porównania zostały wykonane przy użyciu krzywych gęstości jądra generowanych przez wariancje partycji. Jak każda inna strategia próbkowania, którą wypróbowałem, ta funkcja daje stronnicze próbki (partycje o mniejszej od oczekiwanej wariancji). Wygląda na to, że generowanie nieuporządkowanej próbki losowej ze zbioru wszystkich partycji jest bardzo trudne dla danej sumy N i długości S. Funkcja SAGE jest najbliższa, do której przyszedłem, ale jest daleki od optymalnego. – klocey