Controlflow of Open-Ended When-Conditions Not working

Coding-related discussion: OpenPPL (Poker Programming Language) and internal OpenHoldem-script
panXfocaccia
First blood
First blood
Posts: 17
Joined: Thu Jun 08, 2023 8:47 am

Re: Controlflow of Open-Ended When-Conditions Not working

Post by panXfocaccia »

Ok!
Thank you for the help, I will fix my code accordigly.
panXfocaccia
First blood
First blood
Posts: 17
Joined: Thu Jun 08, 2023 8:47 am

Re: Controlflow of Open-Ended When-Conditions Not working

Post by panXfocaccia »

It is still not working.

Code: Select all

// 25BB+
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.25
	WHEN list_3way_BB_vs_SB_LIMP__PUSH__25BB_r25 RaiseMax FORCE
	WHEN randomround <= 0.25 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r25 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.50
	WHEN list_3way_BB_vs_SB_LIMP__PUSH__25BB_r50 RaiseMax FORCE
	WHEN list_3way_BB_vs_SB_LIMP__ISO__25BB_r50 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.75
	WHEN list_3way_BB_vs_SB_LIMP__PUSH__25BB_r75 RaiseMax FORCE
	WHEN list_3way_BB_vs_SB_LIMP__ISO__25BB_r75 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0
	WHEN list_3way_BB_vs_SB_LIMP__ISO__25BB RaiseTo 3 FORCE
	WHEN Others Check FORCE

WHEN userBBvsSBLimp3WayEffStack25 AND Raises >= 1
	WHEN list_3way_BB_vs_SB_LIMP__ISO_TO_BROKE_25BB RaiseMax FORCE
	WHEN Others Fold FORCE

// 24BB
WHEN userBBvsSBLimp3WayEffStack24 AND Raises = 0 AND randomround <= 0.25
	WHEN list_3way_BB_vs_SB_LIMP__PUSH__24BB_r25 RaiseMax FORCE
	WHEN list_3way_BB_vs_SB_LIMP__ISO__24BB_r25 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack24 AND Raises = 0 AND randomround <= 0.50
	WHEN list_3way_BB_vs_SB_LIMP__PUSH__24BB_r50 RaiseMax FORCE
	WHEN list_3way_BB_vs_SB_LIMP__ISO__24BB_r50 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack24 AND Raises = 0 AND randomround <= 0.75
	WHEN list_3way_BB_vs_SB_LIMP__ISO__24BB_r75 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack24 AND Raises = 0
	WHEN list_3way_BB_vs_SB_LIMP__ISO__24BB RaiseTo 3 FORCE
	WHEN Others Check FORCE

WHEN userBBvsSBLimp3WayEffStack24 AND Raises >= 1 
	WHEN list_3way_BB_vs_SB_LIMP__ISO_TO_BROKE_24BB RaiseMax FORCE
	WHEN Others Fold FORCE
Now the Bot seems to stop running after these position is checked (It is not going further to check BTN or BBvSB_MR), but it starts playing by some Default.ohf file.

Have I done some mistake with the WHEN Others Fold FORCE?

