Conversation
We've used the Balanced PB algorithm for various things by now: Balanced PB itself, the goal generator, the PB chance and it theoretically could also be used for the median segments and for calculating the simple sum of best and worst segments. The underlying curve that is being sampled here contains lots of interesting information, so it makes sense to expose it for analysis purposes in the API. I dubbed it the "skill curve" here, but the name is not necessarily final.
|
I've also tried interpolation search, which should search the curve much faster (as a separate local commit), but the curve usually has a fairly exponential shape (it's much rarer to play extremely well than extremely bad), so the interpolation search is constantly underestimating where the time would be. We would need to do a variant of interpolation search that doesn't just linearly interpolate. |
There was a problem hiding this comment.
This is super cool. It's nice to see how the "Balanced PB algorithm" has evolved into something that we can also use for the PB chance and for generating goal comparisons. Having all these calculations live in a separate module also seems way cleaner than before.
Also, I'm ok with the name "skill curve", but let me know if you come up with something that you think is better.
Co-authored-by: wooferzfg <spapushin@gmail.com>
|
A comment about the stats here - the actual chance of a PB should be much lower than the "PB chance" that we calculate if each segment's curve is exponential. We're doing our calculation based on the assumption that you'll play equally well across all segments, but that's not actually what happens in practice. I think this is ok though - I'd rather overestimate the PB chance in some cases rather than showing a discouraging number. |
This updates the documentation of the other algorithms to mention that they are based on the skill curve.
- Runs now support custom variables that are key value pairs that either the user can specify in the run editor or are provided by a script like an auto splitter. [#201](#201) - There is now an option in the run editor to generate a comparison based on a user specified goal time. This uses the same algorithm as the `Balanced PB` comparison but with the time specified instead of the personal best. [#209](#209) - Images internally are now stored as is without being reencoded as Base64 which was done before in order to make it easier for the web LiveSplit One to display them. [#227](#227) - The Splits.io API is now available under the optional `networking` feature. [#236](#236) - All key value based components share the same component state type now. [#257](#257) - The crate now properly supports `wasm-bindgen` and `WASI`. [#263](#263) - There is now a dedicated component for displaying the comparison's segment time. [#264](#264) - Compiling the crate without `std` is now supported. Most features are not supported at this time though. [#270](#270) - [`Splitterino`](https://github.com/prefixaut/splitterino) splits can now be parsed. [#276](#276) - The `Timer` component can now show a segment timer instead. [#288](#288) - Gamepads are now supported on the web. [#310](#310) - The underlying "skill curve" that the `Balanced PB` samples is now exposed in the API. [#330](#330) - The layout states can now be updated, which means almost all of the allocations can be reused from the previous frame. This is a lot faster. [#334](#334) - In order to calculate a layout state, the timer now provides a snapshot mechanism that ensures that the layout state gets calculated at a fixed point in time. [#339](#339) - Text shaping is now done via `rustybuzz` which is a port of `harfbuzz`. [#378](#378) - Custom fonts are now supported. [#385](#385) - The renderer is not based on meshes anymore that are suitable for rendering with a 3D graphics API. Instead the renderer is now based on paths, which are suitable for rendering with a 2D graphics API such as Direct2D, Skia, HTML Canvas, and many more. The software renderer is now based on `tiny-skia` which is so fast that it actually outperforms any other rendering and is the recommended way to render. [#408](#408) - Remove support for parsing `worstrun` splits. `worstrun` doesn't support splits anymore, so `livesplit-core` doesn't need to keep its parsing support. [#411](#411) - Remove support for parsing `Llanfair 2` splits. `Llanfair 2` was never publicly available and is now deleted entirely. [#420](#420) - Hotkeys are now supported on macOS. [#422](#422) - The renderer is now based on two layers. A bottom layer that rarely needs to be rerendered and the top layer that needs to be rerendered on every frame. Additionally the renderer is now a scene manager which manages a scene that an actual rendering backend can then render out. [#430](#430) - The hotkeys are now based on the [UI Events KeyboardEvent code Values](https://www.w3.org/TR/uievents-code/) web standard. [#440](#440) - Timing is now based on `CLOCK_BOOTTIME` on Linux and `CLOCK_MONOTONIC` on macOS and iOS. This ensures that all platforms keep tracking time while the operating system is in a suspended state. [#445](#445) - Segment time columns are now formatted as segment times. [#448](#448) - Hotkeys can now be resolved to the US keyboard layout. [#452](#452) - They hotkeys are now based on `keydown` instead of `keypress` in the web. `keydown` handles all keys whereas `keypress` only handles visual keys and is also deprecated. [#455](#455) - Hotkeys can now be resolved to the user's keyboard layout on both Windows and macOS. [#459](#459) and [#460](#460) - The `time` crate is now used instead of `chrono` for keeping track of time. [#462](#462) - The scene manager now caches a lot more information. This improves the performance a lot as it does not need to reshape the text on every frame anymore, which is a very expensive operation. [#466](#466) and [#467](#467) - The hotkeys on Linux are now based on `evdev`, which means Wayland is now supported. Additionally the hotkeys are not consuming the key press anymore. [#474](#474) - When holding down a key, the hotkey doesn't repeat anymore on Linux, macOS and WebAssembly. The problem still occurs on Windows at this time. [#475](#475) and [#476](#476)
We've used the Balanced PB algorithm for various things by now: Balanced PB itself, the goal generator, the PB chance and it theoretically could also be used for the median segments and for calculating the simple sum of best and worst segments. The underlying curve that is being sampled here contains lots of interesting information, so it makes sense to expose it for analysis purposes in the API. I dubbed it the "skill curve" here, but the name is not necessarily final.