Metoda na prawdopodobieństwo z określoną liczbą procent

Odpowiedz Nowy wątek
2011-09-03 12:16
von_ilnicki
0

Witajcie ponownie.

Macie może dla mnie pewnego hinta - jakąś metodę na obliczenie TAK/NIE względem danego PROCENTU PRAWDOPODOBIEŃSTWA?

Bo np. mam 60% na powodzenie akcji i chcę, aby na podstawie tego procentu dało mi odpowiedź UDAŁO SIĘ/NIE UDAŁO SIĘ.

Macie sposób?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-09-03 12:27
Kumashiro
0
von_ilnicki napisał(a)

Bo np. mam 60% na powodzenie akcji i chcę, aby na podstawie tego procentu dało mi odpowiedź UDAŁO SIĘ/NIE UDAŁO SIĘ.

Wygooglaj sobie "logika rozmyta" ("fuzzy logic").
Skoro jednak ma to być odpowiedź "tak" lub "nie" (bez stanów pośrednich), to najprościej będzie określić próg, po przekroczeniu którego uznajemy, że dana operacja się udała. To jest tak banalne, że obawiam się iż chodziło Ci o coś innego.

Pozostało 580 znaków

2011-09-03 12:29
von_ilnicky
0

z progu dawno korzystam (losuje liczbę w przedziale 1-100 i określam, czy jest powyżej procentu - jeśli tak, zwracam odp. TAK i vice versa). Ta metoda jednak ma dziwną wadę i dla procentów powyżej 50 funkcja niemal zawsze zwraca wartość TAK. Szukam innego sposobu.

Pozostało 580 znaków

2011-09-03 12:31
Kumashiro
0

Jeśli określiłeś próg na 50, to chyba logiczne że wszystko powyżej będzie zwracało TAK.
Chyba nie rozumiem o co Ci dokładnie chodzi...

Pozostało 580 znaków

2011-09-03 12:33
von_ilnicky
0

Dobra, porzućmy temat progu bo i ty mnie źle zrozumiałeś. Na czym polega fuzzy logic?

Pozostało 580 znaków

2011-09-03 12:36
Kumashiro
0

Kolego, trochę samodzielności! Możesz zacząć od tego: http://en.wikipedia.org/wiki/Fuzzy_logic

Pozostało 580 znaków

2011-09-03 12:46
von_ilnicki
0

opracowałem coś takiego:

srand (static_cast<unsigned int>(time(NULL)));
 
                        int Liczba = rand() % 100 + 1;
 
                        if (Liczba <= procent)
 
                        {
 
                                    cout << "POWODZENIE." << endl;
 
                        }
 
                        else
 
                        {
 
                            cout << "NIEPOWODZENIE." << endl;
 
                            cin.sync(); cin.get();
 
                        }

ale myślałem nad czymś... lepszym (choć dalej tylko z prawda/fałsz). Bo coś nie wierzę, by choćby twórcy fallouta z takiego korzystali (było dla przykładu taki atrybut "perswazja", miał wartość od 1-100 i w rozmowie można było z niego skorzystać, by osoba coś dodatkowo wygadała ciekawego - a obok kwestii perswazji był procent prawdopodobieństwa powodzenia). Macie jakieś podejrzenia, z jakiego "systemu" korzystali?

A dlaczego mieliby nie korzystać? System w Falloucie był ideologicznie oparty na papierowych grach RPG i z ich losowaniem. Do takich zastosowań liczby pseudolosowe są idealne. - Zjarek 2011-09-03 13:05

Pozostało 580 znaków

2011-09-03 13:04
Kumashiro
0

Ach, już czaję o co Ci chodzi. To olej ten fuzzy logic. Jeśli piszesz grę, to najlepiej symulować rzuty kostką. Dajmy na to, określasz "rzut kostką sześcienną; 1-4 TAK". Oczywiście, kostka może mieć dowolną liczbę "ścianek", dobrze jednak jest się trzymać kostek "systemowych" w przypadku gier.

Pozostało 580 znaków

2011-09-03 13:34
0

I dodatkowo nie używaj modulo przy randzie, szczególnie używając systemu zgodnego ze standardem POSIX. Nie da się zrobić dobrego generatora wszystkich bitów o 231 możliwych wartościach używając 32 bitowego stanu, więc używa się generatorów dających dobry rozrzut od 0 do 231, ale mających bardziej losowe wysokie bity (bo są ważniejsze). Szczególnie źle przy modulo się sprawdza rand() z mingw.

Przy grze możesz także nagiąć losowość, żeby gra była fajniejsza, np. gdy dostaniesz pod rząd 3 legendarne kije dla maga i grasz wojownikiem, to potem się pojawi coś dla twojej klasy, albo po 4 pudłach przy szansie 80% na trafienie trafiasz zawsze.

Ogólnie problem liczb pseudolosowych jest bardzo dobrze opisany w Sztuce programowania Knutha, radzę poświęcić parę dni na zapoznanie się z tym. Ogólnie cały cykl jest bardzo dobry, choć trochę ciężki, podejście może się wydawać trochę przestarzałe ("po co mi assembler jak programuje w Ruby"), ale tematy w nim poruszane są podstawą informatyki i nie wydaje mi się, że się zdezaktualizują. Na przykład nie musisz wiedzieć jak napisać dobry generator liczb pseudolosowych, ale powinieneś wiedzieć jak one działają, żeby dobrze z nich korzystać.

edytowany 1x, ostatnio: Zjarek, 2011-09-03 13:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0