<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://nssportwiki.com/index.php?action=history&amp;feed=atom&amp;title=OOC%3AComparison_of_algorithms</id>
	<title>OOC:Comparison of algorithms - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nssportwiki.com/index.php?action=history&amp;feed=atom&amp;title=OOC%3AComparison_of_algorithms"/>
	<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=OOC:Comparison_of_algorithms&amp;action=history"/>
	<updated>2026-05-16T03:54:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://nssportwiki.com/index.php?title=OOC:Comparison_of_algorithms&amp;diff=68347&amp;oldid=prev</id>
		<title>Osarius: added xkoranate rp bonus formulae section</title>
		<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=OOC:Comparison_of_algorithms&amp;diff=68347&amp;oldid=prev"/>
		<updated>2025-05-14T08:42:53Z</updated>

		<summary type="html">&lt;p&gt;added xkoranate rp bonus formulae section&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:42, 14 May 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l28&quot;&gt;Line 28:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 28:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This is because xkoranate makes an adjustment to ranking points ahead of running the scorination algorithm. Xkoranate&amp;#039;s adjustRank function&amp;lt;ref&amp;gt;{{cite web|title=Xkoranate-CE/src/signuplist.cpp:line 20|url=https://github.com/NS-Sports/Xkoranate-CE/blob/master/src/signuplist.cpp|publisher=Github|date=September 30, 2024|accessdate=January 29, 2025}}&amp;lt;/ref&amp;gt; is intended to convert all ranks to a value between 0 and 1. It does this by taking the rank value minus the min rank, divided by the difference between min and max rank.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This is because xkoranate makes an adjustment to ranking points ahead of running the scorination algorithm. Xkoranate&amp;#039;s adjustRank function&amp;lt;ref&amp;gt;{{cite web|title=Xkoranate-CE/src/signuplist.cpp:line 20|url=https://github.com/NS-Sports/Xkoranate-CE/blob/master/src/signuplist.cpp|publisher=Github|date=September 30, 2024|accessdate=January 29, 2025}}&amp;lt;/ref&amp;gt; is intended to convert all ranks to a value between 0 and 1. It does this by taking the rank value minus the min rank, divided by the difference between min and max rank.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;math&amp;gt;{\frac{(teamRank-minRank)}{(maxRank-minRank)}}&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;math&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rank = &lt;/ins&gt;{\frac{(teamRank-minRank)}{(maxRank-minRank)}}&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;These adjusted ranks are then used directly in the formula to determine when attacks are successful (and in the case of NSFS, the number of attacks a team gets).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;These adjusted ranks are then used directly in the formula to determine when attacks are successful (and in the case of NSFS, the number of attacks a team gets).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l78&quot;&gt;Line 78:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 78:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For the home team, the (4/3) would be 1 (no home advantage applied), so P(goal) is therefore &amp;#039;&amp;#039;&amp;#039;0.348314607&amp;#039;&amp;#039;&amp;#039; for the home team, and &amp;#039;&amp;#039;&amp;#039;0.131086142&amp;#039;&amp;#039;&amp;#039; for the away team &amp;amp;ndash; unchanged from the previous example &amp;amp;ndash; meaning if home advantage were applied correctly, the difference would be roughly &amp;#039;&amp;#039;&amp;#039;21.7%&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For the home team, the (4/3) would be 1 (no home advantage applied), so P(goal) is therefore &amp;#039;&amp;#039;&amp;#039;0.348314607&amp;#039;&amp;#039;&amp;#039; for the home team, and &amp;#039;&amp;#039;&amp;#039;0.131086142&amp;#039;&amp;#039;&amp;#039; for the away team &amp;amp;ndash; unchanged from the previous example &amp;amp;ndash; meaning if home advantage were applied correctly, the difference would be roughly &amp;#039;&amp;#039;&amp;#039;21.7%&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;===Xkoranate RP bonus formulae===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;It is important to note how the bonus formula selected, as well as the RP effect entered, will affect the calculation of the skill values passed to the scorination algorithm. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{:OOC:Xkoranate RP bonus formulae}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Notes==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Notes==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Osarius</name></author>
	</entry>
	<entry>
		<id>https://nssportwiki.com/index.php?title=OOC:Comparison_of_algorithms&amp;diff=67764&amp;oldid=prev</id>
		<title>Osarius at 11:54, 29 January 2025</title>
		<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=OOC:Comparison_of_algorithms&amp;diff=67764&amp;oldid=prev"/>
		<updated>2025-01-29T11:54:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:54, 29 January 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l26&quot;&gt;Line 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When using xkoranate, the value of &amp;quot;Maximum skill&amp;quot;, or &amp;#039;&amp;#039;&amp;#039;Max Rank&amp;#039;&amp;#039;&amp;#039; (and to a lesser extent, the &amp;quot;Minimum skill&amp;quot;, or &amp;#039;&amp;#039;&amp;#039;Min Rank&amp;#039;&amp;#039;&amp;#039;) will affect how results are calculated, regardless of the formula chosen.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When using xkoranate, the value of &amp;quot;Maximum skill&amp;quot;, or &amp;#039;&amp;#039;&amp;#039;Max Rank&amp;#039;&amp;#039;&amp;#039; (and to a lesser extent, the &amp;quot;Minimum skill&amp;quot;, or &amp;#039;&amp;#039;&amp;#039;Min Rank&amp;#039;&amp;#039;&amp;#039;) will affect how results are calculated, regardless of the formula chosen.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This is because xkoranate makes an adjustment to ranking points ahead of running the scorination algorithm. Xkoranate&#039;s adjustRank function&amp;lt;ref&amp;gt;{{cite web|title=Xkoranate-CE/src/signuplist.cpp:line 20|url=https://github.com/NS-Sports/Xkoranate-CE/blob/master/src/signuplist.cpp|publisher=Github|date=September 30, 2024|accessdate=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;September 30&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2024&lt;/del&gt;}}&amp;lt;/ref&amp;gt; is intended to convert all ranks to a value between 0 and 1. It does this by taking the rank value minus the min rank, divided by the difference between min and max rank.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This is because xkoranate makes an adjustment to ranking points ahead of running the scorination algorithm. Xkoranate&#039;s adjustRank function&amp;lt;ref&amp;gt;{{cite web|title=Xkoranate-CE/src/signuplist.cpp:line 20|url=https://github.com/NS-Sports/Xkoranate-CE/blob/master/src/signuplist.cpp|publisher=Github|date=September 30, 2024|accessdate=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;January 29&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2025&lt;/ins&gt;}}&amp;lt;/ref&amp;gt; is intended to convert all ranks to a value between 0 and 1. It does this by taking the rank value minus the min rank, divided by the difference between min and max rank.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;math&amp;gt;{\frac{(teamRank-minRank)}{(maxRank-minRank)}}&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;math&amp;gt;{\frac{(teamRank-minRank)}{(maxRank-minRank)}}&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l56&quot;&gt;Line 56:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 56:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This can skew things in the calculation because NSFS expects a value between 0 and 1 when calculating rank difference. This is why you&amp;#039;ll see teams with rank higher than max sometimes getting crazy results and blowout wins etc (depending on how far above max rank they are, and what event you&amp;#039;re scorinating).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This can skew things in the calculation because NSFS expects a value between 0 and 1 when calculating rank difference. This is why you&amp;#039;ll see teams with rank higher than max sometimes getting crazy results and blowout wins etc (depending on how far above max rank they are, and what event you&amp;#039;re scorinating).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==Other Issues==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;===NSFS Home Advantage===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;In xkoranate 0.3.3 home advantage is not applied correctly in the NSFS paradigm. It &#039;&#039;&#039;should&#039;&#039;&#039; apply a multiplier to the denominator of the probability calculation, but instead simply adds 1 (the parsed integer value of a &quot;true&quot; boolean).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;How it works is that the probability of a goal, or P(goal) is calculated as&amp;lt;ref&gt;{{cite web|title=Xkoranate-CE/src/paradigms/nsfsparadigm.h:line 41|url=https://github.com/NS-Sports/Xkoranate-CE/blob/master/src/paradigms/nsfsparadigm.h|publisher=Github|date=January 29, 2025|accessdate=January 29, 2025}}&amp;lt;/ref&gt;:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;math&gt;1 - (baseAttackSuccessThreshold + rankDiffModifier * ((oppSkill * rankCoeff)^r - (skill * rankCoeff)^r)) / (baseAttackCoeff + homeAdvantage))&amp;lt;/math&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;where &#039;&#039;r = rankScalar&#039;&#039; (by default this is 0.5, or square root)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The example calculation below uses the default config values for the NSFS paradigm, and two teams of equal skill:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;math&gt;1 - (580 + 12 * ( \sqrt{(10*31.5)} - \sqrt{(10*31.5)} ) / (667.5 + 1) )&amp;lt;/math&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Note that the 1 is replaced by zero for the away team in this calculation, and P(goal) is therefore &#039;&#039;&#039;0.132385939&#039;&#039;&#039; for the home team, and &#039;&#039;&#039;0.131086142&#039;&#039;&#039; for the away team. A difference of around &#039;&#039;&#039;0.13%&#039;&#039;&#039;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;How it &#039;&#039;should&#039;&#039; work is that &#039;&#039;&#039;baseAttackCoeff&#039;&#039;&#039; is &#039;&#039;multiplied&#039;&#039; by the value of &#039;&#039;homeAdvantage&#039;&#039; in the relevant xml file (default is 4/3) for the home team:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;math&gt;1 - (580 + 12 * ( \sqrt{(10*31.5)} - \sqrt{(10*31.5)} ) / (667.5 * (4/3)))&amp;lt;/math&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;For the home team, the (4/3) would be 1 (no home advantage applied), so P(goal) is therefore &#039;&#039;&#039;0.348314607&#039;&#039;&#039; for the home team, and &#039;&#039;&#039;0.131086142&#039;&#039;&#039; for the away team &amp;amp;ndash; unchanged from the previous example &amp;amp;ndash; meaning if home advantage were applied correctly, the difference would be roughly &#039;&#039;&#039;21.7%&#039;&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Notes==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Notes==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Osarius</name></author>
	</entry>
	<entry>
		<id>https://nssportwiki.com/index.php?title=OOC:Comparison_of_algorithms&amp;diff=66489&amp;oldid=prev</id>
		<title>Osarius: Created page with &quot;{{incomplete}} When scorinating certain sports, particularly association football (or soccer), using xkoranate, there is often debate over which formula (or paradigm, or algorithm) to use.  For many users, particularly newer ones, the differences between these formulae can be quite opaque. This article aims to clarify some of the more pertinent points.  &#039;&#039;&#039;Warning: There will be a considerable amount of mathematics in this article, though I have tried to simplify as much...&quot;</title>
		<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=OOC:Comparison_of_algorithms&amp;diff=66489&amp;oldid=prev"/>
		<updated>2024-09-30T08:52:49Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{incomplete}} When scorinating certain sports, particularly association football (or soccer), using xkoranate, there is often debate over which formula (or paradigm, or algorithm) to use.  For many users, particularly newer ones, the differences between these formulae can be quite opaque. This article aims to clarify some of the more pertinent points.  &amp;#039;&amp;#039;&amp;#039;Warning: There will be a considerable amount of mathematics in this article, though I have tried to simplify as much...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{incomplete}}&lt;br /&gt;
