fork download
  1. # -*- coding: utf-8 -*-
  2. """
  3. learnstock.pyプログラム
  4. 単純な帰納的学習の例題プログラム
  5. パターン学習器
  6. 100個の学習データを読み込んで、
  7. 適合する10桁の2進数パターンを答えます
  8. 使い方 C:\>python learnstock.py < ldata.txt
  9. """
  10.  
  11. # モジュールのインポート
  12. import math
  13. import random
  14.  
  15. # グローバル変数
  16. SETSIZE = 100 # 学習データセットの大きさ
  17. CNO = 10 # 学習データの桁数 (10桁分)
  18. GENMAX = 10000 # 解候補生成回数
  19. SEED = 7 # 乱数のシード
  20.  
  21. # 下請け関数の定義
  22. # readdata()関数
  23. def readdata(data, teacher):
  24. """学習データセットの読み込み"""
  25. for i in range(SETSIZE):
  26. line = input()
  27. data[i] = [int(num) for num in line.split()]
  28. teacher[i] = data[i][CNO]
  29. return
  30. # readdata()関数の終わり
  31.  
  32. # calcscore()関数
  33. def calcscore(data, teacher, answer):
  34. """解候補パターンのスコア(0~SETSIZE点)の計算"""
  35. score = 0 # スコア (0~SETSIZE点)
  36. for i in range(SETSIZE):
  37. # 一致度計算
  38. point = 0
  39. for j in range(CNO):
  40. if answer[j] == 2:
  41. point += 1 # ワイルドカード
  42. elif answer[j] == data[i][j]:
  43. point += 1 # 一致
  44. # スコアの計算
  45. if (point == CNO) and (teacher[i] == 1):
  46. score += 1
  47. elif (point != CNO) and (teacher[i] == 0):
  48. score += 1
  49. return score
  50. # calcscore()関数の終わり
  51.  
  52. # メイン実行部
  53. score = 0 # スコア (0~SETSIZE点)
  54. answer = [0 for i in range(CNO)] # 解候補
  55. data = [[] for i in range(SETSIZE)] # 学習データセット
  56. teacher = [0 for i in range(SETSIZE)] # 教師データ
  57. bestscore = 0 # スコアの最高値
  58. bestanswer = [0 for i in range(CNO)] # 探索中での最良解
  59.  
  60. # 乱数の初期化
  61. random.seed(SEED)
  62.  
  63. # 学習データセットの読み込み
  64. readdata(data, teacher)
  65.  
  66. # 解候補生成と検査
  67. for i in range(GENMAX):
  68. # 解候補生成
  69. for j in range(CNO):
  70. answer[j] = random.randint(0, 2)
  71.  
  72. # 検査
  73. score = calcscore(data, teacher, answer)
  74.  
  75. # 最良スコアの更新
  76. if (score > bestscore):
  77. bestanswer = answer.copy()
  78. bestscore = score
  79. print(bestanswer, ":score=", bestscore)
  80.  
  81. # 最良解の出力
  82. print("最良解")
  83. print(bestanswer, ":score=", bestscore)
  84. # learnstock.pyの終わり