Code: Select all

  userBBvsSBLimp3WayEffStack25 = 0.000
  userBBvsSBLimp3WayEffStack25 = 0.000
  userBBvsSBLimp3WayEffStack25 = 0.000
  userBBvsSBLimp3WayEffStack25 = 0.000
  userBBvsSBLimp3WayEffStack25 = 0.000
  userBBvsSBLimp3WayEffStack25 = 0.000
  userBBvsSBLimp3WayEffStack24 = 0.000
  userBBvsSBLimp3WayEffStack24 = 0.000
  userBBvsSBLimp3WayEffStack24 = 0.000
  userBBvsSBLimp3WayEffStack24 = 0.000
  userBBvsSBLimp3WayEffStack24 = 0.000
  userBBvsSBLimp3WayEffStack23 = 0.000
  userBBvsSBLimp3WayEffStack23 = 0.000
  userBBvsSBLimp3WayEffStack23 = 0.000
  userBBvsSBLimp3WayEffStack23 = 0.000
  userBBvsSBLimp3WayEffStack23 = 0.000
  userBBvsSBLimp3WayEffStack22 = 0.000
  userBBvsSBLimp3WayEffStack22 = 0.000
  userBBvsSBLimp3WayEffStack22 = 0.000
  userBBvsSBLimp3WayEffStack22 = 0.000
  userBBvsSBLimp3WayEffStack22 = 0.000
  userBBvsSBLimp3WayEffStack21 = 0.000
  userBBvsSBLimp3WayEffStack21 = 0.000
  userBBvsSBLimp3WayEffStack21 = 0.000
  userBBvsSBLimp3WayEffStack21 = 0.000
  userBBvsSBLimp3WayEffStack21 = 0.000
  userBBvsSBLimp3WayEffStack20 = 0.000
  userBBvsSBLimp3WayEffStack20 = 0.000
  userBBvsSBLimp3WayEffStack20 = 0.000
  userBBvsSBLimp3WayEffStack20 = 0.000
  userBBvsSBLimp3WayEffStack20 = 0.000
  userBBvsSBLimp3WayEffStack19 = 0.000
  userBBvsSBLimp3WayEffStack19 = 0.000
  userBBvsSBLimp3WayEffStack19 = 0.000
  userBBvsSBLimp3WayEffStack19 = 0.000
  userBBvsSBLimp3WayEffStack19 = 0.000
  userBBvsSBLimp3WayEffStack18 = 0.000
  userBBvsSBLimp3WayEffStack18 = 0.000
  userBBvsSBLimp3WayEffStack18 = 0.000
  userBBvsSBLimp3WayEffStack18 = 0.000
  userBBvsSBLimp3WayEffStack18 = 0.000
  userBBvsSBLimp3WayEffStack17 = 0.000
  userBBvsSBLimp3WayEffStack17 = 0.000
  userBBvsSBLimp3WayEffStack17 = 0.000
  userBBvsSBLimp3WayEffStack17 = 0.000
  userBBvsSBLimp3WayEffStack17 = 0.000
  userBBvsSBLimp3WayEffStack16 = 0.000
  userBBvsSBLimp3WayEffStack16 = 0.000
  userBBvsSBLimp3WayEffStack16 = 0.000
  userBBvsSBLimp3WayEffStack16 = 0.000
  userBBvsSBLimp3WayEffStack16 = 0.000
  userBBvsSBLimp3WayEffStack15 = 0.000
  userBBvsSBLimp3WayEffStack15 = 0.000
  userBBvsSBLimp3WayEffStack15 = 0.000
  userBBvsSBLimp3WayEffStack15 = 0.000
  userBBvsSBLimp3WayEffStack15 = 0.000
  userBBvsSBLimp3WayEffStack14 = 0.000
  userBBvsSBLimp3WayEffStack14 = 0.000
  userBBvsSBLimp3WayEffStack14 = 0.000
  userBBvsSBLimp3WayEffStack14 = 0.000
  userBBvsSBLimp3WayEffStack14 = 0.000
  userBBvsSBLimp3WayEffStack13 = 0.000
  userBBvsSBLimp3WayEffStack13 = 0.000
  userBBvsSBLimp3WayEffStack13 = 0.000
  userBBvsSBLimp3WayEffStack13 = 0.000
  userBBvsSBLimp3WayEffStack13 = 0.000
  userBBvsSBLimp3WayEffStack12 = 0.000
  userBBvsSBLimp3WayEffStack12 = 0.000
  userBBvsSBLimp3WayEffStack12 = 0.000
  userBBvsSBLimp3WayEffStack12 = 0.000
  userBBvsSBLimp3WayEffStack12 = 0.000
  userBBvsSBLimp3WayEffStack11 = 0.000
  userBBvsSBLimp3WayEffStack11 = 0.000
  userBBvsSBLimp3WayEffStack11 = 0.000
  userBBvsSBLimp3WayEffStack11 = 0.000
  userBBvsSBLimp3WayEffStack11 = 0.000
  userBBvsSBLimp3WayEffStack10 = 0.000
  userBBvsSBLimp3WayEffStack10 = 0.000
  userBBvsSBLimp3WayEffStack10 = 0.000
  userBBvsSBLimp3WayEffStack10 = 0.000
  userBBvsSBLimp3WayEffStack10 = 0.000
  userBBvsSBLimp3WayEffStack9half = 0.000
  userBBvsSBLimp3WayEffStack9half = 0.000
  userBBvsSBLimp3WayEffStack9half = 0.000
  userBBvsSBLimp3WayEffStack9half = 0.000
  userBBvsSBLimp3WayEffStack9half = 0.000
  userBBvsSBLimp3WayEffStack9 = 0.000
  userBBvsSBLimp3WayEffStack9 = 0.000
  userBBvsSBLimp3WayEffStack9 = 0.000
  userBBvsSBLimp3WayEffStack9 = 0.000
  userBBvsSBLimp3WayEffStack9 = 0.000
  userBBvsSBLimp3WayEffStack8half = 0.000
  userBBvsSBLimp3WayEffStack8half = 0.000
  userBBvsSBLimp3WayEffStack8half = 0.000
  userBBvsSBLimp3WayEffStack8half = 0.000
  userBBvsSBLimp3WayEffStack8half = 0.000
  userBBvsSBLimp3WayEffStack8 = 0.000
  userBBvsSBLimp3WayEffStack8 = 0.000
  userBBvsSBLimp3WayEffStack8 = 0.000
  userBBvsSBLimp3WayEffStack8 = 0.000
  userBBvsSBLimp3WayEffStack8 = 0.000
  userBBvsSBLimp3WayEffStack7half = 0.000
  userBBvsSBLimp3WayEffStack7half = 0.000
  userBBvsSBLimp3WayEffStack7half = 0.000
  userBBvsSBLimp3WayEffStack7half = 0.000
  userBBvsSBLimp3WayEffStack7half = 0.000
  userBBvsSBLimp3WayEffStack7 = 0.000
  userBBvsSBLimp3WayEffStack7 = 0.000
  userBBvsSBLimp3WayEffStack7 = 0.000
  userBBvsSBLimp3WayEffStack7 = 0.000
  userBBvsSBLimp3WayEffStack7 = 0.000
  userBBvsSBLimp3WayEffStack6half = 0.000
  userBBvsSBLimp3WayEffStack6half = 0.000
  userBBvsSBLimp3WayEffStack6half = 0.000
  userBBvsSBLimp3WayEffStack6half = 0.000
  userBBvsSBLimp3WayEffStack6half = 0.000
  userBBvsSBLimp3WayEffStackBelow6half = 0.000
  userBBvsSBLimp3WayEffStackBelow6half = 0.000
  DefaultPreflop = -1000009.000   [Line 2/22, DefaultBot.ohf]
    isomaha = 0.000
    istournament = 1.000
    Termita_SNG_Preflop = -1000009.000   [Line 19/45, Termita_SNG.ohf]
      TotalInvested = 0.083   [Line 1/137, OpenPPL_Library_Bets_Pots_And_Stacks.ohf]
        IsPreflop = 1.000   [Line 1/72, OpenPPL_Library_Verbosity.ohf]
        [...]
        
