Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Help with a small Javascript

Posted on 2016-10-15
6
Medium Priority
?
83 Views
Last Modified: 2016-10-16
Hi,
I am a newbie to JavaScript (REALLY).  I am trying to test/debug a small script to calculate ELO changes between to players in a game.  An ELO is a rating system.  It is an exchange of points between 2 players based on your probability of winning and the maximum amount of points possible (16 in this case).

It's hard for me to interpret some of this code.  It works properly in calculating the new ELO for the loser.  But it does not work for the winner.
Note the points substracted from the loser's starting ELO shlould be added to the winner's starting ELO.

Here is a link to a web site that does it properly:
Elo Calculator Site
Use 16 as the "K factor" to match my results in the bottome part of the page.

Here is my script.  The 2 players have a starting ELO of 2300 and 2100.  The higher rated player wins in my example which you can run as HTML.

The looser loses 4 points correctly.  But the winner gains 19?  The winner should gain +4 points and end up with 2304.

Here is the code
<html>
<head>

  <title>ELO Calculator</title>

</head>


<body  bgcolor="#FFFFFF">


  <h1>

      <script type="text/javascript">
       var playerElos = [];
	    playerElos[1] = 2300;
	    playerElos[-1] = 2100;

/*  these are the starting ELO of 2 players ("1" and "-1")
     The winner is designated below    */

        var winner = 1


		var expected={
			"1": 1/(1+(Math.pow(10,(playerElos[-1]-playerElos[1])/400))),
			"-1": 1/(1+(Math.pow(10,(playerElos[1]-playerElos[-1])/400))),
			}
			var score;
				   switch(winner) {
				   case 1: score={"1":2,"-1":0}; break;
				   case -1: score={"1":0,"-1":2}; break;
				   default: score={"1":1,"-1":1}; break;
			}
			var newElos={
					"1": playerElos[1]+16*(score[1]-expected[1]),
					"-1": playerElos[-1]+16*(score[-1]-expected[-1]),
			}


	document.write("Hello World! <br/>");
    document.write(newElos[1] + "<br/>");
    document.write(newElos[-1] + "<br/>");
    document.write("Hello World! <br/>");


      </script>

   </h1>


</body>

</html>

Open in new window


Can anyone see why this is happening?

Many thanks in advance,
hefterr
0
Comment
Question by:hefterr
  • 3
  • 3
6 Comments
 
LVL 61

Accepted Solution

by:
Julian Hansen earned 2000 total points
ID: 41845113
Your algorithm is not the same as theirs
Here is there's
function CalculateRatingChange()

{

// Ensure Elo1 is an number
var Elo1 = document.rating.elo1.value * 1;

// Ensure Elo2 is an number
var Elo2 = document.rating.elo2.value * 1;

// Ensure k value is a number
var K = document.rating.K.value * 1;

// Take the difference in the Elo's
var EloDifference = Elo2 - Elo1;

// This is where they do one calc and you do 2
// basically in your example works out to
// 1 / ( 1 + 10^.5) ~ 75%
var percentage = 1 / ( 1 + Math.pow( 10, EloDifference / 400 ) );

// Basically 25% goes to the win
var win = Math.round( K * ( 1 - percentage ) );

var draw = Math.round( K * ( .5 - percentage ) );

// Create the labels
if (win > 0 ) win = "+" + win;

// Create the labels
if (draw > 0 ) draw = "+" + draw;

// Write to the document
document.ratingchange.win.value = win;

document.ratingchange.draw.value = draw;

// 75% goes to the loss - in this example
document.ratingchange.loss.value = Math.round( K * ( 0 - percentage ) );

document.ratingchange.percent.value =  Math.round( percentage * 100 ) + "%";

}

Open in new window

0
 
LVL 1

Assisted Solution

by:hefterr
hefterr earned 0 total points
ID: 41845127
Hi Julian,
Thanks for showing me theirs.

Can you see the error in mine for the winner?  I'm not sure how to interpret the "case" statements in my example.

var score;
				   switch(winner) {
				   case 1: score={"1":2,"-1":0}; break;
				   case -1: score={"1":0,"-1":2}; break;
				   default: score={"1":1,"-1":1}; break;
			}

Open in new window


Thanks again,
hefterr
0
 
LVL 61

Expert Comment

by:Julian Hansen
ID: 41845173
The case statement is just assigning a score depending on who is the winner.

I don't know enough about ELO's to say what it is doing but based on your test data when winner=1 then
score[1] = 2 and score[-1] = 0
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Author Comment

by:hefterr
ID: 41845738
Hi Julian,
Thanks for you help.  I found the problem,

The code in the script
I found the problem:

The original code:


var score;
       switch(winner) {
       case 1: score={"1":2,"-1":0}; break;
       case -1: score={"1":0,"-1":2}; break;
       default: score={"1":1,"-1":1}; break;
}

Open in new window


S/B
     
  case 1: score={"1":1,"-1":0}; break;
        case -1: score={"1":0,"-1":1}; break;
        default: score={"1":.5,"-1":.5}; break;

Open in new window


This works fine now.


Thanks,
again.
0
 
LVL 1

Author Closing Comment

by:hefterr
ID: 41845741
Thanks again for your help.

rbh
0
 
LVL 61

Expert Comment

by:Julian Hansen
ID: 41846175
You are welcome.
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
This article discusses how to create an extensible mechanism for linked drop downs.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…
Suggested Courses

580 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question