Skip to content
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

Replacing Playing Time with an estimate #382

Open
nicidob opened this issue May 3, 2021 · 7 comments
Open

Replacing Playing Time with an estimate #382

nicidob opened this issue May 3, 2021 · 7 comments

Comments

@nicidob
Copy link
Contributor

nicidob commented May 3, 2021

I still believe the playing time mechanic is confusing to most new players. I think this is partially due to the fact that roster order also implicitly sets playing time. So there's actually 2 controls to playing time and not much clarity about how it's combined. Seeing new players just set their star players to [++] and have their team play terribly is heartbreaking.

I suggest a replacement: Drop the playing time adjustment completely. Replace the PT column with a "Minutes Estimate" (Or Snaps or % of minutes played, or something like that) based on the roster order. There's just one way to control PT (depth chart/roster order) and the game is more transparent about what the expected playing time is.

If you want your star at zero minutes? Drag them to the bottom of the roster page. It simplifies the game and avoids people using a system that usually steers them wrong (PT adjustment).

@dumbmatter
Copy link
Member

Current PT modifier system is definitely bad.

Estimating PT is a bit tricky... I guess a model could be built from ovr and endurance ratings

Bigger challenge: dragging someone to the bottom of the roster does not mean they won't play. In fact if you do that with your best player, he'll still play quite a bit from the last spot, due to how the substitution algorithm works (first player on roster whose fatigue-adjusted ability exceeds someone currently in the game). So after starters and top bench players are fatigued, the end of bench guy will get in and stay in for a while, unless there are a lot of good bench players above him so that he never gets a chance.

But I do like the idea of combining roster order and PT column into just one setting. It's simpler. There would just need to be a different algorithm for substitution patterns. And not just "estimated minutes played", because like I said above you could build a model for that. But the actual in-game substitution logic, it's less clear to me how that should work.

@nicidob
Copy link
Contributor Author

nicidob commented May 4, 2021

Yeah this is made pretty tricky by the implicit endurance <-> minutes relationship. You can't just say "only sub in if you're better AND have fewer minutes than everyone above you in the roster", since lower endurance players play fewer minutes and a low endurance player at the top of your roster would gate your whole lineup.

Hmm...

EDIT: Okay how about "sub in if you're better & have more energy than everyone above you" . I still don't like the substitution patterns in BBGM, but is that a minimal viable change to prototype this?

@nicidob
Copy link
Contributor Author

nicidob commented May 4, 2021

Yeah that idea worked fine. But this probably needs more thinking and tweaking of how the fatigue settings work.

added this little boolean to the gameSim

let subEnergy = true;
for (let b2 = 0; b2 < b; b2++) {
    subEnergy &&= this.team[t].player[b2].stat.energy <  this.team[t].player[b].stat.energy;
}

const benchIsValidAndBetter =
    this.team[t].player[p].stat.courtTime > 2 &&
    this.team[t].player[b].stat.benchTime > 2 &&
    ovrs[b] > ovrs[p] && 
    subEnergy;

and it worked just fine (maybe even too good?) at enforcing these lineups based on position alone
image

but it forced other teams to play their starters absurd minutes
image

@nicidob
Copy link
Contributor Author

nicidob commented May 4, 2021

this small change helps a tiny bit (and is probably the right thing in general): sub off roster order not overall.

// Sub off the lowest roster order guy first
for (let p = this.team[t].player.length; p >= 0 ; p--) {
    if (!this.playersOnCourt[t].includes(p)) {
        continue;
    }

But to get the roster order behavior working well, just do

this.team[t].player[b].stat.energy > this.team[t].player[p].stat.energy; 

in place of the ovr[b] > ovr[p]

This almost worked perfectly. I don't really understand why it passed over AD and played LeBron tho.
image

and the rest of the league is affected slightly in the other direction (top players often subbed out)
image

@dumbmatter
Copy link
Member

dumbmatter commented May 5, 2021

(How are you liking the improved watch performance? It's like magic!)

"Sub based on fatigue-adjusted ovr" is so nice though, it literally puts the best players on the floor. Maybe part of the problem is that fatigue matters too much, cause I'm worried even slight deviations from optimal substitution patterns are going to have big effects on stats.

You'd also lose out on different substitution patterns based on depth...

@nicidob
Copy link
Contributor Author

nicidob commented May 5, 2021

if the roster is sorted by OVR, I'm actually a little confused why this substitution pattern isn't the same as the current one. Lowest roster order should go out first (lowest OVR), highest roster order should come in first (highest OVR) and energy1 > energy2 should be correlated with the fatigue adjustment...

The entire pattern is based on iterating by depth so I don't get how I'd lose the depth-based strategies?

Oh wait..I think I've an idea about why the pattern is slightly different. the substitution pointer doesn't stop at the current player... hmm..

@nicidob
Copy link
Contributor Author

nicidob commented May 5, 2021

Yeah I think the fatigue system may be a little heavy handed right now.

However, I do think this change is fairly subtle, so it may be a good start. But what I noticed is that the super-stars all get even more super-star with the fewer minutes. The PERs shoot up like crazy. check out MIN here. or the award races (FYI: Murray missed 50 games so Jokic took far more shots in the 'old' sim. In the new sim, Murray plays all 82)
image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants