diff --git a/bin/commons-math-2.2.jar b/bin/commons-math-2.2.jar new file mode 100644 index 0000000..b29a39c Binary files /dev/null and b/bin/commons-math-2.2.jar differ diff --git a/bin/configuration/ConfPredictData.class b/bin/configuration/ConfPredictData.class new file mode 100644 index 0000000..813197a Binary files /dev/null and b/bin/configuration/ConfPredictData.class differ diff --git a/bin/configuration/ConfResultData.class b/bin/configuration/ConfResultData.class new file mode 100644 index 0000000..43b8a37 Binary files /dev/null and b/bin/configuration/ConfResultData.class differ diff --git a/bin/core/MPredictResults.class b/bin/core/MPredictResults.class new file mode 100644 index 0000000..1f60577 Binary files /dev/null and b/bin/core/MPredictResults.class differ diff --git a/bin/core/ParseData.class b/bin/core/ParseData.class new file mode 100644 index 0000000..e5bbb72 Binary files /dev/null and b/bin/core/ParseData.class differ diff --git a/bin/core/PredictResults.class b/bin/core/PredictResults.class new file mode 100644 index 0000000..1497606 Binary files /dev/null and b/bin/core/PredictResults.class differ diff --git a/bin/core/StatAnalysis.class b/bin/core/StatAnalysis.class new file mode 100644 index 0000000..0c7b47b Binary files /dev/null and b/bin/core/StatAnalysis.class differ diff --git a/bin/core/UnknownResults.class b/bin/core/UnknownResults.class new file mode 100644 index 0000000..c88de3e Binary files /dev/null and b/bin/core/UnknownResults.class differ diff --git a/bin/data/controllset b/bin/data/controllset new file mode 100644 index 0000000..30317bd --- /dev/null +++ b/bin/data/controllset @@ -0,0 +1,120 @@ +[2011 18] + Bayer Leverkusen - Borussia Dortmund (1:3) + FC St. Pauli - SC Freiburg (2:2) + 1. FC Nürnberg - Borussia Mönchengladbach (0:1) + VfL Wolfsburg - FC Bayern München (1:1) + VfB Stuttgart - 1. FSV Mainz 05 (1:0) + SV Werder Bremen - 1899 Hoffenheim (2:1) + FC Schalke 04 - Hamburger SV (0:1) + Eintracht Frankfurt - Hannover 96 (0:3) + 1. FC Kaiserslautern - 1. FC Köln (1:1) + +[2011 19] + Hamburger SV - Eintracht Frankfurt (1:0) + 1. FSV Mainz 05 - VfL Wolfsburg (0:1) + Borussia Dortmund - VfB Stuttgart (1:1) + FC Bayern München - 1. FC Kaiserslautern (5:1) + SC Freiburg - 1. FC Nürnberg (1:1) + Hannover 96 - FC Schalke 04 (0:1) + 1. FC Köln - SV Werder Bremen (3:0) + Borussia Mönchengladbach - Bayer Leverkusen (1:3) + 1899 Hoffenheim - FC St. Pauli (2:2) + +[2011 20] + Bayer Leverkusen - Hannover 96 (2:0) + FC St. Pauli - 1. FC Köln (3:0) + 1. FC Nürnberg - Hamburger SV (2:0) + VfL Wolfsburg - Borussia Dortmund (0:3) + SV Werder Bremen - FC Bayern München (1:3) + FC Schalke 04 - 1899 Hoffenheim (0:1) + 1. FC Kaiserslautern - 1. FSV Mainz 05 (0:1) + VfB Stuttgart - SC Freiburg (0:1) + Eintracht Frankfurt - Borussia Mönchengladbach (0:1) + +[2011 21] + Borussia Dortmund - FC Schalke 04 (0:0) + 1. FC Nürnberg - Bayer Leverkusen (1:0) + Hannover 96 - VfL Wolfsburg (1:0) + 1. FC Köln - FC Bayern München (3:2) + 1899 Hoffenheim - 1. FC Kaiserslautern (3:2) + 1. FSV Mainz 05 - SV Werder Bremen (1:1) + Borussia Mönchengladbach - VfB Stuttgart (2:3) + SC Freiburg - Eintracht Frankfurt (0:0) + Hamburger SV - FC St. Pauli (0:1) + +[2011 22] + FC St. Pauli - Borussia Mönchengladbach (3:1) + Eintracht Frankfurt - Bayer Leverkusen (0:3) + VfL Wolfsburg - Hamburger SV (0:1) + VfB Stuttgart - 1. FC Nürnberg (1:4) + FC Schalke 04 - SC Freiburg (1:0) + FC Bayern München - 1899 Hoffenheim (4:0) + 1. FC Kaiserslautern - Borussia Dortmund (1:1) + 1. FC Köln - 1. FSV Mainz 05 (4:2) + SV Werder Bremen - Hannover 96 (1:1) + +[2011 23] + 1. FC Nürnberg - Eintracht Frankfurt (3:0) + Hannover 96 - 1. FC Kaiserslautern (3:0) + SC Freiburg - VfL Wolfsburg (2:1) + 1899 Hoffenheim - 1. FC Köln (1:1) + Hamburger SV - SV Werder Bremen (4:0) + Borussia Dortmund - FC St. Pauli (2:0) + 1. FSV Mainz 05 - FC Bayern München (1:3) + Bayer Leverkusen - VfB Stuttgart (4:2) + Borussia Mönchengladbach - FC Schalke 04 (2:1) + +[2011 24] + VfL Wolfsburg - Borussia Mönchengladbach (2:1) + FC St. Pauli - Hannover 96 (0:1) + 1. FC Kaiserslautern - Hamburger SV (1:1) + 1. FC Köln - SC Freiburg (1:0) + 1899 Hoffenheim - 1. FSV Mainz 05 (1:2) + FC Schalke 04 - 1. FC Nürnberg (1:1) + FC Bayern München - Borussia Dortmund (1:3) + Eintracht Frankfurt - VfB Stuttgart (0:2) + SV Werder Bremen - Bayer Leverkusen (2:2) + +[2011 25] + Borussia Dortmund - 1. FC Köln (1:0) + 1. FC Nürnberg - FC St. Pauli (5:0) + Hannover 96 - FC Bayern München (3:1) + Eintracht Frankfurt - 1. FC Kaiserslautern (0:0) + VfB Stuttgart - FC Schalke 04 (1:0) + Borussia Mönchengladbach - 1899 Hoffenheim (2:0) + Bayer Leverkusen - VfL Wolfsburg (3:0) + SC Freiburg - SV Werder Bremen (1:3) + Hamburger SV - 1. FSV Mainz 05 (2:4) + +[2011 26] + 1. FC Köln - Hannover 96 (4:0) + 1. FC Kaiserslautern - SC Freiburg (2:1) + 1899 Hoffenheim - Borussia Dortmund (1:0) + VfL Wolfsburg - 1. FC Nürnberg (1:2) + FC Bayern München - Hamburger SV (6:0) + FC Schalke 04 - Eintracht Frankfurt (2:1) + SV Werder Bremen - Borussia Mönchengladbach (1:1) + 1. FSV Mainz 05 - Bayer Leverkusen (0:1) + FC St. Pauli - VfB Stuttgart (1:2) + +[2011 27] + Borussia Mönchengladbach - 1. FC Kaiserslautern (0:1) + 1. FC Nürnberg - SV Werder Bremen (1:3) + Hannover 96 - 1899 Hoffenheim (2:0) + SC Freiburg - FC Bayern München (1:2) + Eintracht Frankfurt - FC St. Pauli (2:1) + Hamburger SV - 1. FC Köln (6:2) + Borussia Dortmund - 1. FSV Mainz 05 (1:1) + Bayer Leverkusen - FC Schalke 04 (2:0) + VfB Stuttgart - VfL Wolfsburg (1:1) + +[2011 28] + FC St. Pauli - FC Schalke 04 (0:6) + 1. FC Kaiserslautern - Bayer Leverkusen (0:6) + 1. FSV Mainz 05 - SC Freiburg (0:6) + Borussia Dortmund - Hannover 96 (0:6) + SV Werder Bremen - VfB Stuttgart (0:6) + FC Bayern München - Borussia Mönchengladbach (0:6) + 1899 Hoffenheim - Hamburger SV (0:6) + 1. FC Köln - 1. FC Nürnberg (0:6) + VfL Wolfsburg - Eintracht Frankfurt (0:6) diff --git a/bin/data/fullpred b/bin/data/fullpred new file mode 100644 index 0000000..28951dd --- /dev/null +++ b/bin/data/fullpred @@ -0,0 +1,187 @@ +[2011 18] + Bayer Leverkusen - Borussia Dortmund + FC St. Pauli - SC Freiburg + 1. FC Nürnberg - Borussia Mönchengladbach + VfL Wolfsburg - FC Bayern München + VfB Stuttgart - 1. FSV Mainz 05 + SV Werder Bremen - 1899 Hoffenheim + FC Schalke 04 - Hamburger SV + Eintracht Frankfurt - Hannover 96 + 1. FC Kaiserslautern - 1. FC Köln + +[2011 19] + Hamburger SV - Eintracht Frankfurt + 1. FSV Mainz 05 - VfL Wolfsburg + Borussia Dortmund - VfB Stuttgart + FC Bayern München - 1. FC Kaiserslautern + SC Freiburg - 1. FC Nürnberg + Hannover 96 - FC Schalke 04 + 1. FC Köln - SV Werder Bremen + Borussia Mönchengladbach - Bayer Leverkusen + 1899 Hoffenheim - FC St. Pauli + +[2011 20] + Bayer Leverkusen - Hannover 96 + FC St. Pauli - 1. FC Köln + 1. FC Nürnberg - Hamburger SV + VfL Wolfsburg - Borussia Dortmund + SV Werder Bremen - FC Bayern München + FC Schalke 04 - 1899 Hoffenheim + 1. FC Kaiserslautern - 1. FSV Mainz 05 + VfB Stuttgart - SC Freiburg + Eintracht Frankfurt - Borussia Mönchengladbach + +[2011 21] + Borussia Dortmund - FC Schalke 04 + 1. FC Nürnberg - Bayer Leverkusen + Hannover 96 - VfL Wolfsburg + 1. FC Köln - FC Bayern München + 1899 Hoffenheim - 1. FC Kaiserslautern + 1. FSV Mainz 05 - SV Werder Bremen + Borussia Mönchengladbach - VfB Stuttgart + SC Freiburg - Eintracht Frankfurt + Hamburger SV - FC St. Pauli + +[2011 22] + FC St. Pauli - Borussia Mönchengladbach + Eintracht Frankfurt - Bayer Leverkusen + VfL Wolfsburg - Hamburger SV + VfB Stuttgart - 1. FC Nürnberg + FC Schalke 04 - SC Freiburg + FC Bayern München - 1899 Hoffenheim + 1. FC Kaiserslautern - Borussia Dortmund + 1. FC Köln - 1. FSV Mainz 05 + SV Werder Bremen - Hannover 96 + +[2011 23] + 1. FC Nürnberg - Eintracht Frankfurt + Hannover 96 - 1. FC Kaiserslautern + SC Freiburg - VfL Wolfsburg + 1899 Hoffenheim - 1. FC Köln + Hamburger SV - SV Werder Bremen + Borussia Dortmund - FC St. Pauli + 1. FSV Mainz 05 - FC Bayern München + Bayer Leverkusen - VfB Stuttgart + Borussia Mönchengladbach - FC Schalke 04 + +[2011 24] + VfL Wolfsburg - Borussia Mönchengladbach + FC St. Pauli - Hannover 96 + 1. FC Kaiserslautern - Hamburger SV + 1. FC Köln - SC Freiburg + 1899 Hoffenheim - 1. FSV Mainz 05 + FC Schalke 04 - 1. FC Nürnberg + FC Bayern München - Borussia Dortmund + Eintracht Frankfurt - VfB Stuttgart + SV Werder Bremen - Bayer Leverkusen + +[2011 25] + Borussia Dortmund - 1. FC Köln + 1. FC Nürnberg - FC St. Pauli + Hannover 96 - FC Bayern München + Eintracht Frankfurt - 1. FC Kaiserslautern + VfB Stuttgart - FC Schalke 04 + Borussia Mönchengladbach - 1899 Hoffenheim + Bayer Leverkusen - VfL Wolfsburg + SC Freiburg - SV Werder Bremen + Hamburger SV - 1. FSV Mainz 05 + +[2011 26] + 1. FC Köln - Hannover 96 + 1. FC Kaiserslautern - SC Freiburg + 1899 Hoffenheim - Borussia Dortmund + VfL Wolfsburg - 1. FC Nürnberg + FC Bayern München - Hamburger SV + FC Schalke 04 - Eintracht Frankfurt + SV Werder Bremen - Borussia Mönchengladbach + 1. FSV Mainz 05 - Bayer Leverkusen + FC St. Pauli - VfB Stuttgart + +[2011 27] + Borussia Mönchengladbach - 1. FC Kaiserslautern + 1. FC Nürnberg - SV Werder Bremen + Hannover 96 - 1899 Hoffenheim + SC Freiburg - FC Bayern München + Eintracht Frankfurt - FC St. Pauli + Hamburger SV - 1. FC Köln + Borussia Dortmund - 1. FSV Mainz 05 + Bayer Leverkusen - FC Schalke 04 + VfB Stuttgart - VfL Wolfsburg + +[2011 28] + FC St. Pauli - FC Schalke 04 + 1. FC Kaiserslautern - Bayer Leverkusen + 1. FSV Mainz 05 - SC Freiburg + Borussia Dortmund - Hannover 96 + SV Werder Bremen - VfB Stuttgart + FC Bayern München - Borussia Mönchengladbach + 1899 Hoffenheim - Hamburger SV + 1. FC Köln - 1. FC Nürnberg + VfL Wolfsburg - Eintracht Frankfurt + +[2011 29] + Eintracht Frankfurt - SV Werder Bremen + 1. FC Nürnberg - FC Bayern München + Hannover 96 - 1. FSV Mainz 05 + SC Freiburg - 1899 Hoffenheim + Hamburger SV - Borussia Dortmund + FC Schalke 04 - VfL Wolfsburg + VfB Stuttgart - 1. FC Kaiserslautern + Borussia Mönchengladbach - 1. FC Köln + Bayer Leverkusen - FC St. Pauli + +[2011 30] + 1. FSV Mainz 05 - Borussia Mönchengladbach + 1. FC Kaiserslautern - 1. FC Nürnberg + 1. FC Köln - VfB Stuttgart + 1899 Hoffenheim - Eintracht Frankfurt + VfL Wolfsburg - FC St. Pauli + Hamburger SV - Hannover 96 + SV Werder Bremen - FC Schalke 04 + FC Bayern München - Bayer Leverkusen + Borussia Dortmund - SC Freiburg + +[2011 31] + SC Freiburg - Hannover 96 + FC St. Pauli - SV Werder Bremen + Eintracht Frankfurt - FC Bayern München + FC Schalke 04 - 1. FC Kaiserslautern + Bayer Leverkusen - 1899 Hoffenheim + VfB Stuttgart - Hamburger SV + Borussia Mönchengladbach - Borussia Dortmund + VfL Wolfsburg - 1. FC Köln + 1. FC Nürnberg - 1. FSV Mainz 05 + +[2011 32] + 1. FC Kaiserslautern - FC St. Pauli + SV Werder Bremen - VfL Wolfsburg + Hannover 96 - Borussia Mönchengladbach + 1. FC Köln - Bayer Leverkusen + 1899 Hoffenheim - VfB Stuttgart + 1. FSV Mainz 05 - Eintracht Frankfurt + Borussia Dortmund - 1. FC Nürnberg + Hamburger SV - SC Freiburg + FC Bayern München - FC Schalke 04 + +[2011 33] + 1. FC Nürnberg - 1899 Hoffenheim + Borussia Mönchengladbach - SC Freiburg + Eintracht Frankfurt - 1. FC Köln + SV Werder Bremen - Borussia Dortmund + FC Schalke 04 - 1. FSV Mainz 05 + Bayer Leverkusen - Hamburger SV + VfB Stuttgart - Hannover 96 + VfL Wolfsburg - 1. FC Kaiserslautern + FC St. Pauli - FC Bayern München + +[2011 34] + 1. FC Kaiserslautern - SV Werder Bremen + SC Freiburg - Bayer Leverkusen + FC Bayern München - VfB Stuttgart + 1899 Hoffenheim - VfL Wolfsburg + Hannover 96 - 1. FC Nürnberg + Borussia Dortmund - Eintracht Frankfurt + Hamburger SV - Borussia Mönchengladbach + 1. FSV Mainz 05 - FC St. Pauli + 1. FC Köln - FC Schalke 04 + diff --git a/bin/data/smallset b/bin/data/smallset new file mode 100644 index 0000000..370a943 --- /dev/null +++ b/bin/data/smallset @@ -0,0 +1,186 @@ +[2011 1] + FC Bayern München - VfL Wolfsburg (2:1) + 1899 Hoffenheim - SV Werder Bremen (4:1) + Borussia Mönchengladbach - 1. FC Nürnberg (1:1) + 1. FC Köln - 1. FC Kaiserslautern (1:3) + SC Freiburg - FC St. Pauli (1:3) + Hannover 96 - Eintracht Frankfurt (2:1) + Hamburger SV - FC Schalke 04 (2:1) + 1. FSV Mainz 05 - VfB Stuttgart (2:0) + Borussia Dortmund - Bayer Leverkusen (0:2) + +[2011 2] + 1. FC Kaiserslautern - FC Bayern München (2:0) + FC Schalke 04 - Hannover 96 (1:2) + SV Werder Bremen - 1. FC Köln (4:2) + VfL Wolfsburg - 1. FSV Mainz 05 (3:4) + Eintracht Frankfurt - Hamburger SV (1:3) + 1. FC Nürnberg - SC Freiburg (1:2) + FC St. Pauli - 1899 Hoffenheim (0:1) + Bayer Leverkusen - Borussia Mönchengladbach (3:6) + +[2011 3] + 1899 Hoffenheim - FC Schalke 04 (2:0) + Borussia Dortmund - VfL Wolfsburg (2:0) + Hamburger SV - 1. FC Nürnberg (1:1) + Borussia Mönchengladbach - Eintracht Frankfurt (0:4) + SC Freiburg - VfB Stuttgart (2:1) + Hannover 96 - Bayer Leverkusen (2:2) + FC Bayern München - SV Werder Bremen (0:0) + 1. FSV Mainz 05 - 1. FC Kaiserslautern (2:1) + 1. FC Köln - FC St. Pauli (1:0) + +[2011 4] + Eintracht Frankfurt - SC Freiburg (0:1) + FC Bayern München - 1. FC Köln (0:0) + SV Werder Bremen - 1. FSV Mainz 05 (0:2) + VfB Stuttgart - Borussia Mönchengladbach (7:0) + VfL Wolfsburg - Hannover 96 (2:0) + 1. FC Kaiserslautern - 1899 Hoffenheim (2:2) + FC St. Pauli - Hamburger SV (1:1) + FC Schalke 04 - Borussia Dortmund (1:3) + Bayer Leverkusen - 1. FC Nürnberg (0:0) + +[2011 5] + 1. FSV Mainz 05 - 1. FC Köln (2:0) + 1899 Hoffenheim - FC Bayern München (1:2) + Hannover 96 - SV Werder Bremen (4:1) + Bayer Leverkusen - Eintracht Frankfurt (2:1) + Borussia Dortmund - 1. FC Kaiserslautern (5:0) + Hamburger SV - VfL Wolfsburg (1:3) + Borussia Mönchengladbach - FC St. Pauli (1:2) + SC Freiburg - FC Schalke 04 (1:2) + 1. FC Nürnberg - VfB Stuttgart (2:1) + +[2011 6] + 1. FC Köln - 1899 Hoffenheim (1:1) + FC Bayern München - 1. FSV Mainz 05 (1:2) + FC Schalke 04 - Borussia Mönchengladbach (2:2) + VfB Stuttgart - Bayer Leverkusen (1:4) + Eintracht Frankfurt - 1. FC Nürnberg (2:0) + FC St. Pauli - Borussia Dortmund (1:3) + SV Werder Bremen - Hamburger SV (3:2) + VfL Wolfsburg - SC Freiburg (2:1) + 1. FC Kaiserslautern - Hannover 96 (0:1) + +[2011 7] + Hannover 96 - FC St. Pauli (0:1) + Hamburger SV - 1. FC Kaiserslautern (2:1) + 1. FSV Mainz 05 - 1899 Hoffenheim (4:2) + Borussia Mönchengladbach - VfL Wolfsburg (1:1) + SC Freiburg - 1. FC Köln (3:2) + 1. FC Nürnberg - FC Schalke 04 (2:1) + VfB Stuttgart - Eintracht Frankfurt (1:2) + Borussia Dortmund - FC Bayern München (2:0) + Bayer Leverkusen - SV Werder Bremen (2:2) + +[2011 8] + 1. FC Köln - Borussia Dortmund (1:2) + FC Bayern München - Hannover 96 (3:0) + FC Schalke 04 - VfB Stuttgart (2:2) + SV Werder Bremen - SC Freiburg (2:1) + 1. FSV Mainz 05 - Hamburger SV (0:1) + FC St. Pauli - 1. FC Nürnberg (3:2) + VfL Wolfsburg - Bayer Leverkusen (2:3) + 1. FC Kaiserslautern - Eintracht Frankfurt (0:3) + 1899 Hoffenheim - Borussia Mönchengladbach (3:2) + +[2011 9] + Hamburger SV - FC Bayern München (0:0) + Eintracht Frankfurt - FC Schalke 04 (0:0) + Borussia Mönchengladbach - SV Werder Bremen (1:4) + SC Freiburg - 1. FC Kaiserslautern (2:1) + Hannover 96 - 1. FC Köln (2:1) + 1. FC Nürnberg - VfL Wolfsburg (2:1) + Borussia Dortmund - 1899 Hoffenheim (1:1) + Bayer Leverkusen - 1. FSV Mainz 05 (0:1) + VfB Stuttgart - FC St. Pauli (2:0) + +[2011 10] + FC Bayern München - SC Freiburg (4:2) + SV Werder Bremen - 1. FC Nürnberg (2:3) + VfL Wolfsburg - VfB Stuttgart (2:0) + 1. FC Köln - Hamburger SV (3:2) + 1. FC Kaiserslautern - Borussia Mönchengladbach (3:0) + FC St. Pauli - Eintracht Frankfurt (1:3) + FC Schalke 04 - Bayer Leverkusen (0:1) + 1. FSV Mainz 05 - Borussia Dortmund (0:2) + 1899 Hoffenheim - Hannover 96 (4:0) + +[2011 11] + FC Schalke 04 - FC St. Pauli (3:0) + Hamburger SV - 1899 Hoffenheim (2:1) + Eintracht Frankfurt - VfL Wolfsburg (3:1) + Borussia Mönchengladbach - FC Bayern München (3:3) + SC Freiburg - 1. FSV Mainz 05 (1:0) + 1. FC Nürnberg - 1. FC Köln (3:1) + Hannover 96 - Borussia Dortmund (0:4) + Bayer Leverkusen - 1. FC Kaiserslautern (3:1) + VfB Stuttgart - SV Werder Bremen (6:0) + +[2011 12] + Borussia Dortmund - Hamburger SV (2:0) + SV Werder Bremen - Eintracht Frankfurt (0:0) + VfL Wolfsburg - FC Schalke 04 (2:2) + 1. FC Köln - Borussia Mönchengladbach (0:4) + 1. FC Kaiserslautern - VfB Stuttgart (3:3) + FC St. Pauli - Bayer Leverkusen (0:1) + 1. FSV Mainz 05 - Hannover 96 (0:1) + 1899 Hoffenheim - SC Freiburg (0:1) + FC Bayern München - 1. FC Nürnberg (3:0) + +[2011 13] + FC Schalke 04 - SV Werder Bremen (4:0) + Eintracht Frankfurt - 1899 Hoffenheim (0:4) + Borussia Mönchengladbach - 1. FSV Mainz 05 (2:3) + SC Freiburg - Borussia Dortmund (1:2) + Hannover 96 - Hamburger SV (3:2) + 1. FC Nürnberg - 1. FC Kaiserslautern (1:3) + Bayer Leverkusen - FC Bayern München (1:1) + VfB Stuttgart - 1. FC Köln (0:1) + FC St. Pauli - VfL Wolfsburg (1:1) + +[2011 14] + 1. FSV Mainz 05 - 1. FC Nürnberg (3:0) + FC Bayern München - Eintracht Frankfurt (4:1) + Hamburger SV - VfB Stuttgart (4:2) + 1899 Hoffenheim - Bayer Leverkusen (2:2) + Hannover 96 - SC Freiburg (3:0) + 1. FC Kaiserslautern - FC Schalke 04 (5:0) + Borussia Dortmund - Borussia Mönchengladbach (4:1) + SV Werder Bremen - FC St. Pauli (3:0) + 1. FC Köln - VfL Wolfsburg (1:1) + +[2011 15] + FC St. Pauli - 1. FC Kaiserslautern (1:0) + VfB Stuttgart - 1899 Hoffenheim (1:1) + VfL Wolfsburg - SV Werder Bremen (0:0) + Eintracht Frankfurt - 1. FSV Mainz 05 (2:1) + Borussia Mönchengladbach - Hannover 96 (1:2) + SC Freiburg - Hamburger SV (1:0) + FC Schalke 04 - FC Bayern München (2:0) + Bayer Leverkusen - 1. FC Köln (3:2) + 1. FC Nürnberg - Borussia Dortmund (0:2) + +[2011 16] + Hannover 96 - VfB Stuttgart (2:1) + FC Bayern München - FC St. Pauli (3:0) + Hamburger SV - Bayer Leverkusen (2:4) + 1899 Hoffenheim - 1. FC Nürnberg (1:1) + 1. FC Köln - Eintracht Frankfurt (1:0) + 1. FC Kaiserslautern - VfL Wolfsburg (0:0) + Borussia Dortmund - SV Werder Bremen (2:0) + SC Freiburg - Borussia Mönchengladbach (3:0) + 1. FSV Mainz 05 - FC Schalke 04 (0:1) + +[2011 17] + Borussia Mönchengladbach - Hamburger SV (1:2) + 1. FC Nürnberg - Hannover 96 (3:1) + Eintracht Frankfurt - Borussia Dortmund (1:0) + VfL Wolfsburg - 1899 Hoffenheim (2:2) + FC Schalke 04 - 1. FC Köln (3:0) + SV Werder Bremen - 1. FC Kaiserslautern (1:2) + FC St. Pauli - 1. FSV Mainz 05 (2:4) + Bayer Leverkusen - SC Freiburg (2:2) + VfB Stuttgart - FC Bayern München (3:5) + diff --git a/bin/data/testset b/bin/data/testset new file mode 100644 index 0000000..54431a0 --- /dev/null +++ b/bin/data/testset @@ -0,0 +1,109 @@ +[2011 18] + Bayer Leverkusen - Borussia Dortmund + FC St. Pauli - SC Freiburg + 1. FC Nürnberg - Borussia Mönchengladbach + VfL Wolfsburg - FC Bayern München + VfB Stuttgart - 1. FSV Mainz 05 + SV Werder Bremen - 1899 Hoffenheim + FC Schalke 04 - Hamburger SV + Eintracht Frankfurt - Hannover 96 + 1. FC Kaiserslautern - 1. FC Köln + +[2011 19] + Hamburger SV - Eintracht Frankfurt + 1. FSV Mainz 05 - VfL Wolfsburg + Borussia Dortmund - VfB Stuttgart + FC Bayern München - 1. FC Kaiserslautern + SC Freiburg - 1. FC Nürnberg + Hannover 96 - FC Schalke 04 + 1. FC Köln - SV Werder Bremen + Borussia Mönchengladbach - Bayer Leverkusen + 1899 Hoffenheim - FC St. Pauli + +[2011 20] + Bayer Leverkusen - Hannover 96 + FC St. Pauli - 1. FC Köln + 1. FC Nürnberg - Hamburger SV + VfL Wolfsburg - Borussia Dortmund + SV Werder Bremen - FC Bayern München + FC Schalke 04 - 1899 Hoffenheim + 1. FC Kaiserslautern - 1. FSV Mainz 05 + VfB Stuttgart - SC Freiburg + Eintracht Frankfurt - Borussia Mönchengladbach + +[2011 21] + Borussia Dortmund - FC Schalke 04 + 1. FC Nürnberg - Bayer Leverkusen + Hannover 96 - VfL Wolfsburg + 1. FC Köln - FC Bayern München + 1899 Hoffenheim - 1. FC Kaiserslautern + 1. FSV Mainz 05 - SV Werder Bremen + Borussia Mönchengladbach - VfB Stuttgart + SC Freiburg - Eintracht Frankfurt + Hamburger SV - FC St. Pauli + +[2011 22] + FC St. Pauli - Borussia Mönchengladbach + Eintracht Frankfurt - Bayer Leverkusen + VfL Wolfsburg - Hamburger SV + VfB Stuttgart - 1. FC Nürnberg + FC Schalke 04 - SC Freiburg + FC Bayern München - 1899 Hoffenheim + 1. FC Kaiserslautern - Borussia Dortmund + 1. FC Köln - 1. FSV Mainz 05 + SV Werder Bremen - Hannover 96 + +[2011 23] + 1. FC Nürnberg - Eintracht Frankfurt + Hannover 96 - 1. FC Kaiserslautern + SC Freiburg - VfL Wolfsburg + 1899 Hoffenheim - 1. FC Köln + Hamburger SV - SV Werder Bremen + Borussia Dortmund - FC St. Pauli + 1. FSV Mainz 05 - FC Bayern München + Bayer Leverkusen - VfB Stuttgart + Borussia Mönchengladbach - FC Schalke 04 + +[2011 24] + VfL Wolfsburg - Borussia Mönchengladbach + FC St. Pauli - Hannover 96 + 1. FC Kaiserslautern - Hamburger SV + 1. FC Köln - SC Freiburg + 1899 Hoffenheim - 1. FSV Mainz 05 + FC Schalke 04 - 1. FC Nürnberg + FC Bayern München - Borussia Dortmund + Eintracht Frankfurt - VfB Stuttgart + SV Werder Bremen - Bayer Leverkusen + +[2011 25] + Borussia Dortmund - 1. FC Köln + 1. FC Nürnberg - FC St. Pauli + Hannover 96 - FC Bayern München + Eintracht Frankfurt - 1. FC Kaiserslautern + VfB Stuttgart - FC Schalke 04 + Borussia Mönchengladbach - 1899 Hoffenheim + Bayer Leverkusen - VfL Wolfsburg + SC Freiburg - SV Werder Bremen + Hamburger SV - 1. FSV Mainz 05 + +[2011 26] + 1. FC Köln - Hannover 96 + 1. FC Kaiserslautern - SC Freiburg + 1899 Hoffenheim - Borussia Dortmund + VfL Wolfsburg - 1. FC Nürnberg + FC Bayern München - Hamburger SV + FC Schalke 04 - Eintracht Frankfurt + SV Werder Bremen - Borussia Mönchengladbach + 1. FSV Mainz 05 - Bayer Leverkusen + FC St. Pauli - VfB Stuttgart + +[2011 27] + Borussia Mönchengladbach - 1. FC Kaiserslautern + 1. FC Nürnberg - SV Werder Bremen + Hannover 96 - 1899 Hoffenheim + SC Freiburg - FC Bayern München + Eintracht Frankfurt - FC St. Pauli + Hamburger SV - 1. FC Köln + Borussia Dortmund - 1. FSV Mainz 05 + Bayer Leverkusen - FC Schalke 04 + VfB Stuttgart - VfL Wolfsburg diff --git a/bin/evaluate/AbstractSkillCalculator.class b/bin/evaluate/AbstractSkillCalculator.class new file mode 100644 index 0000000..dc3947e Binary files /dev/null and b/bin/evaluate/AbstractSkillCalculator.class differ diff --git a/bin/evaluate/DaussCalculation.class b/bin/evaluate/DaussCalculation.class new file mode 100644 index 0000000..2838f8c Binary files /dev/null and b/bin/evaluate/DaussCalculation.class differ diff --git a/bin/evaluate/EloCalculation.class b/bin/evaluate/EloCalculation.class new file mode 100644 index 0000000..b8e6355 Binary files /dev/null and b/bin/evaluate/EloCalculation.class differ diff --git a/bin/evaluate/GaussCalculation.class b/bin/evaluate/GaussCalculation.class new file mode 100644 index 0000000..df7c02f Binary files /dev/null and b/bin/evaluate/GaussCalculation.class differ diff --git a/bin/evaluate/IPredictor.class b/bin/evaluate/IPredictor.class new file mode 100644 index 0000000..a7fb0f3 Binary files /dev/null and b/bin/evaluate/IPredictor.class differ diff --git a/bin/evaluate/ISkillCalculator.class b/bin/evaluate/ISkillCalculator.class new file mode 100644 index 0000000..5e37386 Binary files /dev/null and b/bin/evaluate/ISkillCalculator.class differ diff --git a/bin/evaluate/RandomCalculation.class b/bin/evaluate/RandomCalculation.class new file mode 100644 index 0000000..29016f7 Binary files /dev/null and b/bin/evaluate/RandomCalculation.class differ diff --git a/bin/game/ADTeam.class b/bin/game/ADTeam.class new file mode 100644 index 0000000..2c091c8 Binary files /dev/null and b/bin/game/ADTeam.class differ diff --git a/bin/game/AbstractTeam.class b/bin/game/AbstractTeam.class new file mode 100644 index 0000000..0a19fc1 Binary files /dev/null and b/bin/game/AbstractTeam.class differ diff --git a/bin/game/EloTeam.class b/bin/game/EloTeam.class new file mode 100644 index 0000000..45911b8 Binary files /dev/null and b/bin/game/EloTeam.class differ diff --git a/bin/game/GameResult.class b/bin/game/GameResult.class new file mode 100644 index 0000000..f209c67 Binary files /dev/null and b/bin/game/GameResult.class differ diff --git a/bin/game/GaussTeam.class b/bin/game/GaussTeam.class new file mode 100644 index 0000000..e0f3051 Binary files /dev/null and b/bin/game/GaussTeam.class differ diff --git a/bin/game/ITeam.class b/bin/game/ITeam.class new file mode 100644 index 0000000..d35efd6 Binary files /dev/null and b/bin/game/ITeam.class differ diff --git a/bin/networking/INetCollector.class b/bin/networking/INetCollector.class new file mode 100644 index 0000000..7b87077 Binary files /dev/null and b/bin/networking/INetCollector.class differ diff --git a/bin/networking/PredictNetCollector.class b/bin/networking/PredictNetCollector.class new file mode 100644 index 0000000..e3b285a Binary files /dev/null and b/bin/networking/PredictNetCollector.class differ diff --git a/bin/networking/SimpleNetCollector.class b/bin/networking/SimpleNetCollector.class new file mode 100644 index 0000000..782c235 Binary files /dev/null and b/bin/networking/SimpleNetCollector.class differ diff --git a/src/commons-math-2.2.jar b/src/commons-math-2.2.jar new file mode 100644 index 0000000..b29a39c Binary files /dev/null and b/src/commons-math-2.2.jar differ diff --git a/src/configuration/ConfPredictData.java b/src/configuration/ConfPredictData.java new file mode 100644 index 0000000..f1c9255 --- /dev/null +++ b/src/configuration/ConfPredictData.java @@ -0,0 +1,62 @@ +package configuration; + +import game.GameResult; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.Vector; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Read and parse configuration for prediction data, without game results. + * + * @author mutant + * + */ +public class ConfPredictData { + + private Vector results; + + public ConfPredictData(String file) throws IOException { + + int currentYear = 0; + int currentDay = 0; + + this.results = new Vector(); + + BufferedReader bis = new BufferedReader(new FileReader(file)); + Pattern pResult = Pattern.compile("^\\s*(.*?)\\s*-\\s*(.*?)\\s*$"); + Pattern pTime = Pattern.compile("\\[\\s*(\\d{4})\\s+(\\d{1,2})\\s*\\]"); + + String cLine; + + while ((cLine = bis.readLine()) != null) { + Matcher mResult = pResult.matcher(cLine); + Matcher mTime = pTime.matcher(cLine); + + if (mResult.find()) { + String opp1 = mResult.group(1); + String opp2 = mResult.group(2); + + GameResult gr = new GameResult(opp1, opp2, -1, -1, currentYear, currentDay); + results.add(gr); + } + else{ + if(mTime.find()){ + currentYear = Integer.parseInt(mTime.group(1)); + currentDay = Integer.parseInt(mTime.group(2)); + } + } + } + } + + public int getSize() { + return results.size(); + } + + public GameResult getResultAt(int i) { + return results.get(i); + } +} diff --git a/src/configuration/ConfResultData.java b/src/configuration/ConfResultData.java new file mode 100644 index 0000000..88b25f7 --- /dev/null +++ b/src/configuration/ConfResultData.java @@ -0,0 +1,65 @@ +package configuration; + +import game.GameResult; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.Vector; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Read and parse configuration for prediction data, without game results. + * + * @author mutant + * + */ +public class ConfResultData { + + private Vector results; + + public ConfResultData(String file) throws IOException { + + this.results = new Vector(); + + BufferedReader bis = new BufferedReader(new FileReader(file)); + Pattern pTime = Pattern.compile("\\[\\s*(\\d{4})\\s+(\\d{1,2})\\s*\\]"); + Pattern pResult = Pattern + .compile("\\s*(.*?)\\s*-\\s*(.*?)\\s*\\((\\d)\\s*:\\s*(\\d)\\)"); + + String cLine; + int currentYear = 0; + int currentDay = 0; + + while ((cLine = bis.readLine()) != null) { + Matcher mTime = pTime.matcher(cLine); + Matcher mResult = pResult.matcher(cLine); + + if (mResult.find()) { + String opp1 = mResult.group(1); + String opp2 = mResult.group(2); + + int res1 = Integer.parseInt(mResult.group(3)); + int res2 = Integer.parseInt(mResult.group(4)); + + GameResult gr = new GameResult(opp1, opp2, res1, res2, + currentYear, currentDay); + results.add(gr); + } else { + if (mTime.find()) { + currentYear = Integer.parseInt(mTime.group(1)); + currentDay = Integer.parseInt(mTime.group(2)); + } + } + } + } + + public int getSize() { + return results.size(); + } + + public GameResult getResultAt(int i) { + return results.get(i); + } +} diff --git a/src/core/MPredictResults.java b/src/core/MPredictResults.java new file mode 100644 index 0000000..1c2665f --- /dev/null +++ b/src/core/MPredictResults.java @@ -0,0 +1,96 @@ +package core; + +import java.io.IOException; + +import configuration.ConfPredictData; +import configuration.ConfResultData; +import evaluate.DaussCalculation; +import evaluate.IPredictor; +import game.GameResult; +import game.GaussTeam; + +public class MPredictResults { + + /** + * @param args + */ + public static void main(String[] args) { + + String learnSet = "src/data/smallset"; // learn from this game set + String testSet = "src/data/testset"; // predict this set + String orakelSet = "src/data/controllset"; // use this set, to evaluate + + System.out.println("+------- Skill -------+"); + + // get game data + ConfResultData controll; + ConfPredictData pd; + try { + pd = new ConfPredictData(testSet); + controll = new ConfResultData(orakelSet); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + for (double param = 1; param < 2.5; param = param + .0125) { + + // learn + GaussTeam.step = param; + IPredictor sc = new DaussCalculation(learnSet); + + // Collect some statistic + int points = 0; + int unknown = 0; + + int p0pred = 0; + int p1pred = 0; + int p2pred = 0; + int p3pred = 0; + + for (int i = 0; i < pd.getSize(); i++) { + GameResult gr = pd.getResultAt(i); + GameResult ogr = controll.getResultAt(i); + + sc.predict(gr); + + points = points + + gr.getPredPoints(ogr.getScore1(), ogr.getScore2()); + + switch (gr.getPredPoints(ogr.getScore1(), ogr.getScore2())) { + case 0: + p0pred++; + break; + case 1: + p1pred++; + break; + case 2: + p2pred++; + break; + case 3: + p3pred++; + break; + } + } + + // final statistics + System.out.println("-------------------------"); + System.out.println("param = " + param); + System.out.println(pd.getSize() + " games (" + unknown + + ") unknown"); + System.out.println(points + "/" + (pd.getSize() * 3) + + " prediction points"); + System.out.printf("\t0 points x %d (%3.1f%%)\n", p0pred, 100.0 + * p0pred / pd.getSize()); + System.out.printf("\t1 points x %d (%3.1f%%)\n", p1pred, 100.0 + * p1pred / pd.getSize()); + System.out.printf("\t2 points x %d (%3.1f%%)\n", p2pred, 100.0 + * p2pred / pd.getSize()); + System.out.printf("\t3 points x %d (%3.1f%%)\n", p3pred, 100.0 + * p3pred / pd.getSize()); + System.out.println((points * 9.0 / pd.getSize()) + + " pro game average"); + } + + } +} diff --git a/src/core/ParseData.java b/src/core/ParseData.java new file mode 100644 index 0000000..d077ff3 --- /dev/null +++ b/src/core/ParseData.java @@ -0,0 +1,83 @@ +package core; + +import game.GameResult; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; + +import networking.INetCollector; +import networking.PredictNetCollector; + +/** + * Read data from URL and write it to configs + * + * @author mutant + * + */ +public class ParseData { + + // Ugly, but I didn't run it with params :) + static String filename = "src/data/fullpred"; + static int yearFrom = 2011; + static int yearTo = 2011; + static int dayFrom = 18; + static int dayTo = 34; + + /** + * @param args + */ + public static void main(String[] args) { + String source = "http://fussballdaten.de/bundesliga/"; + + INetCollector snc = new PredictNetCollector(); + FileWriter fw = null; + BufferedWriter out = null; + try { + fw = new FileWriter(filename); + out = new BufferedWriter(fw); + } catch (IOException e1) { + e1.printStackTrace(); + } + + if (out != null) { + try { + for (int year = yearFrom; year <= yearTo; year++) { + for (int day = dayFrom; day <= dayTo; day++) { + + System.out.println("[" + year + " " + day + "]"); + out.write("[" + year + " " + day + "]\n"); + + snc.readURL(source + year + "/" + day + "/"); + + GameResult gr; + while ((gr = snc.getResult()) != null) { + out.write("\t"); + gr.setYear(year); + gr.setDay(day); + out.write(gr.toString()); + out.write("\n"); + } + + out.write("\n"); + + } + out.flush(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + try { + if (out != null) { + out.close(); + } + if (fw != null) { + fw.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/core/PredictResults.java b/src/core/PredictResults.java new file mode 100644 index 0000000..c44c075 --- /dev/null +++ b/src/core/PredictResults.java @@ -0,0 +1,114 @@ +package core; + +import java.io.IOException; + +import configuration.ConfPredictData; +import configuration.ConfResultData; +import evaluate.DaussCalculation; +import evaluate.IPredictor; +import game.GameResult; + +public class PredictResults { + + /** + * @param args + */ + public static void main(String[] args) { + + String learnSet = "src/data/smallset"; // learn from this game set + String testSet = "src/data/testset"; // predict this set + String orakelSet = "src/data/controllset"; // use this set, to evaluate + + // learn + IPredictor sc = new DaussCalculation(learnSet); + + // try to beat me, har har + // IPredictor sc = new RandomCalculation(learnSet); + + // get game data + ConfResultData controll; + ConfPredictData pd; + try { + pd = new ConfPredictData(testSet); + controll = new ConfResultData(orakelSet); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + // Collect some statistic + int points = 0; + int daypoints = 0; + int unknown = 0; + + int p0pred = 0; + int p1pred = 0; + int p2pred = 0; + int p3pred = 0; + + int predGoals = 0; + + System.out.println("\n+----- Prediction -----+\n"); + + for (int i = 0; i < pd.getSize(); i++) { + GameResult gr = pd.getResultAt(i); + GameResult ogr = controll.getResultAt(i); + + double p = sc.predict(gr); + + System.out.printf("[%.3f] %70s | (%d:%d) +%d\n", p, gr.toString(), + ogr.getScore1(), ogr.getScore2(), + gr.getPredPoints(ogr.getScore1(), ogr.getScore2())); + + predGoals = predGoals + gr.getScore1()+gr.getScore2(); + + points = points + + gr.getPredPoints(ogr.getScore1(), ogr.getScore2()); + + daypoints = daypoints + + gr.getPredPoints(ogr.getScore1(), ogr.getScore2()); + + switch (gr.getPredPoints(ogr.getScore1(), ogr.getScore2())) { + case 0: + p0pred++; + break; + case 1: + p1pred++; + break; + case 2: + p2pred++; + break; + case 3: + p3pred++; + break; + } + + if (i != 0 && (i + 1) % 9 == 0) { // 9 games on one play day, + // correct this value for older + // games with less teams + System.out.println("-------------------------"); + System.out.println(daypoints + " points"); + System.out.println(); + daypoints = 0; + } + } + + // final statistics + System.out.println("-------------------------"); + System.out.println(pd.getSize() + " games (" + unknown + ") unknown"); + System.out.println(points + "/" + (pd.getSize() * 3) + + " prediction points"); + System.out.printf("\t0 points x %d (%3.1f%%)\n", p0pred, 100.0 * p0pred + / pd.getSize()); + System.out.printf("\t1 points x %d (%3.1f%%)\n", p1pred, 100.0 * p1pred + / pd.getSize()); + System.out.printf("\t2 points x %d (%3.1f%%)\n", p2pred, 100.0 * p2pred + / pd.getSize()); + System.out.printf("\t3 points x %d (%3.1f%%)\n", p3pred, 100.0 * p3pred + / pd.getSize()); + System.out.println((points * 9.0 / pd.getSize()) + " pro game average"); + + System.out.println("Average goals "+(double)predGoals/pd.getSize()); + + } +} diff --git a/src/core/StatAnalysis.java b/src/core/StatAnalysis.java new file mode 100644 index 0000000..94993c0 --- /dev/null +++ b/src/core/StatAnalysis.java @@ -0,0 +1,89 @@ +/** + * + */ +package core; + +import java.util.Arrays; +import java.util.Vector; + +import evaluate.AbstractSkillCalculator; +import evaluate.GaussCalculation; +import game.GaussTeam; +import game.ITeam; + +/** + * Calculate some statistics from model. + * + * @author mutant + * + */ +public class StatAnalysis { + + /** + * @param args + */ + public static void main(String[] args) { + + // learn and calculate skill points + AbstractSkillCalculator sc = new GaussCalculation("src/data/smallset"); + + System.out.println("\n------------------------\n"); + + // sort teams + Vector teams = sc.getTeamSet(); + Object[] at = teams.toArray(); + Arrays.sort(at); + + // statistic and values for teams + for (Object o : at) { + GaussTeam t = (GaussTeam) o; + int win = t.getWin(); + int draw = t.getDraw(); + int loss = t.getLoss(); + float total = t.getGameCount(); + + System.out.printf("%s\n", t.getName()); + System.out + .printf("\tWin: %d (%3.1f%%)\tDraw: %d (%3.1f%%)\tLoss: %d (%3.1f%%)\n", + win, (100.0 * win / total), draw, + (100.0 * draw / total), loss, + (100.0 * loss / total)); + System.out.printf("\tGoals +%d (%3.1f)\t-%d (%3.1f)\n", + t.getGoalsWon(), t.getGoalsWon() / total, t.getGoalsLos(), + t.getGoalsLos() / total); + System.out.printf("\tSkill:\t%.1f (%.1f)\n", t.getSkill(), t.getSigma()); + System.out.println(); + } + + // short overview + System.out.println("\n-------------------\n"); + int count = 0; + for (Object o : at) { + ITeam t = (ITeam) o; + System.out.printf("%3d %30s % 5.2f\n", (count + 1), t.getName(), + t.getSkill()); + count++; + } + + // probability table + System.out.println("\n-------------------\n"); + System.out.printf("%30s", ""); + for (int i = 0; i < count; i++) { + System.out.printf("%7d", i + 1); + } + + System.out.println(); + int i = 0; + for (Object o : at) { + ITeam t = (ITeam) o; + System.out.printf("%2d %27s", (i + 1), t.getName()); + for (Object op : at) { + ITeam tp = (ITeam) op; + double p = ((GaussCalculation)sc).getWinProb(t, tp); + System.out.printf(" %1.3f", p); + } + System.out.println(); + i++; + } + } +} diff --git a/src/core/UnknownResults.java b/src/core/UnknownResults.java new file mode 100644 index 0000000..0fdd5cf --- /dev/null +++ b/src/core/UnknownResults.java @@ -0,0 +1,61 @@ +package core; + +import java.io.IOException; + +import configuration.ConfPredictData; +import evaluate.DaussCalculation; +import evaluate.IPredictor; +import game.GameResult; + +public class UnknownResults { + + /** + * @param args + */ + public static void main(String[] args) { + + String learnSet = "src/data/smallset"; // learn from this game set + String testSet = "src/data/fullpred"; // predict this set + + // learn + System.out.println("\n+----- Learn -----+\n"); + IPredictor sc = new DaussCalculation(learnSet); + + // get game data + ConfPredictData pd; + try { + pd = new ConfPredictData(testSet); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + int unknown = 0; + + int predGoals = 0; + + System.out.println("\n+----- Prediction -----+\n"); + + for (int i = 0; i < pd.getSize(); i++) { + + GameResult gr = pd.getResultAt(i); + + if ((i % 9) == 0) { + System.out + .println("\n[" + gr.getYear() + " " + gr.getDay() + "]"); + } + + double p = sc.predict(gr); + + System.out.printf("\t[%.3f] %55s\n", p, gr.toString()); + predGoals = predGoals + gr.getScore1() + gr.getScore2(); + } + + // final statistics + System.out.println("\n+-----------------------+"); + System.out.println(pd.getSize() + " games (" + unknown + ") unknown"); + System.out + .println("Average goals " + (double) predGoals / pd.getSize()); + + } +} diff --git a/src/data/controllset b/src/data/controllset new file mode 100644 index 0000000..30317bd --- /dev/null +++ b/src/data/controllset @@ -0,0 +1,120 @@ +[2011 18] + Bayer Leverkusen - Borussia Dortmund (1:3) + FC St. Pauli - SC Freiburg (2:2) + 1. FC Nürnberg - Borussia Mönchengladbach (0:1) + VfL Wolfsburg - FC Bayern München (1:1) + VfB Stuttgart - 1. FSV Mainz 05 (1:0) + SV Werder Bremen - 1899 Hoffenheim (2:1) + FC Schalke 04 - Hamburger SV (0:1) + Eintracht Frankfurt - Hannover 96 (0:3) + 1. FC Kaiserslautern - 1. FC Köln (1:1) + +[2011 19] + Hamburger SV - Eintracht Frankfurt (1:0) + 1. FSV Mainz 05 - VfL Wolfsburg (0:1) + Borussia Dortmund - VfB Stuttgart (1:1) + FC Bayern München - 1. FC Kaiserslautern (5:1) + SC Freiburg - 1. FC Nürnberg (1:1) + Hannover 96 - FC Schalke 04 (0:1) + 1. FC Köln - SV Werder Bremen (3:0) + Borussia Mönchengladbach - Bayer Leverkusen (1:3) + 1899 Hoffenheim - FC St. Pauli (2:2) + +[2011 20] + Bayer Leverkusen - Hannover 96 (2:0) + FC St. Pauli - 1. FC Köln (3:0) + 1. FC Nürnberg - Hamburger SV (2:0) + VfL Wolfsburg - Borussia Dortmund (0:3) + SV Werder Bremen - FC Bayern München (1:3) + FC Schalke 04 - 1899 Hoffenheim (0:1) + 1. FC Kaiserslautern - 1. FSV Mainz 05 (0:1) + VfB Stuttgart - SC Freiburg (0:1) + Eintracht Frankfurt - Borussia Mönchengladbach (0:1) + +[2011 21] + Borussia Dortmund - FC Schalke 04 (0:0) + 1. FC Nürnberg - Bayer Leverkusen (1:0) + Hannover 96 - VfL Wolfsburg (1:0) + 1. FC Köln - FC Bayern München (3:2) + 1899 Hoffenheim - 1. FC Kaiserslautern (3:2) + 1. FSV Mainz 05 - SV Werder Bremen (1:1) + Borussia Mönchengladbach - VfB Stuttgart (2:3) + SC Freiburg - Eintracht Frankfurt (0:0) + Hamburger SV - FC St. Pauli (0:1) + +[2011 22] + FC St. Pauli - Borussia Mönchengladbach (3:1) + Eintracht Frankfurt - Bayer Leverkusen (0:3) + VfL Wolfsburg - Hamburger SV (0:1) + VfB Stuttgart - 1. FC Nürnberg (1:4) + FC Schalke 04 - SC Freiburg (1:0) + FC Bayern München - 1899 Hoffenheim (4:0) + 1. FC Kaiserslautern - Borussia Dortmund (1:1) + 1. FC Köln - 1. FSV Mainz 05 (4:2) + SV Werder Bremen - Hannover 96 (1:1) + +[2011 23] + 1. FC Nürnberg - Eintracht Frankfurt (3:0) + Hannover 96 - 1. FC Kaiserslautern (3:0) + SC Freiburg - VfL Wolfsburg (2:1) + 1899 Hoffenheim - 1. FC Köln (1:1) + Hamburger SV - SV Werder Bremen (4:0) + Borussia Dortmund - FC St. Pauli (2:0) + 1. FSV Mainz 05 - FC Bayern München (1:3) + Bayer Leverkusen - VfB Stuttgart (4:2) + Borussia Mönchengladbach - FC Schalke 04 (2:1) + +[2011 24] + VfL Wolfsburg - Borussia Mönchengladbach (2:1) + FC St. Pauli - Hannover 96 (0:1) + 1. FC Kaiserslautern - Hamburger SV (1:1) + 1. FC Köln - SC Freiburg (1:0) + 1899 Hoffenheim - 1. FSV Mainz 05 (1:2) + FC Schalke 04 - 1. FC Nürnberg (1:1) + FC Bayern München - Borussia Dortmund (1:3) + Eintracht Frankfurt - VfB Stuttgart (0:2) + SV Werder Bremen - Bayer Leverkusen (2:2) + +[2011 25] + Borussia Dortmund - 1. FC Köln (1:0) + 1. FC Nürnberg - FC St. Pauli (5:0) + Hannover 96 - FC Bayern München (3:1) + Eintracht Frankfurt - 1. FC Kaiserslautern (0:0) + VfB Stuttgart - FC Schalke 04 (1:0) + Borussia Mönchengladbach - 1899 Hoffenheim (2:0) + Bayer Leverkusen - VfL Wolfsburg (3:0) + SC Freiburg - SV Werder Bremen (1:3) + Hamburger SV - 1. FSV Mainz 05 (2:4) + +[2011 26] + 1. FC Köln - Hannover 96 (4:0) + 1. FC Kaiserslautern - SC Freiburg (2:1) + 1899 Hoffenheim - Borussia Dortmund (1:0) + VfL Wolfsburg - 1. FC Nürnberg (1:2) + FC Bayern München - Hamburger SV (6:0) + FC Schalke 04 - Eintracht Frankfurt (2:1) + SV Werder Bremen - Borussia Mönchengladbach (1:1) + 1. FSV Mainz 05 - Bayer Leverkusen (0:1) + FC St. Pauli - VfB Stuttgart (1:2) + +[2011 27] + Borussia Mönchengladbach - 1. FC Kaiserslautern (0:1) + 1. FC Nürnberg - SV Werder Bremen (1:3) + Hannover 96 - 1899 Hoffenheim (2:0) + SC Freiburg - FC Bayern München (1:2) + Eintracht Frankfurt - FC St. Pauli (2:1) + Hamburger SV - 1. FC Köln (6:2) + Borussia Dortmund - 1. FSV Mainz 05 (1:1) + Bayer Leverkusen - FC Schalke 04 (2:0) + VfB Stuttgart - VfL Wolfsburg (1:1) + +[2011 28] + FC St. Pauli - FC Schalke 04 (0:6) + 1. FC Kaiserslautern - Bayer Leverkusen (0:6) + 1. FSV Mainz 05 - SC Freiburg (0:6) + Borussia Dortmund - Hannover 96 (0:6) + SV Werder Bremen - VfB Stuttgart (0:6) + FC Bayern München - Borussia Mönchengladbach (0:6) + 1899 Hoffenheim - Hamburger SV (0:6) + 1. FC Köln - 1. FC Nürnberg (0:6) + VfL Wolfsburg - Eintracht Frankfurt (0:6) diff --git a/src/data/fullpred b/src/data/fullpred new file mode 100644 index 0000000..28951dd --- /dev/null +++ b/src/data/fullpred @@ -0,0 +1,187 @@ +[2011 18] + Bayer Leverkusen - Borussia Dortmund + FC St. Pauli - SC Freiburg + 1. FC Nürnberg - Borussia Mönchengladbach + VfL Wolfsburg - FC Bayern München + VfB Stuttgart - 1. FSV Mainz 05 + SV Werder Bremen - 1899 Hoffenheim + FC Schalke 04 - Hamburger SV + Eintracht Frankfurt - Hannover 96 + 1. FC Kaiserslautern - 1. FC Köln + +[2011 19] + Hamburger SV - Eintracht Frankfurt + 1. FSV Mainz 05 - VfL Wolfsburg + Borussia Dortmund - VfB Stuttgart + FC Bayern München - 1. FC Kaiserslautern + SC Freiburg - 1. FC Nürnberg + Hannover 96 - FC Schalke 04 + 1. FC Köln - SV Werder Bremen + Borussia Mönchengladbach - Bayer Leverkusen + 1899 Hoffenheim - FC St. Pauli + +[2011 20] + Bayer Leverkusen - Hannover 96 + FC St. Pauli - 1. FC Köln + 1. FC Nürnberg - Hamburger SV + VfL Wolfsburg - Borussia Dortmund + SV Werder Bremen - FC Bayern München + FC Schalke 04 - 1899 Hoffenheim + 1. FC Kaiserslautern - 1. FSV Mainz 05 + VfB Stuttgart - SC Freiburg + Eintracht Frankfurt - Borussia Mönchengladbach + +[2011 21] + Borussia Dortmund - FC Schalke 04 + 1. FC Nürnberg - Bayer Leverkusen + Hannover 96 - VfL Wolfsburg + 1. FC Köln - FC Bayern München + 1899 Hoffenheim - 1. FC Kaiserslautern + 1. FSV Mainz 05 - SV Werder Bremen + Borussia Mönchengladbach - VfB Stuttgart + SC Freiburg - Eintracht Frankfurt + Hamburger SV - FC St. Pauli + +[2011 22] + FC St. Pauli - Borussia Mönchengladbach + Eintracht Frankfurt - Bayer Leverkusen + VfL Wolfsburg - Hamburger SV + VfB Stuttgart - 1. FC Nürnberg + FC Schalke 04 - SC Freiburg + FC Bayern München - 1899 Hoffenheim + 1. FC Kaiserslautern - Borussia Dortmund + 1. FC Köln - 1. FSV Mainz 05 + SV Werder Bremen - Hannover 96 + +[2011 23] + 1. FC Nürnberg - Eintracht Frankfurt + Hannover 96 - 1. FC Kaiserslautern + SC Freiburg - VfL Wolfsburg + 1899 Hoffenheim - 1. FC Köln + Hamburger SV - SV Werder Bremen + Borussia Dortmund - FC St. Pauli + 1. FSV Mainz 05 - FC Bayern München + Bayer Leverkusen - VfB Stuttgart + Borussia Mönchengladbach - FC Schalke 04 + +[2011 24] + VfL Wolfsburg - Borussia Mönchengladbach + FC St. Pauli - Hannover 96 + 1. FC Kaiserslautern - Hamburger SV + 1. FC Köln - SC Freiburg + 1899 Hoffenheim - 1. FSV Mainz 05 + FC Schalke 04 - 1. FC Nürnberg + FC Bayern München - Borussia Dortmund + Eintracht Frankfurt - VfB Stuttgart + SV Werder Bremen - Bayer Leverkusen + +[2011 25] + Borussia Dortmund - 1. FC Köln + 1. FC Nürnberg - FC St. Pauli + Hannover 96 - FC Bayern München + Eintracht Frankfurt - 1. FC Kaiserslautern + VfB Stuttgart - FC Schalke 04 + Borussia Mönchengladbach - 1899 Hoffenheim + Bayer Leverkusen - VfL Wolfsburg + SC Freiburg - SV Werder Bremen + Hamburger SV - 1. FSV Mainz 05 + +[2011 26] + 1. FC Köln - Hannover 96 + 1. FC Kaiserslautern - SC Freiburg + 1899 Hoffenheim - Borussia Dortmund + VfL Wolfsburg - 1. FC Nürnberg + FC Bayern München - Hamburger SV + FC Schalke 04 - Eintracht Frankfurt + SV Werder Bremen - Borussia Mönchengladbach + 1. FSV Mainz 05 - Bayer Leverkusen + FC St. Pauli - VfB Stuttgart + +[2011 27] + Borussia Mönchengladbach - 1. FC Kaiserslautern + 1. FC Nürnberg - SV Werder Bremen + Hannover 96 - 1899 Hoffenheim + SC Freiburg - FC Bayern München + Eintracht Frankfurt - FC St. Pauli + Hamburger SV - 1. FC Köln + Borussia Dortmund - 1. FSV Mainz 05 + Bayer Leverkusen - FC Schalke 04 + VfB Stuttgart - VfL Wolfsburg + +[2011 28] + FC St. Pauli - FC Schalke 04 + 1. FC Kaiserslautern - Bayer Leverkusen + 1. FSV Mainz 05 - SC Freiburg + Borussia Dortmund - Hannover 96 + SV Werder Bremen - VfB Stuttgart + FC Bayern München - Borussia Mönchengladbach + 1899 Hoffenheim - Hamburger SV + 1. FC Köln - 1. FC Nürnberg + VfL Wolfsburg - Eintracht Frankfurt + +[2011 29] + Eintracht Frankfurt - SV Werder Bremen + 1. FC Nürnberg - FC Bayern München + Hannover 96 - 1. FSV Mainz 05 + SC Freiburg - 1899 Hoffenheim + Hamburger SV - Borussia Dortmund + FC Schalke 04 - VfL Wolfsburg + VfB Stuttgart - 1. FC Kaiserslautern + Borussia Mönchengladbach - 1. FC Köln + Bayer Leverkusen - FC St. Pauli + +[2011 30] + 1. FSV Mainz 05 - Borussia Mönchengladbach + 1. FC Kaiserslautern - 1. FC Nürnberg + 1. FC Köln - VfB Stuttgart + 1899 Hoffenheim - Eintracht Frankfurt + VfL Wolfsburg - FC St. Pauli + Hamburger SV - Hannover 96 + SV Werder Bremen - FC Schalke 04 + FC Bayern München - Bayer Leverkusen + Borussia Dortmund - SC Freiburg + +[2011 31] + SC Freiburg - Hannover 96 + FC St. Pauli - SV Werder Bremen + Eintracht Frankfurt - FC Bayern München + FC Schalke 04 - 1. FC Kaiserslautern + Bayer Leverkusen - 1899 Hoffenheim + VfB Stuttgart - Hamburger SV + Borussia Mönchengladbach - Borussia Dortmund + VfL Wolfsburg - 1. FC Köln + 1. FC Nürnberg - 1. FSV Mainz 05 + +[2011 32] + 1. FC Kaiserslautern - FC St. Pauli + SV Werder Bremen - VfL Wolfsburg + Hannover 96 - Borussia Mönchengladbach + 1. FC Köln - Bayer Leverkusen + 1899 Hoffenheim - VfB Stuttgart + 1. FSV Mainz 05 - Eintracht Frankfurt + Borussia Dortmund - 1. FC Nürnberg + Hamburger SV - SC Freiburg + FC Bayern München - FC Schalke 04 + +[2011 33] + 1. FC Nürnberg - 1899 Hoffenheim + Borussia Mönchengladbach - SC Freiburg + Eintracht Frankfurt - 1. FC Köln + SV Werder Bremen - Borussia Dortmund + FC Schalke 04 - 1. FSV Mainz 05 + Bayer Leverkusen - Hamburger SV + VfB Stuttgart - Hannover 96 + VfL Wolfsburg - 1. FC Kaiserslautern + FC St. Pauli - FC Bayern München + +[2011 34] + 1. FC Kaiserslautern - SV Werder Bremen + SC Freiburg - Bayer Leverkusen + FC Bayern München - VfB Stuttgart + 1899 Hoffenheim - VfL Wolfsburg + Hannover 96 - 1. FC Nürnberg + Borussia Dortmund - Eintracht Frankfurt + Hamburger SV - Borussia Mönchengladbach + 1. FSV Mainz 05 - FC St. Pauli + 1. FC Köln - FC Schalke 04 + diff --git a/src/data/smallset b/src/data/smallset new file mode 100644 index 0000000..370a943 --- /dev/null +++ b/src/data/smallset @@ -0,0 +1,186 @@ +[2011 1] + FC Bayern München - VfL Wolfsburg (2:1) + 1899 Hoffenheim - SV Werder Bremen (4:1) + Borussia Mönchengladbach - 1. FC Nürnberg (1:1) + 1. FC Köln - 1. FC Kaiserslautern (1:3) + SC Freiburg - FC St. Pauli (1:3) + Hannover 96 - Eintracht Frankfurt (2:1) + Hamburger SV - FC Schalke 04 (2:1) + 1. FSV Mainz 05 - VfB Stuttgart (2:0) + Borussia Dortmund - Bayer Leverkusen (0:2) + +[2011 2] + 1. FC Kaiserslautern - FC Bayern München (2:0) + FC Schalke 04 - Hannover 96 (1:2) + SV Werder Bremen - 1. FC Köln (4:2) + VfL Wolfsburg - 1. FSV Mainz 05 (3:4) + Eintracht Frankfurt - Hamburger SV (1:3) + 1. FC Nürnberg - SC Freiburg (1:2) + FC St. Pauli - 1899 Hoffenheim (0:1) + Bayer Leverkusen - Borussia Mönchengladbach (3:6) + +[2011 3] + 1899 Hoffenheim - FC Schalke 04 (2:0) + Borussia Dortmund - VfL Wolfsburg (2:0) + Hamburger SV - 1. FC Nürnberg (1:1) + Borussia Mönchengladbach - Eintracht Frankfurt (0:4) + SC Freiburg - VfB Stuttgart (2:1) + Hannover 96 - Bayer Leverkusen (2:2) + FC Bayern München - SV Werder Bremen (0:0) + 1. FSV Mainz 05 - 1. FC Kaiserslautern (2:1) + 1. FC Köln - FC St. Pauli (1:0) + +[2011 4] + Eintracht Frankfurt - SC Freiburg (0:1) + FC Bayern München - 1. FC Köln (0:0) + SV Werder Bremen - 1. FSV Mainz 05 (0:2) + VfB Stuttgart - Borussia Mönchengladbach (7:0) + VfL Wolfsburg - Hannover 96 (2:0) + 1. FC Kaiserslautern - 1899 Hoffenheim (2:2) + FC St. Pauli - Hamburger SV (1:1) + FC Schalke 04 - Borussia Dortmund (1:3) + Bayer Leverkusen - 1. FC Nürnberg (0:0) + +[2011 5] + 1. FSV Mainz 05 - 1. FC Köln (2:0) + 1899 Hoffenheim - FC Bayern München (1:2) + Hannover 96 - SV Werder Bremen (4:1) + Bayer Leverkusen - Eintracht Frankfurt (2:1) + Borussia Dortmund - 1. FC Kaiserslautern (5:0) + Hamburger SV - VfL Wolfsburg (1:3) + Borussia Mönchengladbach - FC St. Pauli (1:2) + SC Freiburg - FC Schalke 04 (1:2) + 1. FC Nürnberg - VfB Stuttgart (2:1) + +[2011 6] + 1. FC Köln - 1899 Hoffenheim (1:1) + FC Bayern München - 1. FSV Mainz 05 (1:2) + FC Schalke 04 - Borussia Mönchengladbach (2:2) + VfB Stuttgart - Bayer Leverkusen (1:4) + Eintracht Frankfurt - 1. FC Nürnberg (2:0) + FC St. Pauli - Borussia Dortmund (1:3) + SV Werder Bremen - Hamburger SV (3:2) + VfL Wolfsburg - SC Freiburg (2:1) + 1. FC Kaiserslautern - Hannover 96 (0:1) + +[2011 7] + Hannover 96 - FC St. Pauli (0:1) + Hamburger SV - 1. FC Kaiserslautern (2:1) + 1. FSV Mainz 05 - 1899 Hoffenheim (4:2) + Borussia Mönchengladbach - VfL Wolfsburg (1:1) + SC Freiburg - 1. FC Köln (3:2) + 1. FC Nürnberg - FC Schalke 04 (2:1) + VfB Stuttgart - Eintracht Frankfurt (1:2) + Borussia Dortmund - FC Bayern München (2:0) + Bayer Leverkusen - SV Werder Bremen (2:2) + +[2011 8] + 1. FC Köln - Borussia Dortmund (1:2) + FC Bayern München - Hannover 96 (3:0) + FC Schalke 04 - VfB Stuttgart (2:2) + SV Werder Bremen - SC Freiburg (2:1) + 1. FSV Mainz 05 - Hamburger SV (0:1) + FC St. Pauli - 1. FC Nürnberg (3:2) + VfL Wolfsburg - Bayer Leverkusen (2:3) + 1. FC Kaiserslautern - Eintracht Frankfurt (0:3) + 1899 Hoffenheim - Borussia Mönchengladbach (3:2) + +[2011 9] + Hamburger SV - FC Bayern München (0:0) + Eintracht Frankfurt - FC Schalke 04 (0:0) + Borussia Mönchengladbach - SV Werder Bremen (1:4) + SC Freiburg - 1. FC Kaiserslautern (2:1) + Hannover 96 - 1. FC Köln (2:1) + 1. FC Nürnberg - VfL Wolfsburg (2:1) + Borussia Dortmund - 1899 Hoffenheim (1:1) + Bayer Leverkusen - 1. FSV Mainz 05 (0:1) + VfB Stuttgart - FC St. Pauli (2:0) + +[2011 10] + FC Bayern München - SC Freiburg (4:2) + SV Werder Bremen - 1. FC Nürnberg (2:3) + VfL Wolfsburg - VfB Stuttgart (2:0) + 1. FC Köln - Hamburger SV (3:2) + 1. FC Kaiserslautern - Borussia Mönchengladbach (3:0) + FC St. Pauli - Eintracht Frankfurt (1:3) + FC Schalke 04 - Bayer Leverkusen (0:1) + 1. FSV Mainz 05 - Borussia Dortmund (0:2) + 1899 Hoffenheim - Hannover 96 (4:0) + +[2011 11] + FC Schalke 04 - FC St. Pauli (3:0) + Hamburger SV - 1899 Hoffenheim (2:1) + Eintracht Frankfurt - VfL Wolfsburg (3:1) + Borussia Mönchengladbach - FC Bayern München (3:3) + SC Freiburg - 1. FSV Mainz 05 (1:0) + 1. FC Nürnberg - 1. FC Köln (3:1) + Hannover 96 - Borussia Dortmund (0:4) + Bayer Leverkusen - 1. FC Kaiserslautern (3:1) + VfB Stuttgart - SV Werder Bremen (6:0) + +[2011 12] + Borussia Dortmund - Hamburger SV (2:0) + SV Werder Bremen - Eintracht Frankfurt (0:0) + VfL Wolfsburg - FC Schalke 04 (2:2) + 1. FC Köln - Borussia Mönchengladbach (0:4) + 1. FC Kaiserslautern - VfB Stuttgart (3:3) + FC St. Pauli - Bayer Leverkusen (0:1) + 1. FSV Mainz 05 - Hannover 96 (0:1) + 1899 Hoffenheim - SC Freiburg (0:1) + FC Bayern München - 1. FC Nürnberg (3:0) + +[2011 13] + FC Schalke 04 - SV Werder Bremen (4:0) + Eintracht Frankfurt - 1899 Hoffenheim (0:4) + Borussia Mönchengladbach - 1. FSV Mainz 05 (2:3) + SC Freiburg - Borussia Dortmund (1:2) + Hannover 96 - Hamburger SV (3:2) + 1. FC Nürnberg - 1. FC Kaiserslautern (1:3) + Bayer Leverkusen - FC Bayern München (1:1) + VfB Stuttgart - 1. FC Köln (0:1) + FC St. Pauli - VfL Wolfsburg (1:1) + +[2011 14] + 1. FSV Mainz 05 - 1. FC Nürnberg (3:0) + FC Bayern München - Eintracht Frankfurt (4:1) + Hamburger SV - VfB Stuttgart (4:2) + 1899 Hoffenheim - Bayer Leverkusen (2:2) + Hannover 96 - SC Freiburg (3:0) + 1. FC Kaiserslautern - FC Schalke 04 (5:0) + Borussia Dortmund - Borussia Mönchengladbach (4:1) + SV Werder Bremen - FC St. Pauli (3:0) + 1. FC Köln - VfL Wolfsburg (1:1) + +[2011 15] + FC St. Pauli - 1. FC Kaiserslautern (1:0) + VfB Stuttgart - 1899 Hoffenheim (1:1) + VfL Wolfsburg - SV Werder Bremen (0:0) + Eintracht Frankfurt - 1. FSV Mainz 05 (2:1) + Borussia Mönchengladbach - Hannover 96 (1:2) + SC Freiburg - Hamburger SV (1:0) + FC Schalke 04 - FC Bayern München (2:0) + Bayer Leverkusen - 1. FC Köln (3:2) + 1. FC Nürnberg - Borussia Dortmund (0:2) + +[2011 16] + Hannover 96 - VfB Stuttgart (2:1) + FC Bayern München - FC St. Pauli (3:0) + Hamburger SV - Bayer Leverkusen (2:4) + 1899 Hoffenheim - 1. FC Nürnberg (1:1) + 1. FC Köln - Eintracht Frankfurt (1:0) + 1. FC Kaiserslautern - VfL Wolfsburg (0:0) + Borussia Dortmund - SV Werder Bremen (2:0) + SC Freiburg - Borussia Mönchengladbach (3:0) + 1. FSV Mainz 05 - FC Schalke 04 (0:1) + +[2011 17] + Borussia Mönchengladbach - Hamburger SV (1:2) + 1. FC Nürnberg - Hannover 96 (3:1) + Eintracht Frankfurt - Borussia Dortmund (1:0) + VfL Wolfsburg - 1899 Hoffenheim (2:2) + FC Schalke 04 - 1. FC Köln (3:0) + SV Werder Bremen - 1. FC Kaiserslautern (1:2) + FC St. Pauli - 1. FSV Mainz 05 (2:4) + Bayer Leverkusen - SC Freiburg (2:2) + VfB Stuttgart - FC Bayern München (3:5) + diff --git a/src/data/testset b/src/data/testset new file mode 100644 index 0000000..54431a0 --- /dev/null +++ b/src/data/testset @@ -0,0 +1,109 @@ +[2011 18] + Bayer Leverkusen - Borussia Dortmund + FC St. Pauli - SC Freiburg + 1. FC Nürnberg - Borussia Mönchengladbach + VfL Wolfsburg - FC Bayern München + VfB Stuttgart - 1. FSV Mainz 05 + SV Werder Bremen - 1899 Hoffenheim + FC Schalke 04 - Hamburger SV + Eintracht Frankfurt - Hannover 96 + 1. FC Kaiserslautern - 1. FC Köln + +[2011 19] + Hamburger SV - Eintracht Frankfurt + 1. FSV Mainz 05 - VfL Wolfsburg + Borussia Dortmund - VfB Stuttgart + FC Bayern München - 1. FC Kaiserslautern + SC Freiburg - 1. FC Nürnberg + Hannover 96 - FC Schalke 04 + 1. FC Köln - SV Werder Bremen + Borussia Mönchengladbach - Bayer Leverkusen + 1899 Hoffenheim - FC St. Pauli + +[2011 20] + Bayer Leverkusen - Hannover 96 + FC St. Pauli - 1. FC Köln + 1. FC Nürnberg - Hamburger SV + VfL Wolfsburg - Borussia Dortmund + SV Werder Bremen - FC Bayern München + FC Schalke 04 - 1899 Hoffenheim + 1. FC Kaiserslautern - 1. FSV Mainz 05 + VfB Stuttgart - SC Freiburg + Eintracht Frankfurt - Borussia Mönchengladbach + +[2011 21] + Borussia Dortmund - FC Schalke 04 + 1. FC Nürnberg - Bayer Leverkusen + Hannover 96 - VfL Wolfsburg + 1. FC Köln - FC Bayern München + 1899 Hoffenheim - 1. FC Kaiserslautern + 1. FSV Mainz 05 - SV Werder Bremen + Borussia Mönchengladbach - VfB Stuttgart + SC Freiburg - Eintracht Frankfurt + Hamburger SV - FC St. Pauli + +[2011 22] + FC St. Pauli - Borussia Mönchengladbach + Eintracht Frankfurt - Bayer Leverkusen + VfL Wolfsburg - Hamburger SV + VfB Stuttgart - 1. FC Nürnberg + FC Schalke 04 - SC Freiburg + FC Bayern München - 1899 Hoffenheim + 1. FC Kaiserslautern - Borussia Dortmund + 1. FC Köln - 1. FSV Mainz 05 + SV Werder Bremen - Hannover 96 + +[2011 23] + 1. FC Nürnberg - Eintracht Frankfurt + Hannover 96 - 1. FC Kaiserslautern + SC Freiburg - VfL Wolfsburg + 1899 Hoffenheim - 1. FC Köln + Hamburger SV - SV Werder Bremen + Borussia Dortmund - FC St. Pauli + 1. FSV Mainz 05 - FC Bayern München + Bayer Leverkusen - VfB Stuttgart + Borussia Mönchengladbach - FC Schalke 04 + +[2011 24] + VfL Wolfsburg - Borussia Mönchengladbach + FC St. Pauli - Hannover 96 + 1. FC Kaiserslautern - Hamburger SV + 1. FC Köln - SC Freiburg + 1899 Hoffenheim - 1. FSV Mainz 05 + FC Schalke 04 - 1. FC Nürnberg + FC Bayern München - Borussia Dortmund + Eintracht Frankfurt - VfB Stuttgart + SV Werder Bremen - Bayer Leverkusen + +[2011 25] + Borussia Dortmund - 1. FC Köln + 1. FC Nürnberg - FC St. Pauli + Hannover 96 - FC Bayern München + Eintracht Frankfurt - 1. FC Kaiserslautern + VfB Stuttgart - FC Schalke 04 + Borussia Mönchengladbach - 1899 Hoffenheim + Bayer Leverkusen - VfL Wolfsburg + SC Freiburg - SV Werder Bremen + Hamburger SV - 1. FSV Mainz 05 + +[2011 26] + 1. FC Köln - Hannover 96 + 1. FC Kaiserslautern - SC Freiburg + 1899 Hoffenheim - Borussia Dortmund + VfL Wolfsburg - 1. FC Nürnberg + FC Bayern München - Hamburger SV + FC Schalke 04 - Eintracht Frankfurt + SV Werder Bremen - Borussia Mönchengladbach + 1. FSV Mainz 05 - Bayer Leverkusen + FC St. Pauli - VfB Stuttgart + +[2011 27] + Borussia Mönchengladbach - 1. FC Kaiserslautern + 1. FC Nürnberg - SV Werder Bremen + Hannover 96 - 1899 Hoffenheim + SC Freiburg - FC Bayern München + Eintracht Frankfurt - FC St. Pauli + Hamburger SV - 1. FC Köln + Borussia Dortmund - 1. FSV Mainz 05 + Bayer Leverkusen - FC Schalke 04 + VfB Stuttgart - VfL Wolfsburg diff --git a/src/evaluate/AbstractSkillCalculator.java b/src/evaluate/AbstractSkillCalculator.java new file mode 100644 index 0000000..2f85bfc --- /dev/null +++ b/src/evaluate/AbstractSkillCalculator.java @@ -0,0 +1,62 @@ +package evaluate; + +import game.ITeam; + +import java.util.HashMap; +import java.util.Vector; + +public abstract class AbstractSkillCalculator implements ISkillCalculator, IPredictor { + + protected HashMap teamsMap; + protected int gameCount; + + public AbstractSkillCalculator() { + super(); + } + + @Override + public int getTeamCount() { + return teamsMap.size(); + } + + @Override + public ITeam getTeam(String name) { + return teamsMap.get(name); + } + + @Override + public int getGameCount(){ + return gameCount; + } + + @Override + public Vector getTeamSet() { + Vector vit = new Vector(); + for (String name : teamsMap.keySet()) { + vit.add(teamsMap.get(name)); + } + return vit; + } + + @Override + // Use default implementation from team class + public double getWinProb(ITeam t1, ITeam t2) { + return t1.getWinProb(t2); + } + + public int round (double val, double treshold){ + int res; + if(val>0){ + res = (int)(val+treshold); + } + else{ + res = (int)(val-treshold); + } + return res; + } + + public int round (double val){ + return round(val, 0); + } + +} \ No newline at end of file diff --git a/src/evaluate/DaussCalculation.java b/src/evaluate/DaussCalculation.java new file mode 100644 index 0000000..94e510d --- /dev/null +++ b/src/evaluate/DaussCalculation.java @@ -0,0 +1,119 @@ +package evaluate; + +import game.GameResult; +import game.GaussTeam; +import game.ITeam; + +import java.io.IOException; +import java.util.HashMap; + +import configuration.ConfResultData; + +public class DaussCalculation extends AbstractSkillCalculator { + + public static double gs = 0.125; + public static double pgs = 0.375; + public static double flatten = 3.0; + + private int goalCount; + + public DaussCalculation(String fileName) { + teamsMap = new HashMap(); + goalCount = 0; + ConfResultData set; + + try { + set = new ConfResultData(fileName); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + gameCount = set.getSize(); + + for (int i = 0; i < gameCount; i++) { + GameResult gr = set.getResultAt(i); + ITeam t1, t2; + + if (!teamsMap.containsKey(gr.getOpponent1())) { + t1 = new GaussTeam(gr.getOpponent1()); + teamsMap.put(gr.getOpponent1(), t1); + } else { + t1 = teamsMap.get(gr.getOpponent1()); + } + + if (!teamsMap.containsKey(gr.getOpponent2())) { + t2 = new GaussTeam(gr.getOpponent2()); + teamsMap.put(gr.getOpponent2(), t2); + } else { + t2 = teamsMap.get(gr.getOpponent2()); + } + + t1.updateSkill(t2, gr.getScore1(), gr.getScore2()); + goalCount = goalCount + gr.getScore1() + gr.getScore2(); + + } + + System.out.println("Teams: " + teamsMap.size()); + System.out.println("Games: " + gameCount); + System.out.println("Goals: " + goalCount + " (average " + + ((float) goalCount / gameCount) + ")"); + } + + @Override + public double predict(GameResult gr) { + + double avgGoal = (double) goalCount / gameCount; + + ITeam t1 = getTeam(gr.getOpponent1()); + ITeam t2 = getTeam(gr.getOpponent2()); + + if (t1 == null) { + t1 = new GaussTeam(gr.getOpponent1()); + } + + if (t2 == null) { + t2 = new GaussTeam(gr.getOpponent2()); + } + + double p; + p = this.getWinProb((GaussTeam) t1, (GaussTeam) t2); + + double pg1 = ((double) (avgGoal) * p); + double pg2 = ((double) (avgGoal) * (1 - p)); + + int gDiff = round(pg1 - pg2, pgs); + + // System.out.println("\n\t\t\t\t\t\t\t\t\t" +pg1+"-"+ + // pg2+"="+(pg1-pg2)+":"+(gDiff)); + + double g1 = (avgGoal + gDiff) / 2; + double g2 = (avgGoal - gDiff) / 2; + + // double g1 = (avgGoal + gDiff + pgs + (t1.getGoalsWon() - + // t2.getGoalsLos())/gameCount) / 2; + // double g2 = (avgGoal - gDiff + pgs+ (t2.getGoalsWon() - + // t1.getGoalsLos())/gameCount) / 2; + + // System.out.println("\t\t\t\t\t\t\t\t\t" + g1 + " - " + g2); + + gr.setScore1(round(g1, gs)); + gr.setScore2(round(g2, gs)); + + return p; + } + + public double getWinProb(ITeam t1, ITeam t2) { + double p; + if (t1 instanceof GaussTeam && t2 instanceof GaussTeam) { + double t1Skill = t1.getSkill() - ((GaussTeam) t1).getSigma(); + double t2Skill = t2.getSkill() - ((GaussTeam) t2).getSigma(); + p = 1 / (1 + Math.exp((t2Skill - t1Skill) / flatten)); + } else { + p = super.getWinProb(t1, t2); + } + + return p; + } + +} diff --git a/src/evaluate/EloCalculation.java b/src/evaluate/EloCalculation.java new file mode 100644 index 0000000..bf529f5 --- /dev/null +++ b/src/evaluate/EloCalculation.java @@ -0,0 +1,85 @@ +package evaluate; + +import game.EloTeam; +import game.GameResult; +import game.ITeam; + +import java.io.IOException; +import java.util.HashMap; + +import configuration.ConfResultData; + +public class EloCalculation extends AbstractSkillCalculator { + + public EloCalculation(String fileName) { + teamsMap = new HashMap(); + ConfResultData set; + + try { + set = new ConfResultData(fileName); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + gameCount = set.getSize(); + + for (int i = 0; i < gameCount; i++) { + GameResult gr = set.getResultAt(i); + ITeam t1, t2; + + if (!teamsMap.containsKey(gr.getOpponent1())) { + t1 = new EloTeam(gr.getOpponent1()); + teamsMap.put(gr.getOpponent1(), t1); + } else { + t1 = teamsMap.get(gr.getOpponent1()); + } + + if (!teamsMap.containsKey(gr.getOpponent2())) { + t2 = new EloTeam(gr.getOpponent2()); + teamsMap.put(gr.getOpponent2(), t2); + } else { + t2 = teamsMap.get(gr.getOpponent2()); + } + + t1.updateSkill(t2, gr.getScore1(), gr.getScore2()); + + } + + System.out.println("Teams: " + teamsMap.size()); + System.out.println("Games: " + gameCount); + } + + @Override + public double predict(GameResult gr) { + + ITeam t1 = getTeam(gr.getOpponent1()); + ITeam t2 = getTeam(gr.getOpponent2()); + + if (t1 == null) { + t1 = new EloTeam(gr.getOpponent1()); + } + + if (t2 == null) { + t2 = new EloTeam(gr.getOpponent2()); + } + + double p; + p = getWinProb(t1, t2); + + if (p < 0.45) { + gr.setScore1(0); + gr.setScore2(1); + } else { + if (p > 0.55) { + gr.setScore1(1); + gr.setScore2(0); + } else { + gr.setScore1(0); + gr.setScore2(0); + } + } + return p; + } + +} diff --git a/src/evaluate/GaussCalculation.java b/src/evaluate/GaussCalculation.java new file mode 100644 index 0000000..cb597d0 --- /dev/null +++ b/src/evaluate/GaussCalculation.java @@ -0,0 +1,101 @@ +package evaluate; + +import game.GameResult; +import game.GaussTeam; +import game.ITeam; + +import java.io.IOException; +import java.util.HashMap; + +import configuration.ConfResultData; + +public class GaussCalculation extends AbstractSkillCalculator { + + public static double gs = 1; + public static double flatten = 3.0; + + private int goalCount; + + public GaussCalculation(String fileName) { + teamsMap = new HashMap(); + goalCount = 0; + ConfResultData set; + + try { + set = new ConfResultData(fileName); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + gameCount = set.getSize(); + + for (int i = 0; i < gameCount; i++) { + GameResult gr = set.getResultAt(i); + ITeam t1, t2; + + if (!teamsMap.containsKey(gr.getOpponent1())) { + t1 = new GaussTeam(gr.getOpponent1()); + teamsMap.put(gr.getOpponent1(), t1); + } else { + t1 = teamsMap.get(gr.getOpponent1()); + } + + if (!teamsMap.containsKey(gr.getOpponent2())) { + t2 = new GaussTeam(gr.getOpponent2()); + teamsMap.put(gr.getOpponent2(), t2); + } else { + t2 = teamsMap.get(gr.getOpponent2()); + } + + t1.updateSkill(t2, gr.getScore1(), gr.getScore2()); + goalCount = goalCount + gr.getScore1() + gr.getScore2(); + + } + + System.out.println("Teams: " + teamsMap.size()); + System.out.println("Games: " + gameCount); + System.out.println("Goals: " + goalCount + " (average " + + ((float) goalCount / gameCount) + ")"); + } + + @Override + public double predict(GameResult gr) { + + ITeam t1 = getTeam(gr.getOpponent1()); + ITeam t2 = getTeam(gr.getOpponent2()); + + if (t1 == null) { + t1 = new GaussTeam(gr.getOpponent1()); + } + + if (t2 == null) { + t2 = new GaussTeam(gr.getOpponent2()); + } + + double p; + p = this.getWinProb((GaussTeam) t1, (GaussTeam) t2); + + double g1 = ((double) (gs + goalCount / gameCount) * p); + double g2 = ((double) (gs + goalCount / gameCount) * (1 - p)); + + gr.setScore1((int) g1); + gr.setScore2((int) g2); + + return p; + } + + public double getWinProb(ITeam t1, ITeam t2) { + double p; + if (t1 instanceof GaussTeam && t2 instanceof GaussTeam) { + double t1Skill = t1.getSkill() - ((GaussTeam) t1).getSigma(); + double t2Skill = t2.getSkill() - ((GaussTeam) t2).getSigma(); + p = 1 / (1 + Math.exp((t2Skill - t1Skill) / flatten)); + } else { + p = super.getWinProb(t1, t2); + } + + return p; + } + +} diff --git a/src/evaluate/IPredictor.java b/src/evaluate/IPredictor.java new file mode 100644 index 0000000..a55e3ce --- /dev/null +++ b/src/evaluate/IPredictor.java @@ -0,0 +1,30 @@ +package evaluate; + +import game.GameResult; +import game.ITeam; + +/** + * Predictor interface + * Calculate quotes and forecast game results + * + * @author mutant + */ +public interface IPredictor { + + /** + * Predict the result of game + * As appointed is first team home team + * @param gr + * @return probability for win of first team / goodness of prediction + */ + public abstract double predict(GameResult gr); + + /** + * Calculate the possibility for team t1 wins against team t2 + * @param Iteam t1 + * @param Iteam t2 + * @return double + */ + double getWinProb(ITeam t1, ITeam t2); + +} diff --git a/src/evaluate/ISkillCalculator.java b/src/evaluate/ISkillCalculator.java new file mode 100644 index 0000000..d5716dc --- /dev/null +++ b/src/evaluate/ISkillCalculator.java @@ -0,0 +1,37 @@ +package evaluate; + +import game.ITeam; +import java.util.Vector; + +/** + * Collect all relevant data from a game set. + * Calculate and update skill of teams + * + * @author mutant + */ +public interface ISkillCalculator { + + /** + * @return count of teams involved in processed game set + */ + public abstract int getTeamCount(); + + /** + * Return ITeam object associated with give name + * @param name + * @return associated team + */ + public abstract ITeam getTeam(String name); + + /** + * Raw set of teams + * @return + */ + public abstract Vector getTeamSet(); + + /** + * @return count of processed games + */ + public abstract int getGameCount(); + +} \ No newline at end of file diff --git a/src/evaluate/RandomCalculation.java b/src/evaluate/RandomCalculation.java new file mode 100644 index 0000000..abd903b --- /dev/null +++ b/src/evaluate/RandomCalculation.java @@ -0,0 +1,33 @@ +package evaluate; + +import game.GameResult; + +import java.util.Random; + +public class RandomCalculation extends AbstractSkillCalculator { + + private Random r = new Random(); + public RandomCalculation(String fileName) { + } + + @Override + public double predict(GameResult gr) { + + double p = r.nextDouble(); + + if (p < 0.35) { + gr.setScore1(0); + gr.setScore2(1); + } else { + if (p > 0.65) { + gr.setScore1(1); + gr.setScore2(0); + } else { + gr.setScore1(0); + gr.setScore2(0); + } + } + return p; + } + +} diff --git a/src/game/ADTeam.java b/src/game/ADTeam.java new file mode 100644 index 0000000..d1e4923 --- /dev/null +++ b/src/game/ADTeam.java @@ -0,0 +1,68 @@ +package game; + +/** + * Example implementation of team + * + * @author mutant + */ +public class ADTeam extends AbstractTeam { + + static final double step = 1.0; + static final double flatten = 7.0; + + private double attack = 100; + private double defence = 100; + + public ADTeam(String name) { + super(name); + } + + @Override + public double getWinProb(ITeam opp) { + double oppSkill = opp.getSkill(); + double p = 1 / (1 + Math.exp((oppSkill - skill) / flatten)); + return p; + } + + public double getWinProb(double att, double def) { + double p = 1 / (1 + Math.exp((def - att) / flatten)); + return p; + } + + public void updateSkill(AbstractTeam opponent, int ownScore, int oppScore) { + ADTeam oppt = (ADTeam) opponent; + int resPoint = (int) (Math.signum(ownScore - oppScore) + 1); + + switch (resPoint) { + case 2: + this.winCount++; + opponent.lossCount++; + break; + + case 0: + opponent.winCount++; + this.lossCount++; + break; + + case 1: + this.drawCount++; + opponent.drawCount++; + break; + + default: + break; + } + + double t1att = this.attack; + double t1def = this.defence; + double t2att = oppt.attack; + double t2def = oppt.defence; + + // Home team + + + + + } + +} diff --git a/src/game/AbstractTeam.java b/src/game/AbstractTeam.java new file mode 100644 index 0000000..2b5ae84 --- /dev/null +++ b/src/game/AbstractTeam.java @@ -0,0 +1,94 @@ +package game; + +/** + * Some basic functions and statistics to a team + * @author mutant + */ +public abstract class AbstractTeam implements ITeam { + + protected String name; + + public abstract double getWinProb(ITeam opp); + + // Collect some basic statistic about team + protected int winCount; + protected int lossCount; + protected int drawCount; + protected int goalsWon; + protected int goalsLos; + + protected double skill; + + public AbstractTeam() { + super(); + } + + public AbstractTeam(String name) { + this.name = name; + winCount = 0; + drawCount = 0; + lossCount = 0; + + goalsWon = 0; + goalsLos = 0; + + skill = 100; + } + + @Override + public int getGoalsWon() { + return goalsWon; + } + + @Override + public int getGoalsLos() { + return goalsLos; + } + + @Override + public String getName() { + return name; + } + + @Override + public int getWin() { + return winCount; + } + + @Override + public int getLoss() { + return lossCount; + } + + @Override + public int getDraw() { + return drawCount; + } + + @Override + public int getGameCount() { + return winCount + drawCount + lossCount; + } + + @Override + public double getSkill() { + return skill; + } + + @Override + // Make teams comparable according to their skill points + public int compareTo(ITeam t) { + return (int) Math.signum(skill - t.getSkill()); + } + + public void updateSkill(ITeam opponent, int ownScore, int oppScore) { + if (opponent instanceof AbstractTeam) { + goalsWon = goalsWon + ownScore; + goalsLos = goalsLos + oppScore; + updateSkill((AbstractTeam)opponent, ownScore, oppScore); + } + } + + public abstract void updateSkill(AbstractTeam opponent, int ownScore, + int oppScore); +} \ No newline at end of file diff --git a/src/game/EloTeam.java b/src/game/EloTeam.java new file mode 100644 index 0000000..131e077 --- /dev/null +++ b/src/game/EloTeam.java @@ -0,0 +1,52 @@ +package game; + +/** + * Example implementation of team + * Skill calculation derived from Elo-points in chess + * + * @author mutant + */ +public class EloTeam extends AbstractTeam { + + static final double step = 1.0; + static final double flatten = 7.0; + + public EloTeam(String name) { + super(name); + } + + @Override + public double getWinProb(ITeam opp) { + double oppSkill = opp.getSkill(); + double p = 1 / (1 + Math.exp((oppSkill-skill) / flatten)); + return p; + } + + public void updateSkill(AbstractTeam opponent, int ownScore, int oppScore) { + int resPoint = (int)(Math.signum(ownScore - oppScore) + 1); + + switch (resPoint) { + case 2: + this.winCount++; + opponent.lossCount++; + break; + + case 0: + opponent.winCount++; + this.lossCount++; + break; + + case 1: + this.drawCount++; + opponent.drawCount++; + break; + + default: + break; + } + + this.skill = this.skill + (resPoint/2.0 - getWinProb(opponent)) * step; + opponent.skill = opponent.skill - (resPoint/2.0 - getWinProb(opponent)) * step; + } + +} diff --git a/src/game/GameResult.java b/src/game/GameResult.java new file mode 100644 index 0000000..fc0180a --- /dev/null +++ b/src/game/GameResult.java @@ -0,0 +1,114 @@ +package game; + +/** + * Game description. Used for calculating with known and for forecasting with + * predicted results. + * Home team is always first! + * @author mutant + * + */ +public class GameResult { + + private String opponent1; + private String opponent2; + private int score1; + private int score2; + private int year; + private int day; + + public GameResult(String opp1, String opp2, int score1, int score2, + int year, int day) { + this.opponent1 = opp1; + this.opponent2 = opp2; + + this.score1 = score1; + this.score2 = score2; + + this.year = year; + this.day = day; + } + + @Override + public String toString() { + StringBuffer sbf = new StringBuffer(); + sbf.append(opponent1); + sbf.append(" - "); + sbf.append(opponent2); + sbf.append(" ("); + sbf.append(score1); + sbf.append(":"); + sbf.append(score2); + sbf.append(")"); + + return sbf.toString(); + } + + public String getOpponent1() { + return this.opponent1; + } + + public String getOpponent2() { + return this.opponent2; + } + + public int getScore1() { + return this.score1; + } + + public int getScore2() { + return this.score2; + } + + public void setScore1(int score1) { + this.score1 = score1; + } + + public void setScore2(int score2) { + this.score2 = score2; + } + + public int getYear() { + return this.year; + } + + public void setYear(int y) { + this.year = y; + } + + public int getDay() { + return this.day; + } + + public void setDay(int d) { + this.day = d; + } + + /** + * Calculate prediction points.
+ *

+ * Exact game result = 3 pts
+ * Right score difference = 2pts
+ * Right winner/draw = 1pt + *

+ * @param s1 real score for home team + * @param s2 real score for guests + * @return + */ + public int getPredPoints(int s1, int s2) { + int res = 0; + + if ((score1 == s1) && (score2 == s2)) { + res++; + } + + if ((score1 - score2) == (s1 - s2)) { + res++; + } + + if (Math.signum(score1 - score2) == Math.signum(s1 - s2)) { + res++; + } + + return res; + } +} diff --git a/src/game/GaussTeam.java b/src/game/GaussTeam.java new file mode 100644 index 0000000..8d14d27 --- /dev/null +++ b/src/game/GaussTeam.java @@ -0,0 +1,98 @@ +package game; + +import org.apache.commons.math.MathException; +import org.apache.commons.math.distribution.NormalDistributionImpl; + +/** + * Example implementation of team Skill calculation derived from Elo-points in + * chess + * + * @author mutant + */ +public class GaussTeam extends AbstractTeam { + + public static double step = 1.4625; + public static double discr = 0.0125; + public static double dev = 0.2625; + + protected double sigma; + + public GaussTeam(String name) { + super(name); + sigma = skill; + } + + @Override + public double getWinProb(ITeam opp) { + double p = 0.5; + GaussTeam gopp = (GaussTeam) opp; + NormalDistributionImpl nd = new NormalDistributionImpl(this.skill + - gopp.getSkill(), 1 + this.sigma + gopp.getSigma()); + try { + p = 1 - nd.cumulativeProbability(0); + } catch (MathException e) { + e.printStackTrace(); + } + return p; + } + + public double getSigma() { + return sigma; + } + + public void updateSkill(AbstractTeam opponent, int ownScore, int oppScore) { + GaussTeam oppt = (GaussTeam) opponent; + int resPoint = (int) (Math.signum(ownScore - oppScore) + 1); + + double prob = getWinProb(oppt); + + double ownNewSigma = this.sigma; + double oppNewSigma = oppt.sigma; + + // review variation according to expected and real result + switch (resPoint) { + case 2: + this.winCount++; + oppt.lossCount++; + + if (prob > 0.5 - discr) { + ownNewSigma = ownNewSigma * (1 - prob + dev); + oppNewSigma = oppNewSigma * (1 - prob + dev); + } + break; + + case 0: + oppt.winCount++; + this.lossCount++; + + if (prob < 0.5 + discr) { + ownNewSigma = ownNewSigma * (prob + dev); + oppNewSigma = oppNewSigma * (prob + dev); + } + + break; + + case 1: + this.drawCount++; + oppt.drawCount++; + if (prob > 0.5 - discr && prob < 0.5 + discr) { + ownNewSigma = ownNewSigma * (prob + dev); + oppNewSigma = oppNewSigma * (prob + dev); + } + + break; + + default: + break; + } + + this.skill = this.skill + step * (resPoint / 2.0 - prob) + * (this.sigma / (this.sigma + oppt.sigma)); + oppt.skill = oppt.skill - step * (resPoint / 2.0 - prob) + * (oppt.sigma / (this.sigma + oppt.sigma)); + + this.sigma = ownNewSigma; + oppt.sigma = oppNewSigma; + } + +} diff --git a/src/game/ITeam.java b/src/game/ITeam.java new file mode 100644 index 0000000..e85f1e6 --- /dev/null +++ b/src/game/ITeam.java @@ -0,0 +1,66 @@ +package game; + +/** + * Representation for a Team + * @author mutant + */ +public interface ITeam extends Comparable { + + /** + * Adjust skill points of teams + * + * @param opponent + * @param ownScore + * @param oppScore + */ + public abstract void updateSkill(ITeam opponent, int ownScore, int oppScore); + + /** + * Return name of team + * + * @return String name + */ + public abstract String getName(); + + /** + * Return count of won games + * + * @return + */ + public abstract int getWin(); + + /** + * Return count of lost games + * + * @return + */ + public abstract int getLoss(); + + /** + * Return count of draw games + * + * @return + */ + public abstract int getDraw(); + + /** + * Return total count of games + * + * @return + */ + public abstract int getGameCount(); + + /** + * Return current skill of team + * + * @return + */ + public abstract double getSkill(); + + public abstract double getWinProb(ITeam t2); + + public abstract int getGoalsLos(); + + public abstract int getGoalsWon(); + +} \ No newline at end of file diff --git a/src/networking/INetCollector.java b/src/networking/INetCollector.java new file mode 100644 index 0000000..ef52f53 --- /dev/null +++ b/src/networking/INetCollector.java @@ -0,0 +1,31 @@ +package networking; + +import java.io.IOException; + +import game.GameResult; + +/** + * Collect data from Internet + * @author mutant + */ +public interface INetCollector { + + /** + * Read data from given URL + * @param url + * @throws IOException + */ + abstract public void readURL(String url) throws IOException; + + /** + * Parse next game data from URL + * @return GameResult, null if no data (more) available + */ + abstract public GameResult getResult(); + + /** + * Jump to begin of read document + */ + abstract public void rewind(); + +} diff --git a/src/networking/PredictNetCollector.java b/src/networking/PredictNetCollector.java new file mode 100644 index 0000000..61e9b09 --- /dev/null +++ b/src/networking/PredictNetCollector.java @@ -0,0 +1,77 @@ +package networking; + +import game.GameResult; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Parser with settings for the site fussballdaten.de + * @author mutant + * + */ +public class PredictNetCollector implements INetCollector { + + private String siteContent; + private int offset; + + public PredictNetCollector() { + this.offset = 0; + this.siteContent = ""; + } + + @Override + public void readURL(String url) throws IOException { + StringBuffer sbf = new StringBuffer(); + URL u = new URL(url); + HttpURLConnection.setFollowRedirects(false); + HttpURLConnection hc = (HttpURLConnection) u.openConnection(); + + BufferedReader br = new BufferedReader(new InputStreamReader( + hc.getInputStream(), "UTF8")); + String uLine; + + while ((uLine = br.readLine()) != null && sbf.length() < 35000) { + sbf.append(uLine); + } + + br.close(); + + this.siteContent = sbf.toString(); + this.offset = 0; + } + + @Override + public GameResult getResult() { + GameResult gr = null; + if (offset < siteContent.length()) { + Pattern pRes = Pattern + .compile( + "(.*?)-(.*?)", + Pattern.DOTALL); + Matcher mRes = pRes.matcher(siteContent); + + if (mRes.find(offset)) { + String opp1 = mRes.group(2); + String opp2 = mRes.group(3); + + gr = new GameResult(opp1, opp2, 0, 0, 0, 0); + + offset = mRes.end(3); + } + } + + return gr; + } + + @Override + public void rewind() { + this.offset = 0; + } + +} diff --git a/src/networking/SimpleNetCollector.java b/src/networking/SimpleNetCollector.java new file mode 100644 index 0000000..5b83912 --- /dev/null +++ b/src/networking/SimpleNetCollector.java @@ -0,0 +1,80 @@ +package networking; + +import game.GameResult; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Parser with settings for the site fussballdaten.de + * @author mutant + * + */ +public class SimpleNetCollector implements INetCollector { + + private String siteContent; + private int offset; + + public SimpleNetCollector() { + this.offset = 0; + this.siteContent = ""; + } + + @Override + public void readURL(String url) throws IOException { + StringBuffer sbf = new StringBuffer(); + URL u = new URL(url); + HttpURLConnection.setFollowRedirects(false); + HttpURLConnection hc = (HttpURLConnection) u.openConnection(); + + BufferedReader br = new BufferedReader(new InputStreamReader( + hc.getInputStream(), "UTF8")); + String uLine; + + while ((uLine = br.readLine()) != null && sbf.length() < 35000) { + sbf.append(uLine); + } + + br.close(); + + this.siteContent = sbf.toString(); + this.offset = 0; + } + + @Override + public GameResult getResult() { + GameResult gr = null; + if (offset < siteContent.length()) { + Pattern pRes = Pattern + .compile( + "(.*?)-(.*?)(\\d):(\\d)", + Pattern.DOTALL); + Matcher mRes = pRes.matcher(siteContent); + + if (mRes.find(offset)) { + String opp1 = mRes.group(2); + String opp2 = mRes.group(3); + + int res1 = Integer.parseInt(mRes.group(4)); + int res2 = Integer.parseInt(mRes.group(5)); + + gr = new GameResult(opp1, opp2, res1, res2, 0, 0); + + offset = mRes.end(4); + } + } + + return gr; + } + + @Override + public void rewind() { + this.offset = 0; + } + +}