Alex
Site Admin
Site Admin
Posts: 3112
Joined: Sun Mar 26, 2017 5:58 pm

Re: Controlflow of Open-Ended When-Conditions Not working

Post by Alex »

i would say, that something is wrong with your "user" variables, because all of them are zero (from your log).
also, though "WHEN Others Check FORCE" is not a mistake, usually we use "WHEN Others Fold FORCE", because bot should never fold, when "check" is possible anyway
panXfocaccia
First blood
First blood
Posts: 17
Joined: Thu Jun 08, 2023 8:47 am

Re: Controlflow of Open-Ended When-Conditions Not working

Post by panXfocaccia »

It is correct, they must be 0, the Bot was playing from the BTN.
The problem is that when I use such syntax the Bot stop reading the script and switches to something else
DefaultPreflop = -1000001.000 [Line 2/22, DefaultBot.ohf]

The logic for BTN is not even read as it is further below in the script.

So, I have done some testing, the bot logic breaks as soon as it finds indented code syntax.

My old code structure works perfectly, the Bot logic is linear and I do not encounter any bug
Ex.

Code: Select all

// 25BB+
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.25 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r25 RaiseMax FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.25 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r25 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.50 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r50 RaiseMax FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.50 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r50 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.75 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r75 RaiseMax FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.75 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r75 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND list_3way_BB_vs_SB_LIMP__ISO__25BB RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND NOT list_3way_BB_vs_SB_LIMP__ISO__25BB Check FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises >= 1 AND list_3way_BB_vs_SB_LIMP__ISO__25BB RaiseMax FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises >= 1 AND NOT list_3way_BB_vs_SB_LIMP__ISO__25BB Fold FORCE

As soon as I change a single line and insert indented code, it breaks:

Code: Select all

// 25BB+
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.25
	WHEN list_3way_BB_vs_SB_LIMP__PUSH__25BB_r25 RaiseMax FORCE
	WHEN randomround <= 0.25 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r25 RaiseTo 3 FORCE

WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.50 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r50 RaiseMax FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.50 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r50 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.75 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r75 RaiseMax FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.75 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r75 RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND list_3way_BB_vs_SB_LIMP__ISO__25BB RaiseTo 3 FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND NOT list_3way_BB_vs_SB_LIMP__ISO__25BB Check FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises >= 1 AND list_3way_BB_vs_SB_LIMP__ISO__25BB RaiseMax FORCE
WHEN userBBvsSBLimp3WayEffStack25 AND Raises >= 1 AND NOT list_3way_BB_vs_SB_LIMP__ISO__25BB Fold FORCE
panXfocaccia
First blood
First blood
Posts: 17
Joined: Thu Jun 08, 2023 8:47 am

Re: Controlflow of Open-Ended When-Conditions Not working

Post by panXfocaccia »

After further testing I am 100% sure that indentation breaks the reading of bot logic.
I have done a very simple test adding a basic controlflow condition:
Screenshot 2023-07-23 213601.png
Screenshot 2023-07-23 213601.png (144.13 KiB) Viewed 954 times
The reading stops there and another file is loaded to carry on the play.

Code: Select all

