-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
probability function is wierd #233
Conversation
I Python så är "True" och "False" keywords för 1 och 0. Men den funktionen ser ändå lite konstig ut. Jag antar att superklassen vill att probability ska vara en float inte int. Så du kan ändra typehinten till float och sen ändra till return float(self.action(o=o) == a). Du kan även ändra kommentaren under def action() från "Multi-threshold..." till "Mixed PPO policy". |
Angående NDArray, denna type hintingen är nog fel: https://github.com/Limmen/csle/blob/master/simulation-system/libs/csle-common/src/csle_common/dao/training/ppo_policy.py#L54 Notera [0] på slutet:
Dvs model.predict returnerar en array men funktionen returnerar en int. Om mypy inte fattar att det är en int kan du kanske skriva return int(a) |
Kollade PPO doc och du har rätt att returntypen från predict är Tuple[np.ndarray, Optional[Tuple[np.ndarray, ...]]] Men den optional returneras inte i vårt fall så vi får bara en NdArray tillbaka och då borde [0] ge första elementet i array. |
Jag testkörde det precis och det stämmer det jag sa ovan. Men type hintingen för PPO verkar inte vara helt korrekt, det jag får tillbaka från predict() är (int, None), så när vi kör [0] får vi en int istället för en NdArray. |
Oh juste, jag glömde att ändra type-hinten när jag gjorde den där ändringen ja! |
Ja precis om det är så att vi får en int tillbaka så är deras dokumentation fel helt enkelt, då dom säger att första elementet i tuplen ska vara en NDArray och inget annat. Men bra då har jag koll |
Något som jag skulle kunna ha gjort fel är att type self.model som PPO. Nu när jag kör help(PPO.load) i IDLE så ser jag att det finns en return-typing som är ~SelfBaseAlgorithm method of abc.ABCMeta instance, vilket jag har svårt att hitta dokumentation kring. Däremot säger dom också att det just PPO.load returnerar en ny model med "loaded parameters", vilket känns som en PPO. Så även om det blir rätt i action kan just type-hintingen av self.model vara fel, ska se om jag kan rätta till det. |
Jag tror type hintingen är korrekt. PPO är en subklass av SelfBaseAlgorithm |
mixed_ppo_policy.py
Det är något med probability som inte går ihop. Den returnerar det uppenbart booleanska uttrycket self.action(o) == a, men type-hintingen säger att det ska vara en int som returneras. Dokumentationskommentaren säger att man ska returnera sannolikheten att erhålla heltalet a, och en sannolikhet är ett flyttal mellan 0-1. Dessutom är self.action en NDArray (har kollat PPO:s dokumentation) och inget heltal som a är, vilket också borde ge error vid körning (?).
Jag vet inte riktigt hur den här funktionen ska se ut, för den ska returnera en sannolikhet right?