Author Topic: Dynamic ENY  (Read 664 times)

Offline Stellaris

  • Nickel Member
  • ***
  • Posts: 402
Dynamic ENY
« on: May 17, 2013, 02:20:43 PM »
Why not have ENY values vary dynamically to reflect the relative effectiveness of each plane?  Every shootdown generates useful data on both plane and pilot.  Simply logistic analysis can then separate these to give relative plane effectiveness based on actual performance.

You could also adjust pilot scores according to relative ranks as well, as they do in chess.  When an ace downs a newbie - it's just about what we'd expect, so nobody's rank should change too much.  When a newbie downs an ace, that's quite unexpected, so the win and loss is much larger for both sides.


Offline gyrene81

  • Plutonium Member
  • *******
  • Posts: 11629
Re: Dynamic ENY
« Reply #1 on: May 17, 2013, 02:30:53 PM »
what about when the noob crashes into the ace? score collisions as zeros? what about when the ace augers his spixteen, zero there too?
how do you propose to measure "relative effectiveness of each plane"?
jarhed  
Build a man a fire and he'll be warm for a day...
Set a man on fire and he'll be warm for the rest of his life. - Terry Pratchett

Offline Wiley

  • Plutonium Member
  • *******
  • Posts: 8081
Re: Dynamic ENY
« Reply #2 on: May 17, 2013, 02:37:05 PM »
For that matter, how do you define an 'ace'?  Rank doesn't mean squat.

Wiley.
If you think you are having a 1v1 in the Main Arena, your SA has failed you.

JG11

Offline Tinkles

  • Silver Member
  • ****
  • Posts: 1501
Re: Dynamic ENY
« Reply #3 on: May 17, 2013, 02:59:58 PM »
Why not have ENY values vary dynamically to reflect the relative effectiveness of each plane?  Every shootdown generates useful data on both plane and pilot.  Simply logistic analysis can then separate these to give relative plane effectiveness based on actual performance.

You could also adjust pilot scores according to relative ranks as well, as they do in chess.  When an ace downs a newbie - it's just about what we'd expect, so nobody's rank should change too much.  When a newbie downs an ace, that's quite unexpected, so the win and loss is much larger for both sides.



This has been asked in the past. The deal breaker was..  Say you're a good pilot, you get lots o kills all the time.   The thing is, based on this, since you're an "ace" you get less perks per  sortie than normal (how it is now), because you are ranked 'ace'. 

As a newbie, you might get a lucky kill here and there, but if it was coaded properly, it would be so marginal it wouldn't matter.    Basically, if you are new, you don't just "become a pro" and start getting 10+ killstreaks, this isn't COD. It takes years of practice to get fairly decent, so in those years the newbies skill could improve and rank go up. But the perk benefits of said rank, would be so minimal, that by the time he got to ace (if he did) he would actually be making less points than what he did when he started at, yet he is better!

So honestly, I understand where you are coming from, but it would be punishing the more experienced players for being good. 

And as Wiley posted.  Rank doesn't mean anything, it can be staged.  Just like ah.. *coughs* COD had tac insertion camping, AH has shade accounts and milk runners, but no where near as bad as COD. 

So +1 for a good idea, -1 for the consequences.

Respectively,

Tinkles

 :salute
If we have something to show we will & do post shots, if we have nothing new to show we don't.
HiTech
Adapt , Improvise, Overcome. ~ HiTech
Be a man and shoot me in the back ~ Morfiend

Offline Stellaris

  • Nickel Member
  • ***
  • Posts: 402
Re: Dynamic ENY
« Reply #4 on: May 17, 2013, 03:40:00 PM »
It's the dynamic, relative assignment of ENY for planes I'm really suggesting here.  I just threw in the pilot ranks because you have to (or at least ought to) separate the pilot performance from the plane performance anyway.

@Tinkles However to answer your question on the pilots - rank assignment can be done by whatever formula you like.  The current one works OK.  Perk assignment based on the relative ranks in an encounter can be scaled on whatever curve you like.  It doesn't have to be scaled to actually punish improvement, but right now the top pilots can reap dozens of perks in a day, which they rarely use, while the beginners can't dream of a 262 for a year) There is room to even this out without making it actually regressive.  The idea here is just to give newcomers some more early reward and thus hopefully encourage them to stay around.  I got a friend of mine, an avid combat flight player, to get online, but he got chopped out of the air so often he didn't last the two weeks.  The achievement system is a good step towards this, and I think this would be too.

@gyrene  You compare plane performance exactly as I described it.  Perform a logistic analysis to separate plane and pilot performance, then adjust the plane ENY to reflect the planes demonstrated to be most effective.  In fact you don't even have to do the statistics.  A simple scoring of +1 to the winning plane type and -1 to the loser would average out over the long run.  Let collisions, augers and acts of god happen as they will.






