プラスのサッカー、パート2:実用的

いくつかの懐疑的な見方にも関わらず、約束されたように、資料の最初の部分について、私は結果とそれがどのように受け取られたかを公表します。

ほとんどの操作は、Excellに格納されたデータを使用して実行され、そのテーブルは3NFによって形成されます。したがって、コードの一部の場所では、インデックスの代わりにセルのデータが使用されます。 したがって、アルゴリズムによると、このクラブがライバルを受け入れる都市のクラブ係数と気候特性を取得する必要があります=チーム:{気候、評価}-これが主な目標です。 行こう



ステージ1:



権限のある人またはシステムは、参加チームの代表者の数の中から、アルファベット順にソートされた1〜16の番号Nをランダムに選択します。 選択された参加者は、ランダムなチームの体重評価を計算するために招待されています。

TeamSequence = new List<int>(); for (int i = 0; i < teams.Length; i++) { int team_ambassor = generator.Next(1000, 1000000)%teams.Length; while (TeamSequence.Contains(team_ambassor)) team_ambassor = generator.Next(1000, 1000000)%teams.Length; TeamSequence.Add(team_ambassor); } foreach (int i in TeamSequence) textBox1.Text += "  : " + teams[i] + "\r\n";
      
      





代表者のために、データはすでに参加者について生成されており、もちろん彼には表示されていませんが、計算の対象となるチームの名前も表示されています。

画像

ステージ2



なぜなら 専門家を招待する機会がなかったので、パラメーターのランキングをランダムにし、現実に近づけるために、評価されたインジケーターの数に関してこの手順を正確に8回行いました。

  double[,] rate = new double[16,8]; int team=new int(); DataTable table = new DataTable(); List<int> Marklist = new List<int>(); string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", "C:\\team.xlsx"); using (OleDbConnection dbConnection = new OleDbConnection(strConn)) { using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT * FROM [3$]", dbConnection)) dbAdapter.Fill(table); for (int j = 0; j < 8; j++) { team = 0; foreach (DataRow dr in table.Rows) { for (int i = 9; i < 17; i++) { int mark = 1 + generator.Next(10000, 10000000)%8; while (Marklist.Contains(mark)) mark = 1 + generator.Next(10000, 10000000)%8; Marklist.Add(mark); rate[team, i - 9] += Convert.ToInt32(dr.ItemArray[i])*mark; } team++; Marklist.Clear(); } } dbConnection.Close(); }
      
      





xlsxファイルにデータを保存すると非常に便利です。 一部の簡単な算術演算は、データテーブル内ですぐに実行できます。

指標のランダム評価を実行することにより、競争の参加者の客観的な特性が得られました。

画像

結果は非常に論理的でした。

最適化は最小基準に従って実行されることを思い出させてください。 より少ない=より良い。

ステージ3



クラブの係数に残り、都市の気候特性を追加します。 これらの特性は、トーナメントが開催される月ごとに取得されました:7月から12月、3月から5月。 データはかなりかさばり、それらを持ち込む意味がわかりません。

最終的な特性を計算します。

  double[,] rate = new double[12,9]; int team=new int(); DataTable table = new DataTable(); List<int> Marklist = new List<int>(); string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", "C:\\team.xlsx"); using (OleDbConnection dbConnection = new OleDbConnection(strConn)) { //   , 12 , 9  using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT * FROM [5$]", dbConnection)) dbAdapter.Fill(table); team = 0; foreach (DataRow dr in table.Rows) { { rate[Convert.ToInt32(dr.ItemArray[0]) - 1, team%9] = Convert.ToDouble(dr.ItemArray[6]); team++; } } dbConnection.Close(); } table = new DataTable(); double[,] team_rate = new double[16,9]; team = 0; using (OleDbConnection dbConnection = new OleDbConnection(strConn)) { //    = 16 . using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT * FROM [6$]", dbConnection)) dbAdapter.Fill(table); foreach (DataRow dr in table.Rows) { for (int i = 0; i < 9; i++) { team_rate[team%16, i] = rate[Convert.ToInt32(dr.ItemArray[0]) - 1, i]* Convert.ToDouble(dr.ItemArray[1]); } team++; } dbConnection.Close(); } StreamWriter sw = new StreamWriter("teams_koeff.txt"); for (int i = 0; i <16; i++) { sw.WriteLine(Convert.ToString(teams[i])); for (int j = 0; j < 9; j++) { sw.Write(Convert.ToString(month[j]+"\t")); sw.Write(team_rate[i, j]+"\t"); } sw.WriteLine(); } sw.Close();
      
      





できた 少し変換すると、次の表になります。

画像

ご覧のように、クバンとクラスノダールの評価は異なりますが、同じ都市のものですが、モスクワのクラブも同様の状況です。 この情報に基づいて、描画手順を最適化できます。 もちろん、さまざまな不可抗力、欧州大会での試合、代表チーム、警察の勧告などを手動で考慮する必要がありますが、全体的なグリッドフレームは既に形成されています。

たとえば、公開されたカレンダーと表を比較します。

画像画像

モスクワのカップル2人を考慮しない場合、「品質」の約50%です。 ただし、一部のペアでは、係数は桁違いに異なります!!! 原則として「すべては大丈夫」と言う人もいるかもしれませんが、カレンダーを作成して(各テーブル1枚)TerekがTomyuと、KrasnodarがRubinと対戦することは間違いなく可能です。 好むと好まざるとにかかわらず、11月のシベリアは涼しくて走り、さらに表彰台を見ることができます。

よろしくお願いします! いつものように、私はあなたのコメントを歓迎します。



All Articles