userBBvsSBLimp3Way = 0.000
  userBBvsSBLimp3Way = 0.000
  userBBvsSBLimp3Way = 0.000
  userBBvsSBLimp3Way = 0.000
  FirstCallerPosition = -1.000   [Line 13/202, OpenPPL_Library_Position_Symbols.ohf]
    EarlyPosition1Calling = 0.000   [Line 1/76, OpenPPL_Library_Technical_Position_Symbols.ohf]
      callbits1 = 0.000
      callbits_preflop = 0.000
      ep1chair = -1.000
    EarlyPosition2Calling = 0.000   [Line 1/79, OpenPPL_Library_Technical_Position_Symbols.ohf]
      ep2chair = -1.000
    EarlyPosition3Calling = 0.000   [Line 1/82, OpenPPL_Library_Technical_Position_Symbols.ohf]
      ep3chair = -1.000
    MiddlePosition1Calling = 0.000   [Line 1/85, OpenPPL_Library_Technical_Position_Symbols.ohf]
      mp1chair = -1.000
    MiddlePosition2Calling = 0.000   [Line 1/88, OpenPPL_Library_Technical_Position_Symbols.ohf]
      mp2chair = -1.000
    MiddlePosition3Calling = 0.000   [Line 1/91, OpenPPL_Library_Technical_Position_Symbols.ohf]
      mp3chair = -1.000
    CutOffCalling = 0.000   [Line 1/94, OpenPPL_Library_Technical_Position_Symbols.ohf]
      cutoffchair = -1.000
    ButtonCalling = 0.000   [Line 1/97, OpenPPL_Library_Technical_Position_Symbols.ohf]
      buttonchair = 3.000
    SmallBlindCalling = 0.000   [Line 1/100, OpenPPL_Library_Technical_Position_Symbols.ohf]
      smallblindchair = 6.000
    HINT_No_FirstCaller = -1.000   [Line 1/359, OpenPPL_Library_Constants.ohf]
  DefaultPreflop = -1000009.000   [Line 2/22, DefaultBot.ohf]
    isomaha = 0.000
    istournament = 1.000
    Termita_SNG_Preflop = -1000009.000   [Line 19/45, Termita_SNG.ohf]
      TotalInvested = 0.125   [Line 1/137, OpenPPL_Library_Bets_Pots_And_Stacks.ohf]
        IsPreflop = 1.000   [Line 1/72, OpenPPL_Library_Verbosity.ohf]
          betround = 1.000
          preflop = 1.000
        Ante = 0.125   [Line 2/68, OpenPPL_Library_Ante_Others_IsFinalTable.ohf]
        [...]
EDIT: Also tried with parenthesis or copy/pasting some open-ended when-condition from KOR profile. Nothing works
Alex
Site Admin
Site Admin
Posts: 3112
Joined: Sun Mar 26, 2017 5:58 pm

Re: Controlflow of Open-Ended When-Conditions Not working

Post by Alex »

you are forgetting to add:

Code: Select all

WHEN Others
after your opened blocks

For example:

Code: Select all

// 25BB+
WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.25
	WHEN list_3way_BB_vs_SB_LIMP__PUSH__25BB_r25 RaiseMax FORCE
	WHEN randomround <= 0.25 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r25 RaiseTo 3 FORCE

WHEN Others

WHEN userBBvsSBLimp3WayEffStack25 AND Raises = 0 AND randomround <= 0.50 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r50 RaiseMax FORCE
etc....
And because of it, your code blocks continue to fall under previous open-ended conditions and everything is messed up
panXfocaccia
First blood
First blood
Posts: 17
Joined: Thu Jun 08, 2023 8:47 am

Re: Controlflow of Open-Ended When-Conditions Not working

Post by panXfocaccia »

It is working now!

Thank you :D
I had to change the structure to something more tidy and easy to read, but I am very happy with the result

Code: Select all

// 25BB+
WHEN userBBvsSBLimp3WayEffStack25
	WHEN Raises = 0 AND randomround <= 0.25 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r25 RaiseMax FORCE
	WHEN Raises = 0 AND randomround <= 0.25 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r25 RaiseTo 3 FORCE
	WHEN Raises = 0 AND randomround <= 0.50 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r50 RaiseMax FORCE
	WHEN Raises = 0 AND randomround <= 0.50 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r50 RaiseTo 3 FORCE
	WHEN Raises = 0 AND randomround <= 0.75 AND list_3way_BB_vs_SB_LIMP__PUSH__25BB_r75 RaiseMax FORCE
	WHEN Raises = 0 AND randomround <= 0.75 AND list_3way_BB_vs_SB_LIMP__ISO__25BB_r75 RaiseTo 3 FORCE
	WHEN Raises = 0 AND list_3way_BB_vs_SB_LIMP__ISO__25BB RaiseTo 3 FORCE
	WHEN Raises >= 1 AND list_3way_BB_vs_SB_LIMP__ISO__25BB RaiseMax FORCE
WHEN Others
Post Reply