Offline Tinkles

  • Silver Member
  • ****
  • Posts: 1501
Re: Dynamic ENY
« Reply #5 on: May 17, 2013, 04:27:57 PM »
It's the dynamic, relative assignment of ENY for planes I'm really suggesting here.  I just threw in the pilot ranks because you have to (or at least ought to) separate the pilot performance from the plane performance anyway.

@Tinkles However to answer your question on the pilots - rank assignment can be done by whatever formula you like.  The current one works OK.  Perk assignment based on the relative ranks in an encounter can be scaled on whatever curve you like.  It doesn't have to be scaled to actually punish improvement, but right now the top pilots can reap dozens of perks in a day, which they rarely use, while the beginners can't dream of a 262 for a year) There is room to even this out without making it actually regressive.  The idea here is just to give newcomers some more early reward and thus hopefully encourage them to stay around.  I got a friend of mine, an avid combat flight player, to get online, but he got chopped out of the air so often he didn't last the two weeks.  The achievement system is a good step towards this, and I think this would be too.

@gyrene  You compare plane performance exactly as I described it.  Perform a logistic analysis to separate plane and pilot performance, then adjust the plane ENY to reflect the planes demonstrated to be most effective.  In fact you don't even have to do the statistics.  A simple scoring of +1 to the winning plane type and -1 to the loser would average out over the long run.  Let collisions, augers and acts of god happen as they will.







Perhaps make it so if your on the 2 week trial you get x2 more perks? 

   I understand your wanting on the changing for the ENY system, few like it. But I can't think of a responsible system that would balance it out, that wouldn't or couldn't be abused.   :headscratch:

Respectively,

Tinkles

 :salute
If we have something to show we will & do post shots, if we have nothing new to show we don't.
HiTech
Adapt , Improvise, Overcome. ~ HiTech
Be a man and shoot me in the back ~ Morfiend

Offline bustr

  • Plutonium Member
  • *******
  • Posts: 12436
Re: Dynamic ENY
« Reply #6 on: May 17, 2013, 04:30:41 PM »
Hitech please hand new players 500 perks every time they successfully login to the MA for their first year or longer. It's only fair to encourage them by recognizing they are at a systematic disadvantage compared to those who have prevailed over time to earn their hard won veteran status in the Main Arenas.

Remove the stigma that separates the accomplished veteran from the struggling neophyte in terms of the inequity and obvious status differences of earning perk points to achieve the coveted rides of superior performance and destruction over all other rides in the game.

Please level the playing field of disparate ability and motivational temperament. So All Equally without class or debilitating rank stigmata may enjoy All of the fruits without the ego pain inherit in the uncertain and unequal struggle called personal achievement. After all fun is what we pay for each month not the pain and imagined social castration of failure in the face of our peers.

Please take out of our hands the individual ability to determine our fates and choose winners and losers for us all. In this case make us all equally winners based upon our needs, not our abilities.

Who is John Galt?  
bustr - POTW 1st Wing


This is like the old joke that voters are harsher to their beer brewer if he has an outage, than their politicians after raising their taxes. Death and taxes are certain but, fun and sex is only now.

Offline gyrene81

  • Plutonium Member
  • *******
  • Posts: 11629
Re: Dynamic ENY
« Reply #7 on: May 17, 2013, 04:35:52 PM »
by your reckoning, i know some people who would make the brewster an eny 5 in one month using your methodology. the effectiveness of any aircraft is based partly on the person flying it, and there is no easy way to separate them. no offense but, unless you can show an example of the code, all i see your plan doing is making it easier for people to up spixteens in hordes even though their side may have more people than the other sides.
jarhed  
Build a man a fire and he'll be warm for a day...
Set a man on fire and he'll be warm for the rest of his life. - Terry Pratchett

Offline Stellaris

  • Nickel Member
  • ***
  • Posts: 402
Re: Dynamic ENY
« Reply #8 on: May 17, 2013, 08:36:21 PM »
@gyrene http://en.wikipedia.org/wiki/Multivariate_regression_model

@bustr I dunno, I support encouraging new players, but what you're suggesting seems kind of over the top.  I think my suggestion is a little more reasonable.

Offline Letalis

  • Nickel Member
  • ***
  • Posts: 409
Re: Dynamic ENY
« Reply #9 on: May 17, 2013, 08:59:16 PM »
@bustr I dunno, I support encouraging new players, but what you're suggesting seems kind of over the top.  I think my suggestion is a little more reasonable.

