iw-Преобразует строку в число если не получится преобразовать выведет "?"
pousk-ищет в файле given данные для работы (при проверки создайте файл given и в этом файле должно быть это"(<20 10><1>) (<10 10><0>)")
cbh-Создаёт нейросети в переменную Bot
cb-Подготавливает задачи
rw-Изменяет случайный вес всем нейросетями
unn-используют нейросети
sp-Подсчёт очков
cit-обновление задачи
tp-запускает подготовку нейросетей
Во время работы с unn в переменой Bot на позиции 1 пропадает класс и появляется цикл, если я пропускаю позицию 1 то пропадает класс на позициях 1 и 2, но позиция 0 работает нормально, что делать?
Код:
def iw(d="",intt=True,munus=True):#преоброзователь чисел
try:
if intt:d=int(d)
else:d=float(d)
except:
Rom=""
plus=True
totka=False
d=str(d)
for i in d:
if i in list("0123456789-_.,"):
if i in ["-","_"]:
if munus:plus=False
elif i in [",","."]:
if not totka:Rom+="."
totka=False
else:Rom+=i
try:
if intt:d=int(d)
else:d=float(d)
if not plus:Rom*=-1
except:return "?"
return Rom
return d
def pousk(fn):
Otvet=[]#Ответ
pavensta=False #Знаки (<)
psk="вход" #Поиск (вход,выход)
list1=""#вход
list2=""#выход
peple=False #Поиск даных
infoh=[]#Помощь по переменым
a=""
for i in fn:
if i=="(":peple=True
elif i==")":
list1=list1.split()
for i in range(len(list1)):list1[i]=iw(list1[i],False,True)
list2=list2.split()
for i in range(len(list2)):list2[i]=iw(list2[i],False,True)
Otvet+=[[list1,list2]]
Otvet=[]#Ответ
pavensta=False #Знаки (<)
psk="вход" #Поиск (вход,выход)
list1=""#вход
list2=""#выход
peple=False #Поиск даных
infoh=[]#Помощь по переменым
a=""
elif peple:
if i=="<":pavensta=True
elif i==">":
pavensta=False
if psk=="вход":psk="выход"
elif psk=="вход":list1+=i
elif psk=="выход":list2+=i
return Otvet
import random as r
class Neo:
id=[]#Варианты входных даных
idc=[1]#Выходные даные сейчас
ta=[]#Правильный ответ
nn=[2,3,1]#количество неиронов
os=False#Добавить неирон 1
nb=100 #Количество ботов
epoch=0 #Сколько эпох прошло
top=[0,99999,0]#топ ботов(Веса,Очки,позиция)
Bot=[]#Неиросети
def cbh():#создание неиросети
for u in range(Neo.nb):
Neo.Bot[u].pos=u
Neo.Bot[u].score=0#Очки бота
Neo.Bot[u].decision=[]#Ответ неиросети
w=[]#веса
for i in range(len(Neo.nn)-1):
q=[]
l=0
if Neo.os:l=1
for e in range(Neo.nn[i+1]):
y=[]
for t in range(Neo.nn[i]+l):
y+=[r.randint(-2000,2000)/1000]
q+=[y]
w+=[q]
Neo.Bot[u].w=w
def cb():#Подготовка ботов и задачи
print("Создания ботов\n")
with open('given.txt', 'r', encoding='utf-8') as f:
Neo.id=pousk(*f)
Neo.cit()
for i in range(Neo.nb):Neo.Bot+=[Neo()]
Neo.cbh()
def rw(): #измена случайного веса всем
print("Изменения случайного веса\n")
for q in range(Neo.nb):
if q!=Neo.top[2]:
Neo.Bot[q]=Neo.top[0]
for i in range(1):
a=r.randint(0,len(Neo.nn)-2)
q=r.randint(0,Neo.nn[a]-1)
e=r.randint(0,Neo.nn[q]-1)
Neo.Bot[q].w[a][q][e]=r.randint(-2000,2000)/1000
def unn():#Использование неиросетей
print("Использование неиросетей")
for t in range(Neo.nb):
memoru=[]
for i in range(max(Neo.nn)):memoru+=[0]
for i in range(len(Neo.nn)-1):
l=0
if Neo.os:l=1
for e in range(Neo.nn[i+1]):
y=0
for r in range(Neo.nn[i]+l):
if r==Neo.nn[i]+l-1 and Neo.os:g=1
else:g=Neo.idc[r-1]
if i==0:y+=g*Neo.Bot[t].w[i][e][r]
else:y+=memoru[r]*Neo.Bot[t].w[i][e][r]
memoru[e]=y
Neo.Bot[t].decision=memoru
def sp():#Подсчёт очков
print("Подсчёт очков")
for q in range(Neo.nb):
h=0
for i in range(Neo.nn[-1]):
h=Neo.Bot[i].decision[i]-Neo.idc[i]
if h<0:h*=-1
Neo.Bot[i].score+=h
if Neo.Bot[i].score<Neo.top[1]:
Neo.top[0]=Neo.Bot[i].w
Neo.top[1]=Neo.Bot[i].score
Neo.top[2]=Neo.Bot[i].pos
def cit():#Обновление задачи
h=r.choice(Neo.id)
Neo.idc,Neo.ta=h[0],h[1]
def tb():#учение ботов
Neo.cb()
while True:
print("Век",Neo.epoch)
print("Веса лучшего бота:",Neo.top[0])
print("Очки лучшего бота:",Neo.top[1])
input()
Neo.unn()
Neo.sp()
Neo.rw()
Neo.cit()
Neo.epoch+=1
Neo.tb()