Bot do Pokera?

0

Hej, od niedawna uczę się programowania, dziś wpadłem na genialny pomysł... ale nie wiem czy realny? Przedstawie jak wygląda sytuacja. Pokerstars jest to platforma, na której rozgrywają się turnieje na prawdziwe, jak i wirtualne pieniądze. Natomiast inny program - Holdem Manager pobiera informacje o graczach(m.in. jak często dany przeciwnik pasuje do podbicia, ile % rozdań wygrywa itp.) z platformy Pokerstars w czasie rzeczywistym do bazy Postgresql. I teraz moje pytanie - czy jest możliwe napisanie w Javie programu(bota), który będzie pobierał z bazy dane(statystyki o graczach) i następnie na podstawie algorytmu rozgrywał w określony sposób rozdanie? I czy dodatkowo potrzebna będzie do napisania tego znajomość jakiegoś frameworka?

Jestem strasznie podjarany, gdyż jest tyle możliwych sytuacji, tyle statystyk... więc algorytm byłby dość rozbudowany :)
Oczywiście bota zastosowałbym w turnieju na wirtualne pieniądze, ten projekt będzie dla mnie dodatkową motywacją do nauki, jak i przyniesie satysfakcje, o ile się uda.

0

Jest możliwe, acz zapewne nielegalne.
Potrzebna będzie do tego dobra znajomość tematyki sztucznej inteligencji, systemów ekspertowych, pewnie też sieci bayesa, eksploracji danych i uczenia maszynowego (no i sporo matematyki).

0
Shalom napisał(a):

Jest możliwe, acz zapewne nielegalne.
Potrzebna będzie do tego dobra znajomość tematyki sztucznej inteligencji, systemów ekspertowych, pewnie też sieci bayesa, eksploracji danych i uczenia maszynowego (no i sporo matematyki).
Na podstawie danych jakie zbiera Holdem Manager(który zamienia dane liczbowe na dane statystyczne) są już określone zagrania w środowisku pokerowym(profesjonalny poker). Co prawda jest dużo kombinacji, ale rachunek prawdopodobieństwa czy zagadnienia sztucznej inteligencji raczej nie będzie potrzebna.

0

Nie da się na podstawie danych z Pokerstars (czytaj zapisanych do DB Holdem Managera) zrobić bota, który w chwili rozdania będzie podejmował decyzję o zagraniu.
Jest tak dlatego, że HM zapisuje dane do DB po zakończeniu rączki. Innymi słowy, jak wyłączysz opcję zapisywania historii rozdań w Pokerstars, HM nie będzie zapisywał i w zasadzie nie będzie działał. ;)

Natomiast to co chcesz zrobić, to zastosować OCR-ke tj. rozpoznawanie obrazu, żeby bot wiedział jakie karty akurat ma rozegrać, ile jest w puli etc. Bitmapy kart są zapisywane razem z instalacją PS-a więc nie ma z tym kłopotu. Nie musisz skanować załych kart, kilka charakterystycznych pikseli wystarczy do identyfikacji każdej karty. Jeśli chodzi o wielkość puli to też można to zrobić przy pomocy OCR lub znaleźć adres w pamięci.
Do tego prosty schemat push/fold, których w necie jest od groma mi można grindować SnG/Turbo.

Zastosowanie Javy do tego zagadnienia jest mało efektowne. Najlepiej poszłoby to w pythonie lub C/C++.

0
Duży Terrorysta napisał(a):

Nie da się na podstawie danych z Pokerstars (czytaj zapisanych do DB Holdem Managera) zrobić bota, który w chwili rozdania będzie podejmował decyzję o zagraniu.
Jest tak dlatego, że HM zapisuje dane do DB po zakończeniu rączki. Innymi słowy, jak wyłączysz opcję zapisywania historii rozdań w Pokerstars, HM nie będzie zapisywał i w zasadzie nie będzie działał. ;)

Natomiast to co chcesz zrobić, to zastosować OCR-ke tj. rozpoznawanie obrazu, żeby bot wiedział jakie karty akurat ma rozegrać, ile jest w puli etc. Bitmapy kart są zapisywane razem z instalacją PS-a więc nie ma z tym kłopotu. Nie musisz skanować załych kart, kilka charakterystycznych pikseli wystarczy do identyfikacji każdej karty. Jeśli chodzi o wielkość puli to też można to zrobić przy pomocy OCR lub znaleźć adres w pamięci.
Do tego prosty schemat push/fold, których w necie jest od groma mi można grindować SnG/Turbo.

Zastosowanie Javy do tego zagadnienia jest mało efektowne. Najlepiej poszłoby to w pythonie lub C/C++.

No dobrze, ale co ze statystykami z Holdem Managera? Nie da się tych danych(statystyk) pobrać z Holdem Managera? albo z Hada? Had to czarne okienka z liczbami; http://i.imgur.com/cBMDr7E.png
I dlaczego java byłaby mało efektowna?

0

Zamiast bota do pokera - co jest wg mnie ogromną misją- samo napisanie jako takiego działającego bota jest dużym osiągnięciem, zaś co dopiero nauczyć go podejmowania decyzji, może lepiej napisać sobie narzędzie do obliczania statystyk/prawdopodobieństwa. Za pomocą OCR rozpoznawać karty jakie posiadasz, jakie są na stole i ile jest graczy. Aplikacja mogłaby wówczas pokazywać jakie masz np. szanse na wygraną - są takie kalkulatory w sieci, tylko wymagają ręcznego klikania i wybierania kart.

