WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Installation PokerPredictor

 

KeRo
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2014, 23:58     Titel: Installation PokerPredictor
  Antworten mit Zitat      
Hallo,

ich bin durch Zufall auf den Poker Predictor von Luigi Giaccari (http://blogs.mathworks.com/pick/2009/12/11/the-finest-poker-brains-on-your-side/) gestoßen.
Leider ist die Webseite zur Installationsanleitung nicht mehr aktiv :/ (http://www.advancedmcode.org/poker-predictor.html) und ich bekomme das leider nicht zum laufen.
Ich hoffe ihr könnt mir hierbei helfen Smile

Ich öffne die "PokerPredictor.m" Datei, und starte diese.
Programm startet, sobald ich auf "Continue" klicken tauchen ein Reihe von Fehlern auf, und es werden auch keine Wahrscheinlichkeiten berechnet.

Vielen Dank Smile

PokerPredictorFEX.zip
 Beschreibung:

Download
 Dateiname:  PokerPredictorFEX.zip
 Dateigröße:  193.87 KB
 Heruntergeladen:  472 mal
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.01.2014, 09:58     Titel:
  Antworten mit Zitat      
Zitat:
tauchen ein Reihe von Fehlern auf

da wir leider nicht an deinem rechner sitzen und die fehler sehen währe es hilfreich diese auch zu posten ^^
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
KeRo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 11:39     Titel:
  Antworten mit Zitat      
Nachdem ich auf "Continue" geklickt habe, öffnet sich der Pokertisch und diese Fehlermeldung im Befehls- Fenster:

Zitat:
Undefined function or variable 'TablePtr'.

Error in PokerPredictor (line 383)
[ PlayerHighRank,OpponentHighRank,WinTieOdd]=GameSimulation...


Sobald ich versuche die freien Kartenslots mit Karten zu füllen kommt:

Zitat:
Undefined function or variable 'TablePtr'.

Error in PokerPredictor/DeckCardClick (line 596)
[
PlayerHighRank,OpponentHighRank,WinTieOdd]=GameSimulation...
Error while evaluating uicontrol Callback


Hoffe das hilft Smile
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
KeRo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 12:26     Titel:
  Antworten mit Zitat      
niemand eine Idee wieso:

Code:
Undefined function or variable 'TablePtr'.
 


kommt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.02.2014, 13:04     Titel:
  Antworten mit Zitat      
Die Fehlermeldung an sich ist ja klar. TablePtr ist nicht bekannt

Es ist gibt 2 Möglichkeiten warum: Entweder gibt es TablePtr nicht, oder es wird nicht gefunden. Daher Schritt 1: Rechner auf Vorhandensein von TablePtr.* durchsuchen. Falls nicht vorhanden -> Problem klar. Falls vorhanden das Verzeichnis mittels ADDPATH oder per MATLAB Menü so hinzufügen, dass MATLAB es finden kann.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
KeRo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 17:36     Titel:
  Antworten mit Zitat      
Vielen Dank, hat erstmal geholfen!
Die "BuildTable.cpp" lag im flaschen Ordner.

Die nächsten Fehlermeldugen waren:
Zitat:
" Error: Could not detect a compiler on local system
which can compile the specified input file(s)
Before Compiling Files you need to download the HandRanks table,
Follow the Installation instructions on:
http://www.advancedmcode.org/poker-predictor.html "


Da es die angegebene Seite leider nicht mehr gibt, habe ich folgendes gemacht:

- HandRanks.dat heruntergeladen
- und den nötigen Compiler installieren (http://www.microsoft.com/en-us/download/details.aspx?id=8279)
- mithilfe von 'mex -setup' in matlab ausgewählt

Nun crasht Matlab und schreibt folgendes:

Zitat:
MATLAB crash file:C:\Users\mh\AppData\Local\Temp\matlab_crash_dump.4324-1:


------------------------------------------------------------------------
Segmentation violation detected at Mon Feb 10 17:35:14 2014
------------------------------------------------------------------------

Configuration:
Crash Decoding : Disabled
Default Encoding : windows-1252
MATLAB Architecture: win64
MATLAB Root : D:\Sonstiges\MatLab
MATLAB Version : 8.1.0.604 (R2013a)
Operating System : Microsoft Windows 7
Processor ID : x86 Family 6 Model 58 Stepping 9, GenuineIntel
Virtual Machine : Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode
Window System : Version 6.1 (Build 7601: Service Pack 1)

Fault Count: 1


Abnormal termination:
Segmentation violation

Register State (from fault):
RAX = 0000000000000035 RBX = 0000000000000004
RCX = 0000000000000047 RDX = 0000000101a54d94
RSP = 00000000040264e0 RBP = 0000000000000009
RSI = 0000000101a54d90 RDI = 00000000000186a0

R8 = 0000000101980050 R9 = 0000000018fd0040
R10 = 0000000000000005 R11 = 0000000000000001
R12 = 0000000101980040 R13 = 00000001017e5ec0
R14 = 0000000000000009 R15 = 0000000004026600

RIP = 000007feeb3f13db EFL = 00010202

CS = 0033 FS = 0053 GS = 002b

Stack Trace (from fault):
[ 0] 0x000007feeb3f13db C:\Users\mh\Documents\MATLAB\PokerPredictorFEX\GameSimulation.mexw64+00005083
[ 1] 0x000007feeb3f18bf C:\Users\mh\Documents\MATLAB\PokerPredictorFEX\GameSimulation.mexw64+00006335 mexFunction+00000431
[ 2] 0x0000000004e3f731 D:\Sonstiges\MatLab\bin\win64\libmex.dll+00063281 mexRunMexFile+00000129
[ 3] 0x0000000004e3e202 D:\Sonstiges\MatLab\bin\win64\libmex.dll+00057858 inSwapMexfileReader+00000226
[ 4] 0x0000000004e3f2b4 D:\Sonstiges\MatLab\bin\win64\libmex.dll+00062132 _constructor_lm_mexmaci64+00001620
[ 5] 0x0000000074e8c64f D:\Sonstiges\MatLab\bin\win64\m_dispatcher.dll+00050767 Mfh_file::dispatch_fh+00000623
[ 6] 0x0000000074e8ced2 D:\Sonstiges\MatLab\bin\win64\m_dispatcher.dll+00052946 Mfunction_handle::dispatch+00000802
[ 7] 0x00000000046ebc7b D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00834683 inDestroyWS+00392123
[ 8] 0x00000000046db091 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00766097 inDestroyWS+00323537
[ 9] 0x00000000046c008f D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00655503 inDestroyWS+00212943
[ 10] 0x00000000046d65a4 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00746916 inDestroyWS+00304356
[ 11] 0x00000000046cc3b0 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00705456 inDestroyWS+00262896
[ 12] 0x00000000046c8fe4 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00692196 inDestroyWS+00249636
[ 13] 0x00000000046e021f D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00786975 inDestroyWS+00344415
[ 14] 0x00000000046e0370 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00787312 inDestroyWS+00344752
[ 15] 0x00000000046bf1dd D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00651741 inDestroyWS+00209181
[ 16] 0x00000000046c0bd0 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00658384 inDestroyWS+00215824
[ 17] 0x00000000046acf79 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00577401 inDestroyWS+00134841
[ 18] 0x0000000074e8c64f D:\Sonstiges\MatLab\bin\win64\m_dispatcher.dll+00050767 Mfh_file::dispatch_fh+00000623
[ 19] 0x0000000074e8ced2 D:\Sonstiges\MatLab\bin\win64\m_dispatcher.dll+00052946 Mfunction_handle::dispatch+00000802
[ 20] 0x00000000046c6d48 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00683336 inDestroyWS+00240776
[ 21] 0x000000000463f9f7 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00129527 inFullEvalFcn+00022023
[ 22] 0x00000000046ca877 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00698487 inDestroyWS+00255927
[ 23] 0x00000000046e021f D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00786975 inDestroyWS+00344415
[ 24] 0x00000000046e0370 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00787312 inDestroyWS+00344752
[ 25] 0x00000000046bf1dd D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00651741 inDestroyWS+00209181
[ 26] 0x00000000046c0bd0 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00658384 inDestroyWS+00215824
[ 27] 0x00000000046acf79 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00577401 inDestroyWS+00134841
[ 28] 0x0000000074e8c64f D:\Sonstiges\MatLab\bin\win64\m_dispatcher.dll+00050767 Mfh_file::dispatch_fh+00000623
[ 29] 0x0000000074e8ced2 D:\Sonstiges\MatLab\bin\win64\m_dispatcher.dll+00052946 Mfunction_handle::dispatch+00000802
[ 30] 0x000000000462e70e D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00059150 inValidateLoadedObject+00002350
[ 31] 0x0000000004736495 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+01139861 IInterpreter::IInterpreter+00000229
[ 32] 0x000000000473ca45 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+01165893 inRegisterFunctionHandles+00004405
[ 33] 0x000000000473ca12 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+01165842 inRegisterFunctionHandles+00004354
[ 34] 0x000000000473c9d7 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+01165783 inRegisterFunctionHandles+00004295
[ 35] 0x000000000472ba0e D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+01096206 inGetSeqVarPtrsFromCurrentWS+00005742
[ 36] 0x000000000462be89 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00048777 inEvalCmdWithLocalReturn+00000329
[ 37] 0x000000000462bdcc D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00048588 inEvalCmdWithLocalReturn+00000140
[ 38] 0x000000000462bd81 D:\Sonstiges\MatLab\bin\win64\m_interpreter.dll+00048513 inEvalCmdWithLocalReturn+00000065
[ 39] 0x0000000079fbbecd D:\Sonstiges\MatLab\bin\win64\libmwbridge.dll+00048845 mnDebugPrompt+00000109
[ 40] 0x0000000079fbd01b D:\Sonstiges\MatLab\bin\win64\libmwbridge.dll+00053275 mnParser+00000763
[ 41] 0x000000007499daa4 D:\Sonstiges\MatLab\bin\win64\mcr.dll+00187044 mcrInstance::mnParser_on_interpreter_thread+00000036
[ 42] 0x0000000074982220 D:\Sonstiges\MatLab\bin\win64\mcr.dll+00074272 mcr::setInterpreterThreadToCurrent+00031664
[ 43] 0x0000000074982280 D:\Sonstiges\MatLab\bin\win64\mcr.dll+00074368 mcr::setInterpreterThreadToCurrent+00031760
[ 44] 0x0000000005d6f9d6 D:\Sonstiges\MatLab\bin\win64\uiw.dll+00391638 UIW_IsUserMessage+00000086
[ 45] 0x0000000005d70095 D:\Sonstiges\MatLab\bin\win64\uiw.dll+00393365 UIW_SetGLIMUserMsg+00000117
[ 46] 0x00000000770087fe C:\Windows\system32\USER32.dll+00165886 GetMenuBarInfo+00000638
[ 47] 0x0000000076fef5fb C:\Windows\system32\USER32.dll+00062971 SystemParametersInfoW+00000235
[ 48] 0x0000000076ff4895 C:\Windows\system32\USER32.dll+00084117 IsProcessDPIAware+00000465
[ 49] 0x00000000771311f5 C:\Windows\SYSTEM32\ntdll.dll+00332277 KiUserCallbackDispatcher+00000031
[ 50] 0x0000000076ff908a C:\Windows\system32\USER32.dll+00102538 PeekMessageW+00000186
[ 51] 0x0000000076ff50fe C:\Windows\system32\USER32.dll+00086270 GetKeyState+00000238
[ 52] 0x0000000076ff3a6f C:\Windows\system32\USER32.dll+00080495 PeekMessageA+00000087
[ 53] 0x0000000005d49a1b D:\Sonstiges\MatLab\bin\win64\uiw.dll+00236059 UIW_SetCurrentDialog+00000731
[ 54] 0x0000000005d71532 D:\Sonstiges\MatLab\bin\win64\uiw.dll+00398642 ws_FreeSystemFont+00000482
[ 55] 0x00000000043c8930 D:\Sonstiges\MatLab\bin\win64\libmwservices.dll+00887088 services::system_events::PpeDispatchHook::~PpeDispatchHook+00055600
[ 56] 0x00000000043c92f5 D:\Sonstiges\MatLab\bin\win64\libmwservices.dll+00889589 services::system_events::PpeDispatchHook::~PpeDispatchHook+00058101
[ 57] 0x00000000043ca100 D:\Sonstiges\MatLab\bin\win64\libmwservices.dll+00893184 services::system_events::PpeDispatchHook::~PpeDispatchHook+00061696
[ 58] 0x00000000043d28d2 D:\Sonstiges\MatLab\bin\win64\libmwservices.dll+00927954 svWS_ProcessPendingEvents+00001090
[ 59] 0x000000007498329d D:\Sonstiges\MatLab\bin\win64\mcr.dll+00078493 mcr::setInterpreterThreadToCurrent+00035885
[ 60] 0x0000000074983562 D:\Sonstiges\MatLab\bin\win64\mcr.dll+00079202 mcr::setInterpreterThreadToCurrent+00036594
[ 61] 0x0000000074976915 D:\Sonstiges\MatLab\bin\win64\mcr.dll+00026901 mcrInstantiationError::operator=+00003781
[ 62] 0x0000000074979d52 D:\Sonstiges\MatLab\bin\win64\mcr.dll+00040274 mcr_invoke_on_interpreter_thread+00001602
[ 63] 0x0000000140005591 D:\Sonstiges\MatLab\bin\win64\MATLAB.exe+00021905
[ 64] 0x0000000140005c3a D:\Sonstiges\MatLab\bin\win64\MATLAB.exe+00023610
[ 65] 0x0000000140006103 D:\Sonstiges\MatLab\bin\win64\MATLAB.exe+00024835
[ 66] 0x0000000076ed652d C:\Windows\system32\kernel32.dll+00091437 BaseThreadInitThunk+00000013
[ 67] 0x000000007710c541 C:\Windows\SYSTEM32\ntdll.dll+00181569 RtlUserThreadStart+00000033


This error was detected while a MEX-file was running. If the MEX-file
is not an official MathWorks function, please examine its source code
for errors. Please consult the External Interfaces Guide for information
on debugging MEX-files.

If this problem is reproducible, please submit a Service Request via:
http://www.mathworks.com/support/contact_us/

A technical support engineer might contact you with further information.

Thank you for your help.


Habt ihr eine Idee?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 11.02.2014, 09:02     Titel:
  Antworten mit Zitat      
Der nächste Schritt liegt in diesen Meldungsfragmenten:

Zitat:

Stack Trace (from fault):
[ 0] 0x000007feeb3f13db C:\Users\mh\Documents\MATLAB\PokerPredictorFEX\GameSimulation.mexw64+00005083


und

Zitat:

This error was detected while a MEX-file was running. If the MEX-file
is not an official MathWorks function, please examine its source code
for errors. Please consult the External Interfaces Guide for information
on debugging MEX-files.


Es liegt also an GameSimulation.mexw64 - nicht direkt an MATLAB. Vermutlich ein Kompatibilitätsproblem. Der Autor dürfte mit einer früheren Version als R2013a gearbeitet haben. Solle der Source Code für GameSimulation.mexw64 vorliegen, also GameSimulation.c oder GameSimulation.cpp, dann ist es möglich (durch Ausführen der MEX Befehls) die MEXW64 Datei neu zu erstellen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
KeRo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2014, 14:48     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort!

Also die 'GameSimulation.cpp' liegt vor und wird mittels

Code:
mex GameSimulation.cpp


umgewandelt. Der beschriebene Fehler taucht auf, sobald die GameSimulation.cpp mittels mex-Befehl umgewandelt werden soll.

Die GameSimulation.cpp sieht wie folgt aus:

Code:
#include "mex.h"
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <fstream>
#include <algorithm>
using namespace std;


//La Gateway funtion � alla fine del file!!!!!



int*HR;//set as global variable






///////////////////////
//typdefinitions
///////////////////////////


/////////////////////////
//Data structure
/////////////////////////  
   

   

   struct Statistic
   {
      float wins;
      float draws;
      float Odd;
      float PlayerHigherHand[10];
      float OpponentHigherHand[10];
   
   };




/////////////////////////////////
//global funcitons
///////////////////////////////////
   void RandNumbers(int* p,int N,int pmax,int pmin) ;
   void PrintNumbers(int* p,int N);
    void GameSimulation(int* KnownCard,int NumPlayers,int NumSimulation,Statistic* Stat);
     void GetDeck(int* Deck,bool* Picked);
    void RandGame(int* Deck,int N,int Nump);
      void ResetStat(Statistic* Stat);
     void TestRandNumbers(int*p,int N);
     void NormalizeStat(Statistic* Stat,float Ns);

//////////////////////////
//Global variables



void RandNumbers(int* p,int N,int pmax,int pmin)
{//function to generate random points in pmin-pmax range



// loop to generate random points not normalized
    int i;//counter;

   pmax=pmax-pmin+1;//necessario per l'operatore %
    for (i=0;i<N;i++)
   {
      p[i]=pmin+rand()%pmax;
   }
   //debug
   //PrintNumbers(p,N);
   //TestRandNumbers(p,N);

}




void GetDeck(int* Deck,bool* Picked)
{   //This funtion generates a deck of cards. Cards are inticated as integer numbers from 1 to 52
   //Note Deck is an array of (52-knowncards) elements
    //Picked is a 52 elements boolean array, true if the card is known (or picked)

    int i;
   int c=0;

   for(i=0;i<52;i++)
   {
      if(! Picked[i])//only take unpicked
      {
       Deck[c]=i+1;//plus one per avere le carte da 1 a 52;
      c++;
      }
     
     
     
   }

}


void RandGame(int* Deck,int N,int Nump)
{  
   //Permutes deck = generate a random game
   //N is the deck size, only unknown cards
   //Nump is the maximum number of permutation, only first nump card will be permuted=faster!!!

    int i;
    int j;
   int temp;
   
   //generetes random numbers
   int* r=new int[Nump];
    RandNumbers(r,Nump,N-1,0) ;
     


   //generates the permutation
   for (i=0;i<Nump;i++)
   {  
      j=r[i];

      //Swap Deck[i] Deck[j]
        temp=Deck[i];
      Deck[i]=Deck[j];
      Deck[j]=temp;
     
   }
   
   delete[]r;
}





void GameSimulation(int* KnownCard,int NumPlayers,int NumSimulation,Statistic* Stat)
{  
  //Known card is an integer array of numpalyers*2 + 5 elemnts, it indicats all possible known
   //known card in texas holdem game. unknown card are flagged as -1.
   //NumPlayers and NumSimulation is obvious, Stat is the store for statistics


   //Allocate memory

   bool Picked[52]={false};//detecs known/picked cards
    int numKnownCards=0;//NUmber of known cards
   int i,c,j,n;//counters
   

   float numTie;//number of ties
   int HighestRank;
   int Rank,myRank;
   int idwin,idwinmax;
   int rank5;//rank after 5cards evaluation
   



   srand( (unsigned)time( NULL ) );//seed the random generator

   bool* Known=new bool[(NumPlayers*2+5)];//detecs from the possible known cards those that truly are known
    for(i=0;i<(NumPlayers*2+5);i++) Known[i]=false;//set to false;

    //Reset Statistics, make sure all values are zeros
   ResetStat(Stat);
   

 

   //counts known cards and generates the deck
   for (i=0;i<(NumPlayers*2+5);i++)
   {
      if (KnownCard[i]>0)//check if card is actually known
      {
            Picked[KnownCard[i]-1]=true;//yes it is
            numKnownCards++;
         Known[i]=true;//it is known
      }

   }

    //Generates deck

   int* Deck=new int[52-numKnownCards];
   GetDeck(Deck,&Picked[0]);

     //Debug
    //PrintCards(Deck,52-numKnownCards);


   


    //Run simulation

    for(n=0;n<NumSimulation;n++)
    {
          //Permutes
       RandGame(Deck,52-numKnownCards,NumPlayers*2+5);
       //Debug
       //PrintCards(Deck,52-numKnownCards);
         
     
       //Give and evaluate table cards
       c=0;//Deck counter
       j=2;//Hand counter
       rank5=53;//like the evaluator help says
       for(i=NumPlayers*2;i<NumPlayers*2+5;i++)
       {
          if (Known[i])
          {//if known evaluate with known card
             rank5=HR[rank5+KnownCard[i]];
          }
          else
          {//if unknown evaluate with deck card
                 rank5=HR[rank5+Deck[c]];
             c++;
          }
          j++;
       }
       
     


   

        //Now we can computes habd ranks
       

       //My rank
          //My cards
       (Known[0])?  myRank=HR[rank5+KnownCard[0]]  :     myRank=HR[rank5+Deck[c]],c++;
       (Known[1])?  myRank=HR[myRank+KnownCard[1]]   :   myRank=HR[myRank+Deck[c]],c++;
     
       idwin=myRank>>12;//gets my win id
       
       Stat->PlayerHigherHand[idwin]++;
         
       //Debug
       //printf("HandRank: %4.1d \n",idwin);
     

        HighestRank=-1;
       numTie=2;

       //Gets higher handrank from others players
      for(i=1;i<NumPlayers;i++)
      {      
         Rank=rank5;
              j=i*2;
          (Known[j])? Rank=HR[rank5+KnownCard[j]]  :     Rank=HR[rank5+Deck[c]],c++;
          j++;
           (Known[j])? Rank=HR[Rank+KnownCard[j]]   :    Rank=HR[Rank+Deck[c]],c++;
         
       
              idwin=Rank>>12;

           //Debug
           // printf("HandRank: %4.1d \n",idwin);
            if (Rank>HighestRank)
          {
             idwinmax=idwin;
             HighestRank=Rank;
             numTie=2;
          }    
          else if (Rank==HighestRank)
          {
            numTie++;
            idwinmax=idwin;
          }
      }
   
   
       //Now compare higher player rank with mine
        Stat->OpponentHigherHand[idwinmax]++;
           
      if (myRank>HighestRank)//win
      {
         Stat->wins++;
         Stat->Odd++;
      }
      else if (myRank==HighestRank)//Tie
      {
            Stat->draws++;
         Stat->Odd=Stat->Odd+1/numTie;
      }
   
   
    }//end simulation


   
//       for(i=0;i<10;i++)
//       { mexPrintf("Stat->OpponentHigherHand[]= %4.2f\n",Stat->OpponentHigherHand[i]);}
//    
   


   //Deallocate Memory

   delete[] Known;
}


void ResetStat(Statistic* Stat)
{   //Reset all statstics values to zero
   int i;
   
   Stat->wins=0;
   Stat->draws=0;
   Stat->Odd=0;
   for (i=0;i<10;i++)
   {
      Stat->OpponentHigherHand[i]=0;
      Stat->PlayerHigherHand[i]=0;
   }
}






//void TestRandNumbers(int*p,int N)
//{
//   //counts frequency of random numbers
//   int j,i;
//   for(i=0;i<N;i++)
//   {
//      j=p[i];
//      TESTr[j]++;
//   }
//}





void NormalizeStat(Statistic* Stat,float Ns)
{    
   int i;
   //Normalize statistics depending on number of simulations
      // mexPrintf("Ns: %4.1f \n",Ns);  
       Ns=Ns/100;//to express the percentage
        //    mexPrintf("Ns: %4.1f \n",Ns);
       
     //mexPrintf("Stat->Odd: %4.1f \n",Stat->Odd);  
      Stat->wins/=Ns;
      Stat->draws/=Ns;
      //Stat->Odd=(Ns*100)/Stat->Odd;//Odd=(simluations/wins)

      //Now we use the Odd value to compute the maximumBet/pot ratio
       Stat->Odd/=Ns;
      //Stat->Odd=Stat->Odd/(100-Stat->Odd); //La lasciamo calcolare al matlab


       //mexPrintf("Stat->Odd: %4.1f \n",Stat->Odd);  
       
      for (i=1;i<10;i++)//Slatala prima che sono errori
   {
      Stat->OpponentHigherHand[i]/=Ns;
      Stat->PlayerHigherHand[i]/=Ns;
      }
}





/* the gateway function */
//la chiamata deve essere :
//[PlayerStat,OpponenentStat,WinTieOdd]=GameSimulation(KnownCards,NumPlayers,NumSimulations,TablePtr)
//Errors flag:
// -2 Can not load table
// -1 Not enoguh memory



void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
 
 //dichiarazioni variabili  
 int i;
 double* ptr;
 
  if(nrhs!=4)
    mexErrMsgTxt("4 inputs required.");
  if(nlhs!=3)
    mexErrMsgTxt("Only 3 Outputs Supported");
 
       
    //Creazione Outputs
     plhs[0] = mxCreateDoubleMatrix(10,1,mxREAL);
     double* PlayerStat = mxGetPr(plhs[0]);
     
       plhs[1] = mxCreateDoubleMatrix(10,1,mxREAL);
     double* OpponentStat = mxGetPr(plhs[1]);
     
      plhs[2] = mxCreateDoubleMatrix(3,1,mxREAL);
     double* WinTieOdd = mxGetPr(plhs[2]);
 
   //Assegnazione inputs
     
     
     double* NumPlayers=mxGetPr(prhs[1]);
     double* NumSimulations=mxGetPr(prhs[2]);
   
     ptr=mxGetPr(prhs[3]);
     HR=(int*)((long)(ptr[0]));
     
      ptr=mxGetPr(prhs[0]);
     int* KnownCards= new int[(int)*NumPlayers*2+5];
     for(i=0;i<*NumPlayers*2+5;i++){KnownCards[i]=ptr[i];}
     
     
    if(HR==NULL)
    {
       *ptr=-2;//can not load table
      return;
   }

     
//      mexPrintf("HR: %4.1d \n",HR[0]);  
//     mexPrintf("HR: %4.1d \n",HR[100]);
//      mexPrintf("HR: %4.1d \n",HR[1000]);
//      mexPrintf("HR: %4.1d \n",HR[10000]);
   
    Statistic Stat;//Build Statistics structure
   
   
    GameSimulation(KnownCards,*NumPlayers,*NumSimulations,&Stat);//Run Simulations
   
   
    NormalizeStat(&Stat,*NumSimulations);//Normalize statistcs
   
    //Copy in the Output array
    for(i=0;i<10;i++){PlayerStat[i]=Stat.PlayerHigherHand[i];}
    for(i=0;i<10;i++){OpponentStat[i]=Stat.OpponentHigherHand[i];}
    WinTieOdd[0]=Stat.wins;
    WinTieOdd[1]=Stat.draws;
    WinTieOdd[2]=Stat.Odd;
   
   
   
   
    //Deallocate memory
    delete [] KnownCards;
     
}
 


Eine Idee?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 11.02.2014, 15:37     Titel:
  Antworten mit Zitat      
Ich bin nicht so erfahren mir C Code debuggen / S Functions, sorry. Ich weiss nur, dass die meisten S Function Crashes mit Speicherüberschreibungen zu tun haben.

Normalerweise würde man den Autor kontaktieren...

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
KeRo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2014, 12:06     Titel:
  Antworten mit Zitat      
Andreas Goser hat Folgendes geschrieben:
Ich bin nicht so erfahren mir C Code debuggen / S Functions, sorry. Ich weiss nur, dass die meisten S Function Crashes mit Speicherüberschreibungen zu tun haben.

Normalerweise würde man den Autor kontaktieren...

Andreas


Mist...gibt es kein Allerheilmittel für S- Functions und Crashes Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.