When scorinating certain sports, particularly association football (or soccer), using xkoranate, there is often debate over which formula (or paradigm, or algorithm) to use.&lt;br /&gt;
&lt;br /&gt;
For many users, particularly newer ones, the differences between these formulae can be quite opaque. This article aims to clarify some of the more pertinent points.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning: There will be a considerable amount of mathematics in this article, though I have tried to simplify as much as possible.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Summaries==&lt;br /&gt;
===NSFS===&lt;br /&gt;
===SQIS===&lt;br /&gt;
&lt;br /&gt;
==Comparison==&lt;br /&gt;
Fundamentally, the main difference between the formulae is &amp;#039;&amp;#039;&amp;#039;how they treat rank&amp;#039;&amp;#039;&amp;#039; (or &amp;quot;skill&amp;quot;, as xkoranate calls it). At a basic level, NSFS uses the absolute difference between the provided values, while SQIS uses the &amp;#039;&amp;#039;ratio&amp;#039;&amp;#039; of the involved values.&lt;br /&gt;
&lt;br /&gt;
The most pertinent &amp;#039;&amp;#039;concern&amp;#039;&amp;#039; most people therefore have is &amp;#039;&amp;#039;&amp;#039;&amp;quot;how do the differences between the formulae affect results?&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Let us consider the following ranking points (or skill values) for four teams: Alpha (20), Bravo (10), Charlie (10), Delta (5).&lt;br /&gt;
&lt;br /&gt;
Then let us consider two hypothetical matches: Alpha v Bravo and Charlie v Delta.&lt;br /&gt;
&lt;br /&gt;
Under SQIS, the probability of the lower ranked side winning in either game is equal, because win probability is calculated based on the ratio between the competing teams&amp;#039; skill values, and 20:10 is the same as 10:5.&lt;br /&gt;
&lt;br /&gt;
Under NSFS, the probability of a win is calculated (partly) based on the difference between the ranks{{efn|name=simple_max_rank}}. So, because (20-10) is a larger value than (10-5), there is a lower chance of Bravo beating Alpha when compared to the chance of Delta beating Charlie; since there is a larger difference between the teams&amp;#039; ranks.&lt;br /&gt;
&lt;br /&gt;
==Max Rank Effect==&lt;br /&gt;
When using xkoranate, the value of &amp;quot;Maximum skill&amp;quot;, or &amp;#039;&amp;#039;&amp;#039;Max Rank&amp;#039;&amp;#039;&amp;#039; (and to a lesser extent, the &amp;quot;Minimum skill&amp;quot;, or &amp;#039;&amp;#039;&amp;#039;Min Rank&amp;#039;&amp;#039;&amp;#039;) will affect how results are calculated, regardless of the formula chosen. &lt;br /&gt;
&lt;br /&gt;
This is because xkoranate makes an adjustment to ranking points ahead of running the scorination algorithm. Xkoranate&amp;#039;s adjustRank function&amp;lt;ref&amp;gt;{{cite web|title=Xkoranate-CE/src/signuplist.cpp:line 20|url=https://github.com/NS-Sports/Xkoranate-CE/blob/master/src/signuplist.cpp|publisher=Github|date=September 30, 2024|accessdate=September 30, 2024}}&amp;lt;/ref&amp;gt; is intended to convert all ranks to a value between 0 and 1. It does this by taking the rank value minus the min rank, divided by the difference between min and max rank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;{\frac{(teamRank-minRank)}{(maxRank-minRank)}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These adjusted ranks are then used directly in the formula to determine when attacks are successful (and in the case of NSFS, the number of attacks a team gets).&lt;br /&gt;
&lt;br /&gt;
So in simple terms, when using NSFS, and assuming you leave min rank at zero, &amp;#039;&amp;#039;&amp;#039;upsets are more likely between lower ranked teams&amp;#039;&amp;#039;&amp;#039;. By extension, a &amp;#039;&amp;#039;&amp;#039;higher max rank makes all rank differences smaller&amp;#039;&amp;#039;&amp;#039;, and therefore increases the range of ranks that fall into that category of &amp;quot;lower ranked teams&amp;quot;. This is why it is generally recommended not to use a scale that goes from 0-100, but rather 40-100 when scorinating domestic leagues. &lt;br /&gt;
&lt;br /&gt;
This conclusion is explained in greater depth in the case studies below.&lt;br /&gt;
&lt;br /&gt;
===Case studies===&lt;br /&gt;
Imagine the highest ranked team in a competition has a rank of 100. They face a team ranked 10. Max rank is of course set to 100, and minimum is 0. The rank difference used in the NSFS calculation is therefore &amp;lt;math&amp;gt;(100-0)/(100-0) - (10-0)/(100-0)&amp;lt;/math&amp;gt;, which simplifies to &amp;lt;math&amp;gt;(100-10)/(100-0) = 0.9&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Going back to our [[#Comparison|original example]] though: &amp;lt;math&amp;gt;(20-10)/(20-0) = 0.5&amp;lt;/math&amp;gt;, but &amp;lt;math&amp;gt;(10-5)/(20-0) = 0.25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As max rank increases, assuming everything else stays the same, these rank differences get smaller (because the denominator gets larger). &lt;br /&gt;
&lt;br /&gt;
====Max rank too high====&lt;br /&gt;
If max rank is larger than the highest ranked team, all of the calculated rank differences &amp;#039;&amp;#039;decrease&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
If max rank is double that of the highest ranked team, the maximum possible rank difference becomes &amp;lt;math&amp;gt;((n-0)/2n)&amp;lt;/math&amp;gt;, instead of &amp;lt;math&amp;gt;((n-0)/n)&amp;lt;/math&amp;gt;, which is twice as large.&lt;br /&gt;
&lt;br /&gt;
So again, back to our [[#Comparison|original example]]: if max rank was 100, those rank differences become &amp;lt;math&amp;gt;(20-10)/(100-0) = 0.1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;(10-5)/(100-0) = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Max rank too low====&lt;br /&gt;
If a team has a rank higher than max rank you get the opposite effect and the rank difference they can achieve is &amp;#039;&amp;#039;larger&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
For example, a team ranked 120 when max rank is 100, against a team ranked 10. The rank difference becomes &amp;lt;math&amp;gt;(120-10)/(100-0) = 1.1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can skew things in the calculation because NSFS expects a value between 0 and 1 when calculating rank difference. This is why you&amp;#039;ll see teams with rank higher than max sometimes getting crazy results and blowout wins etc (depending on how far above max rank they are, and what event you&amp;#039;re scorinating).&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{notelist|refs=&lt;br /&gt;
{{efn|name=simple_max_rank|To be absolutely clear, it&amp;#039;s actually to do with what the max rank value is set to (or the minimum and maximum skill options in xkoranate), but since max rank will be the same setting (20, the same as the highest ranked team) in these hypothetical matches, the difference between ranks is the easiest way to understand how the probability is affected. For more information, see [[#Max Rank Effect]]}}&lt;br /&gt;
}}&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT: Comparison of algorithms}}&lt;br /&gt;
[[Category:OOC]]&lt;br /&gt;
[[Category:Scorination]]&lt;/div&gt;</summary>
		<author><name>Osarius</name></author>
	</entry>
</feed>