1
  1. Jest to nielegalne i pokerromy mają narzędzia do wykrywania i banowania botów.
  2. Żeby to zrobić musisz mieć coś do przechwytywania obrazu, rozpoznawania wzorców (kart, przeciwników itd.)
  3. Musisz mieć dość poważny system ekspercki, jest to trudny temat, samo 'podbijaj top 15% dobrych startowych układów i dąż do showdowna przy dodatnich oddsach nie wyjdzie.
  4. Musisz dobrze udawać, że klika człowiek, a nie skrypt. Pokerroomy wykryją, jeśli czas oczekiwania na ruch będzie miał jakiś pattern lub zawsze skrypt zawsze będzie klikał ten sam pixel.
  5. Eldorado pokera w necie skończyło się jakiś czas temu. Nie wiem czy da się obecnie napisać wygrywającego bota nawet na najniższych stawkach. Zwłaszcza mając tak niskie skille, jak prezentujesz (sory).
0

Zależy co ten bot ma robić. Jak chcesz go postawić na deep stack cash game, to faktycznie przydałaby się historia rozdań gracza/graczy i do tego jakieś algorytmy np. czy na river folduje do squeeze. Ale to jest bardzo zaawansowane.

Ja podaje najprostsze zastosowanie. Prosta tabela P/F i dla jakiego stosunku BB Stack/BB Pula oraz pozycji od Dealera, ma być pushowany dany zakres handów. Prosty algorytm:

  • określ pozycję od dealera,
  • odczytaj OCR karty,
  • odczytaj wartość puli, odczytaj wartość swojego stacka,
  • określ ilość BB Stack / BB Puli,
  • wczytaj zakres,
  • decyzja Push / Fold

To tak w dużym skrócie, ale wystarczy.

Poza tym, gracze pokerowi są bardzo czujni. I jakby grali vs bot na cashówce, jestem pewien żeby go wykryli.
Jak postawisz bota w takim młynie jaki się dzieje na Turbo MTT, to raczej nikt się nie połapie aż do FT.

A Java się nie nadaje, bo byłaby zbyt wolna. Poza tym, jeśli chciałbyś pobierać jakieś dane z przypisanych adresów pamięci Pokerstarsa, to jest to temat bardzo trudny.

0

Hmm... skoro projekt jest taki problematyczny to może obiorę sobie inny cel, taki który będzie nadawał się do portfolio... macie jakieś pomysły? Najlepiej coś związane z web, gdzie będę mógł wykorzystać na podstawowym poziomie; Spring, Hibernate i EJB.

0

Jeśli już to pokusiłbym się o zrobienie swojego Holdem Managera w Javie :)

Postawić DB w postgresie lub mysql, choć do tego wystarczy nawet sqlite.
W Javie zrobić odczytywanie zapisanych plików z PS-a i importowanie ich do DB. Do tego zrobić własnego HUDa. Myślę, że to byłby fajny i imponujący projekt.

A jeśli chcesz w Springu/HBM, to zrób standardowego RESTa, DB w sql i od strony klienta AngularJS. Jako cel obrać choćby dodawanie, usuwanie, edytowanie użytkowników/klientów sklepu etc. Wydawać się może, że to nudny pomysł, ale z drugiej strony nie jest to tak bardzo zaawansowane i lepiej poznasz Springa, SQL-a i Angulara.

Jeśli to jest zbyt łatwe i jak wspomniałem "nudne" to może webscraping lub współpraca z jakimś API. :)

Powodzenia

0
Duży Terrorysta napisał(a):

Jeśli już to pokusiłbym się o zrobienie swojego Holdem Managera w Javie :)

Postawić DB w postgresie lub mysql, choć do tego wystarczy nawet sqlite.
W Javie zrobić odczytywanie zapisanych plików z PS-a i importowanie ich do DB. Do tego zrobić własnego HUDa. Myślę, że to byłby fajny i imponujący projekt.
Po namyśle doszedłem do wniosku, że lepiej do pokera nie wracać...

A jeśli chcesz w Springu/HBM, to zrób standardowego RESTa, DB w sql i od strony klienta AngularJS. Jako cel obrać choćby dodawanie, usuwanie, edytowanie użytkowników/klientów sklepu etc. Wydawać się może, że to nudny pomysł, ale z drugiej strony nie jest to tak bardzo zaawansowane i lepiej poznasz Springa, SQL-a i Angulara.
Dzięki to będzie dobre jako pierwszy cel.

Jeśli to jest zbyt łatwe i jak wspomniałem "nudne" to może webscraping lub współpraca z jakimś API. :)

Na właśnie jako drugi cel wolałbym coś ciekawego i ambitnego, innego niż pierwszy cel(inne technologie). Co byście zaproponowali?

0

Poker to fajny temat, ale zrobienie managera historii rąk jest dużo bardziej osiągalne, a równie rozwojowe. Potrzebujesz napisać parser historii rąk, zbudować model danych w bazie, dorzucić interfejs, możesz wyciągać masę statystyk i pociągnąć to, w którą chcesz stronę.

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