Aces High Bulletin Board

General Forums => Wishlist => Topic started by: Stellaris on May 17, 2013, 02:20:43 PM

Title: Dynamic ENY
Post by: Stellaris 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.

Title: Re: Dynamic ENY
Post by: gyrene81 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"?
Title: Re: Dynamic ENY
Post by: Wiley on May 17, 2013, 02:37:05 PM
For that matter, how do you define an 'ace'?  Rank doesn't mean squat.

Wiley.
Title: Re: Dynamic ENY
Post by: Tinkles 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
Title: Re: Dynamic ENY
Post by: Stellaris 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.





Title: Re: Dynamic ENY
Post by: Tinkles 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
Title: Re: Dynamic ENY
Post by: bustr 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?  
Title: Re: Dynamic ENY
Post by: gyrene81 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.
Title: Re: Dynamic ENY
Post by: Stellaris 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.
Title: Re: Dynamic ENY
Post by: Letalis 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. 

(http://www.sott.net/image/image/s3/73193/full/boiled_frogs_col.jpg)

Anyone have an Obama phone I can borrow?



Title: Re: Dynamic ENY
Post by: gyrene81 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.
Title: Re: Dynamic ENY
Post by: Stellaris 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;
        }
    }
}
Title: Re: Dynamic ENY
Post by: save on May 18, 2013, 07:12:33 AM
they left the sheep-value out, so something is wrong about that little C'
Title: Re: Dynamic ENY
Post by: gyrene81 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:
Title: Re: Dynamic ENY
Post by: Stellaris 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.



Title: Re: Dynamic ENY
Post by: pembquist on May 18, 2013, 01:08:59 PM
Here is one out of the box: if your a 2 weeker you get air starts at 15 k within the nme dar ring. I'd say what the game needs is a no perk ai arena for skill building.
Title: Re: Dynamic ENY
Post by: Letalis on May 18, 2013, 02:12:01 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.
I'm all for accurate relative ENY, but a kill is a kill and should result in equal outcome whether an ace kills a noob or vice versa - to do any differently actually undermines the equality inherent to being a player in the game.  Further, as useful as some data may be, some aces maintain a 1:1 k/d by flying into 1vmany situations while others of similar skill level avoid those situations and end up with a 40:1 k/d. The  assumption that all players play for either rank or perks is flawed, much of the data is rendered irrelevant by gameplay style.  Have a fixed system and let people play accordingly without handouts.  There's a multitude of other ways to attract people to the game without alienating the existing player base on behalf of the summer squeekers. 
Title: Re: Dynamic ENY
Post by: Letalis on May 18, 2013, 02:18:07 PM
Here is one out of the box: if your a 2 weeker you get air starts at 15 k within the nme dar ring. I'd say what the game needs is a no perk ai arena for skill building.
:huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh :huh

Why stop there?  Why not spawn two-weekers instantly 10k above the nearest enemy field?  We could also mount lasers on their Spits for the first two weeks to eliminate the need to learn deflection shooting. Now THAT will help their self-esteem and build a vast player base of entitled whiners and shaders at the same time! :rock

woot.
Title: Re: Dynamic ENY
Post by: Stellaris on May 18, 2013, 02:29:37 PM
@Letalis  Yep.  As stated, handicapping pilots as in chess or golf is just an option made easily available by the requirements of a dynamic ENY system.  It's really the ENY system that I'm talking about here.

@pembquist  Please see the previous comment @bustr ref misunderstanding the point and then getting sarcastic about it.
Title: Re: Dynamic ENY
Post by: pembquist on May 18, 2013, 04:08:11 PM
@letalis leaving your sarcasm aside I have had 2 friends try ah and bail because pretty much it was take off fly for 5-10 minutes turn die. It is a lot to ask for somebody to stick through and then pay for. It's just an idea, I guess if HT was incompetent and couldn't tell who kept signing up as new two weekers, and if the motivation to be able to airspawn was greater than the motivation to not spend 15 dollars a month that already exists I would be alarmed too. I really shouldn't have said anything but since the topic seemed to be about changes that would motivate new and less skilled players to play and pay. I thought I'd mention an idea that was directly aimed at making the experience for new players more palatable so that they might stick around and become paying customers. It does not change the skill required like lazer beams would, it just changes the balance between tedium and excitement and by increasing the engagement/playing time ratio makes a first kill more likely, and that kill I would argue is why people pay.

@stellaris I wasn't being sarcastic. I am assuming that your ideas are in the vein of making the game more enjoyable and rewarding for the less skilled without taking anything away from the skilled. Some people get upset with this kind of thinking because they don't believe it is possible and if it were it would immoral. All I care about is what works to keep'em coming in without degrading the game into World of Whatever.
Title: Re: Dynamic ENY
Post by: Stellaris on May 18, 2013, 06:49:04 PM
@pembquist  - Whups, I'm sorry!  The earlier sarcasm set me up to see that.

@letalis - A kill is a kill.  However the perk reward for getting a kill is arbitrary.  Currently it's based on an arbitrary assessment of the plane's relative combat effectiveness (the ENY value) and an arbitrary adjustment based on the number of players online.

So my first suggestion is to remove some of the arbitraryness of the ENY value by using the exchange rate.  Since there are two main variables, plane and pilot, and since most pilots fly multiple plane types, we can use logistic regression to isolate the plane combat effectiveness from that of the pilot.

My second suggestion, since the logistic regression automatically gives you relative pilot skill as well (independent of who is flying hot planes all the time) is to handicap players perk points (not their ranking!) based on their relative skill.  This doesn't have to flat-curve everyone's results, but will serve to encourage new players to keep trying, because at least they can try out the perk planes sooner.