Success #stdin #stdout 1.58s 14240KB
stdin
1 0 0 0 0 0 1 0 0 1     1
0 1 0 1 0 1 1 1 0 1     1
0 1 0 0 0 1 1 0 1 0     0
1 0 0 1 1 0 1 0 0 1     1
1 0 0 1 1 0 1 1 1 1     0
0 0 0 0 0 0 1 1 0 0     1
1 1 1 1 0 0 1 1 0 1     0
0 1 1 1 0 1 1 1 0 1     0
0 0 1 1 0 1 1 1 0 0     0
1 1 1 0 0 0 0 1 1 0     0
0 0 1 1 1 0 0 0 1 0     0
1 0 0 0 1 0 1 0 1 1     0
0 1 0 0 1 0 0 0 1 1     0
0 1 1 0 1 0 0 1 1 1     0
0 0 1 0 1 0 1 0 1 0     0
0 1 1 0 1 1 1 1 1 0     0
1 1 0 0 1 1 1 1 0 0     1
1 0 0 0 1 1 1 0 0 0     1
0 0 1 0 0 1 1 1 0 0     0
0 1 1 0 0 1 1 1 0 1     0
1 1 0 1 0 1 1 1 1 1     0
1 1 1 0 1 1 1 0 1 0     0
0 1 1 0 1 1 1 0 0 1     0
1 1 1 1 1 1 0 0 0 1     0
1 1 1 0 1 0 1 1 1 0     0
1 1 1 0 1 0 0 0 0 0     0
0 0 0 1 1 1 0 0 1 0     0
1 0 1 0 0 0 1 1 1 0     0
0 0 1 1 1 1 0 1 1 0     0
1 1 0 1 0 0 0 0 0 1     1
0 1 1 1 0 1 0 1 1 1     0
1 1 0 0 0 1 1 0 0 1     1
1 1 0 1 1 1 1 1 1 1     0
1 0 1 0 1 1 0 1 0 1     0
1 1 0 1 1 0 0 1 1 0     0
0 0 1 0 1 0 1 1 0 1     0
0 1 1 1 1 0 0 1 0 0     0
0 1 1 0 0 1 1 0 0 0     0
0 0 0 1 0 1 0 0 0 0     1
1 1 1 0 0 0 0 1 0 0     0
1 0 1 1 1 1 0 0 1 0     0
0 1 0 0 1 0 1 1 0 0     1
1 1 1 0 1 1 0 0 0 0     0
0 0 1 0 1 0 1 1 0 1     0
1 0 0 1 0 1 1 1 0 0     1
1 1 1 0 1 1 0 0 1 0     0
0 1 0 1 1 1 1 1 0 1     1
0 1 1 0 0 1 0 0 1 0     0
0 0 0 1 1 1 0 1 1 1     0
1 0 1 0 1 0 1 1 1 0     0
0 1 1 0 0 0 1 0 0 0     0
0 0 1 0 1 0 0 0 1 1     0
1 0 1 0 0 1 1 0 0 0     0
0 0 0 1 0 0 1 0 0 1     1
0 0 1 1 1 1 1 1 1 0     0
0 0 1 0 1 1 1 0 1 1     0
0 1 1 0 1 0 0 0 0 0     0
0 0 1 1 0 0 0 1 1 1     0
0 1 0 1 1 1 0 0 1 0     0
1 1 1 1 0 0 1 0 1 1     0
1 1 1 0 0 1 0 1 1 1     0
0 1 0 0 0 0 1 0 0 0     1
0 0 0 0 1 0 0 0 0 1     1
1 1 0 0 1 1 0 1 0 1     1
0 0 0 1 1 0 1 0 0 1     1
1 1 1 1 1 0 1 1 0 1     0
1 1 1 1 0 0 0 0 0 0     0
1 0 1 1 1 0 1 0 0 1     0
0 1 0 1 0 1 0 1 1 0     0
1 0 0 0 1 0 0 0 0 0     1
0 1 1 1 0 0 1 1 1 0     0
0 1 1 1 0 0 0 0 1 1     0
1 0 1 1 0 1 1 1 1 1     0
1 1 0 0 1 0 1 0 1 0     0
0 1 1 0 0 1 0 1 0 1     0
0 1 0 0 0 0 1 1 1 0     0
0 1 1 0 1 0 0 0 1 1     0
0 1 0 1 1 1 1 1 0 1     1
1 0 0 1 0 0 1 1 1 1     0
1 1 0 1 1 1 1 1 0 0     1
0 0 0 0 0 1 1 1 1 1     0
0 0 0 0 1 0 0 0 0 1     1
1 1 0 1 0 1 1 0 0 1     1
0 0 1 0 0 1 0 0 0 1     0
1 0 1 1 0 0 0 0 0 0     0
1 0 1 1 1 0 0 0 0 0     0
1 0 0 1 1 1 0 1 1 1     0
0 0 1 1 0 0 1 0 0 1     0
0 0 1 1 1 1 1 0 1 1     0
0 1 0 1 0 1 0 0 0 1     1
1 0 1 1 1 1 1 0 1 1     0
1 1 1 1 1 1 0 0 1 1     0
0 1 0 0 0 0 1 0 1 1     0
1 0 1 1 1 0 0 0 0 0     0
0 1 1 1 0 0 0 0 1 1     0
0 1 1 0 1 1 1 0 0 0     0
1 1 0 0 0 0 0 1 0 0     1
1 0 1 0 0 0 1 0 0 0     0
0 0 1 1 1 0 0 0 0 0     0
0 1 0 0 1 0 0 1 1 1     0
stdout
[1, 0, 1, 2, 0, 0, 2, 0, 1, 2] :score= 76
[2, 1, 0, 2, 0, 0, 2, 2, 2, 0] :score= 77
[0, 2, 0, 2, 1, 2, 2, 0, 0, 2] :score= 79
[2, 2, 0, 2, 0, 2, 1, 2, 0, 1] :score= 81
[1, 1, 0, 2, 2, 2, 2, 2, 0, 2] :score= 83
[2, 2, 0, 2, 2, 2, 0, 2, 0, 2] :score= 84
最良解
[2, 2, 0, 2, 2, 2, 0, 2, 0, 2] :score= 84