"""
learnstock.pyプログラム
単純な帰納的学習の例題のプログラム
パターン学習器
100個の学習データを読み込んで、適合する10桁のパターンを答えます。
使い方 c:\python learnstock.py < ldata.txt
"""
#モジュールのインポイント
import math
import random
#グローバル関数
SETSIZE=100 #学習データセットの大きさ
CNO=10 #学習データの桁数(10社分)
GENMAX=10000 #解候補生成回数
SEED=7 #乱数のシード
#下請け関数の定義
#readdata()関数
def readdata(data,teacher):
"""学習データセットの読み込み"""
for i in range(SETSIZE):
line=input()
data[i]=[int(num) for num in line.split()]
teacher[i]=data[i][CNO]
return
#readdata関数の終わり
#calcscore関数
def calcscore(data,teacher,answer):
"""解候補パターンのスコア(0~SETSIZE点)の計算"""
score=84 #スコア(0~SETSIZE点)
for i in range(SETSIZE):
#一致度計算
point=0
for j in range(CNO):
if answer[j]==2:
point += 1 #ワイルドカード
elif answer[j]==data[i][j]:
point +=1 #一致
# スコアの計算
if(point==CNO)and(teacher[i]== 1):
score += 1
elif(point != CNO)and(teacher[1]==0):
score += 1
return score
#calcscore()関数の終わり
#メイン実行部
score=0 #スコア(0~SETSIZE点)
answer=[0 for i in range(CNO)] #解候補
data=[[] for i in range(SETSIZE)] #学習データセット
teacher=[0 for i in range(SETSIZE)] #教師データ
bestscore=0 #スコアの最良値
bestanswer=[0 for i in range(CNO)]#探索途中での最良解
#乱数の初期化
random.seed(SEED)
#学習データセットの読み込み
readdata(data,teacher)
#解候補生成と検査
for i in range(GENMAX):
#解候補生成
for j in range(CNO):
answer[j]=random.randint(0,2)
#検査
score=calcscore(data,teacher,answer)
#最良スコアの更新
if(score>bestscore):
bestanswer=answer.copy()
bestscore=score
print(bestanswer,":score=",bestscore)
#最良解の出力
print("最良解")
print(bestanswer,":score=",bestscore)
#learnstock.pyの終わり# your code goes here
IiIiCmxlYXJuc3RvY2sucHnjg5fjg63jgrDjg6njg6AK5Y2Y57SU44Gq5biw57SN55qE5a2m57+S44Gu5L6L6aGM44Gu44OX44Ot44Kw44Op44OgCuODkeOCv+ODvOODs+Wtpue/kuWZqAoxMDDlgIvjga7lrabnv5Ljg4fjg7zjgr/jgpLoqq3jgb/ovrzjgpPjgafjgIHpganlkIjjgZnjgosxMOahgeOBruODkeOCv+ODvOODs+OCkuetlOOBiOOBvuOBmeOAggrkvb/jgYTmlrnjgIBjOlxweXRob24gbGVhcm5zdG9jay5weSA8IGxkYXRhLnR4dAoiIiIKI+ODouOCuOODpeODvOODq+OBruOCpOODs+ODneOCpOODs+ODiAppbXBvcnQgbWF0aAppbXBvcnQgcmFuZG9tCgoj44Kw44Ot44O844OQ44Or6Zai5pWwClNFVFNJWkU9MTAwICPlrabnv5Ljg4fjg7zjgr/jgrvjg4Pjg4jjga7lpKfjgY3jgZUKQ05PPTEwICPlrabnv5Ljg4fjg7zjgr/jga7moYHmlbAoMTDnpL7liIYpCkdFTk1BWD0xMDAwMCAj6Kej5YCZ6KOc55Sf5oiQ5Zue5pWwClNFRUQ9NyAj5Lmx5pWw44Gu44K344O844OJCgoj5LiL6KuL44GR6Zai5pWw44Gu5a6a576pCiNyZWFkZGF0YSgp6Zai5pWwCmRlZiByZWFkZGF0YShkYXRhLHRlYWNoZXIpOgogICIiIuWtpue/kuODh+ODvOOCv+OCu+ODg+ODiOOBruiqreOBv+i+vOOBvyIiIgogIGZvciBpIGluIHJhbmdlKFNFVFNJWkUpOgogICAgICBsaW5lPWlucHV0KCkKICAgICAgZGF0YVtpXT1baW50KG51bSkgZm9yIG51bSBpbiBsaW5lLnNwbGl0KCldCiAgICAgIHRlYWNoZXJbaV09ZGF0YVtpXVtDTk9dCiAgcmV0dXJuCiNyZWFkZGF0YemWouaVsOOBrue1guOCj+OCigoKI2NhbGNzY29yZemWouaVsApkZWYgY2FsY3Njb3JlKGRhdGEsdGVhY2hlcixhbnN3ZXIpOgogICIiIuino+WAmeijnOODkeOCv+ODvOODs+OBruOCueOCs+OCoigw772eU0VUU0laReeCuSnjga7oqIjnrpciIiIKICBzY29yZT04NCAj44K544Kz44KiKDDvvZ5TRVRTSVpF54K5KQogIGZvciBpIGluIHJhbmdlKFNFVFNJWkUpOgogICAgI+S4gOiHtOW6puioiOeulwogICAgcG9pbnQ9MAogICAgZm9yIGogaW4gcmFuZ2UoQ05PKToKICAgICAgaWYgYW5zd2VyW2pdPT0yOgogICAgICAgICAgcG9pbnQgKz0gMSAj44Ov44Kk44Or44OJ44Kr44O844OJCiAgICAgIGVsaWYgYW5zd2VyW2pdPT1kYXRhW2ldW2pdOgogICAgICAgICAgcG9pbnQgKz0xICPkuIDoh7QKICAgICAgIyDjgrnjgrPjgqLjga7oqIjnrpcKICAgICAgaWYocG9pbnQ9PUNOTylhbmQodGVhY2hlcltpXT09IDEpOgogICAgICAgIHNjb3JlICs9IDEKICAgICAgZWxpZihwb2ludCAhPSBDTk8pYW5kKHRlYWNoZXJbMV09PTApOgogICAgICAgIHNjb3JlICs9IDEKICAgICAgcmV0dXJuIHNjb3JlCiNjYWxjc2NvcmXvvIjvvInplqLmlbDjga7ntYLjgo/jgooKCiPjg6HjgqTjg7Plrp/ooYzpg6gKc2NvcmU9MCAj44K544Kz44KiKDDvvZ5TRVRTSVpF54K5KQphbnN3ZXI9WzAgZm9yIGkgaW4gcmFuZ2UoQ05PKV0gI+ino+WAmeijnApkYXRhPVtbXSBmb3IgaSBpbiByYW5nZShTRVRTSVpFKV0gI+Wtpue/kuODh+ODvOOCv+OCu+ODg+ODiAp0ZWFjaGVyPVswIGZvciBpIGluIHJhbmdlKFNFVFNJWkUpXSAj5pWZ5bir44OH44O844K/CmJlc3RzY29yZT0wICPjgrnjgrPjgqLjga7mnIDoia/lgKQKYmVzdGFuc3dlcj1bMCBmb3IgaSBpbiByYW5nZShDTk8pXSPmjqLntKLpgJTkuK3jgafjga7mnIDoia/op6MKCiPkubHmlbDjga7liJ3mnJ/ljJYKcmFuZG9tLnNlZWQoU0VFRCkKCiPlrabnv5Ljg4fjg7zjgr/jgrvjg4Pjg4jjga7oqq3jgb/ovrzjgb8KcmVhZGRhdGEoZGF0YSx0ZWFjaGVyKQoKI+ino+WAmeijnOeUn+aIkOOBqOaknOafuwpmb3IgaSBpbiByYW5nZShHRU5NQVgpOgogICAgI+ino+WAmeijnOeUn+aIkAogICAgZm9yIGogaW4gcmFuZ2UoQ05PKToKICAgICAgICBhbnN3ZXJbal09cmFuZG9tLnJhbmRpbnQoMCwyKQogICAgICAgICPmpJzmn7sKICAgICAgICBzY29yZT1jYWxjc2NvcmUoZGF0YSx0ZWFjaGVyLGFuc3dlcikKICAgICAgICAj5pyA6Imv44K544Kz44Ki44Gu5pu05pawCiAgICAgICAgaWYoc2NvcmU+YmVzdHNjb3JlKToKICAgICAgICAgIGJlc3RhbnN3ZXI9YW5zd2VyLmNvcHkoKQogICAgICAgICAgYmVzdHNjb3JlPXNjb3JlCiAgICAgICAgICBwcmludChiZXN0YW5zd2VyLCI6c2NvcmU9IixiZXN0c2NvcmUpCgoj5pyA6Imv6Kej44Gu5Ye65YqbCnByaW50KCLmnIDoia/op6MiKQpwcmludChiZXN0YW5zd2VyLCI6c2NvcmU9IixiZXN0c2NvcmUpCiNsZWFybnN0b2NrLnB544Gu57WC44KP44KKIyB5b3VyIGNvZGUgZ29lcyBoZXJl
MSAwIDAgMCAwIDAgMSAwIDAgMSAgICAgMQowIDEgMCAxIDAgMSAxIDEgMCAxICAgICAxCjAgMSAwIDAgMCAxIDEgMCAxIDAgICAgIDAKMSAwIDAgMSAxIDAgMSAwIDAgMSAgICAgMQoxIDAgMCAxIDEgMCAxIDEgMSAxICAgICAwCjAgMCAwIDAgMCAwIDEgMSAwIDAgICAgIDEKMSAxIDEgMSAwIDAgMSAxIDAgMSAgICAgMAowIDEgMSAxIDAgMSAxIDEgMCAxICAgICAwCjAgMCAxIDEgMCAxIDEgMSAwIDAgICAgIDAKMSAxIDEgMCAwIDAgMCAxIDEgMCAgICAgMAowIDAgMSAxIDEgMCAwIDAgMSAwICAgICAwCjEgMCAwIDAgMSAwIDEgMCAxIDEgICAgIDAKMCAxIDAgMCAxIDAgMCAwIDEgMSAgICAgMAowIDEgMSAwIDEgMCAwIDEgMSAxICAgICAwCjAgMCAxIDAgMSAwIDEgMCAxIDAgICAgIDAKMCAxIDEgMCAxIDEgMSAxIDEgMCAgICAgMAoxIDEgMCAwIDEgMSAxIDEgMCAwICAgICAxCjEgMCAwIDAgMSAxIDEgMCAwIDAgICAgIDEKMCAwIDEgMCAwIDEgMSAxIDAgMCAgICAgMAowIDEgMSAwIDAgMSAxIDEgMCAxICAgICAwCjEgMSAwIDEgMCAxIDEgMSAxIDEgICAgIDAKMSAxIDEgMCAxIDEgMSAwIDEgMCAgICAgMAowIDEgMSAwIDEgMSAxIDAgMCAxICAgICAwCjEgMSAxIDEgMSAxIDAgMCAwIDEgICAgIDAKMSAxIDEgMCAxIDAgMSAxIDEgMCAgICAgMAoxIDEgMSAwIDEgMCAwIDAgMCAwICAgICAwCjAgMCAwIDEgMSAxIDAgMCAxIDAgICAgIDAKMSAwIDEgMCAwIDAgMSAxIDEgMCAgICAgMAowIDAgMSAxIDEgMSAwIDEgMSAwICAgICAwCjEgMSAwIDEgMCAwIDAgMCAwIDEgICAgIDEKMCAxIDEgMSAwIDEgMCAxIDEgMSAgICAgMAoxIDEgMCAwIDAgMSAxIDAgMCAxICAgICAxCjEgMSAwIDEgMSAxIDEgMSAxIDEgICAgIDAKMSAwIDEgMCAxIDEgMCAxIDAgMSAgICAgMAoxIDEgMCAxIDEgMCAwIDEgMSAwICAgICAwCjAgMCAxIDAgMSAwIDEgMSAwIDEgICAgIDAKMCAxIDEgMSAxIDAgMCAxIDAgMCAgICAgMAowIDEgMSAwIDAgMSAxIDAgMCAwICAgICAwCjAgMCAwIDEgMCAxIDAgMCAwIDAgICAgIDEKMSAxIDEgMCAwIDAgMCAxIDAgMCAgICAgMAoxIDAgMSAxIDEgMSAwIDAgMSAwICAgICAwCjAgMSAwIDAgMSAwIDEgMSAwIDAgICAgIDEKMSAxIDEgMCAxIDEgMCAwIDAgMCAgICAgMAowIDAgMSAwIDEgMCAxIDEgMCAxICAgICAwCjEgMCAwIDEgMCAxIDEgMSAwIDAgICAgIDEKMSAxIDEgMCAxIDEgMCAwIDEgMCAgICAgMAowIDEgMCAxIDEgMSAxIDEgMCAxICAgICAxCjAgMSAxIDAgMCAxIDAgMCAxIDAgICAgIDAKMCAwIDAgMSAxIDEgMCAxIDEgMSAgICAgMAoxIDAgMSAwIDEgMCAxIDEgMSAwICAgICAwCjAgMSAxIDAgMCAwIDEgMCAwIDAgICAgIDAKMCAwIDEgMCAxIDAgMCAwIDEgMSAgICAgMAoxIDAgMSAwIDAgMSAxIDAgMCAwICAgICAwCjAgMCAwIDEgMCAwIDEgMCAwIDEgICAgIDEKMCAwIDEgMSAxIDEgMSAxIDEgMCAgICAgMAowIDAgMSAwIDEgMSAxIDAgMSAxICAgICAwCjAgMSAxIDAgMSAwIDAgMCAwIDAgICAgIDAKMCAwIDEgMSAwIDAgMCAxIDEgMSAgICAgMAowIDEgMCAxIDEgMSAwIDAgMSAwICAgICAwCjEgMSAxIDEgMCAwIDEgMCAxIDEgICAgIDAKMSAxIDEgMCAwIDEgMCAxIDEgMSAgICAgMAowIDEgMCAwIDAgMCAxIDAgMCAwICAgICAxCjAgMCAwIDAgMSAwIDAgMCAwIDEgICAgIDEKMSAxIDAgMCAxIDEgMCAxIDAgMSAgICAgMQowIDAgMCAxIDEgMCAxIDAgMCAxICAgICAxCjEgMSAxIDEgMSAwIDEgMSAwIDEgICAgIDAKMSAxIDEgMSAwIDAgMCAwIDAgMCAgICAgMAoxIDAgMSAxIDEgMCAxIDAgMCAxICAgICAwCjAgMSAwIDEgMCAxIDAgMSAxIDAgICAgIDAKMSAwIDAgMCAxIDAgMCAwIDAgMCAgICAgMQowIDEgMSAxIDAgMCAxIDEgMSAwICAgICAwCjAgMSAxIDEgMCAwIDAgMCAxIDEgICAgIDAKMSAwIDEgMSAwIDEgMSAxIDEgMSAgICAgMAoxIDEgMCAwIDEgMCAxIDAgMSAwICAgICAwCjAgMSAxIDAgMCAxIDAgMSAwIDEgICAgIDAKMCAxIDAgMCAwIDAgMSAxIDEgMCAgICAgMAowIDEgMSAwIDEgMCAwIDAgMSAxICAgICAwCjAgMSAwIDEgMSAxIDEgMSAwIDEgICAgIDEKMSAwIDAgMSAwIDAgMSAxIDEgMSAgICAgMAoxIDEgMCAxIDEgMSAxIDEgMCAwICAgICAxCjAgMCAwIDAgMCAxIDEgMSAxIDEgICAgIDAKMCAwIDAgMCAxIDAgMCAwIDAgMSAgICAgMQoxIDEgMCAxIDAgMSAxIDAgMCAxICAgICAxCjAgMCAxIDAgMCAxIDAgMCAwIDEgICAgIDAKMSAwIDEgMSAwIDAgMCAwIDAgMCAgICAgMAoxIDAgMSAxIDEgMCAwIDAgMCAwICAgICAwCjEgMCAwIDEgMSAxIDAgMSAxIDEgICAgIDAKMCAwIDEgMSAwIDAgMSAwIDAgMSAgICAgMAowIDAgMSAxIDEgMSAxIDAgMSAxICAgICAwCjAgMSAwIDEgMCAxIDAgMCAwIDEgICAgIDEKMSAwIDEgMSAxIDEgMSAwIDEgMSAgICAgMAoxIDEgMSAxIDEgMSAwIDAgMSAxICAgICAwCjAgMSAwIDAgMCAwIDEgMCAxIDEgICAgIDAKMSAwIDEgMSAxIDAgMCAwIDAgMCAgICAgMAowIDEgMSAxIDAgMCAwIDAgMSAxICAgICAwCjAgMSAxIDAgMSAxIDEgMCAwIDAgICAgIDAKMSAxIDAgMCAwIDAgMCAxIDAgMCAgICAgMQoxIDAgMSAwIDAgMCAxIDAgMCAwICAgICAwCjAgMCAxIDEgMSAwIDAgMCAwIDAgICAgIDAKMCAxIDAgMCAxIDAgMCAxIDEgMSAgICAgMA==
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
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0] :score= 84
最良解
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0] :score= 84