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