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. import math
  12. import random
  13.  
  14. #グローバル変数
  15. SETSIZE=100 #学習データセットの大きさ
  16. CNO=10 #学習でデータの桁数(10社分)
  17. GENMAX=10000 #解候補生成回数
  18. SEED=7 #乱数のシード
  19.  
  20. #下請け関数の定義
  21. #readdata()関数
  22. def readdata(data,teacher):
  23. """学習データセットの読み込み"""
  24. for i in range(SETSIZE):
  25. line=input()
  26. data[i]=[int(num) for num in line.split()]
  27. teacher[i]=data[i][CNO]
  28. return
  29. #readdata()関数の終わり
  30.  
  31. #calcscore()関数
  32. def calcscore(data,teacher,answer):
  33. """解候補パターンのスコア(0~SETSIZE点)の計算"""
  34. score=0 #スコア(0=SETSIZE点)
  35. for i in range(SETSIZE):
  36. #一致度計算
  37. point=0
  38. for j in range(CNO):
  39. if answer[j]==2:
  40. point+=1 #ワイルドカード
  41. elif answer[j]==data[i][j]:
  42. point+=1 #一致
  43. #スコアの計算
  44. if(point==CNO)and(teacher[i]==1):
  45. score+=1
  46. elif(point!=CNO)and(teacher[i]==0):
  47. score+=1
  48. return score
  49. #calcscore()関数の終わり
  50.  
  51. #メイン実行部
  52. score=0 #スコア(0~SETSIZE点)
  53. answer=[0 for i in range(CNO)] #解候補
  54. data=[[]for i in range(SETSIZE)] #学習データセット
  55. teacher=[0 for i in range(SETSIZE)] #教師データ
  56. bestscore=0 #スコアの最良値
  57. bestanswer=[0 for i in range(CNO)] #探索途中での最良解
  58.  
  59. #乱数の初期化
  60. random.seed(SEED)
  61.  
  62. #学習データセットの読み込み
  63. readdata(data,teacher)
  64.  
  65. #解候補生成と検査
  66. for i in range(GENMAX):
  67. #解候補生成
  68. for j in range(CNO):
  69. answer[j]=random.randint(0,2)
  70.  
  71. #検査
  72. score=calcscore(data,teacher,answer)
  73.  
  74. #最良スコアの更新
  75. if(score>bestscore):
  76. bestanswer=answer.copy()
  77. bestscore=score
  78. print(bestanswer,":score=",bestscore)
  79.  
  80. #最良解の出力
  81. print("最良解")
  82. print(bestanswer,":score=",bestscore)
  83. #learnstock.pyの終わり
Success #stdin #stdout 0.93s 14340KB
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