Maybe you misunderstand him.  Bustr is old enough to be an American from the pre-pro-socialism era. 
He is not adding to or promoting your idea, he is mocking it by crystallizing its core logic. 



Anyone have an Obama phone I can borrow?



NEVER underestimate the power of stupid people in large groups.
-http://despair.com/demotivators.html

“Great spirits have always encountered violent opposition from mediocre minds.” -Einstein

Offline gyrene81

  • Plutonium Member
  • *******
  • Posts: 11629
Re: Dynamic ENY
« Reply #10 on: May 18, 2013, 06:21:22 AM »
@gyrene http://en.wikipedia.org/wiki/Multivariate_regression_model
no code in there dude...just statistical math which would not work in live environment that is in constant flux. the overhead on the system would be more than the value of the outcome...which is zero.
jarhed  
Build a man a fire and he'll be warm for a day...
Set a man on fire and he'll be warm for the rest of his life. - Terry Pratchett

Offline Stellaris

  • Nickel Member
  • ***
  • Posts: 402
Re: Dynamic ENY
« Reply #11 on: May 18, 2013, 06:56:40 AM »
@letalis  Actually he's misunderstood the core logic and then mocked his own misunderstanding.  I didn't want to be drawn into re-explaining it, so I just pointed out that what he's being sarcastic about isn't I'm suggesting.  Hopefully he'll go back and re-read the original post.

@bustr  My apologies, I hope this helps.  This uses the extreme stats library in C#.  Obviously it's a generic routine and would have to be adjusted for the specifics of Aces High.


using System;
using System.Data;
using System.IO;

using Extreme.Statistics;

namespace Extreme.Numerics.QuickStart.C Sharp
{
    using Extreme.Mathematics;
    using Extreme.Mathematics.LinearAlg ebra.IO;

  
    class LogisticRegression
    {
        static void Main(string[] args)
        {
        
            DataTable dataTable = ReadData();
            VariableCollection data = new VariableCollection(dataTable);

            // We need indicator variables for the race. We use the
            // CreateIndicatorVariable method:
            NumericalVariable race = (NumericalVariable)data["RACE"];
            NumericalVariable race2 = race.CreateIndicatorVariable(2.0);
            data.Add(race2);
            NumericalVariable race3 = race.CreateIndicatorVariable(3.0);
            data.Add(race3);
            Console.WriteLine("Variable              Value    Std.Error  t-stat  p-Value");
            foreach (Parameter parameter in model.Parameters)
              
                Console.WriteLine("{0,-20}{1,10:F5}{2,10:F5}{3,8:F2} {4,7:F4}",
                    parameter.Name,
                    parameter.Value,
                
            Console.WriteLine("Log-likelihood: {0:F4}", model.GetLogLikelihood());
            Extreme.Statistics.Tests.Simp leHypothesisTest lrt = model.GetLikelihoodRatioTest();
            Console.WriteLine("Likelihood-ratio test: chi-squared={0:F4}, p={1:F4}", lrt.Statistic, lrt.PValue);
            Console.WriteLine();

            LogisticRegressionModel model2 = new LogisticRegressionModel(data, "LOW", new string[] { "LWT", "RACE(2)", "RACE(3)" });
            model2.Compute();

            Console.WriteLine("Variable              Value    Std.Error  t-stat  p-Value");
            foreach (Parameter parameter in model2.Parameters)
                Console.WriteLine("{0,-20}{1,10:F5}{2,10:F5}{3,8:F2} {4,7:F4}",
                    parameter.Name, parameter.Value, parameter.StandardError, parameter.Statistic, parameter.PValue);
            Console.WriteLine("Log-likelihood: {0:F4}", model.GetLogLikelihood());
            lrt = model.GetLikelihoodRatioTest(model2);
            Console.WriteLine("Likelihood-ratio test: chi-squared={0:F4}, p={1:F4}", lrt.Statistic, lrt.PValue);
            Console.WriteLine();
            FixedWidthMatrixReader reader = new FixedWidthMatrixReader(
                File.OpenText(@"..\..\..\..\Data\mlogit.txt"),
                0, new int[] { 5, 10, 15, 20, 25, 32, 37, 42, 47 },
                System.Globalization.NumberSt yles.Integer, null);
            Matrix m = reader.ReadMatrix();
            CategoricalVariable duration =
                new NumericalVariable("duration", m.GetColumn(1)).ToCategoricalVariable();
            NumericalVariable nutritio = new NumericalVariable("nutritio", m.GetColumn(5));
            NumericalVariable agecat1 = new NumericalVariable("agecat1", m.GetColumn(6));
            NumericalVariable agecat3 = new NumericalVariable("agecat3", m.GetColumn(7));
            NumericalVariable alcohol = new NumericalVariable("alcohol", m.GetColumn(8));
            NumericalVariable smoking = new NumericalVariable("smoking", m.GetColumn(9));
            LogisticRegressionModel model3 = new LogisticRegressionModel(duration,
                new NumericalVariable[] { nutritio, agecat1, agecat3, alcohol, smoking },
                LogisticRegressionMethod.Nomi nal);
            model3.Compute();
            foreach (Parameter p in model3.Parameters) {
                Console.WriteLine(p.ToString());
            }

            Console.WriteLine("Log likelihood: {0:F4}", model3.GetLogLikelihood());
            lrt = model3.GetLikelihoodRatioTest();
            Console.WriteLine("Test that all slopes are zero: chi-squared={0:F4}, p={1:F4}", lrt.Statistic, lrt.PValue);

            Console.Write("Press any key to exit.");
            Console.ReadLine();
        }

        private static DataTable ReadData()
        {
            DataTable data = new DataTable("LowBirthWeight");

                 char[] whitespace = new char[] { ' ', '\t' };
            StreamReader sr = new StreamReader(@"..\..\..\..\Data\lowbwt.txt");

            String line = sr.ReadLine();
            int pos = 0;
            int pos2;
            do
            {
                while (char.IsWhiteSpace(line[pos]))
                    pos++;
                pos2 = line.IndexOfAny(whitespace, pos);
                if (pos2 < 0)
                {
                    data.Columns.Add(line.Substring(pos), typeof(double));
                    break;
                }
                else
                    data.Columns.Add(line.Substring(pos, pos2 - pos), typeof(double));
                pos = pos2;
            }
            while (pos >= 0);

            object[] rowData = new object[data.Columns.Count];
            line = sr.ReadLine();
            while (line != null && line.Length > 0)
            {
                int column = 0;
                pos = 0;
                do
                {
                    string field;
                    while (char.IsWhiteSpace(line[pos]))
                        pos++;
                    pos2 = line.IndexOfAny(whitespace, pos);
                    if (pos2 < 0)
                        field = line.Substring(pos);
                    else
                        field = line.Substring(pos, pos2 - pos);
                    if (column == 0)
                        rowData[column++] = field;
                    else
                        rowData[column++] = double.Parse(field);
                    pos = pos2;
                }
                while (pos >= 0 && column < data.Columns.Count);
                data.Rows.Add(rowData);
                line = sr.ReadLine();
            }
            return data;
        }
    }
}
« Last Edit: May 18, 2013, 07:02:48 AM by Stellaris »

Offline save

  • Gold Member
  • *****
  • Posts: 2852
Re: Dynamic ENY
« Reply #12 on: May 18, 2013, 07:12:33 AM »
they left the sheep-value out, so something is wrong about that little C'
My ammo last for 6 Lancasters, or one Yak3.
"And the Yak 3 ,aka the "flying Yamato"..."
-Caldera

Offline gyrene81

  • Plutonium Member
  • *******
  • Posts: 11629
Re: Dynamic ENY
« Reply #13 on: May 18, 2013, 07:51:44 AM »
your logic would work great for an rpg because the changes aren't as frequent, but i can't see where it would work here...i don't see anything for disco's either, which would have an effect. maybe i'm overlooking something.  :headscratch:
jarhed  
Build a man a fire and he'll be warm for a day...
Set a man on fire and he'll be warm for the rest of his life. - Terry Pratchett

Offline Stellaris

  • Nickel Member
  • ***
  • Posts: 402
Re: Dynamic ENY
« Reply #14 on: May 18, 2013, 12:36:33 PM »
Statistically, disconnects are random occurrences which will average out - as will other various issues which could distort the figures.  There's really no more processing involved here than there is in adjusting the perk values of aircraft based on the number of players per side, or the perk rewards based on players per side.  This just finesses the process.

  Also, it should be recognized that achieving perfection in assigning ENY is impossible.  There is an implicit assumption of a co-E nose on 1V1 engagement here, so the various inequalities in numbers, altitudes, SA, etc, must also be taken as averaged out.  You could of course develop models that could remove some of that variance as well, but I don't think it's necessary.  AH provides such a tremendous wealth of raw data that you can do a lot of good statistics without getting fancy.  This would give plane rankings closer to accurate than the current, static system.  However no statistical method has zero error.

I emphasize that handicapping pilots falls out of this as a bonus of removing the variance due to pilot skill, it isn't necessary, but I do think.

Also, to answer those in advance who might imply I'm suggesting this to up my own personal ranking or perk results - I'm an above-average pilot and my favourite planes are under-rated in the ENY system, so I can only do worse under this system.  I do think it would improve the game though, and help newcomers to become permanent players.